스프링 클라우드란?
스프링 클라우드(Spring Cloud)는 마이크로서비스 아키텍처(MSA) 환경에서 클라우드 네이티브 애플리케이션을 개발하기 위한 프레임워크다. 스프링 부트(Spring Boot)를 기반으로 하며, 분산 시스템에서 필요한 기능을 쉽게 구현할 수 있도록 다양한 서브 프로젝트를 제공한다.
- 마이크로서비스 환경에서 필요한 기능(서비스 디스커버리, API 게이트웨이, 로드 밸런싱, 설정 관리, 분산 트랜잭션 등)을 쉽게 구현할 수 있도록 지원하는 프레임워크
Eureka란?
Eureka(유레카)는 Netflix에서 개발한 서비스 디스커버리(서비스 등록 및 검색) 솔루션이다. 마이크로서비스 아키텍처(MSA)에서 서비스들이 동적으로 IP와 포트를 변경할 수 있기 때문에, 클라이언트가 해당 서비스를 찾을 수 있도록 도와주는 역할을 한다.
Eureka 주요 개념
- Eureka Server
- 서비스 레지스트리 역할을 수행하며, 마이크로서비스들이 자신의 정보를 등록하고 검색할 수 있도록 지원함.
- 마이크로서비스 인스턴스가 주기적으로 자신의 상태를 갱신(heartbeat)하여 살아있음을 알림.
- Eureka Client
- 애플리케이션(마이크로서비스)이 Eureka Server에 등록하고, 다른 서비스의 정보를 가져와 호출할 수 있도록 함.
- 서비스가 종료되거나 실패할 경우, Eureka는 이를 감지하여 서비스 목록에서 제거함.
Eureka의 주요 기능
- 서비스 등록(Service Registration)
- 마이크로서비스가 Eureka Server에 자신을 등록하여 다른 서비스가 찾을 수 있도록 함.
- 서비스 검색(Service Discovery)
- 클라이언트가 Eureka Server에서 다른 서비스의 IP 및 포트를 검색하여 동적으로 호출할 수 있음.
- 헬스 체크(Health Check) & 자동 제거
- 서비스가 정상적으로 동작하는지 지속적으로 확인하고, 일정 시간 응답이 없으면 서비스 목록에서 제거함.
- 로드 밸런싱 & 페일오버 지원
- 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 |