서비스 지향 아키텍처(SOA) 핵심 개념과 실무 적용 예시
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 소프트웨어 개발자, 시스템 아키텍트
- 중간 수준 이상의 개발자 (Node.js, Express 프레임워크 사용 경험이 필요)
핵심 요약
- SOA 정의: 서비스 간 비교적 느슨한 결합(Loose Coupling)과 재사용성을 통해 복잡한 애플리케이션을 구축하는 아키텍처 패턴
- 핵심 원칙:
- 상호 운용성(Interoperability): HTTP, JSON, XML 등 표준 프로토콜을 통한 서비스 통신
- 서비스 발견성(Discoverability): 서비스 레지스트리 사용
- 정렬(Orchestration)과 협업(Choreography) 방식의 서비스 조합
- 예제 구현:
- Node.js + Express 기반의 userService.js와 orderService.js를 사용한 서비스 통신
- axios 라이브러리로 외부 서비스 호출 (예: axios.get('http://localhost:3001/users')
)
섹션별 세부 요약
1. 서비스(Service)
- 서비스는 독립적인 기능 단위로, 특정 비즈니스 로직을 수행
- 재사용성을 위해 외부 애플리케이션에서 호출 가능
- 예:
userService.js
에서 사용자 목록 조회 API 제공 (/users
)
2. 느슨한 결합(Loose Coupling)
- 서비스 간 의존성 최소화
- 업데이트/유지보수 용이
- 예:
orderService.js
는userService.js
의 변경에 영향을 받지 않음
3. 상호 운용성(Interoperability)
- 표준 프로토콜(HTTP, JSON)을 통해 다양한 기술 스택의 서비스 통합
- 서비스 간 데이터 교환 시 JSON 형식 사용
4. 서비스 발견성(Discoverability)
- 서비스 레지스트리(Service Registry)를 통해 서비스 검색 및 접근 가능
- 예: 서비스 등록 시
serviceRegistry.register('userService', 'http://localhost:3001')
5. 정렬(Orchestration) vs 협업(Choreography)
- 정렬: 중앙 컨트롤러가 서비스 실행 순서를 정의 (예:
orderService
에서userService
호출) - 협업: 서비스 간 직접 상호작용 (예: 이벤트 기반 통신)
6. 예제 구현 (Node.js)
- 프로젝트 초기화:
```bash
npm init -y
npm install express axios
```
- 디렉토리 구조:
```plaintext
soa-example/
├── services/
│ ├── userService.js
│ └── orderService.js
└── index.js
```
- userService.js: 사용자 데이터 제공 API (
GET /users
) - orderService.js:
userService
와 통신하여 주문 생성 (POST /orders
)
7. 실행 및 테스트
- 서비스 실행:
```bash
node services/userService.js
node services/orderService.js
```
- API 요청 예시:
- 사용자 조회: GET http://localhost:3001/users
- 주문 생성:
```json
POST http://localhost:3002/orders
{
"userId": 1,
"product": "Laptop"
}
```
결론
- SOA 적용 시 주요 팁:
- 서비스 간 통신을 위한 표준 프로토콜(HTTP, JSON) 사용
- 서비스 레지스트리 도입으로 서비스 발견성 향상
- Node.js + Express로 간단한 서비스 구현 예제 제공 (예: userService.js
와 orderService.js
)
- 실무 적용 권장사항:
- 복잡한 시스템에서 정렬(Orchestration) 방식으로 서비스 통합
- 상호 운용성을 위해 RESTful API 설계 준수