본 포스팅은 인프런 Hyounsub Lee님의 Java 마이크로서비스(MSA) 프로젝트 실습 강의를 참고하여 작성하였습니다.
프로그램 안에 있는 각 서비스들 개발 할 때
어떻게 쉽게 유지보수를 할 수 있을까? 를 고려하려 설계하는것이 좋은 아키텍쳐
- 1. N-계층 아키텍쳐
애플리케이션에 고유의 기능들을 여러 계층으로 나눈 아키텍쳐
MVC, MVVM 패턴등이 여기에 해당- 2. 모놀로스 아키텍쳐
모든 UI, 비지니스 로직을 하나의 Application으로 패키징한 아키텍쳐- 3. 마이크로서비스 아키텍쳐
규모가 작은 분산된 서비스. 대규모 application을 분리함으로 각 서비스마다 책임이 명확해지도록 진행된 아키텍쳐
무중단 운영도 지원하지만, 업데이트 작업시 모놀로스 아키텍쳐에 비해 좀 더 불안감 없이 수행이 가능
장점
- 서비스간 코드 간섭이 없다.
* 특정 소스 변경시 변경된 소스의 영향이
appliation 전체에 영향을 주는것이 아닌 해당 Service에만 영향을 미침- 원하는 서비스를 무중단 스케일링이 가능
* 모놀로스 아키텍쳐 배포시 기존 시스템을 중단 -> 패치 -> 재실행 과정이 필요
특정기능 업데이트시 사용자가 이용하지 않는 점심시간, 퇴근시간 이후 패치가 불가피
MSA 사용시, Gateway를 활용하여, 서버 중지없이 패치가 가능- 서비스별 백업, 복구가 편리
- 서비스간 영향도가 적어 배포를 쉽게 할 수 있다.
단점
- 트랜잭션 관리의 어려움
- 여러 서비스를 파악하는데 어려움
서비스를 너무 작게 분산할 경우, 어느 서비스에서 문제가 발생하는지 파악하기 힘듬- 서비스 분리를 어떻게 하느냐에 따라 성능 저하를 유발