?
사용자

레거시 코드 의도 파악을 위한 AI 프롬프트 레시피: '왜?' 질문 기법

복잡하거나 문서화되지 않은 레거시 코드의 숨겨진 의도를 AI와 함께 효과적으로 추론하고 이해하는 방법을 안내합니다. 코드 분석 시간을 단축하고 유지보수성을 높이는 데 유용합니다.

#legacy code#ai prompt#code analysis#developer productivity#레거시 코드
recipe.sh
## 레거시 코드 의도 추론 질문: '왜?' 질문 기법

레거시 코드는 종종 문서화가 부족하거나 개발자가 퇴사하여 의도를 파악하기 어렵습니다. 이 레시피는 AI 모델을 활용하여 코드의 숨겨진 의도를 추론하는 효과적인 프롬프트 작성법을 설명합니다.

### 1. 개념 정의

'왜?' 질문 기법은 코드의 특정 부분(함수, 변수, 로직 블록 등)이 왜 그렇게 작성되었는지, 즉 어떤 목적과 의도를 가지고 설계되었는지를 AI에게 질문하여 이해하는 방식입니다. 단순히 '무엇을' 하는지 넘어 '왜' 하는지에 집중하여 근본적인 설계 원칙이나 제약 사항을 파악하는 데 중점을 둡니다.

### 2. 언제, 왜 사용하는가?

*   **레거시 코드 분석 시:** 문서화가 부족하거나 이해하기 어려운 코드 블록의 목적을 파악할 때.
*   **리팩토링 전:** 기존 코드의 의도를 명확히 이해하여 안전하고 효과적인 리팩토링 계획을 수립할 때.
*   **신규 기능 추가 시:** 기존 코드와의 상호작용 방식을 정확히 이해하여 잠재적 충돌이나 문제를 예방할 때.
*   **코드 리뷰 시:** 동료가 작성한 코드나 과거에 작성된 코드의 숨겨진 의도를 빠르게 파악하고 질문할 때.
*   **학습 목적:** 특정 패턴이나 알고리즘이 왜 이런 방식으로 구현되었는지 깊이 이해하고 싶을 때.

'왜?'라는 질문은 코드의 동작 방식뿐만 아니라, 그 이면에 숨겨진 비즈니스 로직, 성능 최적화 시도, 특정 기술적 제약, 혹은 과거의 특정 문제 해결을 위한 방안 등을 추론하도록 유도합니다.

### 3. 사용법 단계

AI 모델(예: GPT, Claude, Gemini 등)을 대상으로 다음 단계를 따라 프롬프트를 구성합니다.

**단계 1: 코드 제공 및 맥락 설명**

*   먼저 분석하고자 하는 코드 조각을 명확하게 제공합니다.
*   가능하다면, 해당 코드가 속한 전체 파일의 역할, 혹은 시스템 전체에서의 대략적인 위치와 기능을 간략히 설명합니다. (예: '이 코드는 사용자 인증 모듈의 일부입니다.', '이 함수는 비동기 데이터 처리를 담당합니다.')

**단계 2: '무엇'을 하는지 요약 요청 (선택 사항이지만 권장)**

*   코드의 기본적인 동작을 먼저 파악하기 위해, AI에게 코드의 기능적 요약을 요청할 수 있습니다.
*   예시 프롬프트: "아래 [언어] 코드는 무엇을 하는 코드인지 간략하게 설명해주세요."

**단계 3: 핵심 '왜?' 질문 던지기**

*   이제 코드의 특정 부분이나 전체 로직에 대해 '왜?'라는 질문을 구체적으로 던집니다.
*   질문은 코드의 특정 로직, 변수명, 함수명, 혹은 특정 패턴에 집중할 수 있습니다.
*   예시 프롬프트:
    *   "이 `calculate_discount` 함수가 특정 조건에서 `previous_price * 0.95` 와 같이 5% 할인을 적용하는 이유는 무엇인가요? 특별한 비즈니스 규칙이 있나요, 아니면 과거의 특정 요구사항 때문인가요?"
    *   "`user_status` 변수에 'PENDING_APPROVAL' 이라는 상태값이 사용된 이유는 무엇인가요? 이 상태가 가지는 의미와 다른 상태값과의 관계를 설명해주세요."
    *   "이 루프 안에서 `temp_variable` 을 사용하는 특별한 이유가 있나요? 직접 변수값을 사용하면 안 되는 이유가 궁금합니다."
    *   "왜 이 함수는 예외 처리를 하지 않고 바로 `System.exit(1)` 을 호출하나요?"

