Skip to content

[Chore] Swagger 문서 도메인 단위로 재정리 + auth/users 설명 보강#63

Merged
LeeJeongHeon02 merged 1 commit into
devfrom
chore/swagger-reorganization
Jul 21, 2026
Merged

[Chore] Swagger 문서 도메인 단위로 재정리 + auth/users 설명 보강#63
LeeJeongHeon02 merged 1 commit into
devfrom
chore/swagger-reorganization

Conversation

@LeeJeongHeon02

Copy link
Copy Markdown
Contributor

Summary

요청 사항 3가지를 처리했다.

1) 홈 대시보드 API 통합 (스캐터링 해결)

"캠페인 대시보드", "평균 시청시간·성별연령·시간대 노출도", "깔대기 그래프", "노출·주목 흐름
그래프" — 4개 태그로 흩어져 있던 홈 대시보드 조회 API 9개(전부 /api/v1/dashboard/campaigns/**)를
"홈 대시보드" 태그 하나로 합쳤다. 각 Docs 인터페이스가 서로 다른 패키지(campaign/vision)에
있어서 코드 구조상 갈라져 있었지만, 실제로는 같은 화면의 카드들이라 Swagger에서는 한 곳에
모이게 했다. 태그 통합 과정에서 개별 태그 설명에만 있던 정보(평균 시청시간 등 3개 API가
파라미터 틀을 공유한다는 점)는 유실되지 않게 각 Operation 설명으로 옮겼다.

2) 도메인 단위 정리 — 태그 순서 고정

springdoc이 컨트롤러를 스캔하는 순서는 예측할 수 없어 Swagger UI에서 도메인이 뒤섞여 보였다.
SwaggerConfigOpenApiCustomizer 빈을 추가해 태그 순서를 다음과 같이 고정했다:

인증 → 사용자 → 팀 → 팀원 관리 → 사업자등록증 → 매체 → 캠페인 등록 → 캠페인 페이지 → 홈 대시보드 → 유동인구 적재(관리자)

기존에 이미 잘 나뉘어 있던 태그(팀/팀원 관리/사업자등록증, 캠페인 등록/캠페인 페이지 등)는
그대로 두고 순서만 도메인 흐름에 맞게 정렬했다.

3) auth/users API 설명 보강

AuthTokenController(토큰 재발급), LogoutController(로그아웃), UserController(내 정보 조회)
3개 컨트롤러가 이 코드베이스의 다른 모든 컨트롤러와 달리 Docs 인터페이스가 아예 없어서 Swagger에
@Tag@Operation 설명도 없이 노출되고 있었다(springdoc 기본 fallback으로만 표시됨). 각각
XControllerDocs 인터페이스를 새로 만들어 다음을 문서화했다:

  • 토큰 회전(rotation)과 재사용 탐지 시 token_family_id 전체 폐기 로직
  • TrustedOriginValidator의 CSRF 방어(Origin/Referer 검증)
  • 두 엔드포인트(재발급/로그아웃)가 ApiResponse 봉투를 쓰지 않고 ResponseEntity를 직접
    반환하는 이유(Set-Cookie 헤더로 Refresh Token 쿠키를 실어야 함)
  • 카카오 로그인 자체는 Spring Security OAuth2 필터 체인이 처리하는 리다이렉트라 Swagger에
    나타나지 않는다는 점(왜 "로그인" 엔드포인트가 안 보이는지 설명)

Test plan

  • 순수 문서화 변경 — 기존 테스트 전부 그대로 통과 (309개, 0 실패)
  • 로컬 서버를 띄워 /v3/api-docs를 직접 호출해 확인:
    • 태그 배열이 의도한 순서·설명대로 나오는지 (10개 태그, 중복 없음)
    • 대시보드 9개 엔드포인트가 전부 "홈 대시보드" 태그 하나로 모였는지
    • 신규 auth/users 3개 엔드포인트에 summary/description/responses가 제대로 채워졌는지
    • 앱이 정상 기동하고(OOM 없음) 스키마가 문제없이 생성되는지

🤖 Generated with Claude Code

