이번 프로젝트에도 역시 MSA를 사용하게 되었다.
물론 실제 배포 환경에서는 각각의 서버를 각각의 인스턴스에서 동작하겠지만, 개발 환경에서는 굳이 그럴 필요가 없다.
하나의 인스턴스에서 여러개의 로드밸런서로 각각의 도메인을 주는 것도 돈이 많이 나간다.
그렇기 때문에 하나의 도메인에서 nginx를 이용하여 각각의 path에 서로 다른 서버를 실행하려고 한다.
그리고 개발하는 환경이기 때문에 가장 먼저 Swagger를 설정하려고 한다.
- Nginx
우선 Nginx 설정이다.
가장먼저 auth 서버를 개발했기 때문에
https://도메인/auth/api
이렇게 auth 서버의 url을 부여하려고 한다.
우선 nginx의 설정이다.
/etc/nginx/sites-available 에서 default에
location /auth/ {
proxy_pass http://localhost:8080/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Prefix /auth;
}
이렇게 location을 추가해주자.
이러면 https://도메인/auth으로 요청했을 때, 해당 서버의 8080포트로 요청이 가게 된다.
이러면 일단 postman을 사용할 때, API는 정상적으로 작동하게 될 것이다.
- Swagger
하지만 Swagger는 config를 찾을 수 없다며, 화면이 보이지는 않을 것이다.
Swagger가 요청하는 주소도 /auth가 붙도록 설정해주어야 한다.
우선 application.yml 설정이다.
server:
forward-headers-strategy: framework
이 내용을 추가해주고
Swagger Config에도
@Bean
fun forwardedHeaderFilter(): ForwardedHeaderFilter {
return ForwardedHeaderFilter()
}
해당 Bean(Kotlin)을 추가해준다.
이러면 Swagger에서 forwarding을 하기 때문에 Swagger의 페이지는 보이게 된다.
하지만 Swagger가 보인다고 해서, Swagger가 정상적으로 작동하는 것은 아니다.
API Try를 해보면, Nginx 404 Not found가 나오게 될 것이다.
이게 API 요청을
https://도메인/auth/api로 해야 하는데, https://도메인/api로 하기 때문이다.
그렇기 때문에 Swagger의 기본 주소도 변경해주어야 한다.
OpenAPI의 Bean에 해당 Server url을 추가해주도록 하자.
나는 이렇게 환경변수에서 받아오도록 만들었다.
이렇게 해서 Swagger를 실행하면
이렇게 Swagger 기본 주소가 나오게 될텐데, 이러면 성공한 것이다.
이렇게 설정하면 Nginx로 Swagger를 Proxy_pass하여 사용 할 수 있다.
'크무톡톡 프로젝트' 카테고리의 다른 글
구글 Oauth 로그인, SpringBoot (0) | 2024.07.24 |
---|---|
네이버 Oauth 로그인, SpringBoot (2) | 2024.07.23 |
CompletableFuture 적용으로 성능 튜닝 (0) | 2024.03.09 |
Springboot와 DialogFlow 연동 - API (0) | 2024.01.17 |
SMTP 서버 구축 (0) | 2024.01.04 |