일상 코딩
[ChatGPT o1 답변] ChatGPT를 이용한 개발시 앞선 코드와의 연계성 및 맥락 끊김 문제 해결 방법 답변 본문
[ChatGPT o1 답변] ChatGPT를 이용한 개발시 앞선 코드와의 연계성 및 맥락 끊김 문제 해결 방법 답변
polarcompass 2025. 1. 12. 19:45아래 답변은 단계별로 구성되어 있습니다.
“단계적으로 세부 파일 코드를 생성 받는 경우, 이미 작성된 코드와의 연계성이나 맥락이 끊기지 않을까?” 하는 고민에 대한 답변을 정리해 드립니다.
1. 단계별 코드를 생성할 때 겪는 문제점
1) 맥락(컨텍스트) 부족
- AI가 한 번에 긴 코드를 전부 생성하지 않고, 파일별로 쪼개서 만들다 보면,
- 나중에 생성되는 코드가 이미 작성된 코드의 내용(예: 함수명, 인터페이스, 내부 로직)을 완전히 파악하지 못할 수 있습니다.
2) 세션 기억 한계
- AI(예: ChatGPT)의 문맥 길이(토큰 제한)가 있기 때문에, 대화가 길어지면 초기 코드를 “잊어버리거나” 생략해 버릴 수 있습니다.
- 따라서 “이전 메시지에서 언급했던 함수 A가 어디에서 어떻게 쓰이는지”를 AI가 스스로 잊어버릴 위험이 있습니다.
3) 프로젝트가 복잡해질수록
- 파일 간 의존관계가 늘어나고, 여러 라이브러리를 함께 사용하게 되면, 단계별 코드를 받고 합치는 과정에서 타이핑 오류, 함수 시그니처 불일치, 네임스페이스/임포트 충돌 등이 발생할 가능성이 높아집니다.
2. 문제점을 해결하는 방법
이 문제를 완전히 해결하기 위해서는, AI의 한 번의 응답에 “전체 프로젝트 구조와 서로 연동되는 코드”를 모두 포함시키는 것이 가장 이상적입니다. 그러나, 실제로는 프로젝트가 너무 커서 한 번에 설명하기 어렵거나, 단계적으로 개발하며 파일별 코드를 차근차근 작성해야 할 수도 있습니다.
아래와 같은 3가지 방법을 권장드립니다.
1) “참조 코드”를 명시적으로 재제공하기
- 매 프롬프트마다, 이전에 AI가 생성해 준 코드를 요약 또는 핵심 부분만이라도 다시 포함해 주는 방식입니다.
- 예:
- AI가
src/p2p/gun.js
코드를 생성했다면, 다음에src/services/auth.ts
코드가 필요할 때 이전 코드를 그대로 붙여넣고
“이전 코드(gun.js
)에서 Gun 인스턴스를 어떻게 생성했으니, 그 인스턴스를 여기서도 활용하도록auth.ts
를 수정해 달라”고 요청합니다. - 이렇게 하면 AI가 “이미 작성된 코드”를 다시 한 번 인지하고, 새 코드를 작성할 때 해당 함수나 변수명을 인식할 수 있습니다.
- AI가
이 방법은 대화가 길어지는 것을 감수하는 대신, AI의 맥락 유실을 최소화해 준다는 장점이 있습니다.
2) “전체 코드”를 일정 간격으로 정리/통합하기
- 한두 번 코드를 생성할 때마다, 현재까지 작성된 코드를 로컬에서(개발자 측) 하나로 통합하고 간단히 빌드 혹은 테스팅을 해봅니다.
- 그 후, 새 프롬프트로 넘어가기 전에, “현재 코드 전체”를 (가능하다면) AI에게 다시 요약해서 보여주며,
“이것이 현재까지 통합된 코드다. 다음 파일(예:
pushNotifications.js
)을 작성할 때, 이 코드 기반으로 작동해야 한다.”
라고 지시합니다.
이 과정을 통해 AI에게 최신 코드베이스의 스냅샷을 계속 업데이트해 주는 것이죠.
3) “한 덩어리”로 만드는 전략
- 단계별로 진행하더라도, 최종적인 특정 시점(예: “v1.0” 초기 릴리즈 단계)에서는
- “이제 전부 합쳐서,
package.json
,src/p2p/gun.js
,src/services/auth.ts
,App.tsx
(혹은index.js
), 기타 필요한 파일을 한 덩어리로 보여주고, 유기적으로 연결되는지 확인해 줘”
라고 한 번에 요청할 수 있습니다.
- “이제 전부 합쳐서,
- 그럼 AI는 전체 코드를 다시 점검하며, 임포트 구문이나 함수 시그니처가 일치하는지 등을 (기계적으로나마) 확인하고, 가능한 수정본을 제시해 줄 수 있습니다.
3. 실제 개발 관점에서
1) AI 코드 → 로컬 환경에서 빌드/테스트
- 가장 확실한 방법은, AI가 준 코드를 로컬(개발자 환경)에 붙여넣고, 빌드/런/테스트를 해보는 것입니다.
- 에러 로그나 워닝을 다시 AI에게 전달하면, “이 에러 메시지를 해결해 달라”고 할 수 있습니다.
2) 버전 관리(Git) & CI
- 코드를 작성할 때마다, Git에 커밋하고(브랜치를 나눠), CI(예: GitHub Actions)로 자동 빌드/테스트를 돌립니다.
- 실패 로그(테스트 실패, 타입 에러 등)가 생기면, 그 로그를 AI에게 함께 전달해 “어떻게 해결해야 할까?” 물어봅니다.
3) AI 코드 = 초안(Boilerplate)
- AI가 작성해주는 코드는 “참고용 보일러플레이트”이며, 실제로는 개발자가 검토·리팩토링·테스트를 거쳐야 합니다.
- 특히 복잡도가 올라가면 AI의 문맥 처리 한계로 인해 중간중간 작은 불일치가 생기는 건 어쩔 수 없는 현실입니다.
4. 결론 및 권장 프로세스
- “단계별”로 물어볼 때, 이전 코드를 간단히 요약하거나 전체를 복사해서 “AI가 다시 참고하도록” 제공하는 것이 좋습니다.
- 주기적으로 프로젝트 전체 코드를 통합본 형태로 AI에게 주고, “맞게 연결되는지 확인해달라”고 요청합니다.
- 실제 빌드와 테스트를 통해 에러를 잡아가면서, AI에게 해결책을 물어보는 반복 작업이 필요합니다.
추천 워크플로우
- 1단계: 프로젝트 구조 + 핵심 요구사항(프롬프트) 한 번에 전달 → “초기 세팅 코드” 받기
- 2단계: 파일 단위로 세부 구현 물어보기 (이때 이전 코드 맥락을 복사해서 넣어주기)
- 3단계: 중간 점검(빌드/테스트) → 에러/경고 해결 → 통합본 업데이트
- 4단계: 모든 파트가 어느 정도 완성되면, AI에게 통합 코드를 검토하게 하여 (임포트 경로, 함수명, 객체 구조) 일관성 있는 코드로 정리
이렇게 하면, 단계별 접근을 하면서도 연계성을 어느 정도 유지할 수 있습니다.
정리하면, 단계별 코드를 생성하더라도, AI의 문맥 유실을 최소화하기 위해서는 “반드시 이전 코드를 다시 제시”하거나 “전체 통합본을 주기적으로 갱신해서 AI에게 확인”시켜주는 방식이 가장 효과적입니다.
추가 팁:
- 코드 스니펫이 너무 길다면, 요약본(핵심 함수, 중요 인터페이스, 주석)만 붙여넣고, “이전 답변에서 자세히 구현한 함수
xxx
는 변동 없음”이라고 언급해 주어도 됩니다. - AI가 텍스트만 인식하기 때문에, “파일이름 + 코드 내용”을 텍스트 형태로 전달하는 것이 필수입니다.
- 프로젝트가 매우 방대해지면, ChatGPT보다는 코드 전용 AI(코파일럿, 코랩스, etc.)과 함께 사용하거나, 잘 정돈된 문서(API 명세, 타입 정의)를 병행하는 편이 낫습니다.
결론
- “단계적으로 물어볼 때 프로젝트 전반의 코드 연계를 어떻게 보장하느냐?”라는 고민은 당연합니다.
- 최선의 방법은, 각 단계마다 이전 코드를 함께 전달하여 AI의 문맥을 갱신하고, 주기적으로 전체 코드를 리캡하여 일관성을 확인시키는 것입니다.
- 실제론 개발자 측에서 빌드/테스트를 병행해야 하며, AI 코드는 어디까지나 초안 역할임을 염두에 두시면 됩니다.
'Ai > Prompt 엔지니어링' 카테고리의 다른 글
[프롬프트] 고품질 코드를 얻기 위한 프롬프트 생성 학습 문서 (1) | 2025.01.12 |
---|---|
[프롬프트] 고품질 코드를 유도하는 프롬프트 엔지니어링 원칙 및 예시 템플릿 (0) | 2025.01.12 |
[프롬프트] Ai 프롬프트 템플릿 추천 사이트 (0) | 2025.01.12 |