Skip to content

refactor: 로그인 회원 id를 @LoginMemberId 리졸버로 받는다 - #147

Merged
ff1451 merged 2 commits into
mainfrom
refactor/login-member-id
Oct 16, 2026
Merged

ff1451 merged 2 commits into
mainfrom
refactor/login-member-id

Conversation

@ff1451

@ff1451 ff1451 commented Oct 16, 2026

Copy link
Copy Markdown
Contributor

#141(테스트 인프라) 위에 쌓인 PR이다. #141이 머지되면 base가 main으로 바뀐다.

요약

동작을 바꾸지 않는 리팩토링. 컨트롤러 20개와 Swagger *Api 인터페이스에 @AuthenticationPrincipal Jwt jwt + Long.valueOf(jwt.getSubject())가 53번, 같은 일을 하는 private Long memberId(Jwt) 헬퍼가 4개 흩어져 있었다.

변경

  • auth/security/LoginMemberId(어노테이션) + LoginMemberIdArgumentResolver + global/config/WebMvcConfig(등록).
    • @LoginMemberId Long loginMemberId — @AuthenticationPrincipal과 같이 인증 정보의 principal(Jwt)에서 subject를 읽는다. 인증이 없으면 401(AuthExceptionType.UNAUTHORIZED). 이전에는 그 경우 NPE로 500이었지만, 해당 경로는 Security에서 이미 인증을 요구하므로 실제로는 도달하지 않는다.
    • @LoginMemberId(required = false) — 비로그인 허용인 GET /v1/reservations/daily에서 null.
  • 파라미터 이름은 loginMemberId로 통일했다. 경로 변수 memberId를 함께 받는 메서드(부원 배정 해제 등)와 이름이 겹치지 않게 하려는 것이다.
  • 비밀번호 버전 클레임(pwv)이 필요한 MemberController의 초기 설정 2개 메서드만 Jwt를 함께 받는다.
  • SpringDocUtils.addAnnotationsToIgnore(LoginMemberId.class) — 문서에 요청 파라미터로 나오지 않는다(이전 @Parameter(hidden = true)와 같은 결과).

테스트

  • ApiDocsIntegrationTest: /v3/api-docs에 loginMemberId·viewerMemberId·jwt 파라미터가 없다. 리팩토링 전 코드에서도 통과해 문서가 바뀌지 않았음을 확인했다.
  • 비로그인 일별 조회, 초기 설정 흐름은 기존 통합 테스트로 확인.
  • 로컬 전체 ./gradlew test: 533건 중 532 통과, 1 스킵.

컨트롤러 20개와 Swagger 인터페이스에 Long.valueOf(jwt.getSubject())가 53번,
같은 일을 하는 private memberId(Jwt) 헬퍼가 4개 흩어져 있었다.

- @LoginMemberId Long loginMemberId 파라미터로 바꾸고, 리졸버가 인증 정보의 Jwt subject를 읽는다.
  비로그인 허용 엔드포인트(일별 예약)는 required = false로 null을 받는다.
- 비밀번호 버전 클레임(pwv)이 필요한 초기 설정 2개 메서드만 Jwt를 함께 받는다.
- 문서에는 이 파라미터를 노출하지 않는다(이전 @parameter(hidden = true)와 같은 결과).
@coderabbitai

coderabbitai Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 59 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 50fbc400-917b-453f-8480-f9d184f9097b
📥 Commits

Reviewing files that changed from the base of the PR and between be02c09 and 343e485.

📒 Files selected for processing: 45
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/auth/security/LoginMemberId.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/auth/security/LoginMemberIdArgumentResolver.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/curriculum/controller/AdminCurriculumApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/curriculum/controller/AdminCurriculumController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/curriculum/controller/AdminCurriculumSetApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/curriculum/controller/AdminCurriculumSetController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/curriculum/controller/AdminCurriculumWeekApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/curriculum/controller/AdminCurriculumWeekController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/curriculum/controller/AdminTopicApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/curriculum/controller/AdminTopicController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/curriculum/controller/AdminWeekApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/curriculum/controller/AdminWeekController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/game/controller/AdminGameApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/game/controller/AdminGameBuildApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/game/controller/AdminGameBuildController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/game/controller/AdminGameController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/game/controller/AdminGameMemberApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/game/controller/AdminGameMemberController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/global/config/SwaggerConfig.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/global/config/WebMvcConfig.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/home/controller/AdminRecruitLinkApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/home/controller/AdminRecruitLinkController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/ledger/controller/AdminDuesApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/ledger/controller/AdminDuesController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/ledger/controller/AdminDuesExemptionApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/ledger/controller/AdminDuesExemptionController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/ledger/controller/AdminDuesNotificationApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/ledger/controller/AdminDuesNotificationController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/ledger/controller/AdminLedgerApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/ledger/controller/AdminLedgerController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/ledger/controller/AdminLedgerImportApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/ledger/controller/AdminLedgerImportController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/member/controller/MemberApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/member/controller/MemberController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/reservation/controller/MyReservationApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/reservation/controller/MyReservationController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/reservation/controller/ReservationApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/reservation/controller/ReservationController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/reservation/controller/ReservationGroupApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/reservation/controller/ReservationGroupController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/track/controller/AdminTrackPageApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/track/controller/AdminTrackPageController.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/track/controller/AdminTrackPageMemberApi.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/track/controller/AdminTrackPageMemberController.java
  • src/test/java/com/bcsdlab/bcsdinternalapiv2/global/ApiDocsIntegrationTest.java
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ff1451
ff1451 changed the base branch from refactor/test-infra to main October 16, 2026 07:07
@ff1451
ff1451 merged commit b3af697 into main Oct 16, 2026
2 checks passed
@ff1451
ff1451 deleted the refactor/login-member-id branch October 16, 2026 08:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant