Conversation
- `application-prod.yml`, `application-alpha.yml`에 `project.logging.env` 추가 - Logback 설정 간소화 및 기본 설정 파일(`base-logback.xml`) 포함 - `GlobalExceptionHandler`에서 예외 처리 시 로그 수준 분리 (4xx는 info, 기타는 error)
- API 명세 문서 작성 및 저장소에 추가(`docs/api-명세서.md`) - GitHub Pages 경로(`/api-명세서/`) 설정 및 문서화 - 저장소 디렉토리 구조 및 실행 가이드 갱신
- `/api/v2/auth/*/login` 경로 및 컨트롤러(SocialLoginV2Controller) 추가 - X-Client-Id 헤더 기반 응답 분기를 통해 웹/앱 클라이언트 지원 - OAuth 제공자별 Google, Kakao, Naver 소셜 로그인 V2 API 구현 - SecurityConfig에서 V2 로그인 경로 추가 - SocialLoginResponseDto 클래스 추가를 통한 앱 응답 전용 DTO 제공 - AuthController에 AT/RT 처리 방식 개선 (웹/앱 구분 로직 추가) - deploy.yml 경로 설정에 문서 변경 무시 규칙 추가
- AT/RT 처리 로직에서 사일런트 리프레시 분리 및 재사용성 강화 - 토큰 유효 여부, 만료 처리 방식 변경 및 관련 로직 최적화 - 웹/앱 클라이언트 구분에 따른 쿠키/헤더 처리 방식 개선 - 서비스 응답 헤더 설정 로직 리팩토링
- Google Credential Manager에서 발급받은 ID Token 검증 로직 구현 - 자체 JWT 발급 및 Google ID Token 검증 처리 로직 추가 - `GoogleAppLoginService` 클래스 및 관련 엔티티, 예외 처리 로직 구성 - 로그 추가를 통해 인증 및 검증 흐름 추적 가능
- Google ID Token 검증 과정에서 불필요한 X-Client-Id 헤더 제거 - 관련 API 명세 문서에서 X-Client-Id 헤더 설명 삭제 - 컨트롤러 메서드 파라미터 수정 및 필요 없는 코드 정리
- `/api/v1/auth/google/login/app` 경로 SecurityConfig에 추가 - Google ID Token 기반 로그인 지원 강화
- `/internal-api/**` 경로 SecurityConfig에 허용 추가 (X-Internal-Secret으로 보호) - `application.yml`에 INTERNAL_API_SECRET 환경 변수 설정 추가
- `/internal-api/v1/members/{userId}` 경로 및 컨트롤러 추가
- 요청 헤더(X-Internal-Secret)를 통한 인증 및 내부 API 접근 보호
- 회원 정보(userId, email, nickname) 응답 DTO 구성
- 서비스 호출 및 예외 처리 로직 구현
- `MemberService`에 SLF4J 로거 추가 및 주요 메서드에 디버그/워닝/에러 로그 추가 - `GlobalExceptionHandler`에서 예상하지 못한 예외 발생 시 스택 트레이스를 포함한 에러 로그 출력 - `InternalMemberController`에 로거 추가 및 요청/응답 과정 로그 기록 - 내부 API 인증 실패 시 워닝 로그 추가 및 검증 흐름 로그 개선
- 기존 `X-Client-Id` 헤더 제거 및 `X-Client-Type` 헤더로 변경 - API Gateway를 통한 클라이언트 타입 기반 웹/앱 구분 로직 개선
* feat: 네이버 소셜로그인 시 전화번호 저장 및 user-info 응답 추가 네이버 UserInfo 응답의 mobile 값을 하이픈 제거 형태로 정규화하여 회원 전화번호로 저장하고, user-info 응답(공개/내부)에 내려준다. - OAuthUser에 phoneNumber 필드 추가 (기본값 null로 타 provider 영향 없음) - NaverUserInfoResponse.getNormalizedMobile()로 "010-1234-5678" -> "01012345678" 정규화 - NaverOAuthClient가 mobile을 OAuthUser.phoneNumber로 매핑 - MemberEntity.phoneNumber를 var로 변경, createSocialMember 파라미터 및 updatePhoneNumber() 추가 - SocialLoginMemberProcessor: 신규 회원 저장 및 재로그인 시 최신 값으로 갱신 - MemberService.UserInfoResult, UserInfoResponseDto, 내부 UserInfoResponse에 phoneNumber 추가 또한 InternalMemberController의 클래스 레벨 @RequestMapping prefix를 제거하고 메서드에 전체 경로(/internal-api/v1/members/{userId})를 명시하도록 정리한다. * test: 전화번호 기능 단위 테스트 추가 및 기존 단위 테스트 API 정합성 수정 - NaverUserInfoResponseTest: mobile 정규화 검증 (신규) - SocialLoginMemberProcessorTest: 신규 저장/재로그인 갱신/mobile 없을 때 유지 검증 (신규) - MemberServiceTest, MemberEntityTest: phoneNumber 관련 검증 추가 - JwtProviderTest, AuthServiceTest, JwtPropertiesBindingTest: 현재 시그니처 (Role 제거, memberStatsService 추가, createAccessToken extraClaims)에 맞게 수정 integration 테스트는 별도 수정이 필요해 이 커밋에서 제외한다.
# Conflicts: # src/main/kotlin/com/wq/auth/api/controller/internal/InternalMemberController.kt
소셜 로그인 콜백 등 cross-site에서 시작된 최상위 네비게이션에서 Strict 쿠키가 전송되지 않아 로그인 직후 expired 리다이렉트가 발생. Lax는 최상위 GET 네비게이션에 쿠키를 허용해 이를 해결한다.
* test: Spring Boot 4·kotest 6 테스트 인프라 마이그레이션
- kotest-extensions-spring을 kotest 6 좌표(io.kotest:kotest-extensions-spring)로 교체, SpringExtension 인스턴스화 방식으로 전환
- spring-boot-webmvc-test 의존성 추가(SB4에서 @WebMvcTest/@AutoConfigureMockMvc 분리)
- JacksonTimeConfig를 Jackson 3.x(tools.jackson.*) ValueSerializer/Deserializer로 포팅(SB4 Instant 직렬화 복구)
- @WebMvcTest 슬라이스용 인증 헬퍼(WebMvcTestSecurityConfig) 추가 및 컨트롤러 의존성 목 정합성 수정
- 제거된 Role enum 참조를 통합 테스트에서 정리
- springdoc.swagger-ui.path에 기본값 부여(테스트 컨텍스트 로딩 복구)
- 로그인/토큰 재발급 시 app 클라이언트에는 쿠키 미발급(바디 토큰 사용)로 정합성 확보
* feat: 회원탈퇴(계정 즉시 삭제) API 구현
- DELETE /api/v1/auth/members/me 추가(@AuthenticatedApi, 본인 계정 즉시 삭제)
- MemberService.withdraw: 감사기록 저장 후 refresh_token→auth_provider→member 순으로 하드 삭제(FK 안전), 이미 탈퇴 시 멱등 처리
- web 클라이언트는 accessToken/refreshToken 쿠키 만료, app은 토큰 폐기
- MemberWithdrawalAuditEntity 추가(opaqueId·시각·출처만, PII 미포함)
- AuthProviderRepository/RefreshTokenRepository에 deleteByMember 추가
- 기존 무인증 DELETE /api/v1/members/{id} 및 MemberService.delete 제거
- 단위/통합 테스트 추가(삭제 순서·멱등성·web/app 쿠키 분기·미인증 401)
* chore: actuator health 엔드포인트 및 로깅 프로파일 설정 추가 - spring-boot-starter-actuator 의존성 추가, /actuator/health 노출(show-details never, probes 활성화) - logback: alpha/prod는 JSON 파일+stdout(Alloy 수집), local은 plain text 콘솔 프로파일 분리 * docs: 문서 정리 (옛 가이드 정리 및 README 축소) - 흩어진 옛 가이드 6종 제거(API Gateway/공통응답/CORS/ENV/OAuth redirect/소셜로그인 스펙) - README를 핵심 위주로 축소 - GITHUB-ENVIRONMENTS, google-login 가이드 추가
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
개요
dev에 누적된 변경을 main으로 반영하는 릴리스 PR입니다.
주요 변경 (머지된 PR 기준)
DELETE /api/v1/auth/members/me(본인 계정 즉시 하드 삭제), 감사 로그(PII 없음), 무인증 delete 제거검증
./gradlew build통과(컴파일 + 테스트).참고