**단계 4: 추가적인 맥락 질문 및 추론 심화**

*   AI의 답변을 바탕으로 더 궁금한 점을 질문합니다.
*   예시 프롬프트:
    *   "말씀하신 '과거의 프로젝트 요구사항'에 대해 더 자세히 설명해주실 수 있나요?"
    *   "이러한 설계가 현재 시스템에 미칠 수 있는 잠재적 문제점은 무엇일까요?"
    *   "더 나은 대안이 있다면 어떤 것이 있을까요?"

### 4. 주의사항

*   **AI는 추론할 뿐, 확신할 수는 없습니다.** AI의 답변은 주어진 정보와 학습 데이터를 기반으로 한 추론이며, 실제 개발자의 의도와 100% 일치하지 않을 수 있습니다. 항상 비판적으로 검토해야 합니다.
*   **코드 조각만으로는 한계가 있습니다.** 충분한 맥락(관련 코드, 시스템 아키텍처, 비즈니스 요구사항 등)을 제공할수록 AI의 답변 정확도가 높아집니다.
*   **복잡한 질문은 분할하세요.** 너무 포괄적이거나 복잡한 질문은 AI가 정확한 답변을 생성하기 어렵게 만듭니다. 작은 단위로 나누어 질문하는 것이 효과적입니다.
*   **민감 정보는 제거하세요.** 코드에 포함된 API 키, 사용자 데이터 등 민감 정보는 반드시 제거하거나 마스킹 처리한 후 AI에게 제공해야 합니다.

### 5. 짧은 예시

**상황:** 다음과 같은 PHP 코드를 발견했습니다.

```php
function processUserData(array $users) {
    $active_users = [];
    foreach ($users as $user) {
        if ($user['is_active'] == 1 && $user['last_login'] > strtotime('-30 days')) {
            $active_users[] = $user['id'];
        }
    }
    return $active_users;
}
```

**프롬프트 예시:**

"아래 PHP 코드는 사용자 목록을 받아 처리하는 함수입니다.

```php
function processUserData(array $users) {
    $active_users = [];
    foreach ($users as $user) {
        if ($user['is_active'] == 1 && $user['last_login'] > strtotime('-30 days')) {
            $active_users[] = $user['id'];
        }
    }
    return $active_users;
}
```

이 함수에서 `$user['is_active'] == 1` 조건과 `$user['last_login'] > strtotime('-30 days')` 조건을 함께 사용하는 이유는 무엇인가요? 단순히 최근 로그인 사용자만 필터링하는 것이 아니라, '활성(is_active)' 상태를 함께 확인하는 특별한 의도가 있나요?"

**AI 예상 답변:**

"이 코드에서 `is_active` 상태와 최근 로그인 여부를 함께 확인하는 것은 다음과 같은 의도로 해석될 수 있습니다.

1.  **데이터 무결성 및 보안 강화:** `is_active` 플래그는 사용자가 명시적으로 계정을 비활성화했거나 관리자에 의해 비활성화된 경우를 나타낼 수 있습니다. 단순히 마지막 로그인 기록만으로는 사용자가 현재 활동적인 상태인지 확신할 수 없으므로, 이중으로 확인하여 더 정확한 '활성 사용자' 목록을 생성하려는 의도일 수 있습니다.
2.  **리소스 관리:** 비활성화된 사용자가 최근에 로그인했더라도, 시스템 리소스를 점유하는 것을 방지하기 위해 '활성' 상태로 명시적으로 표시된 사용자만 대상으로 하려는 목적일 수 있습니다.
3.  **과거 요구사항 반영:** 과거 시스템 설계 시, '최근 로그인'과는 별개로 '현재 활성' 상태를 나타내는 별도 필드가 필요했을 수 있습니다. 이 코드는 해당 요구사항을 반영하고 있을 가능성이 있습니다.

결론적으로, 이중 조건은 단순히 최근 접속자 목록을 넘어 '현재 시스템에서 유효하고 활동적인 사용자'만을 정확하게 식별하려는 의도로 보입니다."

이 기법을 통해 레거시 코드의 복잡성을 헤쳐나가고 유지보수 효율성을 높일 수 있습니다.
9
스크랩
9
좋아요
0
댓글
레거시 코드 의도 파악을 위한 AI 프롬프트 레시피: '왜?' 질문 기법