-
Notifications
You must be signed in to change notification settings - Fork 0
StudyMember TestCode #130
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
StudyMember TestCode #130
Conversation
Walkthrough빌드 의존성(QueryDSL 업그레이드 및 Testcontainers/commons 추가)과 함께 StudyMember 관련 매퍼에 null 검증이 추가되었고, 엔티티/매퍼/저장소/서비스에 대한 단위 및 통합 테스트가 새로 추가·리팩터링되었습니다. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 5
🧹 Nitpick comments (2)
techeerzip/src/test/java/backend/techeerzip/domain/studyMember/repository/StudyMemberDslRepositoryImplTest.java (1)
54-60: 불필요한@SuppressWarnings("unused")어노테이션 제거를 권장합니다.
entityManager와queryFactory필드는 실제로 코드에서 사용되고 있으므로@SuppressWarnings("unused")어노테이션이 필요하지 않습니다.- @SuppressWarnings("unused") @Autowired private EntityManager entityManager; - @SuppressWarnings("unused") @Autowired private JPAQueryFactory queryFactory;techeerzip/src/test/java/backend/techeerzip/domain/studyMember/entity/StudyMemberTest.java (1)
79-82:updatedAt검증 로직이 테스트 의도를 약하게 표현합니다.현재 조건
isAfter(beforeUpdate) || equals(beforeUpdate)는 사실상 모든 경우를 통과합니다. 단위 테스트 환경에서beforeUpdate가null일 가능성이 높으므로, 더 명확한 검증 방식을 고려해보세요.- if (beforeUpdate != null) { - assertTrue(studyMember.getUpdatedAt().isAfter(beforeUpdate) || - studyMember.getUpdatedAt().equals(beforeUpdate)); - } + // JPA 컨텍스트 없이는 updatedAt이 null일 수 있으므로 + // update 호출 후 updatedAt이 설정되었는지만 확인 + assertNotNull(studyMember.getUpdatedAt());동일한 패턴이 여러 테스트 메서드에서 반복되므로, 필요시 헬퍼 메서드로 추출하는 것도 좋습니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
techeerzip/build.gradle(2 hunks)techeerzip/src/test/java/backend/techeerzip/domain/studyMember/entity/StudyMemberTest.java(1 hunks)techeerzip/src/test/java/backend/techeerzip/domain/studyMember/mapper/StudyMemberMapperTest.java(1 hunks)techeerzip/src/test/java/backend/techeerzip/domain/studyMember/repository/StudyMemberDslRepositoryImplTest.java(1 hunks)techeerzip/src/test/java/backend/techeerzip/domain/studyMember/service/StudyMemberServiceTest.java(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-05-24T09:14:59.080Z
Learnt from: dongwooooooo
Repo: Techeer-Hogwarts/backend PR: 7
File: techeerzip/src/main/java/backend/techeerzip/domain/projectTeam/service/ProjectTeamService.java:680-680
Timestamp: 2025-05-24T09:14:59.080Z
Learning: 이 프로젝트에서는 이메일 필드가 데이터베이스 레벨에서 NOT NULL 제약조건을 가지며, 멤버 서비스에서 존재하지 않는 멤버에 대해서는 예외를 발생시키는 패턴을 사용한다. 따라서 이메일 관련 서비스 메서드들은 null을 반환하지 않으며, 별도의 null 체크가 불필요하다.
Applied to files:
techeerzip/src/test/java/backend/techeerzip/domain/studyMember/service/StudyMemberServiceTest.java
🧬 Code graph analysis (1)
techeerzip/src/test/java/backend/techeerzip/domain/studyMember/mapper/StudyMemberMapperTest.java (2)
techeerzip/src/main/java/backend/techeerzip/domain/studyMember/exception/StudyMemberBadRequestException.java (1)
StudyMemberBadRequestException(6-10)techeerzip/src/main/java/backend/techeerzip/domain/studyMember/mapper/StudyMemberMapper.java (1)
StudyMemberMapper(15-49)
🔇 Additional comments (18)
techeerzip/src/test/java/backend/techeerzip/domain/studyMember/mapper/StudyMemberMapperTest.java (5)
1-28: 테스트 클래스 구조가 잘 구성되어 있습니다.테스트에 필요한 임포트와 필드 선언이 적절하며, DisplayName을 활용한 한글 설명이 가독성을 높여줍니다.
29-79: 테스트 데이터 설정이 적절합니다.ReflectionTestUtils를 사용하여 ID를 설정하는 것은 단위 테스트에서 일반적인 패턴이며, 모든 필수 필드가 올바르게 초기화되어 있습니다.
81-121: toEntity 메서드 테스트가 충분합니다.isLeader의 true/false 케이스를 모두 커버하고 있으며, 생성된 엔티티의 모든 필드를 검증하고 있습니다.
181-226: null 파라미터 검증 테스트가 완벽합니다.세 가지 파라미터에 대한 null 검증을 각각 테스트하여 매퍼의 방어 로직을 충분히 검증하고 있습니다.
123-179: Java 21 is confirmed—thegetFirst()usage is appropriate and no changes are needed.The project is configured with
languageVersion = JavaLanguageVersion.of(21)in build.gradle, making thegetFirst()method (a SequencedCollection API) a valid and idiomatic choice for this codebase.The test is well-structured, comprehensively validating multiple member conversion and empty list scenarios with proper assertions.
techeerzip/src/test/java/backend/techeerzip/domain/studyMember/repository/StudyMemberDslRepositoryImplTest.java (6)
31-52: LGTM!Testcontainers 설정과
@DataJpaTest구성이 적절합니다.@AutoConfigureTestDatabase(replace = NONE)을 사용하여 실제 PostgreSQL 컨테이너를 활용하고,DynamicPropertySource로 데이터소스 속성을 올바르게 구성했습니다.
140-141: detached 엔티티 사용 패턴에 주의가 필요합니다.
entityManager.clear()호출 후studyTeam,user1,user2,user3는 detached 상태가 됩니다. 테스트 메서드에서 이 detached 엔티티들을 새로운StudyMember생성 시 참조로 사용하고 있습니다.현재는 ID가 이미 설정되어 있고 cascade 설정이 없다면 동작하지만, 엔티티 매핑이 변경되면 테스트가 깨질 수 있는 잠재적 취약점입니다. 대안으로
@BeforeEach에서clear()를 제거하거나, 각 테스트 메서드에서 필요 시 엔티티를 다시 조회하는 방식을 고려해 보세요.
144-212: LGTM!테스트 로직이 명확하고 잘 구성되어 있습니다. 결과 순서가 보장되지 않을 수 있으므로
stream().filter()를 사용하여 특정 지원자를 찾는 방식이 적절합니다.
214-312: LGTM!엣지 케이스에 대한 테스트 커버리지가 잘 구성되어 있습니다. soft delete 제외, 팀 필터링, 빈 결과 처리 등 다양한 시나리오를 명확하게 테스트하고 있습니다.
314-347: LGTM!
REJECT상태 지원자 제외 테스트가 잘 작성되어 있습니다.findManyApplicants메서드의 필터링 동작을 종합적으로 검증하고 있습니다.
246-246:getFirst()usage is compatible with the project's Java version.The project is configured to use Java 21 (
languageVersion = JavaLanguageVersion.of(21)intecheerzip/build.gradle), which includes theList.getFirst()method introduced in JDK 21. No changes are needed.techeerzip/src/test/java/backend/techeerzip/domain/studyMember/service/StudyMemberServiceTest.java (1)
91-127: 나머지 테스트 케이스들은 잘 작성되었습니다.
checkActiveMemberByTeamAndUser테스트: true/false 케이스를 명확히 검증applyApplicant테스트: 신규 생성, 기존 멤버 상태 변경, 이미 PENDING인 경우를 적절히 분리getApplicants테스트: 리스트 반환 및 빈 리스트 케이스 커버getMember테스트: Optional 존재/부재 케이스 커버given/when/then 구조와
@DisplayName활용이 적절합니다.Also applies to: 129-204, 318-370, 372-403
techeerzip/src/test/java/backend/techeerzip/domain/studyMember/entity/StudyMemberTest.java (4)
22-62: 설정 메서드 구현이 잘 되어있습니다.
@BeforeEach에서 테스트에 필요한StudyTeam,User,StudyMember객체들을 명확하게 초기화하고 있습니다. 각 엔티티의 필수 필드들이 적절히 설정되어 있어 테스트 격리가 잘 유지됩니다.
150-172: 상태 전이 테스트가 잘 구성되어 있습니다.
toActive(Boolean)메서드 테스트에서toReject()→softDelete()이후toActive(true)호출 시isLeader,status,isDeleted필드가 모두 올바르게 복원되는지 검증하고 있습니다. 복합적인 상태 전이 시나리오를 잘 다루고 있습니다.
275-298:isActive메서드의 복합 조건 테스트가 적절합니다.
isActive가isDeleted == false && status == APPROVED조건을 충족해야true를 반환하는지 여러 시나리오(PENDING 상태, 삭제 후, 재활성화)로 검증하고 있습니다.
370-419: 빌더 패턴 테스트가 포괄적입니다.새로운
StudyTeam,User,StudyMember객체를 빌더로 생성하고 모든 필드 값이 정확히 설정되었는지 검증합니다.isDeleted기본값이false인 것도 확인하여 엔티티 초기 상태를 잘 테스트하고 있습니다.techeerzip/build.gradle (2)
89-92: 전이 의존성 보안 취약점 대응이 잘 되어있습니다.
commons-compress와commons-lang3의 버전을 명시적으로 지정하여 보안 취약점을 해결하는 접근 방식이 적절합니다. 다만, 이러한 의존성은 주기적으로 업데이트 여부를 확인해야 합니다.
54-60: QueryDSL 6.10.1 correctly addresses CVE-2024-49203 — no changes needed.The upgrade to QueryDSL 6.10.1 is appropriate. CVE-2024-49203 is a confirmed critical SQL/HQL injection vulnerability (CVSS 9.8) in Querydsl's JPAQuery orderBy handling, and version 6.10.1 is the correct patched release for the OpenFeign Querydsl line. The dependency upgrade addresses a real security concern.
| // Testcontainers | ||
| testImplementation 'org.testcontainers:testcontainers:1.19.3' | ||
| testImplementation 'org.testcontainers:junit-jupiter:1.19.3' | ||
| testImplementation 'org.testcontainers:postgresql:1.19.3' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🌐 Web query:
Testcontainers latest version 2025 release
💡 Result:
The latest Testcontainers (Java) release as of Nov 29, 2025 is 2.0.2 (released Nov 13, 2025). [1]
The previous stable 1.x release was 1.21.3 (released Jun 28–29, 2025). [2]
Sources:
[1] GitHub releases — testcontainers/testcontainers-java (2.0.2).
[2] Maven / mvnrepository entries for 1.21.3.
🌐 Web query:
Testcontainers 1.19.3 release date security vulnerabilities
💡 Result:
-
Release date: November 21, 2023. [1][2]
-
Known security issues (from dependencies):
- CVE-2024-26308 (Apache Commons Compress — allocation of resources / DoS). Recommended fix: upgrade Commons Compress to ≥1.26. [3]
- CVE-2024-25710 (Apache Commons Compress — infinite loop / DoS). Recommended fix: upgrade Commons Compress to ≥1.26. [4]
References:
[1] Maven Central / mvnrepository entry for org.testcontainers:testcontainers:1.19.3 (date & reported vulnerabilities).
[2] Repository index for testcontainers 1.19.3 (timestamp).
[3] NVD / advisories for CVE-2024-26308.
[4] NVD / advisories for CVE-2024-25710.
Update Testcontainers to a newer version; 1.19.3 has known security vulnerabilities.
Version 1.19.3 (released November 21, 2023) is now significantly outdated. As of November 2025, the latest stable version is 2.0.2 (released November 13, 2025), with 1.21.3 being the last 1.x release (June 28, 2025).
More critically, 1.19.3 has transitive dependency vulnerabilities:
- CVE-2024-26308 and CVE-2024-25710 (Apache Commons Compress — DoS / infinite loop). These require upgrading Commons Compress to ≥1.26.
Upgrade to at least 1.21.3 (minimal 1.x update) or preferably 2.0.2 (latest).
techeerzip/src/test/java/backend/techeerzip/domain/studyMember/entity/StudyMemberTest.java
Show resolved
Hide resolved
...rzip/src/test/java/backend/techeerzip/domain/studyMember/service/StudyMemberServiceTest.java
Show resolved
Hide resolved
...rzip/src/test/java/backend/techeerzip/domain/studyMember/service/StudyMemberServiceTest.java
Show resolved
Hide resolved
.../java/backend/techeerzip/domain/studyMember/repository/StudyMemberDslRepositoryImplTest.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (1)
techeerzip/build.gradle (1)
85-95: Testcontainers 버전 업그레이드를 여전히 권장합니다.Commons Compress 1.28.0을 명시적으로 추가하여 CVE-2024-26308 및 CVE-2024-25710을 해결한 것은 좋습니다. 그러나 Testcontainers 1.19.3 자체는 여전히 구 버전입니다:
- 현재 버전: 1.19.3 (2023년 11월 21일)
- 권장 버전: 최소 1.21.3 (2025년 6월) 또는 최신 2.0.2 (2025년 11월)
Commons Compress 전이 의존성 문제는 해결되었지만, Testcontainers를 최신 버전으로 업그레이드하면 다음 이점이 있습니다:
- 추가 버그 수정 및 성능 개선
- 더 나은 장기 유지보수성
- 최신 컨테이너 이미지 지원
🔎 권장 업그레이드
// Testcontainers - testImplementation 'org.testcontainers:testcontainers:1.19.3' - testImplementation 'org.testcontainers:junit-jupiter:1.19.3' - testImplementation 'org.testcontainers:postgresql:1.19.3' + testImplementation 'org.testcontainers:testcontainers:1.21.3' + testImplementation 'org.testcontainers:junit-jupiter:1.21.3' + testImplementation 'org.testcontainers:postgresql:1.21.3'또는 최신 2.x 버전으로 업그레이드 (breaking changes 검토 필요):
// Testcontainers - testImplementation 'org.testcontainers:testcontainers:1.19.3' - testImplementation 'org.testcontainers:junit-jupiter:1.19.3' - testImplementation 'org.testcontainers:postgresql:1.19.3' + testImplementation 'org.testcontainers:testcontainers:2.0.2' + testImplementation 'org.testcontainers:junit-jupiter:2.0.2' + testImplementation 'org.testcontainers:postgresql:2.0.2'
🧹 Nitpick comments (1)
techeerzip/src/test/java/backend/techeerzip/domain/studyMember/entity/StudyMemberTest.java (1)
300-315:getId테스트가 개선되었지만 더 명확한 검증을 권장합니다.이전 리뷰 피드백에 따라
getId()메서드를 실제로 호출하도록 개선되었습니다. 그러나 현재 assertionassertTrue(id == null || id >= 0)은 너무 관대합니다.JPA 컨텍스트 외부에서는 ID가 null이 예상되므로, 더 명확한 검증을 제안합니다:
🔎 더 명확한 검증 제안
@Test @DisplayName("getId 메서드 - id 반환 확인") void getId() { - // given & when - // id는 JPA가 생성하므로 null일 수 있음 - // 실제로는 DB에 저장된 후에 id가 할당됨 + // given & when & then + // JPA 컨텍스트 외부에서는 id가 null Long id = studyMember.getId(); - - // then - // JPA 컨텍스트 없이 생성된 엔티티는 id가 null일 수 있음 - // getId() 메서드가 정상적으로 호출되고 null을 반환할 수 있음을 확인 - assertNotNull(studyMember); - // id는 null일 수 있지만, getId() 메서드는 예외 없이 호출되어야 함 - // JPA 컨텍스트 없이 생성된 엔티티는 id가 null일 수 있으므로 null 체크는 하지 않음 - assertTrue(id == null || id >= 0); + assertNull(id, "JPA 컨텍스트 없이 생성된 엔티티의 ID는 null이어야 함"); }
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
techeerzip/build.gradle(2 hunks)techeerzip/src/test/java/backend/techeerzip/domain/studyMember/entity/StudyMemberTest.java(1 hunks)techeerzip/src/test/java/backend/techeerzip/domain/studyMember/mapper/StudyMemberMapperTest.java(1 hunks)techeerzip/src/test/java/backend/techeerzip/domain/studyMember/repository/StudyMemberDslRepositoryImplTest.java(1 hunks)techeerzip/src/test/java/backend/techeerzip/domain/studyMember/service/StudyMemberServiceTest.java(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
- techeerzip/src/test/java/backend/techeerzip/domain/studyMember/service/StudyMemberServiceTest.java
- techeerzip/src/test/java/backend/techeerzip/domain/studyMember/repository/StudyMemberDslRepositoryImplTest.java
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-05-24T09:14:59.080Z
Learnt from: dongwooooooo
Repo: Techeer-Hogwarts/backend PR: 7
File: techeerzip/src/main/java/backend/techeerzip/domain/projectTeam/service/ProjectTeamService.java:680-680
Timestamp: 2025-05-24T09:14:59.080Z
Learning: 이 프로젝트에서는 이메일 필드가 데이터베이스 레벨에서 NOT NULL 제약조건을 가지며, 멤버 서비스에서 존재하지 않는 멤버에 대해서는 예외를 발생시키는 패턴을 사용한다. 따라서 이메일 관련 서비스 메서드들은 null을 반환하지 않으며, 별도의 null 체크가 불필요하다.
Applied to files:
techeerzip/src/test/java/backend/techeerzip/domain/studyMember/mapper/StudyMemberMapperTest.java
🧬 Code graph analysis (1)
techeerzip/src/test/java/backend/techeerzip/domain/studyMember/mapper/StudyMemberMapperTest.java (2)
techeerzip/src/main/java/backend/techeerzip/domain/studyMember/exception/StudyMemberBadRequestException.java (1)
StudyMemberBadRequestException(6-10)techeerzip/src/main/java/backend/techeerzip/domain/studyMember/mapper/StudyMemberMapper.java (1)
StudyMemberMapper(15-49)
🔇 Additional comments (10)
techeerzip/src/test/java/backend/techeerzip/domain/studyMember/mapper/StudyMemberMapperTest.java (4)
29-79: 테스트 픽스처 설정이 잘 구성되어 있습니다.
ReflectionTestUtils를 사용하여 ID를 설정하고, 실제 엔티티 빌더를 통해 테스트 데이터를 구성한 것은 좋은 접근 방식입니다. 단위 테스트에서 JPA 컨텍스트 없이 엔티티 간 관계를 테스트하기에 적합합니다.
81-121:toEntity메서드 테스트가 잘 작성되었습니다.리더 여부에 따른 두 가지 시나리오를 모두 커버하고 있으며, 각 테스트에서 엔티티의 모든 주요 필드(isLeader, summary, status, studyTeam, user)를 검증하고 있습니다.
123-179:toEntities메서드의 정상 경로와 엣지 케이스 테스트가 포괄적입니다.여러 멤버 변환, 빈 리스트 처리를 모두 테스트하고 있으며, 각 생성된 멤버의 속성을 상세히 검증하고 있습니다.
181-226: Null 입력 검증 테스트가 완벽합니다.
incomingMembersInfo,team,users각각이 null일 때StudyMemberBadRequestException이 발생하는지 확인하는 세 가지 테스트를 모두 포함하고 있습니다. 방어적 프로그래밍을 위한 필수 검증입니다.techeerzip/src/test/java/backend/techeerzip/domain/studyMember/entity/StudyMemberTest.java (5)
3-62: 실제 엔티티를 사용한 테스트 셋업으로 개선되었습니다.Mock 객체 대신 실제 빌더를 통해
StudyTeam,User,StudyMember를 생성하는 방식으로 변경된 것은 좋은 개선입니다. 이는 엔티티의 실제 동작을 더 정확하게 테스트할 수 있게 합니다.
64-235: 상태 전환 및 업데이트 메서드 테스트가 매우 포괄적입니다.
update,changeLeaderStatus,softDelete,toActive,toApplicant,toReject등 모든 상태 변경 메서드에 대해 다음을 검증하고 있습니다:
- 상태 변경 전후 비교
updatedAt필드의 변경 확인- 멱등성 (예: softDelete 두 번 호출)
- 복합 상태 전환 (예: toActive가 isDeleted도 false로 변경)
237-298: 상태 확인 메서드 테스트가 잘 구성되어 있습니다.
isRejected,isPending,isActive메서드에 대해 다양한 상태 전환 시나리오를 테스트하고 있으며, 복합 조건(예: isActive는 isDeleted=false AND status=APPROVED)도 검증하고 있습니다.
317-376: Getter 메서드 테스트가 적절합니다.
isLeader,getSummary,getStatus,getStudyTeam,getUser메서드에 대해 초기값 확인 및 상태 변경 후 값 확인을 모두 수행하고 있습니다.
378-428: 빌더 패턴 테스트가 종합적입니다.새로운 엔티티들을 생성하고
StudyMember빌더를 통해 모든 필드가 올바르게 설정되는지 검증하는 end-to-end 스타일의 테스트입니다. 잘 작성되었습니다.techeerzip/build.gradle (1)
51-55: QueryDSL 업그레이드가 적절하게 수행되었습니다.CVE-2024-49203 수정을 위한 버전 6.10.1로의 업그레이드가 명확히 문서화되어 있으며, core, jpa, annotationProcessor 모두 일관되게 업데이트되었습니다.
...eerzip/src/test/java/backend/techeerzip/domain/studyMember/mapper/StudyMemberMapperTest.java
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (1)
techeerzip/build.gradle (1)
85-88: 중복된 Testcontainers 의존성 제거 필요.81-82번 라인에 이미
org.testcontainers:junit-jupiter와org.testcontainers:postgresql의존성이 존재합니다. 85-88번 라인의 명시적 버전을 가진 의존성들은 중복입니다.추가로, Testcontainers 1.19.3 버전의 보안 취약점 이슈는 이전 리뷰에서 이미 지적되었습니다.
🔎 중복 제거 제안
81-82번 라인의 의존성을 유지하되, Spring Boot의 BOM이 관리하는 버전을 사용하거나, 최신 버전으로 명시적으로 지정하세요:
testImplementation 'org.springframework.boot:spring-boot-testcontainers' // Spring Boot 3.1+ 부터 제공하는 편리한 기능 -testImplementation 'org.testcontainers:junit-jupiter' -testImplementation 'org.testcontainers:postgresql' +testImplementation 'org.testcontainers:junit-jupiter:2.0.2' +testImplementation 'org.testcontainers:postgresql:2.0.2' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - -// Testcontainers -testImplementation 'org.testcontainers:testcontainers:1.19.3' -testImplementation 'org.testcontainers:junit-jupiter:1.19.3' -testImplementation 'org.testcontainers:postgresql:1.19.3'
🧹 Nitpick comments (1)
techeerzip/build.gradle (1)
94-95: Apache Commons 의존성 버전 검증 필요현재 사용 중인 commons-compress 1.28.0은 최신 버전입니다. 다만 commons-lang3의 경우 더 최신 버전이 존재하므로 확인이 필요합니다:
- commons-compress 1.28.0: 현재 최신 버전 (2025년 7월 26일 배포)
- commons-lang3 3.18.0: 2개 마이너 버전 뒤쳐져 있음 (최신: 3.20.0)
commons-lang3 3.18.0은 CVE-2025-48924 보안 취약점(Uncontrolled Recursion)을 수정한 최소 버전이므로 정당하나, 3.20.0으로 업그레이드 가능 여부를 검토하십시오. 또한 이러한 의존성이 테스트용 전이 의존성이라면
implementation대신testImplementation스코프 사용을 권장합니다.
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
techeerzip/build.gradle(2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
| // QueryDSL (CVE-2024-49203 수정 버전) | ||
| implementation 'com.querydsl:querydsl-core:5.1.0' | ||
| implementation 'com.querydsl:querydsl-jpa:5.1.0:jakarta' | ||
|
|
||
| annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' | ||
| annotationProcessor 'com.querydsl:querydsl-apt:5.1.0:jakarta' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
QueryDSL 5.1.0은 CVE-2024-49203의 해결 버전이 아니라 취약한 버전입니다.
QueryDSL 5.1.0은 JPAQuery의 orderBy 기능에서 SQL/HQL 인젝션 취약점이 존재하며, querydsl-jpa 5.1.0과 querydsl-apt 5.1.0이 영향을 받습니다. 문제는 QueryDSL 5.6.1과 6.10.1 버전에서 수정되었습니다. 현재 버전 5.1.0으로의 업그레이드는 CVE를 해결하지 못합니다. 최소한 5.6.1 이상으로 업그레이드하거나, 더 나아가 OpenFeign의 유지보수 중인 포크에서 6.10.1 이상으로 업그레이드를 고려해야 합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
techeerzip/src/main/java/backend/techeerzip/domain/studyMember/mapper/StudyMemberMapper.java (1)
39-51: 코드 중복을 줄이기 위해 기존 메서드를 재사용하는 것을 고려해보세요.현재 빌더 로직(라인 44-50)은 위의
toEntity메서드(라인 21-27)와 동일한 작업을 수행합니다. 기존 메서드를 재사용하면 코드 중복을 줄이고 유지보수성을 향상시킬 수 있습니다.🔎 제안하는 리팩터링
return incomingMembersInfo.stream() .map( info -> { User user = users.get(info.getUserId()); if (user == null) { throw new StudyMemberBadRequestException(); } - return StudyMember.builder() - .user(user) - .studyTeam(team) - .isLeader(info.getIsLeader()) - .status(StatusCategory.APPROVED) - .summary(DEFAULT_MEMBER_SUMMARY) - .build(); + return toEntity(info, team, user); }) .toList();
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
techeerzip/src/main/java/backend/techeerzip/domain/studyMember/mapper/StudyMemberMapper.java(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (1)
techeerzip/src/main/java/backend/techeerzip/domain/studyMember/mapper/StudyMemberMapper.java (1)
41-43: null 체크 추가가 적절합니다.맵에서 조회한 User가 null인 경우를 검증하여 NPE를 방지하고 데이터 무결성을 보장합니다. 방어적 프로그래밍의 좋은 사례입니다.
|



요약
StudyMember TestCode
작업 내용
엔티티, 메퍼, 레포지토리, 서비스 테스트 코드
참고 사항
build.gradle 파일 수정
관련 이슈
BACKEND-186
Summary by CodeRabbit
Chores
Bug Fixes
Tests
✏️ Tip: You can customize this high-level summary in your review settings.