Skip to content

Conversation

@kyeoungwoon
Copy link
Member

@kyeoungwoon kyeoungwoon commented Jan 4, 2026

✅ 체크리스트

  • merge 타겟 브랜치 잘 설정되었는지 확인하기 (fe/dev, be/dev)

🔥 연관 이슈

해결되는 Issue의 경우 closes나 resolves 키워드를 사용해주세요.

🚀 작업 내용

  1. QueryDSL이 빌드되는 경로가 올바르지 않은 문제를 수정했습니다.
  2. 도메인명 변경에 따른 문서 변경을 적용했습니다. (user -> member)

💬 리뷰 중점사항

코드 중에서 특별히 고려하였거나 토론하고 싶은 부분이 있다면 명시해주세요.

📃 관련 문서

Team Document Hub나 Wiki에 작성한 문서가 있다면 링크를 첨부해주세요.

Summary by CodeRabbit

릴리스 노트

  • Refactor

    • 도메인 구조 개선: 사용자 참조 방식 변경으로 도메인 계층 분리 강화
  • Chores

    • 빌드 도구 최적화: 문서 생성 플러그인 제거 및 쿼리 생성 라이브러리 설정 추가
    • 도메인 목록 확장: 커리큘럼, 일정, 커뮤니티 등 새로운 도메인 영역 추가

✏️ Tip: You can customize this high-level summary in your review settings.

QueryDSL의 QClass 생성 경로를 변경하였습니다.
user->member 변경
SQL단 예약어 충돌 회피를 위함.
@kyeoungwoon kyeoungwoon self-assigned this Jan 4, 2026
Copilot AI review requested due to automatic review settings January 4, 2026 08:21
@coderabbitai
Copy link

coderabbitai bot commented Jan 4, 2026

📝 Walkthrough

Walkthrough

Challenger 도메인에서 User 참조를 Member로 리팩토링하고, Asciidoctor 플러그인을 제거하며 QueryDSL 빌드 디렉토리 구성 및 Jakarta Persistence 어노테이션 프로세싱을 추가했습니다.

Changes

Cohort / File(s) 변경 요약
도메인 및 컨트롤러 리팩토링
src/main/java/com/umc/domain/challenger/Challenger.java, src/main/java/com/umc/domain/challenger/ChallengerController.java, src/main/java/com/umc/domain/challenger/ChallengerCommandService.java, src/main/java/com/umc/domain/challenger/ChallengerQueryService.java
Challenger 엔티티의 private User user 필드를 private Member member로 변경하고, 컨트롤러 메서드 파라미터와 서비스 내 지역 변수를 user에서 member로 일관되게 리네이밍. 커맨드 생성 시 member.getUserId() 사용
빌드 구성 업데이트
build.gradle.kts
Asciidoctor Gradle 플러그인 (org.asciidoctor.jvm.convert) 제거 및 관련 설정 삭제. QueryDSL 생성 디렉토리 구성 추가 (generated/querydsl), 소스셋 및 컴파일 옵션 설정, 클린 태스크에 정리 로직 추가. jakarta.persistence:jakarta.persistence-api 어노테이션 프로세서 의존성 추가
문서 업데이트
.github/copilot-instructions.md, CLAUDE.md, docs/패키지_구분_방식.md
도메인 참조 예제를 user에서 member로 업데이트 및 패키지 구분 방식 문서에서 "user" 항목을 "member"로 대체. curriculum, schedule, community, notice, common, global 도메인 추가

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • ParkSenn

Poem

🐰 회원이라 일컬어, 유저 대신에,
빌드는 깔끔히 정돈하고나,
QueryDSL 설정 또한 마련했거늘,
도메인 구분도 명확히 하니,
깃과 코드 모두 반짝반짝하네! ✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning PR에는 이슈 #20의 범위를 벗어나는 변경사항들이 포함되어 있습니다. Challenger 엔티티의 User에서 Member로의 도메인 변경 및 Controller 메서드 시그니처 변경 등이 이슈 범위와 무관합니다. QueryDSL 빌드 경로 설정 관련 변경만 유지하고, Challenger 도메인 리팩토링 변경사항들(user→member)은 별도의 PR로 분리하세요.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 변경 사항 일부만 다루고 있습니다. build.gradle.kts 수정은 언급하지만, 도메인 이름 변경(user → member) 및 문서 업데이트는 제목에 반영되지 않았습니다.
Description check ✅ Passed PR 설명이 필수 템플릿 구조를 따르고 있으며, 연관 이슈, 작업 내용, 체크리스트를 포함하고 있습니다. 주요 변경 사항들이 명확하게 나열되어 있습니다.
Linked Issues check ✅ Passed PR의 변경 사항들(build.gradle.kts의 QueryDSL 빌드 경로 설정, 문서 업데이트)이 이슈 #20의 'QClass 빌드 디렉토리 설정' 요구사항을 충족하고 있습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e9ed83f and 562f7a5.

