프로그래밍 기초편 · 재귀와 분할 정복

분할 정복: 컨텍스트 압축의 알고리즘 원리

AI 실전편에서 배웠어요: 대화가 너무 길어 담을 수 없으면 AI가 Compaction을 합니다—옛 대화를 요약으로 누르는 거죠. 그때는 “이사 전에 잡동사니를 포장하는 것 같다”고 했어요. 이번 강의는 포장지를 벗깁니다: 이천 년 역사의 알고리즘 패턴, 바로 분할 정복. 지난 강의의 재귀는 “나누기”, 이번엔 나머지 반쪽—“나누고 다시 합치기”입니다.

직접 한 번 압축 · 3600 token 인테리어 대화

아래는 당신과 AI가 인테리어 방안을 논의한 전체 대화예요. 메시지 12개, 약 3600 token으로 컨텍스트 윈도우가 곧 터질 지경입니다. 「압축 시작」을 누르고 세 막을 주목하세요: 먼저 나누기(세 구간), 다음 처리(구간마다 요약 하나), 마지막 합치기(요약 셋을 하나로)—위쪽 token 카운터가 얼마나 줄었는지 알려 줍니다.

현재 컨텍스트3600token
나누기 → 구간별 요약 → 합치기, 세 막 연속
「최근 4개 유지」를 켜고 다시 압축해 보세요. 실제 Agent도 이렇게 합니다: 최근 몇 턴은 지금 하는 일이라 가장 소중하니 한 글자도 안 건드리고, 먼 부분만 요약으로 눌러요. token이 200까지 안 줄어들 거예요—충실도와 공간 절약은 늘 맞바꿉니다.
개념 카드 · 병합 정렬과 같은 패턴

방금 세 막에는 정식 이름이 있어요: 분할 정복(Divide and Conquer). 교과서에서 가장 유명한 얼굴은 병합 정렬—숫자 열을 작게 자르고, 각각 정렬한 뒤 둘씩 합칩니다. 병합 정렬은 숫자를, Compaction은 말을 누르지만 뼈대는 똑같아요:

나누기

✂️ 작게 자르기

큰 문제를 바로 못 풀면 작은 덩어리로 자릅니다. 병합 정렬: 숫자 열을 반으로 잘라 하나만 남을 때까지. Compaction: 긴 대화를 주제나 턴으로 몇 구간 나눕니다.

처리

🔧 덩어리마다 해결

작으면 쉽습니다. 병합 정렬: 짧은 구간을 각각 정렬. Compaction: 구간마다 요약—짧아서 AI가 한 번에 읽고 정확히 정리해요. 이 단계는 병렬로도 돌려 더 빨라집니다.

합치기

🧩 결과 합치기

작은 성과를 완전한 답으로 조립합니다. 병합 정렬: 정렬된 두 구간을 하나로. Compaction: 요약 몇 개를 총요약 하나로. 구간이 아직 많다면? 재귀로 한 바퀴 더—지난 강의 맛이 돌아옵니다.

왜 AI에게 전문을 한 번에 요약시키지 않을까요? “만 자를 요약해” 자체가 컨텍스트를 터뜨리기 때문—그게 바로 풀려는 문제예요. 분할 정복의 영리함은 “못 푸는 큰 문제”를 “분명히 풀리는 작은 문제” 더미로 바꾼 뒤 조금 힘을 써 조립하는 것. 엔지니어링 심화편의 Coding Agent가 큰 코드베이스를 읽는 방식도 같아요: 파일마다 읽고 요점을 적은 뒤 마지막에 모읍니다.
솔직 카드 · 압축의 대가

⚠️ 요약은 손실 압축—디테일이 사라져요

원문: “예산 8만 이내” “빨간색을 정말 싫어해서 집 어디에도 빨강 금지
압축 후: “예산과 배색 선호를 논의함”← 구체 숫자와 빨강 금지가 사라짐
압축 후에도 AI는 “예산을 얘기했다”는 걸 알지만, “내 예산이 얼마야?”라고 물으면 추측만 할 수 있어요. 다음에 빨간 소파를 추천해도 따질 근거가 없습니다. 그래서 AI 실전편이 거듭 강조해요: 핵심 사실(숫자, 강제 요구, 결정)은 장기 메모리나 문서에 따로 적어두세요—요약이 대신 지켜 주리라 기대하지 말고요. 요약은 “대략 뭘 말했는지”, 기록는 “못 박아 둔 사실”을 담당합니다.

이 강의가 전하고 싶은 것