모놀리식 아키텍쳐( Monolithic Architecture )
- 여러기능 ( ex. 로그인, 상품 조회, 주문, 결제 ... ) 들을 하나의 큰 프로그램으로 만드는 방식
장점
초기 스타트업 같은 경우에는 좋을 수 있음.
빠른개발 : 간단하고 직관적이라 빠르게 만들 수 있음.
쉬운 배포 : 파일 하나만 서버에 올리면 끝!
간단한 테스트 : 전체를 한 번에 테스트 하면 됨.
쉬운 디버깅 : 모든 코드가 한 곳에 있어서 문제를 찾기 쉬움.
단점
서비스가 커지면서 문제가 생기기 시작함..
복잡도 폭발 : 코드가 너무 길어짐. 작은 수정하나에 전체를 이해해야 함.
배포의 공포 : 기능하나 수정하는데 전체를 다시 배포해야함. 근데 다른 기능에서 오류가 나버림..
확장의 한계 : 기능에 따라 트래픽이 많으면 서버를 늘려야 하고 트래픽이 적으면 줄여줘야 함
기술선택의 제약 : 개발언어의 선택이 자유롭지 못함 ( python, java 등등 )
그래서 나온 것이 MSA ( 마이크로 서비스 )
MSA란?
기능별로 서비스를 나누는 것. ( 사용자 서비스, 상품 서비스, 주문 서비스, 결제 서비스 등등 )
MSA 의 장점
- 독립적 개발 : 각 팀이 자신의 담당 부분에만 집중 가능!
- 독립적 배포 : 수정이 필요한 부분만 업데이트하면 됨!
- 기술 다양성 : 각 서비스마다 최적의 기술 선택 가능
- 장애 격리 : 한 부분에 문제가 생겨도 다른 부분은 멀쩡함.
- 확장성 : 필요한 서비스만 서버 증설 가능
MSA 의 단점
- 관리 복잡성 : 서비스가 많아서 관리가 힘듦
- 네트워크 통신 : 서비스끼리 통신할 때 오류 가능성 있음
- 복잡한 테스트 : 테스트를 할 때 여러 서비스를 함께 진행해야 함
- 분산 시스템의 복잡성 : 데이터 일관성, 트랜잭션 관리 등등
MSA를 위해 필요한 핵심 기술들
1. 서비스 디스커버리(Service Discovery)
- 유레카(Eureka) 서버
서비스 등록
주기적으로 상태 체크
서비스 주소 제공 ( 다른 서비스에서 찾을 때 )
2. 로드 밸런서 (Load Balancer)
- 같은 서비스에 인스턴스가 여러개 있을 때
라운드 로빈 : 순서대로 배정
가중치 : 성능 좋은 서버에 더 많이 배분
최초 연결 : 현재 일이 적은 서버에 우선 배정
3. API Gateway
라우팅 : 요청을 어떤 서비스로 보낼지?
인증 : 사용자가 접근 권한이 있는지?
로깅 : 누가 언제 무엇을 요청했는지 기록
Rate Limiting : 너무 많은 요청은 차단
4. ALB (Application Load Balancer)
- 외부 트래픽 분산
[ 전체적인 동작 흐름 ]
1) 유레카에 서비스 주소값 등록
2) 사용자 요청
3) ALB에서 외부 트래픽 분산
4) API Gateway에서 적절한 서비스 주소값 찾기
5) 로드밸런서가 같은 종류 서비스 중 적절하게 배정
6) 서비스 호출 및 서비스간 통신
현재 팀의 상황과 서비스에 맞는 선택을 하는 것이 중요해 보임.
작고 단순한 서비스에는 모놀리식으로 시작해서
크고 복잡한 서비스가 될 수록 MSA를 고려하고 점진적인 전환을 통해 성장하는 서비스
'LG CNS Camp 2기 > MSA 과정' 카테고리의 다른 글
[MSA 과정] 클라우드 네이티브 (0) | 2025.05.29 |
---|