📒 Files selected for processing (4)
  • .github/copilot-instructions.md
  • CLAUDE.md
  • build.gradle.kts
  • docs/패키지_구분_방식.md
🧰 Additional context used
🧠 Learnings (11)
📓 Common learnings
Learnt from: CR
Repo: UMC-PRODUCT/umc-product-server PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2026-01-03T02:21:30.968Z
Learning: All Copilot code review comments and PR overview descriptions must be written in Korean language
Learnt from: CR
Repo: UMC-PRODUCT/umc-product-server PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-03T02:22:12.643Z
Learning: Applies to **/domain/*.java : Use Entity naming convention: `{Domain}` (e.g., `User`, `Challenger`, `Notice`)
📚 Learning: 2026-01-03T02:22:12.643Z
Learnt from: CR
Repo: UMC-PRODUCT/umc-product-server PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-03T02:22:12.643Z
Learning: Applies to **/domain/*.java : Use Entity naming convention: `{Domain}` (e.g., `User`, `Challenger`, `Notice`)

Applied to files:

  • CLAUDE.md
  • .github/copilot-instructions.md
📚 Learning: 2026-01-03T02:21:30.968Z
Learnt from: CR
Repo: UMC-PRODUCT/umc-product-server PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2026-01-03T02:21:30.968Z
Learning: Applies to **/domain/**/Challenger.java : Domain Entity class should use `NoArgsConstructor(access = AccessLevel.PROTECTED)` to protect object instantiation

Applied to files:

  • CLAUDE.md
  • .github/copilot-instructions.md