## 대시보드 API 통합
캠페인 대시보드, 평균 시청시간·성별연령·시간대 노출도, 깔대기 그래프, 노출·주목
흐름 그래프 - 4개 태그로 흩어져 있던 홈 대시보드 조회 API 9개(전부
/api/v1/dashboard/campaigns/** 아래)를 "홈 대시보드" 태그 하나로 합쳤다. 각
Docs 인터페이스가 서로 다른 패키지(campaign/vision)에 있었지만 같은 화면의
카드들이라 Swagger에서는 한 곳에 모이게 했다. 태그 통합 과정에서 개별 태그
설명에만 있던 정보(3개 API가 파라미터 틀을 공유한다는 점)는 각 Operation
설명으로 옮겨 유실되지 않게 했다.

## 태그 순서 고정
springdoc이 컨트롤러를 스캔하는 순서는 예측할 수 없어 Swagger UI에서 도메인이
뒤섞여 보였다. SwaggerConfig에 OpenApiCustomizer 빈을 추가해 태그 순서를
고정했다: 인증 → 사용자 → 팀 → 팀원 관리 → 사업자등록증 → 매체 → 캠페인 등록 →
캠페인 페이지 → 홈 대시보드 → 유동인구 적재(관리자).

## auth/users API 문서 보강
AuthTokenController(토큰 재발급), LogoutController(로그아웃), UserController
(내 정보 조회) 3개 컨트롤러가 이 코드베이스의 다른 모든 컨트롤러와 달리
Docs 인터페이스가 아예 없어서 Swagger에 @tag@operation 설명도 없이 노출되고
있었다. 각각 XControllerDocs 인터페이스를 새로 만들어 토큰 회전/재사용 탐지,
CSRF 방어(TrustedOriginValidator), 응답이 ApiResponse 봉투를 쓰지 않는 이유
(Set-Cookie 헤더 필요) 등을 문서화했다.

로컬 서버로 실제 /v3/api-docs를 호출해 태그 순서·설명·엔드포인트 그룹핑이
의도대로 나오는지 확인했다. 순수 문서화 변경이라 기존 테스트는 전부 그대로
통과한다(309개, 0 실패).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@LeeJeongHeon02, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 3 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: c794c67b-ce98-43e5-a5b1-b9466770d482

📥 Commits

Reviewing files that changed from the base of the PR and between 19fef8c and 4b5edf8.

📒 Files selected for processing (11)
  • src/main/java/com/shinhan/klljs/domain/auth/controller/AuthTokenController.java
  • src/main/java/com/shinhan/klljs/domain/auth/controller/AuthTokenControllerDocs.java
  • src/main/java/com/shinhan/klljs/domain/auth/controller/LogoutController.java
  • src/main/java/com/shinhan/klljs/domain/auth/controller/LogoutControllerDocs.java
  • src/main/java/com/shinhan/klljs/domain/campaign/controller/DashboardCampaignControllerDocs.java
  • src/main/java/com/shinhan/klljs/domain/user/controller/UserController.java
  • src/main/java/com/shinhan/klljs/domain/user/controller/UserControllerDocs.java
  • src/main/java/com/shinhan/klljs/domain/vision/controller/DashboardMetricsControllerDocs.java
  • src/main/java/com/shinhan/klljs/domain/vision/controller/FunnelControllerDocs.java
  • src/main/java/com/shinhan/klljs/domain/vision/controller/RealtimeGraphControllerDocs.java
  • src/main/java/com/shinhan/klljs/global/config/SwaggerConfig.java
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/swagger-reorganization

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.

@LeeJeongHeon02
LeeJeongHeon02 merged commit 096a2ff into dev Jul 21, 2026
1 of 2 checks passed
@LeeJeongHeon02
LeeJeongHeon02 deleted the chore/swagger-reorganization branch July 21, 2026 06:25
@LeeJeongHeon02 LeeJeongHeon02 changed the title chore: Swagger 문서 도메인 단위로 재정리 + auth/users 설명 보강 [Chore] Swagger 문서 도메인 단위로 재정리 + auth/users 설명 보강 Jul 21, 2026
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