Skip to content

[FEATURE] 멀티 클라우드 자원 생명주기 DB 동기화 구현 #169

Description

@moonhyeonmin

📌 개요

멀티 클라우드(AWS, Azure, GCP 등) 통합 관리 플랫폼에서 UseCase 서비스가
각 CSP의 자원 작업을 수행한 후 CloudResource 엔티티를 DB에 동기화하는 기능을 구현합니다.

🎯 목표

  • CSP 독립적인 자원 생명주기 관리 (Provider-Agnostic)
  • 다양한 클라우드 프로바이더(AWS, Azure, GCP 등)의 자원을 단일 DB에서 통합 추적
  • UseCase 레벨에서 CSP 작업 + DB 저장을 트랜잭션으로 관리

📂 영향 범위

1. Repository 메서드 추가 (CloudResourceRepository.java)

메서드 설명
Optional<CloudResource> findOptionalByResourceId(String resourceId) 리소스 ID로 조회 (Optional 반환)
boolean existsByResourceId(String resourceId) 리소스 존재 여부 확인
List<CloudResource> findByResourceType(ResourceType type) 리소스 타입별 조회
List<CloudResource> findByProviderProviderType(ProviderType type) 프로바이더별 조회
List<CloudResource> findByTenantKeyAndResourceType(String tenantKey, ResourceType type) 테넌트 + 리소스 타입별 조회
List<CloudResource> findByLifecycleStateNotIn(List<LifecycleState> excludeStates) 특정 상태 제외 조회 (동기화용)
@Modifying updateLifecycleState(String resourceId, LifecycleState state, LocalDateTime timestamp) 생명주기 상태 업데이트
@Modifying softDeleteByResourceId(String resourceId) 소프트 삭제 처리

2. UseCase 서비스 수정

VmUseCaseService.java

  • createInstance(): CSP 인스턴스 생성 후 CloudResource 저장
  • startInstance(): CSP 시작 후 lifecycleState → RUNNING
  • stopInstance(): CSP 중지 후 lifecycleState → STOPPED
  • rebootInstance(): CSP 재부팅 후 상태 업데이트
  • terminateInstance(): CSP 종료 후 lifecycleState → TERMINATED
  • deleteInstance(): CSP 삭제 후 소프트 삭제

ObjectStorageUseCaseService.java

  • createContainer(): 버킷/컨테이너/블롭 생성 후 CloudResource 저장
  • deleteContainer(): 삭제 후 소프트 삭제

VpcUseCaseService.java

  • VPC/VNet/Network 생성/삭제 시 CloudResource 저장/삭제

✅ 체크리스트

Repository

  • CloudResourceRepository에 멀티 CSP 조회 메서드 추가
  • 프로바이더 타입별 필터링 쿼리 구현
  • @Modifying, @Transactional 적절히 적용

UseCase 서비스

  • VmUseCaseService CSP 작업 후 DB 저장 (Provider-Agnostic)
  • ObjectStorageUseCaseService DB 저장 로직 추가
  • VpcUseCaseService DB 저장 로직 추가
  • CSP 작업 실패 시 DB 롤백 처리

테스트

  • Repository 단위 테스트 (다양한 ProviderType으로)
  • UseCase 서비스 통합 테스트
  • CSP 작업 실패 시 롤백 테스트

📝 참고사항

  • 멀티 클라우드 통합 관리 플랫폼 (AWS, Azure, GCP 등)
  • 단일 데이터베이스에서 모든 CSP 자원 통합 관리
  • CloudProvider.ProviderType으로 CSP 구분
  • CSP별 Adapter는 Port 인터페이스를 구현하여 교체 가능

Metadata

Metadata

Assignees

Labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions