Skip to content

release: dev → main (회원탈퇴 API·SB4 마이그레이션·소셜로그인 개선 외) - #73

Merged
imeasy99 merged 18 commits into
mainfrom
dev
Aug 3, 2026
Merged

release: dev → main (회원탈퇴 API·SB4 마이그레이션·소셜로그인 개선 외)#73
imeasy99 merged 18 commits into
mainfrom
dev

Conversation

@imeasy99

@imeasy99 imeasy99 commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator

개요

dev에 누적된 변경을 main으로 반영하는 릴리스 PR입니다.

주요 변경 (머지된 PR 기준)

검증

  • dev 기준 ./gradlew build 통과(컴파일 + 테스트).

참고

  • 회원탈퇴는 현재 계정 전체 삭제 모델입니다. 서비스별 멤버십 기반 부분 탈퇴는 두 번째 소비 서비스 도입 시점의 후속 과제로 남아 있습니다.

imeasy99 added 18 commits April 6, 2026 11:59
- `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 가이드 추가
@imeasy99 imeasy99 self-assigned this Aug 3, 2026
@imeasy99 imeasy99 added the deploy label Aug 3, 2026
@imeasy99
imeasy99 merged commit 816eadd into main Aug 3, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant