ILOG
2025.10 — 2025.11
인증·사용자·그룹·API Gateway
6인 팀 · 네 서비스 단독 설계·구현
프로젝트 개요
일기와 일상을 기록하고 감정 분석 결과를 확인하는 서비스입니다. 인증·사용자·그룹·API Gateway 네 서비스를 단독 설계하고 구현했습니다.
주요 기능
- 일기 작성과 감정 분석 결과 확인
- 그룹을 통한 기록 공유
- Google 소셜 로그인
담당 범위
- 로그인과 토큰 발급·재발급, 로그아웃
- 내 정보 조회와 사용자 프로필 관리
- 그룹 생성·조회, 초대 코드와 그룹 참여
- 서비스 라우팅과 공통 인증 처리
- Java
- Spring Security
- Gateway
아키텍처
인증과 내부 서비스 요청 흐름
담당 · 청록색 테두리와 역할 레이블
- 브라우저에서 API Gateway로 서비스 요청을 보냅니다.
- API Gateway는 토큰 검증·공통 인증·라우팅을 담당합니다. Auth Service로 로그인·토큰 처리를 전달합니다.
- Auth Service와 Google은 OIDC 로그인으로 연결됩니다.
- API Gateway가 User Service와 Group Service에 검증된 사용자 식별자를 전달합니다.
- API Gateway·Auth Service·User Service·Group Service는 제가 담당했습니다. 세 경로의 Gateway는 같은 진입점입니다.
API Gateway가 서비스별 요청을 전달하고 쿠키의 액세스 토큰을 공개 키로 검증합니다. Auth Service는 Google 로그인과 토큰 발급을 맡습니다. User·Group Service는 Gateway가 전달한 사용자 식별자를 사용해 요청을 처리합니다.
네 서비스는 제가 담당했습니다. 일기·미디어와 AI 기능은 서비스 전체 구성에 포함되지만 이 도식은 제가 구현한 인증·사용자·그룹 요청 흐름에 집중합니다.
문제 해결
로그인 후 내 정보 조회가 다시 로그인으로 돌아가던 문제
- 문제
- Google 로그인 이후 내 정보를 조회하면 User Service가 다시 로그인 화면으로 돌려보냈습니다.
- 원인
- Gateway와 내부 서비스가 서로 다른 인증 방식을 적용하고 있었습니다. User Service의 폼 로그인과 세션 인증이 Gateway에서 검증한 요청을 그대로 처리하지 못했습니다.
- 해결
- 각 서비스에서 인증 객체를 생성하는 방법과 Gateway에서 공통 처리하는 방법을 검토했습니다. Gateway가 쿠키의 액세스 토큰을 공개 키로 검증하고 X-User-Id 헤더로 사용자 식별자를 전달하도록 했습니다. User Service의 폼 로그인과 세션 인증을 비활성화하고, User·Group Service가 검증된 식별자를 사용하도록 인증 경계를 정리했습니다.
Google 로그인에서 사용자 정보 처리가 실행되지 않던 문제
- 문제
- Google 로그인 후 기존 사용자 정보 처리 코드가 호출되지 않았습니다.
- 원인
- Google은 OIDC 방식으로 동작해 일반 OAuth2 사용자 정보 처리와 실행 경로가 달랐습니다.
- 해결
- OidcUserService 기반으로 사용자 정보 처리를 변경해 정보 저장과 로그인 성공 후 JWT 발급을 연결했습니다.
로그인 후 내부 서비스 주소로 이동하던 문제
- 문제
- 로그인 후 브라우저가 내부 주소인 auth-ms로 이동했습니다.
- 원인
- Gateway가 Auth Service로 요청을 전달하면서 Host 헤더가 내부 서비스 주소로 바뀌었습니다.
- 해결
- 인증 경로에 PreserveHostHeader 필터를 적용해 외부 요청의 Host를 유지했습니다.
결과
Google 로그인 동작 확인
수정 후 Google 로그인의 정상 동작을 직접 확인했습니다.
인증 예외 처리 확인
Gateway 테스트에서 인증 예외 경로, 토큰 누락과 비유효 토큰 처리를 확인했습니다.
검증 범위
유효 토큰의 Gateway 통과 테스트는 비활성화된 상태였습니다. Jenkins·EC2 배포와 운영은 담당하지 않았습니다.
회고 — 서비스 규모에 맞는 선택
팀에서는 프로젝트 규모에 비해 MSA가 과하다는 의견이 있었습니다. 저는 인증 서비스와 Gateway를 직접 구현해 보는 방향을 제안했습니다. 프로젝트를 마친 뒤에는 기술적 도전과 함께 팀과 서비스 규모에 맞는 선택인지 검토해야 한다는 점을 배웠습니다.
