From Office Dinners to Client Entertainment: Smart Ways to Record the Business Scene
Learn discreet, professional methods to capture company dinners and client entertainment—preserve receipts, seating, and moments for expenses and follow-up without disrupting the occasion.
The Secret LLM Inference Trick Hidden in llama.cpp
Discover how llama.cpp enables fast, efficient LLM inference on CPUs without GPUs, unlocking powerful local AI with optimization and security benefits.
Context Management and Input Structuring in Code Prompts
Shelled AI (Global)
•
Hey, welcome back! 지난번 포스트 ["Learn prompt engineering techniques specific to coding AI"](https://platform.openai.com/docs/guides/completion/best-practices) 읽어보셨나요? (못 보셨다면 위 링크에서 확인해보세요!) 댓글에 **Context Management와 Input Structuring in Code Prompts**에 대한 질문이 정말 많았어요. 그래서 오늘은 이 주제를 제대로 파헤쳐볼까 합니다.
솔직히 말해서, GPT-4나 Copilot 같은 코드 생성 모델에게 짧은 함수 이상을 시켜보신 분이라면 한 번쯤은 ‘컨텍스트 윈도우’라는 벽에 부딪혀보셨을 거예요. 저도 처음엔 코드랑 문서 다 집어넣었다가 에러가 나거나, 더 최악으로는 완전 엉뚱한 결과물이 나와서 멘붕이었죠. “이거 내가 뭔가 망가뜨린 건가?” 싶을 정도로요. 그런데, 저만 그런 게 아니더라고요. 많은 분들이 공유해주셨듯, 모델에 *어떤 정보*를 *어떻게* 먹일지 고민하는 게 절반은 먹고 들어가는 셈이더라고요.
그럼 **context management**가 왜 이렇게 중요할까요? 코드 생성에선 한 글자, 한 토큰이 다 의미가 있어요. 대부분의 AI 모델은 입력 크기에 한계가 있죠. 마치 작은 화이트보드에 글씨를 쓰는 것처럼, 너무 많이 쓰면 중요한 내용이 밀려나고, 모델이 변수명이나 클래스 구조 같은 핵심 정보를 까먹어버립니다. 반대로 너무 적게 넣거나 구조가 엉성하면, 모델이 헷갈리거나 불완전한 코드를 내놓죠. 이럴 때 진짜 답답하죠. 마감은 다가오는데 결과물은 엉망이고요.
하지만 좋은 소식! **Input structuring과 context management**는 마법사가 아니라도 누구나 배울 수 있습니다. 오늘 포스트에서는 이런 내용을 다룹니다:
- 코드 생성 모델에서 입력을 잘 정리하는 게 왜 중요한지
- 정보 필터링, 요약, 우선순위 정하기 등 실전 기법
- 명확하고 관련성 높은 프롬프트 구조화 방법
- 실제 예시와 (제가 망했던 경험담도 포함!)
- 바로 써먹을 수 있는 도구와 베스트 프랙티스
읽고 나면 *무엇*을 해야 할지뿐 아니라, *왜* 그렇게 해야 하는지도 이해하게 되실 거예요. 완벽할 필요 없습니다. 저도 아직 실수해요! 우리 같이 한 단계씩 배워가면 됩니다. 자, 코드 프롬프트 실력 한 단계 올릴 준비 되셨나요? 그럼 시작해볼게요!
---
## Table of Contents1. [Introduction to Context Management in Code Prompts](#introduction-to-context-management-in-code-prompts)
2. [Understanding Token Limits and Context Window Optimization](#understanding-token-limits-and-context-window-optimization)
3. [Techniques for Handling Large Codebases: Chunking and Summarization](#techniques-for-handling-large-codebases-chunking-and-summarization)
4. [Relevance Filtering: Prioritizing Essential Code and Comments](#relevance-filtering-prioritizing-essential-code-and-comments)
5. [Structured Input Formatting Best Practices](#structured-input-formatting-best-practices)
6. [Dynamic Context Management: Selective Inclusion Based on Task Focus](#dynamic-context-management-selective-inclusion-based-on-task-focus)
7. [Use Cases Showcasing Effective Context Management](#use-cases-showcasing-effective-context-management)
8. [Common Issues and How to Avoid Them](#common-issues-and-how-to-avoid-them)
9. [Conclusion and Best Practices Summary](#conclusion-and-best-practices-summary)
---
## Introduction to Context Management in Code Prompts
자, 코드 프롬프트에서 컨텍스트 관리가 왜 중요한지부터 짚고 넘어갈게요. GitHub Copilot이나 ChatGPT로 코드 짜보신 분들, “왜 내 의도를 못 알아듣지?” 이런 경험 있으셨죠? 저도 처음엔 함수 리팩터링 시켰다가, 이전에 있던 import를 무시하고 엉뚱한 코드를 뱉어내는 걸 보고 멘붕이 왔었어요. 진짜 속상하더라고요.
여기서 핵심은, 컨텍스트 관리는 AI가 *정확히* 필요한 정보를 *정확한 타이밍*에 *올바른 순서*로 갖게 해주는 일이라는 거예요. 마치 연극 무대를 세팅하는 것과 비슷하죠. 배우(AI)가 대본도, 무대도, 언어도 모르면 제대로 연기할 수 없잖아요? 코드 프롬프트에서 컨텍스트란, 이전 코드 스니펫, 사용자 지시, 사용 언어나 프레임워크 등 환경 정보까지 다 포함됩니다.
왜 이렇게 중요할까요? 대부분의 AI 모델은 “메모리”에 해당하는 토큰 윈도우가 한정돼 있어요. 너무 많이 넣으면, 아까운 import 문이나 변수 선언이 밀려나버립니다. 반대로 너무 대충 넣으면, “data를 처리하는 함수 만들어줘” 했을 때 모델이 뭘 원하는지 추측만 하게 되죠. 혹시 저만 그런 거 아니죠? 함수가 엉뚱한 언어로 나오거나, 내가 정의하지 않은 변수를 막 쓰는 경우, 다들 겪어보셨을 거예요.
실전 팁 하나! 지시사항은 항상 명확하게. 이전 코드에 기반하는 작업이면, 전체 코드 대신 요약이나 핵심 부분만 넣어보세요. 저도 처음엔 코드 전체를 복붙했다가, 모델이 중간에 끊기거나 중요한 부분을 빼먹는 바람에 애먹었거든요.
잠깐, 여기서 정리! 컨텍스트 관리가 안 되면, 애매하거나 쪼개진, 심지어 깨진 코드가 나옵니다. 하지만 조금만 신경 써서 요약, 우선순위 정리, 구조화만 해도 AI와 나 모두 훨씬 수월해져요. 실제로 어떻게 하는지 궁금하시죠? 계속 읽어주세요!
### 💡 Practical Tips- 필요한 코드와 지시사항만 넣어, 토큰 초과 이슈를 피하세요.
- 프롬프트엔 명확하고 구체적인 지시를 써서, AI가 맥락과 의도를 잘 파악하게 하세요.
- 여러 번 대화할 땐, 이전 코드나 대화 내용을 간단히 요약해서 맥락을 이어가세요.
---
## Understanding Token Limits and Context Window Optimization
이번엔 토큰 한계와 컨텍스트 윈도우 최적화에 대해 얘기해볼게요. 모델이 갑자기 절반만 출력하거나, 코드가 뚝 끊겨서 당황한 적 있으시죠? 저도 처음엔 “이게 왜 이러지?” 싶었는데, 알고 보니 토큰 한계 때문이었어요.
### What Are Token Limits and Context Windows?
AI 모델은 텍스트를 우리가 생각하는 ‘문장’이 아니라 **토큰** 단위로 쪼개서 봅니다. 단어, 문자, 심지어 구두점까지 다 토큰이죠. 각 모델마다 “한 번에 볼 수 있는” 토큰 수, 즉 **컨텍스트 윈도우**가 정해져 있어요. 예를 들어 GPT-4는 8,192~32,768 토큰까지 지원합니다. 코드, 지시사항, “Hello!”까지 모두 이 한도에 포함돼요.
#### Why Does This Matter for Code Generation?
예를 들어, 일본어와 영어가 섞인 고객지원 챗봇을 만들고 있는데, 코드, 메시지, 설명까지 다 넣다 보면 토큰 한도를 훌쩍 넘기기 쉽죠. 저도 대형 코드베이스를 넣었다가, 에러도 없이 결과가 뚝 끊겨서 한참을 헤맸던 기억이 있어요. (이거 하다가 3시간 날렸어요...)
### How to Fit More (and the Right Stuff) Into the Context Window
그럼 어떻게 해야 할까요?
1.**핵심만 남기기**
정말 필요한 코드와 지시만 넣으세요. 다 넣고 싶겠지만, 적을수록 좋아요.
2.**요약과 추상화**
대형 파일이나 프로젝트라면, 각 부분이 뭘 하는지 요약만 넣으세요. 저도 이 방법 쓰고 나서 모델이 의도를 훨씬 잘 파악하더라고요.
3.**외부 참조 활용**
문서나 API 스펙 전체를 붙이지 말고, 공식 문서 URL만 넣으세요. 예를 들어 Stripe API는 [https://stripe.com/docs/api](https://stripe.com/docs/api)처럼 링크로 대체!
4.**Chunking 전략**
큰 작업은 여러 번에 나눠서 처리하세요. 한 덩어리씩 처리하고, 요약해서 다음 단계로 넘어가는 식이죠. 번거롭지만, 결과는 훨씬 좋아요.
5.**토큰 카운팅 도구 사용**
[tiktoken](https://github.com/openai/tiktoken) 같은 도구로 미리 토큰 수를 체크하세요. 저도 이거 몰랐을 땐, 출력이 잘리기 일쑤였어요.
#### Quick Recap
휴, 복잡하죠? 토큰 관리는 ‘많이’ 넣는 게 아니라 ‘알차게’ 넣는 게 핵심입니다. “왜 코드가 다 안 나오지?” 고민하셨던 분들, 위 전략 써보시면 훨씬 수월해질 거예요. 진짜, 계획만 잘 세워도 결과가 확 달라집니다!
### 💡 Practical Tips- [tiktoken](https://github.com/openai/tiktoken) 등 토큰 카운터로 입력 길이 미리 체크하세요.
- 꼭 필요한 코드와 지시만 남기고, 불필요한 주석이나 설명은 과감히 삭제!
- 큰 입력은 여러 번에 나눠서 처리하고, 요약으로 맥락을 이어가세요.
---
## Techniques for Handling Large Codebases: Chunking and Summarization
자, 대형 코드베이스를 다뤄야 할 때 어떻게 해야 할까요? 예를 들어, JavaScript 모노레포, 파이썬 마이크로서비스, 엔터프라이즈급 Java 프로젝트 등. “이걸 어떻게 AI에 넣지?” 고민되죠? 저도 처음엔 전체 프로젝트를 한 번에 넣었다가, 토큰 한계에 막혀서 좌절했어요. 그때 깨달았죠—chunking(분할)과 summarization(요약)이 진짜 살길이라는 걸!
---
### Chunking: Breaking Down the Beast
Chunking은 코드를 논리적으로 잘라서 작은 조각으로 만드는 거예요. “나누고 정복하라!”는 말, 여기서 딱 맞아요. 근데, 어디서 자를지 고민되죠? 제가 해보니 이런 기준이 좋아요:
-**파일 단위**: 각 파일을 하나의 청크로. 쉽지만, 너무 클 수도 있어요.
-**클래스/함수 단위**: 더 세밀하게. OOP 코드에 특히 좋아요.
-**기능/모듈 단위**: 마이크로서비스나 모듈형 코드에 최적.
예를 들어, 파이썬 Flask 앱이라면 전체 `app.py` 대신 이렇게 나눌 수 있죠:
```python
# user_routes.py (Chunk 1)
@app.route('/user/<id>')
def get_user(id):
# fetch and return user details
# auth.py (Chunk 2)
@app.route('/login', methods=['POST'])
def login():
# handle login logic
이렇게 나누면, 필요한 부분만 집중적으로 다룰 수 있어요. 저도 이렇게 하니까 AI가 훨씬 정확하게 답을 주더라고요.
잠깐, 여기서 한 번 숨 돌릴게요: Chunking은 코드와 AI 모두를 덜 부담스럽게 해줍니다. 근데, 각 청크가 뭘 하는지 기억이 안 나면 곤란하죠?
Summarization: Keeping Only the Essentials
청크로 나눈 뒤엔, 각 부분을 요약하세요. 핵심만 남기는 게 목표예요—입력, 출력, 부작용, 의존성 등. 저도 처음엔 “얼마나 자세히 써야 하지?” 고민했는데, 이런 식으로 해보세요:
#### user_routes.py Summary
Handles user-related endpoints:
- `/user/<id>`: GET user details by ID.
- Depends on: `db.py` for database access.
- Returns: JSON user object.
이렇게 요약하면, 전체 파일을 읽지 않아도 핵심을 바로 파악할 수 있죠.
Tips for Balancing Detail and Brevity
간결하게: ‘무엇을’ 하는지에 집중, ‘어떻게’는 생략.
상황에 따라: 디버깅 땐 자세히, 전체 구조 파악 땐 간단히.
계속 업데이트: 코드 바뀌면 요약도 꼭 수정! 저도 이거 깜빡해서 낡은 요약 때문에 고생한 적 있어요.
요약이 코드만큼 길어지면, 과감히 줄이세요! 너무 짧으면 중요한 정보가 빠질 수 있으니, 적당히 균형을 맞추는 게 중요합니다. 저도 아직 연습 중이에요.
결론적으로, chunking과 summarization만 잘해도 대형 코드베이스가 훨씬 다루기 쉬워집니다. AI 프롬프트뿐 아니라, 팀원 온보딩이나 내 머릿속 정리에도 최고예요. 다음에 10,000줄짜리 코드 앞에서 멘붕 오면, 이 방법 꼭 써보세요!
이제 structured input formatting 이야기! 이거 하나만 잘해도, 모델이 내 의도를 훨씬 잘 파악합니다. 저도 처음엔 구조 없이 막 던졌다가, 모델이 엉뚱한 답을 내놓는 걸 보고 “아, 내 프롬프트가 문제였구나” 깨달았어요.
Why Structure Matters
아무 구조 없이 텍스트만 던지면, 모델도 헷갈릴 수밖에 없어요. 명확하게 구분된 섹션과 구분자를 쓰면, 모델 입장에선 “아, 이건 문제 설명, 이건 입력, 이건 코드구나!” 하고 바로 알아차립니다.
Practical Formatting Tips
1. 명확한 구분자와 라벨 사용
코드와 설명, 입력을 섞지 말고, 이렇게 구분하세요:
### Problem Description
두 수를 곱하는 프로그램을 만드세요.
### Input
3 5
### Expected Output
15
### Instructions
입력받은 두 수를 곱하는 함수를 작성하세요.
이렇게 라벨을 붙이기 시작하니까, 모델이 훨씬 정확하게 답을 주더라고요.
2. 일관된 들여쓰기와 언어 태그
파이썬, YAML 등 들여쓰기가 중요한 언어는 특히 신경 써야 해요. 그리고 코드 블록엔 언어를 꼭 명시하세요:
defmultiply(a, b):
return a * b
예전엔 이거 빼먹어서, 모델이 코드 구조를 엉망으로 해석한 적도 많았어요.
3. Syntax Highlighting 흉내내기
모델이 색깔을 볼 순 없지만, 언어 태그만으로도 맥락을 잘 파악합니다:
{"key":"value"}
“이건 JSON이구나!” 하고 바로 알아차리죠.
How It Helps
이렇게 구조화하면, 모델이 따라야 할 패턴이 생기고, 실수도 줄어듭니다. 글로벌 팀에서도 효과 만점—서울이든 상파울루든, 명확한 구조는 모두에게 이득이에요.
Quick Recap
라벨(Problem, Input, Output, Instructions) 꼭 붙이기
코드/데이터는 항상 ```로 감싸고, 언어 명시
들여쓰기 일관성 유지—특히 파이썬!
라벨을 너무 많이 붙여도 괜찮아요. 명확함이 최고!
실수해도 괜찮아요. 저도 아직 가끔 틀려요. 구조만 조금씩 바꿔보면, 결과가 확 달라집니다. 직접 해보세요!
💡 Practical Tips
항상 (트리플 백틱)으로 코드 블록 감싸고, 언어 명시(예: python).
각 섹션에 명확한 라벨(‘Input:’, ‘Code:’, ‘Output:’) 붙이기.
코드 블록 내 들여쓰기 일관성 유지—특히 파이썬 등 들여쓰기 민감 언어에서 중요!
Conclusion and Best Practices Summary
정리해볼까요?
코딩 AI를 제대로 활용하려면, 컨텍스트 관리와 입력 구조화가 정말 핵심입니다. 토큰 한계 이해, 컨텍스트 윈도우 최적화, chunking/요약/필터링 같은 기법을 쓰면, 프롬프트가 훨씬 효율적이고 효과적으로 변해요. 구조화된 입력과 동적 컨텍스트 관리까지 더하면, AI가 훨씬 정확하고 맥락에 맞는 코드를 내놓습니다.
이게 왜 중요하냐면, 프롬프트 엔지니어링을 잘하면 시간도 절약되고, 실수도 줄고, 일반적인 프롬프트로는 불가능한 고급 코드 생성도 가능해져요.
실전 팁:
코드베이스에서 진짜 필요한 부분만 추려내기
큰 입력은 쪼개서 처리하기
당장 필요한 맥락만 동적으로 포함하기
결과를 문서화하고, 계속 개선하기
프롬프트 엔지니어링은 과학이자 예술이에요. 지금 연습해두면, 앞으로 AI 코딩 시대에서 한 발 앞서나갈 수 있습니다.
실수해도 괜찮아요. 과감하게 시도해보고, 결과를 직접 경험해보세요. 여러분의 코드 프롬프트가 점점 더 강력해질 거예요!