최근에 MSA 프로젝트를 기획하고 있다.
회사에서 MSA 서비스를 만드는 신규 프로젝트에 참여해 본 적은 있었지만, 그때는 시니어 분들께서 도메인 별로 마이크로서비스를 생성하시고, 샘플 코드도 만드신 후에 인계를 받았기 때문에, MSA를 처음부터 구축하지는 못했다.
그래서 이번 기회에 처음부터 MSA를 구축하면서 배운 점은 이곳에 남겨 보려고 한다.
얼마전에 친구가 자기네 공장에 재고를 관리하는 포인트가 너무 다양하고, 사내 컴퓨터에 엑셀로 작업하기 때문에 오히려 비효율적이라는 얘기를 들었다.
그래서 재고관리 시스템을 만들면 어떨까? 하는 생각을 했다.
모든 개발의 시작은 요구사항을 정리하는 것 부터 시작한다. 친구를 잠재적 고객으로 가정하고 얘기를 들어보면
✅ 재고 등록: 원료 입고 시 로트번호, 제조일자, 소비기한, 수량 입력
✅ 선입선출(FIFO): 출고 시 가장 오래된 제품이 먼저 출고되도록 자동 정렬
✅ 제조 및 공정 관리: 가공 방식의 제조일자 차이를 반영한 관리 기능
✅ 유통기한 경고: 제품의 보관 기한이 초과될 경우 알림
✅ 추적 가능성: 원료 입고 → 가공 → 출고까지 로트번호 기반으로 흐름 관리
이 정도로 정리가 되는데, 나는 여기서 기술적인 요구사항을 더 추가했다.
✅ MSA 전환을 고려한 모놀리식 시스템을 구축
✅ RESTful API 방식을 통한 데이터 통신
✅ https, 데이터 암호화, JWT인증 등 보안 고려
✅ Docker를 활용한 배포 및 컨테이너 환경 구성
해당 요구 사항을 만족하기 위해 아키텍쳐는 아래와 같이 작성했다.

또한 아래와 같은 이유로 위에 아키텍처를 설계 했다.
Docker Compose 컨테이너 오케스트레이션 여러 개의 컨테이너를 한꺼번에 관리
Spring Cloud Gateway API Gateway 모든 API 요청을 관리, 인증 및 라우팅 수행, Zuul의 유지보수 종료에 대한 대안
Auth (인증 서비스) 사용자 인증 및 권한 부여 JWT 또는 OAuth를 활용한 인증 서비스
Eureka (Service Discovery) 서비스 탐색, 동적으로 마이크로서비스의 위치를 관리
PostgreSQL 데이터베이스 사용자 및 애플리케이션 데이터를 저장, 대용량 클라우드 환경에서 이점이 있음
또한, 프로토타입은 빠른 개발을 위해 통합된 서비스 형식(모놀리식)을 차용하며, 차후 리팩토링을 통해 마이크로 서비스들을 나눌 예정이다.
주요 서비스들은 전에 고물 노트북을 리눅스 서버로 개조한 것이 있어 그곳에 올릴 예정이며, DB와 스토리지 서버는 OCI (Oracle Cloud Infrastructure) 에 무료 인스턴스를 2개 제공하기 때문에 그곳에 설치하기로 했다. 데이터는 소중하기 때문에 머슴집 급조 서버보다 대감집 서버가 더 나을 것이라는 생각.
사실 서브 도메인을 활용한 멀티 테넌트 방식으로 해볼까 생각했는데, 그러려면 노트북 서버 대신 통째로 클라우드 서버에 올려야 해서, 원활한 서비스를 위해선 돈이 필요했다. 그 정도로 투자를 하고 싶진 않기에 최대한 프리티어의 이점을 활용했다.
다음 편은 데이터 구조와 개발 환경 구축에 대해서 얘기 해보겠다.
'우당탕탕 개발일기 > JAVA' 카테고리의 다른 글
| [JAVA] DB에 연동할 DTO의 파라미터 중 java.util.date 타입으로 지정한 데이터를 넣는 방법 (0) | 2021.08.31 |
|---|---|
| JAVA를 배우자(3) - 반복문은 조건이 필요할지도 아닐지도 모릅니다. (0) | 2021.01.11 |
| JAVA를 배우자(3) - Scanner, 조건문 (0) | 2021.01.07 |
| JAVA를 배우자(2) - 객체 지향 프로그래밍, 클래스, 메소드, 객체, etc (0) | 2021.01.05 |
| JAVA를 배우자(1) - JAVA는 뭐고, Eclipse는 또 뭐야??? (0) | 2021.01.04 |
댓글