-
코드:
https://github.com/Yoo-mingi/blog_Boilerplate/tree/main/backend/user
이전 논의와 같이, keycloak은 사용자 인증에 특화되어 있기에 차후 비지니스 로직에 써먹을 수 있는 user 서비스를 생성할 것이다.
이전에 포스팅에서 DB를 생성했어야한다.
https://daramu.tistory.com/106
바로 새로운 프로젝트로 만들겠다.
필요한 의존성은 다음과 같다.

여기서 web은 API를 받기 위함이고, Reactive Web은 다은 백엔드의 API요청을 위한 의존성이다
두개가 다 있다고 하여도 Reactive Web은 오직 API 호출로만 쓰이니 의존성 충돌이 일어나지는 않는다.
(스프링 부트는 web과 webflux가 있다면, default 설정으로 Tomcat+Spring MVC를 서버로 가동한다)
이제 application.yaml을 수정할 차례다.
8080은 Gateway가 고정으로 사용중이니, Gateway의 라우팅 설정에 맞게 8081 로 포트를 수정한다

user 정보 저장을 위해 DB설정도 해준다.


그리고 여기가 중요하다.
keycloak에서 user-service라는 client-id를 통해 user 생성 권한을 받아와 사용할 것이다.
여기서 secret은 이전 keycloak에서 유저 생성 후 복사하였던 그 시크릿이다.

여기서 Client Secret 이곳의 정보를 집어넣는다.
렘과 client-id 또한 맞춰야 하니, 수정하였다면 맞게 수정하면 된다.
마지막으로 notification의 url이 있다.
이건 회원가입시 이메일 인증을 위한 정보가 필요하기에 넣은 것으로, 차후 메시지큐 서비스등을 사용한다면 삭제하여도 좋은 옵션이다.
이제 필요한 폴더와 파일을 먼저 만들겠다.
깃허브에서 자세한 내용을 확인할 수 있지만, db모델을 정리한 model 폴더, record를 통해 요청/응답 타입을 정의한 dto, controller, service, config 등이 있다.
여기서 주의깊게 볼 것 몇개만 따로 보겠다.
[회원가입 플로우]
사용자 이메일 인증 완료 -> 중복 체크 -> keycloak 유저 생성 -> DB 프로필 저장

여기서 사용을 위해 application.yaml에 notification을 정의했다. 
사용자의 인증 토큰을 검사하는 로직을 notification 에 요청한다.
아직 notification 이 없지만, 이미 기작성 되어 있으므로 걱정할 필요 없다.
이렇게 사용자 이메일 인증이 완료 되었다면 중복 체크 후에 유저를 생성한다.

여기서 유저 생성에 중요한 포인트는 keycloakAdminService에서 createUser의 반환 타입이 UUID라는 것이다.
keycloak에서 유저 생성 후 유저의 ID값은 UUID로 생성된다. 그 값을 리턴 받아 그대로 postgresql의 id값으로 유저를 생성하면, 인증과 프로필 DB는 분리되어 있지만 ID는 동일한 효과를 누릴 수 있다.
참고로 keycloakAdminService는 다음처럼 되어있다.

다음으로 중요한 것은 user 도메인이 keycloak에 어떻게 회원 생성 권한을 얻었는가 이다.
이전에 keycloak에서 user-service client를 만들고 secret을 application.yaml에 넣었었다.
당연히 그 권한을 통해 비니지스 로직을 수행하며, 매 요청마다 admin 토큰을 발급받아 사용한다.

그리고 Controller에 보면 별도의 보안 로직이 있는게 아니라,그냥 X-User-Id 를 헤더로 받아 사용함을 알 수 있다.
즉, jwt에 대한 별도의 인증 로직을 버리고, SCG가 주는 헤더를 전적으로 신뢰하겠다는 것이다.

'개발 > Spring boot' 카테고리의 다른 글
Keycloak, React, Spring Boot 연동 : 연동 확인 (0) 2026.06.06 Keycloak, React, Spring Boot 연동: Notification 서비스 생성 (1) 2026.06.06 Keycloak, React, Spring Boot 연동: SCG(Spring Cloud Gateway) 생성하기 (1) 2026.06.06 Keycloak, React, Spring Boot 연동: DB 생성하기 (0) 2026.06.06 Spring boot - Spring Cloud Gateway(SCG) 란? (0) 2026.06.02 댓글
