MSA(Microservice Architecture) 환경에서는 하나의 서비스를 여러 대의 서버에서 실행하는 경우가 많다. 이때 각 서비스의 IP와 Port를 직접 관리하면 서버가 추가되거나 변경될 때마다 모든 서비스의 설정을 수정해야 하는 문제가 발생한다.
이를 해결하기 위해 Spring Cloud Eureka를 사용한다.
Eureka란?
Eureka는 Service Discovery(서비스 디스커버리) 서버
각 서비스는 실행되면서 자신의 정보를 Eureka Server에 등록한다.
예를 들어 User Service가 3개의 인스턴스로 실행 중이라면 Eureka는 다음과 같은 정보를 관리한다.
USER-SERVICE
- 10.0.0.1:8080
- 10.0.0.2:8080
- 10.0.0.3:8080
다른 서비스는 User Service의 주소를 직접 알고 있을 필요 없이 Eureka에게 현재 실행 중인 인스턴스 목록을 요청하여 사용할 수 있다.
Eureka의 역할
처음에는 Eureka가 로드밸런싱까지 수행한다고 생각했지만, 실제 역할은 다르다.
Eureka의 역할은
- 서비스 등록(Service Registration)
- 서비스 검색(Service Discovery)
- 실행 중인 서비스 목록 관리
이다.
즉, 어떤 서버들이 실행 중인지 알려주는 역할을 담당한다.
실제 요청 흐름
사용자
│
▼
API Gateway
│
│ "USER-SERVICE 어디 있어?"
▼
Eureka Server
│
└── User Service 인스턴스 목록 반환
│
▼
Spring Cloud LoadBalancer
│
▼
선택된 User Service 인스턴스
Gateway는 Eureka에서 User Service의 인스턴스 목록을 조회한 뒤, Spring Cloud LoadBalancer를 통해 하나의 서버를 선택하여 요청을 전달한다.
Eureka와 LoadBalancer의 차이
EurekaSpring Cloud LoadBalancer
| 서비스 등록 | 요청 분산 |
| 서비스 검색 | 서버 선택 |
| 실행 중인 인스턴스 관리 | 라운드 로빈 등 로드밸런싱 수행 |
따라서 Eureka는 로드밸런서가 아니라 서비스 정보를 제공하는 역할을 수행하며, 실제 요청을 어느 서버로 보낼지는 LoadBalancer가 결정한다.
Gradle 의존성 추가
Eureka Client를 사용하기 위해서는 Gradle에 다음 의존성을 추가한다.
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
Eureka Server는 다음 의존성을 추가한다.
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
처음에는 "사용자의 요청이 Eureka를 거쳐 서버로 전달되며, Eureka가 로드밸런싱까지 수행한다."고 이해하고 있었지만, 공부하면서 역할이 분리되어 있다는 것을 알게 되었다.
- Eureka는 서비스의 위치를 관리하는 Service Discovery 서버이다.
- Spring Cloud LoadBalancer는 Eureka에서 받은 서비스 목록을 기반으로 실제 요청을 분산한다.
- API Gateway는 클라이언트의 요청을 받아 적절한 서비스로 전달하는 진입점 역할을 한다.
'개발 공부 > Java' 카테고리의 다른 글
| [TIL]MSA-보안부터 이벤트 드리븐까지 (0) | 2026.06.30 |
|---|---|
| [TIL] MSA - Eureka, LoadBalancer, FeignClient 이해하기 (0) | 2026.06.29 |
| [TIL]Spring Boot 숙련(3)-RestTemplate와 JPA 연관관계, Fetch 전략 (0) | 2026.06.26 |
| [PLUS] SLF4J와 System.out.println()의 차이 (왜 sout을 쓰면 안 될까?) (0) | 2026.06.26 |
| [TIL]Spring Boot 숙련(1)-Spring Security & JWT 인증 (0) | 2026.06.26 |
