ChatGPT 코딩 에러 줄이려면? ‘SCoT’ 프롬프트 엔지니어링 필수 가이드
“로직은 완벽한데 왜 에러가 나지?”
오늘도 ChatGPT가 짜준 코드를 보며 디버깅에 시간을 쏟고 계신가요? 말은 청산유수인데 막상 돌려보면 변수가 꼬이거나 무한 루프에 빠지는 현상, 개발자라면 익숙하실 겁니다.
단순히 “더 잘 짜줘”라고 읅소한다고 해결될 문제는 아닙니다. 북경대 연구진이 발표한 SCoT(Structured Chain-of-Thought) 기법에 따르면, 프롬프트에 ‘구조’만 잡아줘도 코드 정확도(Pass@1)가 13.79%나 올라간다고 합니다.
여러분의 ‘칼퇴’를 앞당겨 줄, 가장 논리적인 프롬프트 설계법을 정리해 드립니다.
1. 왜 기존의 ‘생각의 사슬(CoT)’은 코딩에서 실패하는가
우리는 보통 복잡한 문제를 풀 때 “단계별로 생각해서 알려줘(Chain-of-Thought)”라고 요청합니다. 수학이나 상식 문제에서는 이게 통했죠. 하지만 코딩은 다릅니다.
이유는 간단합니다. 언어의 본질적인 차이 때문입니다.
- 자연어(사람의 말): 유연하지만 모호합니다. “적당히 훑어서 큰 거 골라내”라고 해도 찰떡같이 알아듣길 원하죠.
- 프로그래밍 언어: 엄격한 구조(Structure)가 생명입니다. for, if, while 같은 제어문이 명확해야 합니다.
논문은 이 지점을 꼬집습니다. 자연어의 모호함으로 뭉뚱그려 설명하면, AI도 뭉뚱그려 코드를 짭니다. 즉, 생각의 과정부터 ‘코드처럼’ 구조적으로 해야 결과물도 완벽해집니다.
2. 해결책: 구조적 사고 연쇄(SCoT)
SCoT(Structured Chain-of-Thought)는 LLM에게 코드를 짜기 전, 강제로 ‘프로그래밍 제어 구조’에 맞춰 생각하게 만드는 기법입니다.
모든 프로그램은 결국 다음 3가지 기본 구조로 귀결된다는 점에 착안했습니다.
AI가 꼭 이해해야 할 3가지 제어 구조
- 순차 (Sequence): 순서대로 실행
- 분기 (Branch): if, else를 통한 판단
- 반복 (Loop): for, while을 통한 반복
여기에 명확한 입출력(I/O) 정의를 더하면, 모델은 비로소 요구사항을 ‘개발자스럽게’ 이해하기 시작합니다.
3. 잘못된 사례 vs 올바른 사례
백문이 불여일견이죠. 같은 요청을 어떻게 처리하는지 비교해 보겠습니다.
❌ Bad Case: 일반적인 CoT
“리스트를 초기화하고, 문자열을 하나씩 확인해서… 괄호가 열리면 깊이를 더하고 닫히면 빼고…”
문제점: 줄글로 나열되어 있어 루프의 범위가 어디까지인지, 조건문이 어디서 끝나는지 모호합니다. 모델도 헷갈릴 수밖에 없죠.
⭕ Good Case: SCoT 적용
입력: 문자열 / 출력: 정수 리스트
1. for 각 문자열을 순회:
2. for 문자열 내 각 문자 확인:
3. if 문자가 '(' 이면: 깊이 +1
4. else if 문자가 ')' 이면: 깊이 -1
장점: 들여쓰기와 제어문을 통해 논리 구조가 명확합니다. 의사코드(Pseudo-code)와 비슷하지만, 이를 프롬프트 엔지니어링의 핵심으로 삼았다는 것이 차이점입니다.
4. 실전 가이드: SCoT 프롬프트 템플릿
이론은 여기까지입니다. 당장 실무에 적용할 수 있는 2단계(Two-step) 프로세스를 제안합니다. 한 번에 시키지 말고, ‘설계’와 ‘구현’을 분리하는 것이 핵심입니다.
Step 1: 구조적 사고(설계) 요청
Role: Senior Software Architect Instruction: 사용자의 요구사항을 분석하여 코드를 작성하기 위한 '구조적 사고 과정(SCoT)'을 먼저 작성해주세요. 반드시 다음 3가지 구조를 명시적으로 사용해야 합니다: 1. Sequence (순차) 2. Branch (분기: if, else) 3. Loop (반복: for, while) 또한, 시작 부분에 반드시 [입력(Input)]과 [출력(Output)]의 타입과 형식을 정의하세요. 자연어 설명을 섞어서 작성하되, 프로그래밍 구조(들여쓰기 포함)를 지키세요. User Requirement: (원하는 기능을 구체적으로 입력하세요)
Step 2: 설계를 바탕으로 코드 구현
Instruction: 위에서 작성한 '구조적 사고 과정'을 바탕으로 실제 파이썬(Python) 코드를 작성해주세요. 구조적 사고 과정에 논리적 오류가 있다면 수정해서 반영하세요.
이 간단한 구조 전환만으로도 AI의 코드 정확도가 눈에 띄게 올라갑니다.
5. 마치며: 질문의 수준이 답변의 수준을 결정합니다
“개떡같이 말해도 찰떡같이 알아듣는” AI는 아직 없습니다. AI는 우리의 거울입니다. 우리가 논리적이고 구조적으로 질문할 때, 비로소 가장 완벽한 코드를 내놓습니다.
오늘 소개한 SCoT는 단순히 코딩뿐만 아니라, 복잡한 비즈니스 로직이나 데이터 파이프라인을 설계할 때도 유용합니다. 지금 바로 IDE를 켜고, 지긋지긋한 디버깅 지옥에서 탈출해 보시기 바랍니다.
여러분의 개발 생산성이 이 한 가지 구조적 사고의 변화로 인해 극적으로 향상되기를 바랍니다.
