소프트웨어 설계 5: 미들웨어와 인터페이스
22 Jul 2024 #cs
미들웨어 (Middleware)
운영체제-응용 프로그램, 서버-클라이언트 등 서로 다른 소프트웨어 모듈이나 시스템 간의 통신을 지원하는 중간 계층 소프트웨어입니다. 다양한 애플리케이션이 상호작용하고 데이터를 주고받을 수 있도록 하는 인터페이스를 제공합니다.
# 인터페이스와 미들웨어: 인터페이스는 모듈 간의 통신 방법과 규칙을 정의하고, 미들웨어는 이러한 인터페이스를 통해 다양한 시스템과 애플리케이션 간의 원활한 통신을 중재하는 역할을 합니다. 미들웨어는 인터페이스를 통해 데이터를 교환하고 기능을 호출하는 작업을 쉽게 수행할 수 있게 합니다.
미들웨어의 종류
- DB (DataBase): 데이터베이스 벤더에서 제공하는 클라이언트에서 원격 데이터베이스와 연결하는 미들웨어입니다.
- 2-Tier 아키텍쳐: DB를 이용해 시스템을 구축하는 경우를 일컫는 말
- RPC (Remote Procedure Call; 원격 프로시저 호출): 응용 프로그램의 프로시저를 사용해 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 미들웨어입니다.
- MOM (Message Oriented Middleware; 메시지 지향 미들웨어): 메시지 기반의 비동기형 메시지를 전달하는 미들웨어입니다. 온라인 업무보다는 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용됩니다.
- TP-Monitor (Transaction Processing Monitor; 트랜잭션 처리 모니터): 온라인 트랜잭션 업무에서 트랜잭션을 처리 및 모니터링하는 미들웨어입니다. 사용자 수가 많아도 빨리 응답해야 하는 업무(항공기, 철도 예약 등)에 주로 사용됩니다.
- ORB (Object Request Broker; 객체 요청 브로커): CORBA 표준 스펙을 구현한 객체 지향 미들웨어입니다. 최근에는 TP Monitor의 트랜잭션 처리 및 모니터링 기능을 추가한 제품도 있습니다.
- WAS (Web Application Server): 동적인 콘텐츠를 처리하기 위한, 클라이언트-서버 환경보다는 웹 환경을 구현하기 위한 미들웨어입니다. 웹 서버 기능 및 미션 크리티컬한 기업 업무 모두 JAVA, EJB 컴포넌트 기반으로 구현할 수 있습니다.
EAI (Enterprise Application Integration)
기업 내 애플리케이션 및 플랫폼 간 상호 연동이 가능하게 해주는 애플리케이션 통합 솔루션입니다.
- Point-to-Point: 가장 기본적인 방식으로, 애플리케이션을 일대일로 연결합니다. 변경이나 재사용이 어렵다는 단점이 있습니다.
- Hub & Spoke: 허브 시스템이 단일 접점으로 작용하고, 이를 통해 데이터를 전송하는 중앙 집중형 방식입니다. 확장 및 유지보수가 용이하지만, 허브에 장애가 발생하면 시스템 전체가 영향을 받습니다.
- Message Bus (=ESB): 애플리케이션 사이에 미들웨어를 두어 처리하는 방식으로, 확장성과 대용량 처리 기능이 뛰어납니다.
- Bus Hybrid: Hub & Spoke와 Message Bus를 혼합한 방식으로, 그룸 내에서는 Hub & Spoke, 그룹 간에는 Message Bus 방식을 사용합니다. 필요 시 한 가지 방식으로만 구현이 가능합니다. 데이터 병목현상을 최소화할 수 있습니다.
ESB (Enterprise Service Bus)
애플리케이션 간 표준 인터페이스를 제공하는 솔루션입니다. EAI와 애플리케이션을 통합한다는 측면에서 유사하나, 초점이 애플리케이션보다는 서비스 통합에 있습니다. 애플리케이션을 특정 서비스에 국한하지 않고 범용적으로 사용하기 위해, 애플리케이션과의 결합도를 약하게 유지합니다.
JSON과 AJAX
- JSON (JavaScript Object Notation): 웹과 프로그램 사이 용량이 작은 데이터를 교환하기 위해 데이터 객체를 속성-값 쌍(Attribute-Value Pair)으로 표현하는 개방형 표준 포맷
- AJAX에서 XML을 대신해 사용되고 있음
- AJAX (Asynchronous JavaScript and XML): 자바스크립트를 사용해 클라이언트와 서버 간 XML 데이터를 주고 받는 비동기 통신 기술
- 전체 웹 페이지를 새로고침하지 않고도 페이지의 일부를 업데이트할 수 있음
인터페이스 (Interface)
소프트웨어 모듈 간의 상호작용을 정의하는 명세서입니다. 모듈이 다른 모듈과 데이터를 주고받는 방법과 규칙을 정의하며, 주요 요소로는 함수, 메서드, 프로토콜, API 등이 있습니다.
인터페이스 보안
인터페이스 보안성 향상을 위해 취약점을 분석한 후 적절한 보안 기술을 적용하는 것으로, 네트워크, 애플리케이션, 데이터베이스 영역에 적용됩니다.
- 네트워크 영역: 인터페이스 송/수신 간 데이터 탈취 및 변조(스니핑(Sniffing) 등)를 방지하기위해 네트워크 트래픽을 암호화합니다.
- 암호화 방법: IPSec, SSL, S-HTTP 등
- 애플리케이션 영역: 애플리케이션 코드 상 보안 취약점에 보안 기능을 적용합니다.
- 데이터베이스 영역: 데이터베이스, 스키마, 엔티티의 접근 권한 및 프로시저, 트리거 등 데이터베이스 동작 개체의 보안 취약점에 보안 기능을 적용합니다.
네트워크 인터페이스 보안 기법
- IPSec (IP Security): 네트워크 계층에서 IP 패킷 단위의 데이터 변조 방지 및 은닉 기능을 제공하는 프로토콜
- SSL (Secure Sockets Layer): TCP/IP 계층과 애플리케이션 계층 간의 인증, 암호화, 무결성을 보장하는 프로토콜
- S-HTTP (Secure Hypertext Transfer Protocol): 클라이언트-서버 간 전송되는 메시지를 암호화하는 프로토콜
데이터 무결성 검사 도구
인터페이스 보안 취약점을 분석하는데 사용되는 도구로, 시스템 파일 변경 유무를 확인해 변경 시 관리자에게 알리는 역할을 합니다.
- 종류: Tripwire, AIDE, Samhain, Claymore, Slipwire, Fcheck 등
인터페이스 구현 검증 도구: 통합 테스트 자동화 도구
인터페이스가 구현이 잘 되었는지 검증하기 위해서는 인터페이스 단위 기능, 시나리오 등을 기반으로 통합 테스트(Integration test)를 해야 합니다. 대표적인 통합 테스트 자동화 도구는 다음과 같습니다:
- xUnit: 단위 테스트 프레임워크로 자동화된 해법을 제공합니다.
- 기능: 같은 테스트 코드 여러 번 작성하지 않게 해줌, 테스트의 예상 결과를 기억할 필요가 없게 도와줌 등.
- 역사: Smaltalk에 ‘SUnit’이라는 이름으로 처음 적용 → ‘JUnit’(Java용), ‘CppUnit’(C++), ‘NUnit’(.NET) 등 다양한 언어에 적용 → ‘xUnit’으로 통칭
- STAF: 크로스 플랫폼이나 분산 SW의 테스트 환경 조성을 지원하는 테스트 프레임워크입니다.
- 기능: 서비스 호출, 컴포넌트 재사용 등 다양한 환경 지원
- 분산 SW의 경우 각 분산 환경의 데몬(Daemon)이 테스트 응답을 대신하고, 테스트가 완료되면 응답을 통합하여 프로그램을 완성함
- FitNesse: 웹 기반 테스트 프레임워크
- NTAF: FitNesse의 협업 기능과 STAF의 재사용 및 확장성을 통합한 테스트 자동화 프레임워크로, NHN이 개발했습니다.
- Selenium: 웹 애플리케이션 테스트 프레임워크로, 다양한 브라우저와 개발 언어를 지원합니다.
- watir: 애플리케이션 테스트 프레임워크로, Ruby를 언어로 사용합니다.
- Ruby: 인터프리터 방식의 객체지향 스크립트 언어