📚 Learning: 2026-01-03T02:22:12.643Z
Learnt from: CR
Repo: UMC-PRODUCT/umc-product-server PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-03T02:22:12.643Z
Learning: Applies to **/application/port/in/query/*UseCase.java : Use Query UseCase naming convention: `Get{Domain}UseCase` (e.g., `GetChallengerUseCase`)

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-01-03T02:22:12.643Z
Learnt from: CR
Repo: UMC-PRODUCT/umc-product-server PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-03T02:22:12.643Z
Learning: Applies to **/application/port/in/command/*UseCase.java : Use action verb 'Register' for user/challenger registration use cases (e.g., `RegisterUserUseCase`, `RegisterChallengerUseCase`)

Applied to files:

  • CLAUDE.md
  • .github/copilot-instructions.md
📚 Learning: 2026-01-03T02:22:12.643Z
Learnt from: CR
Repo: UMC-PRODUCT/umc-product-server PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-03T02:22:12.643Z
Learning: Applies to **/adapter/**/*.java : Do not manage transactions in Adapter classes; transaction management should be exclusively in Service classes

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-01-03T02:21:30.968Z
Learnt from: CR
Repo: UMC-PRODUCT/umc-product-server PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2026-01-03T02:21:30.968Z
Learning: Applies to **/application/service/**Command.java : Command UseCase object should be a record type with appropriate validation in the compact constructor, such as `RegisterChallengerCommand`

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2026-01-03T02:22:12.643Z
Learnt from: CR
Repo: UMC-PRODUCT/umc-product-server PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-03T02:22:12.643Z
Learning: Applies to **/application/port/in/command/*UseCase.java : Use Command UseCase naming convention: `{Action}{Domain}UseCase` (e.g., `RegisterChallengerUseCase`)

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2026-01-03T02:21:30.968Z
Learnt from: CR
Repo: UMC-PRODUCT/umc-product-server PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2026-01-03T02:21:30.968Z
Learning: Applies to **/adapter/in/**Controller.java : RestController method parameter should use `AuthenticationPrincipal` to receive authenticated user information instead of accepting userId from Request body

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2026-01-03T02:21:30.968Z
Learnt from: CR
Repo: UMC-PRODUCT/umc-product-server PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2026-01-03T02:21:30.968Z
Learning: Applies to **/adapter/out/**Repository.java : Repository query should use Fetch Join or batch loading to prevent N+1 query problems when loading related data

Applied to files:

  • .github/copilot-instructions.md
📚 Learning: 2026-01-03T02:22:12.643Z
Learnt from: CR
Repo: UMC-PRODUCT/umc-product-server PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-03T02:22:12.643Z
Learning: Applies to **/adapter/out/persistence/*QueryRepository.java : Use QueryDSL for complex database queries instead of native SQL to maintain type safety

Applied to files:

  • build.gradle.kts
🔇 Additional comments (9)
docs/패키지_구분_방식.md (1)

27-27: LGTM! 도메인명 변경이 문서에 정확히 반영되었습니다.

SQL 예약어 충돌을 피하기 위한 usermember 도메인명 변경이 문서에 올바르게 반영되었습니다.

build.gradle.kts (4)

33-42: LGTM! QueryDSL 생성 경로 설정이 올바릅니다.

생성된 Q클래스가 build/generated/querydsl 디렉토리에 위치하도록 설정되었으며, 이는 Gradle 표준 관행에 부합합니다. 소스 세트에도 적절히 포함되었습니다.


48-52: LGTM! clean 태스크 설정이 적절합니다.

생성된 QueryDSL 디렉토리를 clean 태스크에서 삭제하도록 설정한 것은 올바른 접근입니다.


78-79: 이 의존성은 필요하며 제거하면 안 됩니다.

jakarta.persistence-apiannotationProcessor로 추가한 것은 올바른 설정입니다.

QueryDSL APT 프로세서가 JPA 어노테이션(@Entity, @Table 등)을 읽고 해석하려면 컴파일 시간에 이러한 어노테이션 정의에 접근해야 하며, 이를 위해 jakarta.persistence-api가 annotation processor 클래스패스에 명시적으로 필요합니다. 이는 line 76의 jakarta.annotation-api 추가와 동일한 패턴이며, annotation processor가 필요한 의존성을 명확히 선언하는 모범 사례입니다. 이 의존성이 없으면 Q 클래스 생성이 실패할 수 있습니다.


44-46: QueryDSL 설정은 표준적이고 올바릅니다.

generatedSourceOutputDirectory는 모든 annotation processor가 생성된 파일을 작성할 위치를 지정하는 표준 메커니즘입니다. QueryDSL APT는 이 설정을 존중하여 Q클래스를 지정된 디렉토리에 생성합니다. 이는 충돌이 아니라 올바른 구성입니다.

현재 설정은 다음과 같이 올바르게 작동합니다:

  • generatedSourceOutputDirectory로 annotation processor 출력 디렉토리 지정
  • sourceSets에 생성 디렉토리 추가하여 컴파일 시 포함
  • QueryDSL APT와 Lombok이 동일 디렉토리에 생성 (정상 동작)
CLAUDE.md (2)

102-128: LGTM! 도메인 의존성 문서가 정확히 업데이트되었습니다.

usermember 도메인명 변경이 도메인 리스트와 의존성 다이어그램에 일관되게 반영되었습니다.


351-395: 이 리뷰 의견은 부정확합니다. 문서에 표시된 패턴은 의도된 정상적인 설계입니다.

코드 예제의 변수명 member와 메서드명 getUserId() 간의 "불일치"는 실제로는 의도된 네이밍 컨벤션입니다:

  • 변수명 member: SecurityUser 파라미터의 로컬 변수로, 인증된 사용자가 현재 도메인의 멤버임을 명확히 합니다.
  • 메서드명 getUserId(): User 도메인 엔티티 용어를 보존하여 전체 코드베이스의 일관성을 유지합니다.

이는 로컬 변수명이 메서드/클래스명과 달라도 되는 일반적인 모범 사례이며, 제공된 learnings에서 지정한 패턴(Query UseCase 인터페이스, AuthenticationPrincipal SecurityUser)과도 일치합니다.

Likely an incorrect or invalid review comment.

.github/copilot-instructions.md (2)

81-81: LGTM! 안티패턴 예시가 정확합니다.

다른 도메인 Entity를 직접 참조하는 잘못된 패턴을 올바르게 예시로 제시하고 있습니다.


233-236: 변수명-메서드명 일관성 이슈가 CLAUDE.md와 동일하게 발견되었습니다.

이 파일의 코드 예제도 CLAUDE.md와 동일한 네이밍 불일치를 보입니다:

  • 변수명: member (Line 233)
  • 메서드명: getUserId() (Line 236)

CLAUDE.md Lines 351-395에 남긴 리뷰 코멘트를 참고하여 전체 문서에 대한 일관된 가이드라인을 수립해주세요.


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

@kyeoungwoon kyeoungwoon merged commit 77f3310 into develop Jan 4, 2026
4 of 5 checks passed
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

이 PR은 빌드 구성 파일을 개선하는 작업으로, 주로 QueryDSL Q클래스 생성 경로를 올바르게 설정하고, 프로젝트 문서의 도메인 용어를 일관되게 수정합니다.

  • QueryDSL 생성 파일 경로를 build/generated/querydsl로 명확히 설정하고 소스셋 및 clean 태스크와 통합
  • Spring REST Docs 관련 플러그인, 설정 및 의존성 전체 제거
  • 문서 파일에서 도메인 용어를 "user"에서 "member"로 일관되게 변경

Reviewed changes

Copilot reviewed 3 out of 4 changed files in this pull request and generated no comments.

File Description
build.gradle.kts QueryDSL 생성 경로 설정 추가, Spring REST Docs 완전 제거, jakarta.persistence-api 의존성 추가
CLAUDE.md 아키텍처 문서에서 "user" 도메인을 "member"로 용어 통일 (코드 예시 포함)
.github/copilot-instructions.md 코드 리뷰 가이드라인 문서에서 "user"를 "member"로 변수명 변경 (예시 코드)

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.

[Feat] QueryDSL 빌드 디렉토리 설정

2 participants