[Spring] Microservice 관리를 위한 Eureka Server 와 Spring Cloud Gateway개발/기능 개발2023. 2. 26. 22:38
Table of Contents
Eureka Server란?
마이크로 서비스가 다른 마이크로 서비스를 호출하려면 대상의 IP와 Port를 알아야한다.
그렇기 때문에 각 마이크로 서비스의 IP, Port 정보를 저장하고 검색해주는 Discovery Service가 필요하다.
각각의 마이크로서비스의 정보를 가지고 있는 곳이 Eureka Server이고, Server에 등록된 마이크로 서비스가 Eureka Client이다.
Eureka Server 설정
의존성 추가
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
@EnableEurekaServer를 이용해서 EurekaServer로 등록
@SpringBootApplication
@EnableEurekaServer //EurekaServer 활성화
public class DiscoveryServiceApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryServiceApplication.class, args);
}
}
application.yml 파일 설정
# 실행 포트 지정
server:
port: 8761
# micro service의 이름을 discovery-server로 지정
spring:
application:
name: discovery-Server
# Eureka Server인데 Client 설정을 하는 이유:
# Eureka Library가 포함되어 있으면 스프링 실행 시 Eureka Client의 역할로써 등록되기 때문에
# 서버이지만 클라이언트로 설정한다.
eureka:
client:
register-with-eureka: false #유레카 레지스트리에 자기 자신을 등록하지 않겠다.
fetch-registry: false #레지스트리의 정보를 가저오지 않겠다.
Eureka Client 설정
# 서비스 이름 설정
spring:
application:
name: my-first-service # 유레카 서버에 등록될 서비스 이름
eureka:
instance:
instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
client:
service-url:
defaultZone: http://${IP}:${PORT}/eureka #유레카 서버 주소
register-with-eureka: true
fetch-registry: true
discovery server 접속 시 아래와 같이 등록된 마이크로서비스를 확인할 수 있다.
Spring Cloud Gateway란 ?
Eureka Server에서 마이크로 서비스의 정보를 가지고 있다면, 이제는 각각의 마이크로 서비스로 요청을 전달할 수 있어야한다.
각각의 서비스로 바로 요청을 보내는 것이 아닌 리버스 프록시 서버인 API Gateway 서버가 모든 요청을 받고 요청을 적절한 서비스로 전달한다.
여러 서버로 요청을 분산하기 때문에 하나의 서버에 가해지는 부하가 분산된다.
또한 모든 마이크로서비스에 인증 로직을 구현하면 너무 많은 중복 코드가 발생하기 때문에 프록시 서버에서 인증을 처리하여 중복을 줄일 수 있다.
Spring Cloud Gateway 생성
의존성 추가
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
application.yml 파일 설정 - gateway에 등록할 서비스 정보를 등록
server:
port: 8000
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka #등록할 eureka server url
spring:
application:
name: api-gateway-service
cloud:
gateway:
routes:
- id: MY-FIRST-SERVICE #해당 라우터의 고유 식별자
uri: lb://MY-FIRST-SERVICE #해당 라우터의 주소
predicates: #라우터의 조건 작성 /first-service/**로 시작하는 경우 해당 라우터로 요청 전송
- Path=/first-service/**
- id: MY-SECOND-SERVICE
uri: lb://MY-SECOND-SERVICE
predicates:
- Path=/second-service/**
'개발 > 기능 개발' 카테고리의 다른 글
[Spring] Filter & Interceptor & AOP (0) | 2023.05.29 |
---|---|
[Spring] IoC & DI (0) | 2023.05.24 |
[인증] JWT(JSON Web Token) (0) | 2023.04.19 |
[Spring] Rest Docs와 Swagger UI (0) | 2023.04.11 |
@뽀글뽀글 개발자 :: 뽀글뽀글 개발 일지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!