-
코드:
https://github.com/Yoo-mingi/blog_Boilerplate/tree/main/backend/gateway
이전 포스팅으로 keycloak, react, db 가 모두 준비되었다면 이제 본격적으로 Gateway 생성을 시작하겠다.
Java 버전: 26Spring Boot: 4.0.6
필요한 의존성은 다음과 같다.

OAuth2 Resoruce Server에는 Spring Security 또한 함께 포함되어있음을 유의하면된다.
의존성 추가 후 프로젝트를 생성하면 되는데, 본 포스팅에서는 /backend 폴더를 만들고 그 폴더 안에서 모든 백엔드 프로젝트를 생성할 것이다.
생성 되었다면 Application.yaml 먼저 수정해준다.
issuer-uri: http://localhost:8180/realms/daramu미리 라우팅 처리를 위한 설정을 해주었다.
코드에서 보이듯이, 8081은 user 서비스가, 8082는 Notification 서비스가 사용할 예정이다.
주의할 점은 jwt를 검증/발급 위치에대한 issure-uri 에 마지막 렘 이름이니 수정해서 사용하면 된다.
다음으로 두개의 폴더와 두개의 파일을 생성할 것이다
config/GatewaySecurityConfig
filter/CustomAuthFilter

여기서 customauthfilter의 역할은 Gateway를 지나는 요청에 대하여, 백엔드 라우팅 전에 헤더로 "X-Request-Id" 를 넣어주는 역할이다.

String 으로 UUID를 랜덤 생성한다.
모든 요청에 대하여 고유 ID를 부여하며, 로그에서 특정 요청의 흐름을 추적할때 사용할 것이다.

그 다음으로 요청에서 jwt에 대한 정보를 추출한다.
Gateway의 Oauth2ResourceServer 설정이 JWT를 검증하고, SecurityContext에 그 정보를 저장할 것이다.
이 필터는 그 정보를 꺼내와서 처리를 하겠다는 것이다. 인증이 없는 경로에서는 jwt가 없으니 Empty_jwt 로 대체 하였다.

다음으로 jwt에서 추출한 email, id, name에 대한 값을 헤더에 집어 넣는다. X-User로 통일했다.
여기서 id만 필요하다면 email과 name을 지우면 된다.
그 밑은 로그로, 보일러플레이트인 이상 로컬에서 확인이 편하도록 설정했다.
필요 없다면 없애도 된다.
다음으로는 "GatewaySecurityConfig" 이다. 여기서는 csrf, cors 등의 설정을 진행한다.
jwt토큰 방식이기에 csrf는 사용하지 않으며, cors는 react 개발 서버에 오는 요청을 수락하도록 하였다.

다음으로 회원가입시에는 당연히 jwt가 없을테니 예외로 두고, 그 외에는 anyExchange().authenticated() 로 그 외 모든 요청에 대해서는 jwt 를 요구하고 있다.

다음으로는 Oauth2ResoruceServer 함수를 사용해 application.yaml에 정의한 keycloak 서버로 jwt자동검증 로직이며,
그 바로 밑은 위에서 생성한 헤더 주입으로, 모든 검증이 끝났다면 헤더를 주입해 달라는 요청이다.
참고로 "CorsConfigurationSource" 는 개발기 vite+react기준이라 localhost:5137로 하였으니, 각자 자신의 환경에 맞춰 수정하면 된다.
'개발 > Spring boot' 카테고리의 다른 글
Keycloak, React, Spring Boot 연동: Notification 서비스 생성 (1) 2026.06.06 Keycloak, React, Spring Boot 연동: user 서비스 생성 (0) 2026.06.06 Keycloak, React, Spring Boot 연동: DB 생성하기 (0) 2026.06.06 Spring boot - Spring Cloud Gateway(SCG) 란? (0) 2026.06.02 Spring boot Dockerfile (0) 2026.05.29 댓글
