이 글은 알파코에서 진행 중인 [신한투자증권] 프로디지털아카데미 6기 과정 중 백엔드 과목의 김송아 강사님의 강의를 기반으로 작성되었습니다
MSA를 구현하기 위해서 필요한 3가지 요소에 대해서 공부해보고자 한다.
로드 밸런서
들어오는 클라이언트 요청을 여러 서비스 인스턴스로 분산시켜 서버의 부하를 줄이고, 고가용성을 보장하는 역할을 담당
특징
- Health Check: 비정상 인스턴스를 자동으로 제외.
- Scale-out 지원: 서비스 인스턴스를 수평적으로 확장 가능.
- 트래픽 분배 알고리즘: Round Robin, Least Connection, IP Hash 등 적용 가능.
서비스 레지스트리
각 서비스 인스턴스의 네트워크 위치(IP, 포트 등)를 등록·관리하고, 다른 서비스가 이를 조회할 수 있게 하는 주소록 역할.
MSA에 여러개의 서비스가 있기때문에 필요함
특징
- 서비스 자동 등록(등록/해제)
- 클라이언트 사이드 디스커버리 또는 서버 사이드 디스커버리 지원
- 장애 인스턴스 자동 제거
API Gateway
외부 클라이언트와 내부 마이크로서비스 사이의 단일 진입점(Entry Point) 역할
- 특징
- 라우팅: 요청을 적절한 서비스로 전달
- 인증/인가, 로깅, Rate Limiting, CORS 처리 등 공통 기능 제공
- 응답 Aggregation: 여러 마이크로서비스 호출을 하나로 묶어 클라이언트에 반환
그림으로 그려보면 다음과 같이
요약하자면 로드밸런서를 통해 인스턴스 부하를 나누고 게이트웨이를 통해 요청에 맞는 서비스로 가게 된다.
그리고 이런 서비스를 등록하고 조회하는걸 도와주는 게 서비스 레지스트리

이때 로드밸런서를 붙이는 위치는 크게 두가지가 있다

이렇게 하나의 서비스에 대해 여러개가 있어서 로드밸런서로 분배할 수도 있고
아래처럼 모든 서비스에 대해 여러개로 로드밸런서로 둘 수 있다.
후자는 넷플릭스처럼 엄청 큰 데이터를 다루는 서비스에 적용되고 일반적으로는 전자를 사용한다.

'백엔드' 카테고리의 다른 글
| IntelliJ Github 연동시 로그인 실패 오류 해결 (2) | 2025.02.04 |
|---|---|
| 포스트맨에서 한글 인코딩 오류(마지막 글자 사라짐) 해결 (2) | 2022.07.28 |
| like 를 이용하여 키워드검색 api 구현하기 (2) | 2022.07.28 |
| git 병합 충돌 발생시에 파일이름을 못찾겠다고 할 때 (0) | 2022.07.25 |
| 병합시 발생하는 git conflict 충돌 해결 (1) | 2022.07.16 |