Merged
Conversation
- RoleController에 사용자 역할 할당/제거 API 추가
- POST /roles/users/{username}: 사용자에게 역할 할당
- DELETE /roles/users/{username}/{roleKey}: 사용자에서 역할 제거
- USER_UPDATE 권한 또는 SUPER_ADMIN 역할 필요
- RoleRepository에 findByRoleKeyInAndTenant 메서드 추가
- 여러 역할 키를 한 번의 쿼리로 테넌트별 조회 (N+1 문제 방지)
- 사용자에게 여러 역할을 할당할 때 효율적인 조회 지원
- UserService에 사용자 역할 관리 기능 추가
- assignRolesToUser: 사용자에게 역할 할당 (테넌트 검증 포함)
- removeRoleFromUser: 사용자에서 역할 제거 (테넌트 검증 포함)
- findServiceOrNull을 findServiceOrCreate로 변경 - CloudService가 존재하지 않을 경우 자동으로 생성하도록 개선 - serviceName은 serviceKey를 그대로 사용 - serviceType, serviceCategory, displayName은 null로 설정 (현재 사용되지 않음) - CloudResource.service_id nullable=false 제약 조건 충족 이슈: CloudResource 저장 시 CloudService가 없어서 발생하는 CLOUD_4040 오류 해결
- 테넌트 비교를 equals()에서 ID 비교로 변경 - Hibernate LazyInitializationException 문제 해결 - assignPermissionsToRole() 및 removePermissionFromRole() 메서드에 적용 - 활성 세션 외부에서 lazy-loaded Tenant 연관 접근 방지
- 사용하지 않는 lombok.RequiredArgsConstructor import 제거 - 클래스가 @requiredargsconstructor 대신 생성자 주입을 사용함
- AWS 계정 사전 설정부터 리소스 생성까지의 전체 플로우 문서화 - 프론트엔드 개발자를 위한 API 사용 가이드 포함 - 프로바이더 생성, 계정 등록, 사용자 역할 관리, 리소스 생성 절차 설명 - 에러 처리 및 체크리스트 포함
RoleService의 테넌트 비교 로직이 ID 비교로 변경됨에 따라 테스트의 Tenant 객체에 ID를 설정하도록 수정
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
refactor: AWS 계정 연동 - 리소스 생성 워크플로우 테스트
📋 개요
사용자에게 역할을 할당/제거할 수 있는 API를 추가하고, CloudResource 생성 시 발생하던 제약 조건 오류를 해결했습니다. CloudService가 존재하지 않을 경우 자동으로 생성하는 로직을 추가하여 리소스 생성 프로세스를 개선했습니다. 또한 AWS 설정 및 리소스 생성 가이드를 추가했습니다. 참고해서 프론트엔드 개발하면 됩니다.
✨ 참고사항
조직, 테넌트 관련 기능이 통합되지 않아서 사용자 데이터를 임시로 삽입하고 리팩토링을 진행했습니다. 조직에 사용자 추가 후 리소스 생성, 프로젝트 생성 관련 로직은 기능이 통합되고 실행할 예정입니다.
✨ 주요 변경사항
1. 사용자 역할 관리 API 추가
POST /api/v1/roles/users/{username}: 사용자에게 역할 할당DELETE /api/v1/roles/users/{username}/{roleKey}: 사용자에서 역할 제거assignRolesToUser(): 여러 역할을 동시에 할당removeRoleFromUser(): 특정 역할 제거findByRoleKeyInAndTenant()메서드 추가2. CloudResource 생성 시 CloudService 자동 생성
문제 상황
CloudResource엔티티는CloudService와@ManyToOne관계를 가지며,service_id필드가nullable = false제약 조건을 가짐CloudService가 DB에 존재하지 않으면CLOUD_4040오류 발생findServiceOrNull()로 조회하여null반환 시 오류 발생해결 방법
findServiceOrNull()→findServiceOrCreate()로 변경CloudService가 존재하지 않을 경우 자동으로 기본CloudService생성createDefaultService()메서드를 통해 최소한의 필수 정보만으로 생성serviceKey: 리소스 생성 시 전달된serviceKey사용 (예: "S3")serviceName:serviceKey와 동일하게 설정serviceType,serviceCategory,displayName:null로 설정 (불필요한 자동 결정 로직 제거)status:ACTIVE로 설정isRegionSpecific:true로 설정설계 결정
serviceType,serviceCategory,displayName을null로 설정한 이유serviceKey기반으로 자동 결정하는 로직이 있었으나, 실제로 사용되지 않음CloudService: 클라우드 서비스의 메타데이터 (예: AWS S3 서비스 정의)CloudResource: 실제 생성된 리소스 인스턴스 (예: 특정 S3 Bucket)CloudResource는 반드시 하나의CloudService에 연결되어야 함결과
CLOUD_4040오류 해결3. LazyInitializationException 방지
role.getTenant().equals(currentTenant)→role.getTenant().getId().equals(currentTenant.getId())4. 코드 정리
5. 문서 추가
🔧 변경된 파일
🧪 테스트
API 테스트
POST /api/v1/roles/users/{username}- 역할 할당 성공POST /api/v1/roles/users/{username}- 존재하지 않는 역할 에러 처리DELETE /api/v1/roles/users/{username}/{roleKey}- 역할 제거 성공USER_UPDATE또는SUPER_ADMIN필요)기능 테스트
serviceKey,serviceName,status)serviceType,serviceCategory,displayName이null로 설정되는지 확인📝 관련 이슈
CLOUD_4040오류 발생CloudResource.service_id가nullable = false인데, 해당CloudService가 DB에 존재하지 않음✅ 체크리스트
🔍 리뷰 포인트
사용자 역할 관리 API
CloudService 자동 생성
CloudResource.service_id가nullable = false이므로 CloudService가 반드시 필요findServiceOrCreate()로 존재하지 않으면 자동 생성serviceKey,serviceName만 설정하고 나머지는nullserviceType,serviceCategory,displayName업데이트 가능LazyInitializationException 방지