Post

Cursor를 활용한 코드 리버스 엔지니어링: Class Diagram & Sequence Diagram 생성

개요

기존 코드베이스를 이해하고 문서화하는 것은 개발자에게 중요한 작업 중 하나입니다. Cursor AI를 활용하면 복잡한 코드를 효율적으로 분석하여 UML 다이어그램으로 시각화할 수 있습니다. 이 가이드에서는 Class Diagram과 Sequence Diagram을 생성하는 실전 방법을 다룹니다.

1. 사전 준비

필요한 도구

  • Cursor IDE: AI 기반 코드 에디터
  • PlantUML 확장: 다이어그램 생성을 위한 VSCode 확장
  • Mermaid 확장: 브라우저 기반 다이어그램 도구
  • 분석할 코드베이스: Java, TypeScript, Python 등

Cursor 설정

1
2
3
4
5
# PlantUML 확장 설치
code --install-extension plantuml.plantuml

# Mermaid 확장 설치  
code --install-extension bierner.markdown-mermaid

2. Class Diagram 생성 방법

2.1 단일 클래스 분석

프롬프트 예시:

1
2
3
4
5
6
7
다음 클래스의 구조를 분석하여 PlantUML Class Diagram을 생성해줘:

[코드 붙여넣기]

- 모든 필드와 메서드 포함
- 접근 제어자 표시
- 관계성 명시

실제 적용 예시:

1
2
3
4
5
6
7
8
9
10
11
12
public class UserService {
    private UserRepository userRepository;
    private EmailService emailService;
    
    public User createUser(String email, String name) {
        // 구현 코드
    }
    
    public void sendWelcomeEmail(User user) {
        // 구현 코드
    }
}

Cursor 생성 결과:

@startuml
class UserService {
    - userRepository: UserRepository
    - emailService: EmailService
    + createUser(email: String, name: String): User
    + sendWelcomeEmail(user: User): void
}

class UserRepository {
    + save(user: User): User
    + findByEmail(email: String): User
}

class EmailService {
    + sendEmail(to: String, subject: String, body: String): void
}

class User {
    - id: Long
    - email: String
    - name: String
    + getId(): Long
    + getEmail(): String
    + getName(): String
}

UserService --> UserRepository
UserService --> EmailService
UserService ..> User
@enduml

2.2 전체 프로젝트 구조 분석

단계별 접근법:

  1. 패키지 구조 파악 ``` 프로젝트의 전체 패키지 구조를 분석하고, 주요 클래스들 간의 의존성을 Class Diagram으로 표현해줘.

디렉토리 구조: src/ ├── controller/ ├── service/ ├── repository/ └── model/

1
2
2. **계층별 분석**

MVC 패턴으로 구성된 다음 코드들의 관계를 Class Diagram으로 표현해줘:

Controller Layer: [컨트롤러 코드들] Service Layer: [서비스 코드들]
Repository Layer: [레포지토리 코드들] Model Layer: [모델 코드들]

1
2
3
4
### 2.3 고급 분석 기법

**상속 관계 분석:**

다음 코드에서 상속, 구현, 의존성 관계를 모두 포함한 상세한 Class Diagram을 생성해줘:

[상속 구조가 있는 코드]

요구사항:

  • 추상 클래스와 인터페이스 구분
  • 상속 관계 화살표 표시
  • 의존성 주입 관계 표현 ```

3. Sequence Diagram 생성 방법

3.1 메서드 호출 흐름 분석

기본 프롬프트:

1
2
3
4
5
6
7
다음 메서드의 실행 흐름을 Sequence Diagram으로 표현해줘:

[메서드 코드]

- 모든 메서드 호출 순서 표시
- 조건문과 반복문 처리
- 예외 처리 흐름 포함

실제 예시:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class OrderController {
    public ResponseEntity<Order> createOrder(OrderRequest request) {
        // 1. 사용자 검증
        User user = userService.validateUser(request.getUserId());
        
        // 2. 재고 확인
        Product product = productService.getProduct(request.getProductId());
        inventoryService.checkStock(product, request.getQuantity());
        
        // 3. 주문 생성
        Order order = orderService.createOrder(user, product, request.getQuantity());
        
        // 4. 결제 처리
        Payment payment = paymentService.processPayment(order);
        
        // 5. 재고 차감
        inventoryService.decreaseStock(product, request.getQuantity());
        
        return ResponseEntity.ok(order);
    }
}

생성된 Sequence Diagram:

sequenceDiagram
    participant Client
    participant OrderController
    participant UserService
    participant ProductService
    participant InventoryService
    participant OrderService
    participant PaymentService

    Client->>OrderController: createOrder(OrderRequest)
    OrderController->>UserService: validateUser(userId)
    UserService-->>OrderController: User
    
    OrderController->>ProductService: getProduct(productId)
    ProductService-->>OrderController: Product
    
    OrderController->>InventoryService: checkStock(product, quantity)
    InventoryService-->>OrderController: void
    
    OrderController->>OrderService: createOrder(user, product, quantity)
    OrderService-->>OrderController: Order
    
    OrderController->>PaymentService: processPayment(order)
    PaymentService-->>OrderController: Payment
    
    OrderController->>InventoryService: decreaseStock(product, quantity)
    InventoryService-->>OrderController: void
    
    OrderController-->>Client: ResponseEntity<Order>

