이전 페이지: .env 파일 생성
다음 페이지: docker로 MSA 프로젝트 실행
개요
- 제일 앞단에서 요청을 받고 처리할 서비스로 전달하는 api gateway를 생성
- 이후 각 서비스에서 scale-out 이 일어날 가능성을 생각하여 로드 밸런싱 기능 추가
- keupang은 대규모 서비스를 가장한 프로젝트라는 것을 참고
프로젝트 생성
gateway 와 Eureka Discovery Client 의존성을 추가하여 생성
이때 주의할 점! https://start.spring.io/에서 gateway 의존성 추가 할 때 자동으로 mvc 기능이 추가된 버전을 추가해줌
implementation 'org.springframework.cloud:spring-cloud-starter-gateway-mvc'
이렇게 만들어지면 기존에 사람들이 gateway 만든 블로그를 따라해도 잘 안되는게 느껴질거임. 실행해도 라우팅 잘 안됨
그래서 위에서 mvc를 빼고
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
이렇게 수정해줘야함.
어노테이션 추가
eureka server에 등록해야 하므로 @EnableDiscoveryClient 추가
@SpringBootApplication
@EnableDiscoveryClient
public class KeupangGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(KeupangGatewayApplication.class, args);
}
}
application 설정
라우팅 설정
- application.yml에 다음과 같이 라우팅 설정
- 참고로 다양한 라우팅 전략이 있고, api gateway는 실제 서비스할 때 하루종일 켜져있어야 한다는 점을 고려해서 실행 중에 동적으로 새로운 기능에 대한 라우팅 정보를 추가해주는 actuator 를 사용하는 방법도 있음.
- 저는 기능을 딱 정해두고 개발중이라 사용 안했습니다.
spring:
application:
name: keupang-gateway
cloud:
gateway:
routes[0]:
id: user
predicates[0]:
name: Path
args:
pattern: /user/**
uri: lb://user
routes[1]:
id: product
predicates[0]:
name: Path
args:
pattern: /product/**
uri: lb://product
discovery:
locator:
enabled: true
- 여기서 uri에 직접적으로 localhost:8081 처럼 지정해줘도 상관없음
- 하지만 scale-out을 하면서 추가적인 포트가 생기는 상황을 가정해서 로드 밸런싱 기능 추가
- lb://user 로 하면 eureka에 등록된 user 라는 이름을 가진 application을 찾아서 디폴트로 라운드 로빈 방식으로 로드밸런싱을 해줌
eureka server 연동
application.yml에 다음 정보 추가
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://${security_username}:${security_password}@localhost:8761/eureka
이전에 env에 등록해둔 값들을 가져오고, eureka server 주소를 입력함
Dotenv로 env 값 꺼내기
@SpringBootApplication
@EnableDiscoveryClient
public class KeupangGatewayApplication {
public static void main(String[] args) {
Dotenv dotenv = Dotenv.configure().directory("./") // .env 파일 경로 설정
.load();
System.setProperty("security_username", dotenv.get("security_username"));
System.setProperty("security_password", dotenv.get("security_password"));
SpringApplication.run(KeupangGatewayApplication.class, args);
}
}
이렇게 꺼내야 application.yml에서 값을 가져다 쓸수 있게 됨.
이 프로젝트에서 적용한 env에 대한 상세 정보는 https://back-jong.tistory.com/16 에 기술
'MSA' 카테고리의 다른 글
[KEUPANG] EurekaClient 설정 (0) | 2024.11.26 |
---|---|
[KEUPANG] Eureka Server 생성 (0) | 2024.11.25 |
[KEUPANG] User service project 생성 (0) | 2024.11.25 |
[KEUPANG] config server 생성 (0) | 2024.11.25 |
[KEUPANG] MSA Root Project 생성 (0) | 2024.11.25 |