MSA (Microservice Architecture)
마이크로 서비스 아키텍쳐는, 단일 응용 프로그램을 나누어 작은 서비스의 조합으로 구축하는 방법이다.
각 개별 서비스는 자신의 프로세스에서 실행하는HTTP기반 API등으로 가벼운 연결 방식을 사용한다.
각 서비스는 비지니스 로직의 수행 기능에 맞게 구축 된 완전히 자동화 된 머신에 의한 배포를 통해 이루어진다.
각 서비스는 최소한의 중앙 관리 기능은 있지만, 서로 다른 프로그래밍 언어에 의해 개발되고, 다른 데이터 저장 기술이 이용될 수 있다.
Monolithic
모놀리식 응용 프로그램은 하나의 큰 덩어리 단위로 구축한다. 서버 사이드 애플리케이션은 하나의 큰 덩어리 단위로 구축한다. 요청을 처리하는 로직은 모두 단일 프로세스로 처리 된 응용 프로그램에서 수행하고, 클래스 및 함수, 네임스페이스로 분할하는 프로그래밍 언어의 기능을 이용한다.
모놀리식 응용 프로그램은 잘 작동하지만, 서서히 문제가 발생한다. 응용 프로그램 내 작은 부분에 대한 변경이 있더라도, 모놀리식 방식은 모두 빌드해서 다시 배포해야 한다. 시간이 지남에 따라 모듈 구조를 문제 없이 유지하는 것은 점점 어려워지고, 각 모듈의 변경 사항을 그 모듈에만 한정하는 것도 힘들어진다. 서버 확장성도 자원을 더 필요로 하는 부분만 뿐만아니라, 전체 응용프로그램의 규모에 따라 더 필요해진다.
이로인해 MSA를 도입하게 된다. 즉, 큰 응용 프로그램을 여러 작은 서비스의 조합으로 구축하는 것이다
각 서비스는 독립적으로 배치 가능하고 확장 가능할 뿐만 아니라 서로 다른 프로그래밍 언어로 개발된 다른 서비스임에도 불구하고, 명확한 모듈 상의 경계를 가지고있다. 또, 각 서비스는 팀별로 따로 관리 할 수 있다.
MSA의 장던점
MSA의 장점
- 배포(deployment)
- 서비스 별 개별 배포 가능( 배포 시 전체 서비스의 중단이 없음)
- 요구 사항을 신속하게 반영하여 빠르게 배포할 수 있음
- 확장(scaling)
- 특정 서비스에 대한 확장성이 용이함
- 장애(failure)
- 장애가 전체 서비스로 확장될 가능성이 적음
- 부분적 장애에 대한 격리가 수월함
MSA의 단점
- 성능 : 서비스 간 호출시 API를 이용하기 때문에, 통신 비용이 늘어나게 된다.
- 테스트/ 트랜잭션 : 서비스가 분리되어 있기 때문에 테스트와 트랜잭션의 복잡도가 증가하고, 많은 자원을 필요로 한다.
- 데이터 관리 : 데이터가 여러 서비스에 걸쳐 분산되기 때문에 한번에 조회하기 어렵고, 데이터의 정합성 또한 관리하기 어렵다.
참조
'창고(2021년 이전)' 카테고리의 다른 글
[Typescript] Interface (0) | 2020.03.15 |
---|---|
[프로젝트 리뷰] MVC에 대하여 겪었던 고민 (0) | 2020.03.06 |
[NodeJS] 에러, 그리고 예외처리(in Express) (0) | 2020.03.05 |
OAuth2 정리 및 JWT를 이용한 로그인 유지 구현 (1) | 2020.03.04 |
[프로젝트 회고] Dedicats Server 4주 프로젝트 (0) | 2020.03.02 |