본문 바로가기
Spring

Spring Cloud Eureka MSA 사용법

by HanYaung 2025. 3. 6.

스프링 클라우드란?

스프링 클라우드(Spring Cloud)는 마이크로서비스 아키텍처(MSA) 환경에서 클라우드 네이티브 애플리케이션을 개발하기 위한 프레임워크다. 스프링 부트(Spring Boot)를 기반으로 하며, 분산 시스템에서 필요한 기능을 쉽게 구현할 수 있도록 다양한 서브 프로젝트를 제공한다.

  • 마이크로서비스 환경에서 필요한 기능(서비스 디스커버리, API 게이트웨이, 로드 밸런싱, 설정 관리, 분산 트랜잭션 등)을 쉽게 구현할 수 있도록 지원하는 프레임워크

Eureka란?

Eureka(유레카)는 Netflix에서 개발한 서비스 디스커버리(서비스 등록 및 검색) 솔루션이다. 마이크로서비스 아키텍처(MSA)에서 서비스들이 동적으로 IP와 포트를 변경할 수 있기 때문에, 클라이언트가 해당 서비스를 찾을 수 있도록 도와주는 역할을 한다.

Eureka 주요 개념

  • Eureka Server
    • 서비스 레지스트리 역할을 수행하며, 마이크로서비스들이 자신의 정보를 등록하고 검색할 수 있도록 지원함.
    • 마이크로서비스 인스턴스가 주기적으로 자신의 상태를 갱신(heartbeat)하여 살아있음을 알림.
  • Eureka Client
    • 애플리케이션(마이크로서비스)이 Eureka Server에 등록하고, 다른 서비스의 정보를 가져와 호출할 수 있도록 함.
    • 서비스가 종료되거나 실패할 경우, Eureka는 이를 감지하여 서비스 목록에서 제거함.

Eureka의 주요 기능

  1. 서비스 등록(Service Registration)
  • 마이크로서비스가 Eureka Server에 자신을 등록하여 다른 서비스가 찾을 수 있도록 함.
  1. 서비스 검색(Service Discovery)
  • 클라이언트가 Eureka Server에서 다른 서비스의 IP 및 포트를 검색하여 동적으로 호출할 수 있음.
  1. 헬스 체크(Health Check) & 자동 제거
  • 서비스가 정상적으로 동작하는지 지속적으로 확인하고, 일정 시간 응답이 없으면 서비스 목록에서 제거함.
  1. 로드 밸런싱 & 페일오버 지원
  • Eureka Client는 여러 서비스 인스턴스 중 하나를 랜덤으로 선택하여 트래픽을 분산시킴.
  • 특정 서비스 인스턴스가 다운되면 자동으로 다른 인스턴스를 호출함.

🔹 Eureka 사용 예시

1. Eureka Server 설정

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
# application.properties (Eureka Server 설정)

spring.application.name=eureka-server
server.port=8761
# 배포시에 고정 IP 주소로 변경해야한다
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
# 여러 유레카 서버 설정을 위한 설정 
eureka.client.fetch-registry=false 

• register-with-eureka: false → 자기 자신을 등록하지 않음.

• fetch-registry: false → 다른 서비스 정보를 가져오지 않음.

2. Eureka Client 설정 (마이크로서비스 등록)

  • @EnableEurekaClient - 스프링부트 3.x 부터는 추가할 필요없고
@SpringBootApplication
public class MicroserviceApplication {
    public static void main(String[] args) {
        SpringApplication.run(MicroserviceApplication.class, args);
    }
}
# application.properties (Eureka Client 설정)
spring.application.name=my-service# 서비스 이름

# Eureka Server 주소
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

#IP 주소 기반으로 서비스 등록
eureka.instance.prefer-ip-address=true

# jpa 사용시 db 연결 

# 데이터베이스 연결 설정
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=admin
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# JPA 설정
# (또는 create, validate, none)
spring.jpa.hibernate.ddl-auto=update  
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
# 콘솔에서 실행되는 SQL 보기
spring.jpa.show-sql=true  

Eureka의 장점

  • 동적 서비스 디스커버리 → 마이크로서비스의 IP 변경에도 자동으로 대응 가능
  • 로드 밸런싱 및 페일오버 지원 → 여러 인스턴스 중 하나를 자동으로 선택
  • 자체 복구 기능 → 서비스가 다운되면 자동으로 목록에서 제거

Eureka의 단점

  • Eureka Server 단일 장애점(SPOF, Single Point of Failure) → HA 구성 필요
  • AP 방식(가용성 우선)으로 동작 → 강한 일관성이 필요할 경우 Consul, Zookeeper 고려

'Spring' 카테고리의 다른 글

Spring MSA 멀티 모듈 레포 구성 방법  (0) 2025.03.27
[오류해결] jpa N+1 문제  (0) 2025.03.26
[오류해결] Spring security CORS 문제  (0) 2025.03.25