-
Notifications
You must be signed in to change notification settings - Fork 1
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
feat: 멤버가 여러 종류의 역할을 가질 수 있도록 변경 #561
Conversation
Warning Rate limit exceeded@seulgi99 has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 2 minutes and 42 seconds before requesting another review. How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. Walkthrough이번 변경사항은 멤버의 역할 관리를 개선하기 위한 것으로, Changes
Assessment against linked issues
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (invoked as PR comments)
Additionally, you can add CodeRabbit Configuration File (
|
Job Summary for GradleCheck Style and Test to Develop :: build-test
|
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
Outside diff range, codebase verification and nitpick comments (1)
src/test/java/com/gdschongik/gdsc/helper/IntegrationTest.java (1)
94-96
: 함수 호출을 업데이트하세요.
logoutAndReloginAs
함수의 호출이 새로운 서명을 따르지 않습니다. 다음 파일에서 호출을 업데이트해야 합니다:
src/test/java/com/gdschongik/gdsc/domain/study/application/StudyMentorServiceTest.java
src/test/java/com/gdschongik/gdsc/domain/order/application/OrderServiceTest.java
src/test/java/com/gdschongik/gdsc/domain/member/application/OnboardingMemberServiceTest.java
src/test/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationServiceTest.java
src/test/java/com/gdschongik/gdsc/domain/membership/application/MembershipServiceTest.java
Analysis chain
좋습니다! 하지만 함수 사용을 확인하세요.
코드 변경이 승인되었습니다.
그러나
logoutAndReloginAs
함수의 모든 호출이 새로운 서명을 따르는지 확인하세요.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify all function calls to `logoutAndReloginAs` match the new signature. # Test: Search for the function usage. Expect: Only occurrences of the new signature. rg --type java -A 5 $'logoutAndReloginAs'Length of output: 13650
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (17)
- .github/workflows/pull_request_gradle_build.yml (1 hunks)
- src/main/java/com/gdschongik/gdsc/domain/auth/application/JwtService.java (3 hunks)
- src/main/java/com/gdschongik/gdsc/domain/auth/dto/AccessTokenDto.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/domain/discord/domain/DiscordValidator.java (2 hunks)
- src/main/java/com/gdschongik/gdsc/domain/member/application/OnboardingMemberService.java (2 hunks)
- src/main/java/com/gdschongik/gdsc/domain/member/domain/Member.java (6 hunks)
- src/main/java/com/gdschongik/gdsc/domain/member/domain/MemberManageRole.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/domain/member/domain/MemberRole.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/domain/member/domain/MemberStudyRole.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/global/common/constant/SecurityConstant.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/global/security/CustomOAuth2User.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/global/security/CustomSuccessHandler.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/global/security/JwtFilter.java (5 hunks)
- src/main/java/com/gdschongik/gdsc/global/security/MemberAuthInfo.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/global/security/PrincipalDetails.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/global/util/JwtUtil.java (4 hunks)
- src/test/java/com/gdschongik/gdsc/helper/IntegrationTest.java (2 hunks)
Files skipped from review due to trivial changes (1)
- .github/workflows/pull_request_gradle_build.yml
Additional comments not posted (32)
src/main/java/com/gdschongik/gdsc/domain/auth/dto/AccessTokenDto.java (1)
3-5
: 변경 사항이 잘 반영되었습니다.
MemberAuthInfo
를 사용하여 더 나은 캡슐화를 제공합니다.그러나 새로운 구조가 코드베이스 전체에서 올바르게 사용되고 있는지 확인하십시오.
Verification successful
변경 사항이 잘 반영되었습니다.
MemberAuthInfo
가 코드베이스 전체에서 일관되게 사용되고 있습니다.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the usage of `MemberAuthInfo` in the codebase. # Test: Search for the usage of `MemberAuthInfo`. Expect: Consistent usage across the codebase. rg --type java -A 5 $'MemberAuthInfo'Length of output: 10020
src/main/java/com/gdschongik/gdsc/domain/member/domain/MemberManageRole.java (1)
1-13
: 새 파일이 잘 정의되었습니다.
MemberManageRole
enum이 간단하고 명확하게 정의되었습니다.그러나 새로운 역할이 코드베이스 전체에서 올바르게 사용되고 있는지 확인하십시오.
Verification successful
새 파일이 잘 정의되었으며 코드베이스 전체에서 일관되게 사용되고 있습니다.
MemberManageRole
enum이 여러 파일에서 올바르게 사용되고 있습니다. 주요 보안, 인증, 도메인 검증 등에서 일관된 사용이 확인되었습니다.
src/test/java/com/gdschongik/gdsc/helper/IntegrationTest.java
src/main/java/com/gdschongik/gdsc/global/security/PrincipalDetails.java
src/main/java/com/gdschongik/gdsc/global/security/MemberAuthInfo.java
src/main/java/com/gdschongik/gdsc/global/util/JwtUtil.java
src/main/java/com/gdschongik/gdsc/domain/discord/domain/DiscordValidator.java
src/main/java/com/gdschongik/gdsc/domain/member/domain/Member.java
src/main/java/com/gdschongik/gdsc/domain/auth/application/JwtService.java
Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the usage of `MemberManageRole` in the codebase. # Test: Search for the usage of `MemberManageRole`. Expect: Consistent usage across the codebase. rg --type java -A 5 $'MemberManageRole'Length of output: 11460
src/main/java/com/gdschongik/gdsc/domain/member/domain/MemberRole.java (1)
4-11
: 역할 정의가 단순화되었습니다.
ADMIN
역할이 제거되고@AllArgsConstructor
가@RequiredArgsConstructor
로 대체되었습니다.그러나
ADMIN
역할의 제거가 코드베이스의 다른 부분에 영향을 미치지 않는지 확인하십시오.Verification successful
역할 정의가 단순화되었습니다.
ADMIN
역할이 제거되고@AllArgsConstructor
가@RequiredArgsConstructor
로 대체되었습니다.ADMIN
역할의 제거가 코드베이스의 다른 부분에 영향을 미치지 않습니다.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the removal of `ADMIN` role in the codebase. # Test: Search for the usage of `ADMIN` role. Expect: No occurrences of `ADMIN` role. rg --type java -A 5 $'ROLE_ADMIN'Length of output: 500
Script:
#!/bin/bash # Description: Verify the usage of `MemberRole` and `MemberManageRole` in the codebase. # Test: Search for the usage of `MemberRole` and `MemberManageRole` in the codebase. rg --type java -A 5 'MemberRole' rg --type java -A 5 'MemberManageRole'Length of output: 50349
Script:
#!/bin/bash # Description: Verify if `MemberRole.ADMIN` is directly referenced in the codebase. # Test: Search for direct references to `MemberRole.ADMIN`. rg --type java -A 5 'MemberRole.ADMIN'Length of output: 38
Script:
#!/bin/bash # Description: Verify if `ROLE_ADMIN` is referenced elsewhere in the codebase. # Test: Search for references to `ROLE_ADMIN` in the codebase. rg --type java -A 5 'ROLE_ADMIN'Length of output: 500
src/main/java/com/gdschongik/gdsc/domain/member/domain/MemberStudyRole.java (1)
1-13
: 좋습니다!MemberStudyRole
enum 정의
MemberStudyRole
enum이 잘 정의되어 있습니다.MENTOR
와STUDENT
두 가지 역할을 포함하고 있으며, 각 역할에 대한 문자열 값을 가지고 있습니다.src/main/java/com/gdschongik/gdsc/global/security/MemberAuthInfo.java (1)
1-15
: 좋습니다!MemberAuthInfo
레코드 정의
MemberAuthInfo
레코드가 잘 정의되어 있습니다. 멤버의 ID와 역할 정보를 포함하고 있으며,Member
객체로부터 인스턴스를 생성하는 정적 메서드도 잘 구현되어 있습니다.src/main/java/com/gdschongik/gdsc/global/security/CustomOAuth2User.java (1)
13-18
: 좋습니다!CustomOAuth2User
클래스 변경
CustomOAuth2User
클래스의 변경 사항이 잘 반영되었습니다.MemberAuthInfo
를 사용하여 멤버 인증 정보를 캡슐화하고 유지 보수성을 향상시켰습니다.src/main/java/com/gdschongik/gdsc/global/common/constant/SecurityConstant.java (2)
9-9
: 상수 이름과 값이 적절합니다.
TOKEN_MANAGE_ROLE_NAME
상수는 명확하고 일관된 네이밍을 따르고 있습니다.
10-10
: 상수 이름과 값이 적절합니다.
TOKEN_STUDY_ROLE_NAME
상수는 명확하고 일관된 네이밍을 따르고 있습니다.src/main/java/com/gdschongik/gdsc/domain/discord/domain/DiscordValidator.java (2)
6-6
: 적절한 import 변경입니다.
MemberManageRole
를 사용하도록 import 문이 올바르게 수정되었습니다.
35-37
: 관리자 권한 검증 로직이 적절합니다.
getManageRole
을 사용하여 관리자 권한을 검증하는 로직이 올바르게 수정되었습니다.src/main/java/com/gdschongik/gdsc/global/security/PrincipalDetails.java (5)
3-6
: 적절한 import 추가입니다.
MemberManageRole
와MemberStudyRole
를 사용하도록 import 문이 올바르게 추가되었습니다.
9-9
: 적절한 어노테이션 변경입니다.
@RequiredArgsConstructor
어노테이션이 필수 필드를 명확히 하기 위해 올바르게 사용되었습니다.
18-20
: 필드 정의가 적절합니다.
role
,manageRole
,studyRole
필드가 올바르게 정의되었습니다.
22-25
: 적절한 메서드 추가입니다.
from
메서드가AccessTokenDto
로부터PrincipalDetails
인스턴스를 올바르게 생성합니다.
29-35
: 권한 생성 로직이 적절합니다.
getAuthorities
메서드가 새로운 역할에 대한GrantedAuthority
객체를 올바르게 생성합니다.src/main/java/com/gdschongik/gdsc/global/security/CustomSuccessHandler.java (1)
41-43
: 확인 필요:MemberAuthInfo
객체의 정확성
MemberAuthInfo
객체가 올바르게 생성되고 사용되는지 확인하십시오.src/main/java/com/gdschongik/gdsc/domain/auth/application/JwtService.java (2)
29-30
: 확인 필요:MemberAuthInfo
객체의 정확성
MemberAuthInfo
객체가 올바르게 생성되고 사용되는지 확인하십시오.Verification successful
확인 필요:
MemberAuthInfo
객체의 정확성
MemberAuthInfo
객체는JwtService
클래스와 코드베이스의 여러 부분에서 올바르게 생성되고 사용되고 있습니다. 다음 위치를 확인하십시오:
JwtService
클래스에서createAccessToken
메서드JwtUtil
클래스에서generateAccessToken
메서드Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the correctness of `MemberAuthInfo` object creation and usage in `JwtService`. # Test: Search for the `MemberAuthInfo` object usage in `JwtService` class. Expect: Correct implementation. ast-grep --lang java --pattern $'class JwtService { $$$ AccessTokenDto createAccessToken(MemberAuthInfo authInfo) { $$$ } $$$ }'Length of output: 143
Script:
#!/bin/bash # Description: Verify the presence of `JwtService` class and usage of `MemberAuthInfo` object. # Step 1: Search for the `JwtService` class to confirm its presence. ast-grep --lang java --pattern 'class JwtService { $$$ }' # Step 2: Search for the usage of `MemberAuthInfo` object across the codebase. rg 'MemberAuthInfo' -A 5Length of output: 10068
93-102
: 확인 필요:MemberAuthInfo
객체의 정확성
MemberAuthInfo
객체가 올바르게 생성되고 사용되는지 확인하십시오.Verification successful
확인 완료:
MemberAuthInfo
객체의 정확성
MemberAuthInfo
객체가reissueAccessTokenIfExpired
메서드에서 올바르게 생성되고 사용되고 있습니다.
MemberAuthInfo
객체는 만료된 JWT의 클레임을 사용하여 생성됩니다.- 클레임에서 역할과 멤버 ID가 올바르게 추출되어
MemberAuthInfo
객체를 인스턴스화하는 데 사용됩니다.MemberAuthInfo
객체는createAccessToken
메서드에 전달되어 올바르게 사용됩니다.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the correctness of `MemberAuthInfo` object creation and usage in `reissueAccessTokenIfExpired` method. # Test: Search for the `reissueAccessTokenIfExpired` method in `JwtService` class. Expect: Correct implementation. ast-grep --lang java --pattern $'class JwtService { $$$ AccessTokenDto reissueAccessTokenIfExpired(String accessTokenValue) { $$$ } $$$ }'Length of output: 153
Script:
#!/bin/bash # Locate the JwtService class and extract the reissueAccessTokenIfExpired method to verify MemberAuthInfo object creation and usage. # Find the JwtService.java file fd JwtService.java # Extract the reissueAccessTokenIfExpired method from the JwtService class ast-grep --lang java --pattern $'class JwtService { $$$ AccessTokenDto reissueAccessTokenIfExpired(String accessTokenValue) { $$$ } $$$ }' --jsonLength of output: 258
Script:
#!/bin/bash # Locate the JwtService class and list all methods to verify the existence of reissueAccessTokenIfExpired method. # List all methods in the JwtService class ast-grep --lang java --pattern $'class JwtService { $$$ $_ $_($_) { $$$ } $$$ }' src/main/java/com/gdschongik/gdsc/domain/auth/application/JwtService.javaLength of output: 169
Script:
#!/bin/bash # Locate the JwtService class and search for the reissueAccessTokenIfExpired method. # Search for the reissueAccessTokenIfExpired method in the JwtService.java file rg 'reissueAccessTokenIfExpired' src/main/java/com/gdschongik/gdsc/domain/auth/application/JwtService.java -A 10Length of output: 636
Script:
#!/bin/bash # Extract the complete reissueAccessTokenIfExpired method from the JwtService.java file. # Extract the reissueAccessTokenIfExpired method from the JwtService.java file with more context lines rg 'reissueAccessTokenIfExpired' src/main/java/com/gdschongik/gdsc/domain/auth/application/JwtService.java -A 30 -B 5Length of output: 1102
src/main/java/com/gdschongik/gdsc/global/security/JwtFilter.java (3)
60-61
: 확인 필요:PrincipalDetails.from
메서드의 정확성
PrincipalDetails.from
메서드가 올바르게 구현되고 사용되는지 확인하십시오.Verification successful
확인 완료:
PrincipalDetails.from
메서드의 정확성
PrincipalDetails
클래스와from
메서드가 올바르게 구현되어 있습니다.from
메서드는AccessTokenDto
객체를 받아PrincipalDetails
객체를 생성합니다.
PrincipalDetails
클래스 위치:
src/main/java/com/gdschongik/gdsc/global/security/PrincipalDetails.java
from
메서드 구현:public static PrincipalDetails from(AccessTokenDto token) { MemberAuthInfo authInfo = token.authInfo(); return new PrincipalDetails(authInfo.memberId(), authInfo.role(), authInfo.manageRole(), authInfo.studyRole()); }Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the correctness of `PrincipalDetails.from` method. # Test: Search for the `from` method in `PrincipalDetails` class. Expect: Correct implementation. ast-grep --lang java --pattern $'class PrincipalDetails { $$$ static PrincipalDetails from(AccessTokenDto accessTokenDto) { $$$ } $$$ }'Length of output: 151
Script:
#!/bin/bash # Description: Verify the existence of `PrincipalDetails` class and its `from` method. # Step 1: Search for the `PrincipalDetails` class definition. echo "Searching for PrincipalDetails class..." ast-grep --lang java --pattern 'class PrincipalDetails { $$$ }' # Step 2: If the class is found, search for the `from` method within it. echo "Searching for from method in PrincipalDetails class..." ast-grep --lang java --pattern 'class PrincipalDetails { $$$ static PrincipalDetails from(AccessTokenDto accessTokenDto) { $$$ } $$$ }'Length of output: 411
Script:
#!/bin/bash # Description: Verify the existence of `PrincipalDetails` class and any `from` methods. # Step 1: Search for the `PrincipalDetails` class in the entire repository. echo "Searching for PrincipalDetails class in the entire repository..." rg 'class PrincipalDetails' -A 10 # Step 2: Search for any methods named `from` in the entire repository. echo "Searching for any methods named from in the entire repository..." rg 'static PrincipalDetails from' -A 10Length of output: 2933
44-44
: 확인 필요:PrincipalDetails.from
메서드의 정확성
PrincipalDetails.from
메서드가 올바르게 구현되고 사용되는지 확인하십시오.
75-76
: 확인 필요:PrincipalDetails.from
메서드의 정확성
PrincipalDetails.from
메서드가 올바르게 구현되고 사용되는지 확인하십시오.Verification successful
확인 완료:
PrincipalDetails.from
메서드의 정확성
PrincipalDetails.from
메서드는 올바르게 구현되었습니다.
PrincipalDetails
클래스는src/main/java/com/gdschongik/gdsc/global/security/PrincipalDetails.java
파일에 있습니다.from
메서드는AccessTokenDto
객체에서MemberAuthInfo
를 추출하여 새로운PrincipalDetails
객체를 생성합니다.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the correctness of `PrincipalDetails.from` method. # Test: Search for the `from` method in `PrincipalDetails` class. Expect: Correct implementation. ast-grep --lang java --pattern $'class PrincipalDetails { $$$ static PrincipalDetails from(AccessTokenDto accessTokenDto) { $$$ } $$$ }'Length of output: 151
Script:
#!/bin/bash # Description: Verify the existence and correctness of `PrincipalDetails.from` method. # Step 1: Search for the `PrincipalDetails` class definition. ast-grep --lang java --pattern 'class PrincipalDetails { $$$ }' # Step 2: Search for the `from` method within the `PrincipalDetails` class. ast-grep --lang java --pattern 'class PrincipalDetails { $$$ static PrincipalDetails from($_) { $$$ } $$$ }'Length of output: 190
Script:
#!/bin/bash # Description: Verify the existence and correctness of `PrincipalDetails.from` method. # Step 1: List all Java files and search for the `PrincipalDetails` class definition. files=$(fd --type f --extension java) for file in $files; do if grep -q 'class PrincipalDetails' "$file"; then echo "Found PrincipalDetails class in: $file" # Step 2: Search for the `from` method within the identified file. grep -A 10 'class PrincipalDetails' "$file" | grep -A 10 'static PrincipalDetails from' fi doneLength of output: 62926
src/main/java/com/gdschongik/gdsc/domain/member/application/OnboardingMemberService.java (1)
92-95
: 좋습니다! 하지만 함수 사용을 확인하세요.코드 변경이 승인되었습니다.
그러나
createTemporaryToken
함수의 모든 호출이 새로운 서명을 따르는지 확인하세요.src/main/java/com/gdschongik/gdsc/global/util/JwtUtil.java (5)
38-46
: 좋습니다!
generateAccessToken
메서드가MemberAuthInfo
를 사용하도록 변경되어 코드의 명확성과 유지 보수성이 향상되었습니다.
48-58
: 좋습니다!
buildAccessToken
메서드가MemberAuthInfo
의 속성을 사용하여 토큰을 생성하도록 변경되어 캡슐화가 개선되었습니다.
67-70
: 좋습니다!
generateRefreshToken
메서드가buildRefreshToken
을 호출하여 토큰을 생성하도록 변경되어 코드가 간결해졌습니다.
71-78
: 좋습니다!
buildRefreshToken
메서드가 회원 ID를 사용하여 리프레시 토큰을 생성하도록 변경되어 불필요한 매개변수가 제거되었습니다.
90-96
: 좋습니다!
parseAccessToken
메서드가 파싱된 클레임에서MemberAuthInfo
객체를 생성하도록 변경되어 모든 관련 역할 정보가 일관되게 캡처되고 반환됩니다.src/main/java/com/gdschongik/gdsc/domain/member/domain/Member.java (5)
39-40
: 새로운 필드manageRole
추가 확인
MemberManageRole
타입의manageRole
필드가 추가되었습니다. 이 필드는@Enumerated(EnumType.STRING)
으로 저장됩니다. 이는 데이터베이스에 문자열로 저장되므로 적절합니다.
42-43
: 새로운 필드studyRole
추가 확인
MemberStudyRole
타입의studyRole
필드가 추가되었습니다. 이 필드는@Enumerated(EnumType.STRING)
으로 저장됩니다. 이는 데이터베이스에 문자열로 저장되므로 적절합니다.
78-79
: 생성자 업데이트 확인생성자에
manageRole
과studyRole
파라미터가 추가되었습니다. 이는 새로운 역할 필드를 초기화할 수 있게 합니다. 올바르게 적용되었습니다.Also applies to: 93-94
114-115
:createGuestMember
메소드 업데이트 확인
createGuestMember
메소드가manageRole
에NONE
,studyRole
에STUDENT
를 할당하도록 업데이트되었습니다. 이는 게스트 멤버의 기본 역할을 설정하는 데 적절합니다.
287-290
: 새로운 메소드assignToMentor
추가 확인
assignToMentor
메소드가 추가되어studyRole
을MENTOR
로 업데이트합니다. 상태 변경 가능 여부를 검증하는 로직이 포함되어 있어 적절합니다.
Job Summary for GradleCheck Style and Test to Develop :: build-test
|
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.
lgtm
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.
lgtm
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
Outside diff range, codebase verification and nitpick comments (1)
src/test/java/com/gdschongik/gdsc/config/TestRedisConfig.java (1)
3-7
: 불필요한 주석 제거Spring의 테스트 기능을 사용하여 Redis 설정을 단순화했습니다. 이로 인해 불필요한 주석을 제거할 수 있습니다.
- // import statements
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (7)
- .github/workflows/production_build_deploy.yml (1 hunks)
- build.gradle (1 hunks)
- src/test/java/com/gdschongik/gdsc/config/TestRedisConfig.java (1 hunks)
- src/test/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationServiceTest.java (2 hunks)
- src/test/java/com/gdschongik/gdsc/helper/IntegrationTest.java (3 hunks)
- src/test/java/com/gdschongik/gdsc/helper/RedisCleaner.java (1 hunks)
- src/test/java/com/gdschongik/gdsc/helper/RepositoryTest.java (3 hunks)
Files skipped from review due to trivial changes (1)
- .github/workflows/production_build_deploy.yml
Files skipped from review as they are similar to previous changes (1)
- src/test/java/com/gdschongik/gdsc/helper/IntegrationTest.java
Additional comments not posted (11)
src/test/java/com/gdschongik/gdsc/config/TestRedisConfig.java (1)
9-12
: Spring 테스트 설정의 적절한 사용Spring의 테스트 설정 기능을 적절하게 사용하여 Redis 설정을 단순화했습니다. 이 접근 방식은 유지 보수성과 명확성을 향상시킵니다.
src/test/java/com/gdschongik/gdsc/helper/RepositoryTest.java (3)
13-13
: 적절한 의존성 주입
RedisCleaner
를@Import
하여 테스트 설정을 개선했습니다. 이로 인해 Redis 리소스의 신뢰성과 격리가 향상됩니다.
24-25
: RedisCleaner 의존성 주입
RedisCleaner
를 의존성 주입하여 Redis 정리 작업을 수행합니다. 이는 테스트의 신뢰성을 높이는 좋은 접근 방식입니다.
30-30
: Redis 정리 작업 포함
setUp
메서드에redisCleaner.execute()
를 추가하여 각 테스트 전에 Redis 정리 작업을 수행합니다. 이는 테스트의 격리성을 보장합니다.src/test/java/com/gdschongik/gdsc/helper/RedisCleaner.java (5)
1-1
: 패키지 선언패키지 선언이 적절하게 되어 있습니다.
3-10
: 필요한 의존성 및 어노테이션 사용
lettuce
라이브러리를 사용하여 Redis에 연결하고, 필요한 의존성 및 어노테이션을 적절하게 사용했습니다.
12-14
: 컴포넌트 및 필수 생성자 사용
@Component
와@RequiredArgsConstructor
를 사용하여 필요한 의존성을 주입하고 있습니다. 이는 Spring의 의존성 주입 패턴을 잘 따르고 있습니다.
20-27
: Redis 클라이언트 설정
afterPropertiesSet
메서드에서 Redis 클라이언트를 설정하고 있습니다. 이는 초기화 후 필요한 설정을 수행하는 좋은 방법입니다.
29-31
: Redis 데이터베이스 정리
execute
메서드에서flushdb
명령을 사용하여 Redis 데이터베이스를 정리합니다. 이는 테스트 환경을 깨끗하게 유지하는 데 도움이 됩니다.src/test/java/com/gdschongik/gdsc/domain/email/application/UnivEmailVerificationServiceTest.java (1)
Line range hint
1-1
:
Redis 설정 제거 확인 필요
TestRedisConfig
설정이 제거되었습니다. 이로 인해 Redis 설정에 의존하던 테스트가 영향을 받을 수 있습니다. 테스트가 올바르게 작동하는지 확인해 주세요.Also applies to: 6-6
build.gradle (1)
Line range hint
1-1
:
Testcontainers 의존성 제거 확인 필요
testImplementation 'org.testcontainers:testcontainers'
의존성이 제거되었습니다. 이로 인해 컨테이너화된 환경에 의존하던 테스트가 영향을 받을 수 있습니다. 테스트가 올바르게 작동하는지 확인해 주세요.Also applies to: 41-41
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
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (3)
- .github/workflows/develop_build_deploy.yml (1 hunks)
- .github/workflows/production_build_deploy.yml (1 hunks)
- .github/workflows/pull_request_gradle_build.yml (1 hunks)
Files skipped from review due to trivial changes (1)
- .github/workflows/develop_build_deploy.yml
Files skipped from review as they are similar to previous changes (2)
- .github/workflows/production_build_deploy.yml
- .github/workflows/pull_request_gradle_build.yml
Job Summary for GradleCheck Style and Test to Develop :: build-test
|
Job Summary for GradleCheck Style and Test to Develop :: build-test
|
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.
LGTM
🌱 관련 이슈
📌 작업 내용 및 특이사항
개요
PrincipalDetails
)에 대하여 멤버 역할 외 관리자 역할, 스터디 역할을 추가하는 것입니다.역할 추가
MemberManageRole
,MemberStudyRole
을 추가했습니다.시큐리티 로직
PrincipalDetails
는 스프링 시큐리티에서 사용되는 '인증 주체'입니다. 시큐리티는 이 인증 주체의getAuthorities()
메서드를 호출하여 해당 주체가 어떤 역할을 가지고 있는지 검증합니다. 시큐리티 설정 클래스의hasRoles()
에 따른 검증이 바로 이것입니다.getAuthorities()
메서드는 리턴값이Collection<? extends GrantedAuthority>
이기 때문에 한 인증주체가 여러 역할을 가질 수 있게 합니다.MemberRole
외 나머지 역할들을 리스트로 추가하는 것이 최종 목적이라 할 수 있겠습니다.MemberAuthInfo
MemberAuthInfo
라는 DTO로 묶어냈습니다.PrincipalDetails
내부 필드에 멤버 도메인 참조를 넣으면 영속성 컨텍스트 문제가 있기 때문에 조회되는 즉시 DTO로 매핑하거나 이전처럼 각 필드로 변환하는 것이 좋습니다.MemberAuthInfo
로 래핑하여 메서드 간 호출이 발생하기 때문에 이후에 역할값이 추가되더라도 훨씬 더 유연하게 대응할 수 있습니다.기타
JwtUtil
에서는buildToken
이라는 메서드를 통해 엑세스 토큰과 리프레시 토큰 모두를 생성했는데요, 이번에 엑세스 토큰과 리프레시 토큰의 클레임 차이가 커지면서, 각각의 생성 메서드로 분리하도록 변경했습니다.📝 참고사항
📚 기타
Summary by CodeRabbit
Summary by CodeRabbit
New Features
MemberAuthInfo
DTO 추가.Bug Fixes
Refactor
Chores