- 프로젝트 특징
- 사용자는 3가지 마이크로 서비스 사용 가능
- Docker를 활용한 개발 환경 구축
- Redis를 활용한 캐싱 전략, 대규모 주문 처리 기술
- 관련 도메인
- 배민, 무신사, 29cm 등의 e-commerce
- 사용 기술 및 개발 환경 *많은 기업에서 실무에 사용되는 라이브러리를 기준으로 설계되어 있습니다.
- Docker / Docker Compose
- Spring Boot
- Java/Kotlin
- JWT
- HTTP Request / Response
- 프로그래밍 언어: JVM 언어(Java/Kotlin) 버전 17 이상
- 빌드 툴: Gradle
- 프레임워크: SpringBoot 3.XX
초기 구성
위 이미지는 마이크로서비스 아키텍처(MSA)를 사용하여 구성된 시스템으로, 여러 서비스가 독립적으로 배포되고 관리될 수 있도록 설계되었습니다. 각 서비스는 특정한 기능을 담당하며, 이들은 서로 통신하여 전체 시스템을 구성합니다.
1. Client
- 사용자가 시스템과 상호작용하는 부분입니다. 사용자는 웹, 모바일 또는 기타 클라이언트를 통해 시스템에 요청을 보냅니다.
2. Routing Service (API Gateway)
- 클라이언트 요청을 각 서비스로 라우팅하는 역할을 합니다. 모든 클라이언트 요청은 API Gateway를 통해 전달되며, 이곳에서 적절한 서비스로 요청이 전달됩니다. 이는 인증, 로깅, 요청 변환 등의 기능을 추가적으로 수행할 수 있습니다.
3. Registry Service (Eureka Server)
- 각 마이크로서비스가 자신을 등록하고 다른 서비스의 위치를 발견할 수 있도록 도와주는 서비스입니다. 이 서비스를 통해 각 마이크로서비스는 동적으로 네트워크 위치를 발견할 수 있어, 서비스 인스턴스가 추가되거나 삭제될 때 유연하게 대응할 수 있습니다.
4. Configuration Service (Config Server)
- 마이크로서비스들이 사용할 공통 설정 파일들을 중앙에서 관리하는 서비스입니다. 이를 통해 각 서비스는 독립적으로 설정 파일을 관리하지 않고도 일관된 설정을 유지할 수 있습니다.
5. Microservices
- Catalog Service: 제품이나 서비스의 목록을 관리하는 서비스입니다.
- User Service: 사용자 관리, 인증 및 권한 관리 기능을 담당하는 서비스입니다.
- Order Service: 주문 처리를 담당하는 서비스입니다.
- 이 서비스들은 각각의 데이터베이스를 가지며, Spring Boot로 구축된 마이크로서비스로 추정됩니다.
6. Kafka (Messaging Channels)
- 마이크로서비스 간의 비동기 메시징을 위한 메시지 브로커 역할을 합니다. 서비스 간에 실시간으로 데이터를 주고받거나 이벤트를 처리할 때 사용됩니다. Kafka는 높은 확장성과 안정성을 제공하므로, 대규모 트래픽이나 이벤트 처리에 적합합니다.
전체 흐름
- 사용자가 클라이언트를 통해 요청을 보냅니다.
- 요청은 API Gateway를 통해 적절한 마이크로서비스로 라우팅됩니다.
- 각 마이크로서비스는 Eureka Server를 통해 자신이 필요한 다른 서비스들을 찾고 통신합니다.
- 서비스 간의 데이터 공유나 이벤트 처리는 Kafka를 통해 비동기적으로 처리됩니다.
- 모든 서비스는 Config Server를 통해 공통 설정을 관리하며, 이로 인해 일관된 운영 환경을 유지합니다.
이 아키텍처는 마이크로서비스 간의 독립성, 확장성, 그리고 유연성을 높이기 위해 설계되었으며, 동시에 Eureka와 Config Server를 사용하여 중앙에서 서비스 발견과 설정을 관리함으로써 전체적인 복잡성을 줄이고 있습니다.
나중 구성
쿠버네티스 컨테이너 가상화 기술로 오케스트레이션 할 수 있습니다. 3가지 마이크로 서비스를 모니터링하기 위해서 Grafana 혹은 Prometeus같은 서비스를 연동시킬 수 있습니다.
category-service와 order-service 간 통신을 위해서 중간에 카프카 메시지 큐를 두고 도커 컨테이너로 배포 할 수 있습니다.
그리고 개발 코드를 깃헙에 푸시하게 되면 파이프라인으로 연결되어 있는 시스템에 의해서 자동으로 빌드되고 패키징이 되고 이후 도커에서 필요한 이미지가 만들어지고 그 이미지가 도커 레지스트리에 등록되어 쿠버네티스에 배포되는 과정까지 파이프라인화 할 수 있습니다.
그리고 외부에서 클라이언트 요청이 들어 왔을때 그것을 처리시켜 줄 수 있는 인그레스 컨트롤러를 쿠버네티스 안쪽에 배치 해 놓고 클라이언트로부터 요청이 들어오게 되면 인그레스 컨트롤러를 이용해 배포할 수 있습니다.
애플리케이션 구성 요소
구성요소 | 설명 |
---|---|
Git Repository | 마이크로서비스 소스 관리 및 프로파일 관리 |
Config Server | Git 저장소에 등록된 프로파일 정보 및 설정 정보 |
Eureka Server | 마이크로서비스 등록 및 검색 |
API Gateway Server | 마이크로서비스 부하 분산 및 서비스 라우팅 |
Microservices | 회원 MS, 주문 MS, 상품(카테고리) MS |
Queuing System | 마이크로서비스 간 메시지 발행 및 구독 |
애플리케이션 APIs
마이크로서비스 | RESTful API | HTTP Method |
---|---|---|
Catalog Service | /catalog-service/catalogs : 상품 목록 제공 |
GET |
User Service | /user-service/users : 사용자 정보 등록 |
POST |
/user-service/users : 전체 사용자 조회 |
GET | |
/user-service/users/{user_id} : 사용자 정보, 주문 내역 조회 |
GET | |
Order Service | /order-service/users/{user_id}/orders : 주문 등록 |
POST |
/order-service/users/{user_id}/orders : 주문 확인 |
GET |
'프레임워크 > 자바 스프링' 카테고리의 다른 글
대규모 트래픽 게시판 구축 시리즈 #2: 프로젝트 기획 및 요구 사항 (0) | 2024.09.05 |
---|---|
대규모 트래픽 게시판 구축 시리즈 #1: 프로젝트 기획 및 요구 사항 (0) | 2024.09.05 |
콘서트 예매 서비스에서 발생할 수 있는 동시성 이슈와 처리 (0) | 2024.07.20 |
JPA 테스트 코드 작성시 UPDATE Query 생성이 안되네? (0) | 2024.05.28 |
JPA 연결 테스트 코드 (0) | 2024.05.28 |