3.2 복잡한 비즈니스 로직 분석

조건분기가 있는 경우:

1
2
3
4
5
6
7
다음 코드의 모든 실행 경로를 포함한 Sequence Diagram을 생성해줘:

[조건문이 포함된 복잡한 로직]

- if/else 분기 표현
- 예외 상황 처리
- 비동기 호출 표시

반복문 처리:

1
2
3
4
5
6
7
다음 배치 처리 로직의 Sequence Diagram을 생성해줘:

[반복문이 포함된 코드]

- loop 구문 사용
- 배치 크기 표시
- 에러 처리 로직 포함

4. 실전 워크플로우

4.1 체계적 분석 프로세스

  1. 코드 구조 파악
    1
    2
    3
    4
    
    이 프로젝트의 전체 아키텍처를 파악하기 위해 다음을 분석해줘:
    - 주요 패키지와 클래스 식별
    - 디자인 패턴 적용 현황
    - 의존성 관계 매핑
    
  2. 핵심 플로우 식별
    1
    2
    3
    4
    
    사용자 등록부터 서비스 이용까지의 전체 플로우를 Sequence Diagram으로 표현해줘:
    - API 호출 시작점
    - 데이터베이스 상호작용
    - 외부 서비스 연동
    
  3. 다이어그램 최적화
    1
    2
    3
    4
    
    생성된 다이어그램을 다음 기준으로 개선해줘:
    - 가독성 향상
    - 중요하지 않은 세부사항 제거
    - 색상과 스타일 적용
    

4.2 자동화 스크립트

Cursor 자동 분석을 위한 설정:

1
2
3
4
5
6
7
8
9
10
{
  "cursor.ai": {
    "codeAnalysis": {
      "autoGenerateDiagrams": true,
      "diagramFormat": "plantuml",
      "includePrivateMembers": false,
      "maxDepth": 3
    }
  }
}

5. 고급 활용 팁

5.1 대규모 프로젝트 분석

모듈별 분석:

1
2
3
4
5
6
7
8
9
마이크로서비스 아키텍처의 다음 서비스들 간의 상호작용을 Sequence Diagram으로 표현해줘:

Services:
- User Service
- Order Service  
- Payment Service
- Notification Service

API Gateway를 통한 통신 포함

도메인 주도 설계 적용:

1
2
3
4
DDD 패턴으로 구성된 코드의 도메인 모델을 Class Diagram으로 표현해줘:
- Aggregate 경계 표시
- Entity와 Value Object 구분
- Domain Service 표현

5.2 다이어그램 품질 향상

상세 분석 요청:

1
2
3
4
5
6
다음 요구사항을 만족하는 고품질 Class Diagram을 생성해줘:

1. 스테레오타입 사용 (<<interface>>, <<abstract>>)
2. 다중성 표시 (1..*、0..1)
3. 제약조건 명시 ({ordered}, {unique})
4. 패키지 구조 반영

성능 고려사항:

1
2
3
4
5
대규모 시스템의 Sequence Diagram을 생성할 때:
- 주요 플로우만 표시
- 비동기 처리 명시
- 타임아웃과 재시도 로직 포함
- 성능 병목 지점 표시

6. 통합 워크플로우 예시

완전한 리버스 엔지니어링 프로세스

  1. 초기 분석 ``` 다음 Spring Boot 프로젝트를 분석해서:
  2. 전체 Class Diagram 생성
  3. 주요 API 엔드포인트의 Sequence Diagram 생성
  4. 데이터베이스 스키마와의 매핑 관계 표시

[프로젝트 코드 전체]

1
2
2. **상세 분석**

위에서 생성한 다이어그램을 바탕으로:

  1. 각 레이어별 책임 분석
  2. SOLID 원칙 준수 여부 확인
  3. 개선 사항 제안 ```

  4. 문서화
    1
    2
    3
    4
    5
    
    분석 결과를 기술 문서로 정리해줘:
    - 아키텍처 개요
    - 주요 컴포넌트 설명
    - 데이터 플로우 설명
    - 확장성 고려사항
    

7. 도구별 출력 형식

PlantUML

  • 정확한 UML 표준 준수
  • 복잡한 관계 표현 가능
  • 텍스트 기반 버전 관리 친화적

Mermaid

  • 웹 친화적 렌더링
  • GitHub 통합 지원
  • 단순하고 직관적

선택 기준

  • PlantUML: 상세한 설계 문서용
  • Mermaid: 웹 문서화 및 협업용

결론

Cursor를 활용한 코드 리버스 엔지니어링은 레거시 코드 이해, 시스템 문서화, 아키텍처 분석에 매우 유용합니다. 체계적인 접근과 적절한 프롬프트 활용으로 고품질의 UML 다이어그램을 효율적으로 생성할 수 있습니다.

핵심은 단계적 접근과 구체적인 요구사항 명시입니다. 이를 통해 개발팀의 생산성과 코드 품질을 크게 향상시킬 수 있습니다.