본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://fastcampus.info/4n8ztzq
안녕하세요 :)
오늘은 "50일의 기적 AI 환급반_ 대규모 채팅 플랫폼으로 한 번에 끝내는 실전 대용량 트래픽 커버 완전판 " 챌린지에 도전하는 두번째 날입니다.
첫번째 날에 강의 개요를 정말 샅샅이 뜯어보면서 러닝 타임보다 훨씬 더 많은 시간을 투자했었는데요. 오늘은 과연 어떤 내용들을 배울 수 있을지 공부하고 포스팅 하도록 하겠습니다.
오늘 학습할 내용의 제목은,
Part 1.프로젝트 개요와 목표 >
02. 모놀리식, MSA 그리고 하이브리드 아키텍처에 대한 개요
입니다.
- 오늘은 Monolithic, MSA, Hybrid 아키텍처에 대해서 알아보는 시간을 가졌습니다. 사실 이런 구조가 있다는 것도 단어만 들어봤지 어떤 아키텍처인지는 몰랐었는데 알아가는 시간이 되었던 것 같습니다.
Monolithic
- Monolithic 구조를 보면, 흔히 배척해야 할 나쁜 것이라고 단정 짓는 경우가 많지만 이런 선입견을 가지기 보다는 장점과 단점을 명확히 이해한 후에 어디서 트레이드 오프를 할지 신중히 고민하는 방향으로 접근하는 것이 더 바람직하다고 생각함.
- 단점
- 확장이 어려움.
- 인스턴스를 추가적으로 구성할 수 있지만 비효율적일 수도 있음.
- Monolithic 시스템은 서비스가 아닌 강한 결합을 가지고 있음. 결과적으로 서비스 전면 장애로 이어질 수 있음.
- 장점
- 개발, 테스트, 배포, 운영이 편리함.
- 데이터 처리를 하나의 트랜잭션으로 묶을 수 있기에 데이터 정합성을 보장하기도 쉬움.
- 도메인 요구사항에 따라서는 Monolithic 으로 충분한 경우도 있음.
MSA
- Monolithic 구조와는 달리 MSA 는 멋지고 좋은 것이라고 단정 짓는 경우가 많은 것 같음. 하지만 MSA 도 다양한 아키텍처 스타일 중 하나고, 장단점을 가지고 있음.
- 장점
- MSA 구조는 확장이 용이함.
- 상태를 공유하지 않으므로, 개별 로드에 장애가 발생해도 서비스 전면 장애로 이어지지는 않음.
- 시스템의 가용성과 안정성을 더 쉽게 확보할 수 있음.
- 배포도 다른 서비스에 영향을 주지 않고, 개별 서비스 별로 쉽게 진행할 수 있음.
- 이렇게 독립성이 강하다 보니, 기술 스택도 서비스마다 다르게 구성할 수 있음.
- 단점
- 각 마이크로 서비스는 독립된 데이터베이스를 가져야 하고, 마이크로 서비스 간의 통신은 네트워크를 경유해야 함.
- 기본적으로 네트워크 오버헤드가 발생하고, 데이터의 흐름을 추적하기 어려워짐.
- 마이크로 서비스가 독립된 데이터베이스를 가지면서 하나의 데이터를 처리하기 위한 트랜잭션을 하나로 묶을 수 없기 때문에 데이터의 정합성을 보장하기 어려움.
Hybrid
- MSA 의 단점과 Monolithic 의 단점을 극복하기 위해서 조합한 아키텍처
- 각 서비스를 적절한 책임 단위로 분리하여 서비스 단위 스케일 아웃이 가능하게 구성하고, 상태를 공유하지 않음. (MSA 와 유사)
- 서비스는 필요하다면, 데이터베이스를 공유함. 단순 조회를 위해서 서비스 간 네트워크 연결을 구성하지 않음. (Monolithic 과 유사)
- 일부 서비스는 여러 책임을 가진 전형적인 Monolithic 구조로 남아 있을 수 있음. 이런 서비스 구성의 비중을 어떻게 조절하느냐에 따라 Monolithic 에 가까울 수도, MSA 에 가까울 수도 있는 구조가 될 수 있음.
- 우리가 사용할 아키텍처 → Hybrid 아키텍처
- MSA 의 특징과 Monolithic 의 특징을 모두 차용한 아키텍처를 구성
- 각 서비스는 독립된 책임을 가지고 분리되어 있고, 각 서비스 별로 스케일 아웃 할 수 있음
- 일부 서비스는 디스커버리가 필요해서 서비스 디스커버리로 Consul 을 도입했고, 일부 서비스는 Nginx 의 설정 업데이트가 필요함.