Skip to content

Latest commit

 

History

History
414 lines (269 loc) · 20.6 KB

File metadata and controls

414 lines (269 loc) · 20.6 KB

1주차 실습 — 코딩 에이전트

레포지토리 안내 | English | 한국어

최종 수정일: 2026-11-04

학습 목표:

  1. AI 코딩 에이전트(Gemini CLI, Claude Code, Codex CLI, GitHub Copilot CLI 중 하나 이상)를 설치하고 실행할 수 있다
  2. 코딩 에이전트를 사용하여 파일 정리와 문서화 작업을 자동화할 수 있다
  3. Ralph 기법을 적용하여 AI가 생성한 출력을 반복적으로 개선할 수 있다
  4. 간단한 정렬 벤치마크 프로그램을 작성하고 실행할 수 있다

목차



1. 실습 개요

  • 목표: AI 기반 코딩 에이전트를 설치하고 실제 개발 작업에 활용한다.
  • 준비물: 터미널이 있는 컴퓨터(macOS Terminal, Windows PowerShell, Linux shell), 디렉토리 이동과 명령어 실행 같은 기초적인 명령줄 사용법, GitHub 계정이 필요하다.

실습 흐름:

순서 Task 내용
1 Task 1 에이전트 설치
2 Task 2 파일 정리
3 Task 3 저장소 문서화
4 Task 4 Ralph 기법
5 Task 5 정렬 벤치마크

표 1. 실습을 구성하는 다섯 Task

왜 알고리즘 과목에서 코딩 에이전트를 다루는가? AI 기반 코딩 도구를 효과적으로 활용하는 것은 소프트웨어 엔지니어에게 필수적인 역량이 되고 있다. 이 도구들을 일찍 익히면 문법 세부 사항보다 알고리즘적 사고와 문제 해결에 집중할 수 있다.



2. 코딩 에이전트란?

코딩 에이전트(coding agent) 는 문맥(context)을 이해하여 코드를 생성하는 AI 기반 CLI 도구이다. CLI(Command-Line Interface, 명령줄 인터페이스)는 버튼을 클릭하는 대신 명령어를 입력하는 텍스트 기반 인터페이스이다.

동작 흐름:

flowchart LR
    R["읽기(Read): 파일 & 문맥"] --> P["계획(Plan): 무엇을 할지 결정"]
    P --> A["실행(Act): 편집 & 실행"]
    A --> V["검증(Verify): 결과 확인"]
    V -->|"반복"| R
Loading

그림 1. 코딩 에이전트의 읽기, 계획, 실행, 검증 반복

  • 코딩 에이전트는 파일 시스템을 읽고, 명령을 실행하고, 자율적으로 편집할 수 있다.
  • 스캐폴딩, 리팩토링, 문서화, 디버깅에 유용하다.

예시: "Python 정렬 벤치마크를 타이밍 유틸리티와 함께 만들어줘"라고 요청하면, 에이전트가 디렉토리를 확인하고, 파일을 작성하고, 테스트 통과를 확인한다.

핵심: 코딩 에이전트는 최근 급격히 발전한 AI 도구이다. ChatGPT 같은 기존의 대화형 AI와 다른 점은 파일 시스템에 직접 접근하고 명령을 실행할 수 있다는 것이다. 즉, 코드를 복사하여 붙여 넣을 필요 없이 에이전트가 직접 파일을 읽고 수정한다.

참고: 구체적인 동작 예시. 에이전트에게 "bubble_sort 함수를 작성해줘"라고 요청하면, (1) Read: 프로젝트의 기존 파일 구조와 코드를 확인하고, (2) Plan: sorting.py에 함수를 추가하기로 결정하고, (3) Act: 파일을 직접 편집하여 코드를 작성하고, (4) Verify: 작성한 코드를 실행하여 오류가 없는지 확인한다. ChatGPT 웹과의 핵심 차이는 코드를 복사하여 붙여 넣을 필요 없이 에이전트가 파일을 직접 수정한다는 점이다.

2.1 사용 가능한 에이전트

에이전트 가격 개발사 특징
Gemini CLI 무료 (1일 1,000회) Google 좋은 기본 선택
Claude Code 유료 Anthropic 강력한 멀티 파일 추론
Codex CLI 유료 OpenAI 오픈소스 CLI

표 2. 주요 코딩 에이전트의 가격, 개발사, 특징

이 밖에 OpenCode는 오픈소스 하네스(harness)로, 오픈소스 LLM을 포함한 여러 제공자의 모델을 사용할 수 있다.

참고: 특별한 선호가 없다면 Gemini CLI 설치를 권장한다. 무료이며 설정이 간편하기 때문이다.



3. Task 1: 코딩 에이전트 설치

공식 문서를 참고하여 최소 하나의 코딩 에이전트를 설치한다.

설치 명령어:

npm install -g @google/gemini-cli          # Gemini CLI (무료)
npm install -g @anthropic-ai/claude-code    # Claude Code (유료)

설치 확인:

gemini --version    # 또는: claude --version

확인 사항:

  • CLI가 오류 없이 실행되는지 확인한다.
  • 인증이 가능한지 확인한다(Gemini는 Google 계정, Claude는 Anthropic 계정).
  • 간단한 프롬프트로 응답을 확인한다: "What is 2 + 2?"

참고: npm은 Node.js의 패키지 관리자이다. 위 명령어를 실행하려면 먼저 Node.js가 설치되어 있어야 한다. -g 플래그는 "global"의 약자로, 시스템 전역에 설치하여 어디서든 명령어로 사용할 수 있게 한다.

참고: 일부 코딩 에이전트에는 Node.js가 필요하다. https://nodejs.org 에서 LTS 버전을 설치하고, 터미널에서 node --version으로 설치를 확인한다.



4. Task 2: 파일 정리

에이전트를 사용하여 지저분한 디렉토리의 파일을 정리한다.

프롬프트 예시:

"~/Downloads 폴더의 파일을 파일 유형별로 하위 폴더(images, documents, code 등)에 정리해줘.
 실행하기 전에 계획을 먼저 보여줘."

관찰할 점:

  • 에이전트가 파일을 옮기기 전에 확인을 요청하는가?
  • 합리적인 폴더 구조를 만드는가?
  • 확장자가 없는 파일 같은 엣지 케이스를 어떻게 처리하는가?

예상 출력:

~/Downloads 폴더를 정리하겠습니다. 계획은 다음과 같습니다:

  images/    → .jpg, .png, .gif (12개 파일)
  documents/ → .pdf, .docx, .txt (8개 파일)
  code/      → .py, .js, .html (5개 파일)
  other/     → 확장자가 없는 파일 (2개 파일)

진행할까요?

토론:

  • "계획을 먼저 보여줘"라고 말하지 않았다면 어떤 결과가 나왔겠는가?
  • 결과가 마음에 들지 않을 때 어떻게 더 구체적으로 지시할 수 있는가?


5. Task 3: GitHub 저장소 문서화

에이전트를 사용하여 기존 코드베이스의 README.md를 생성한다.

대상 저장소 선택:

  • 본인의 프로젝트나 공개 저장소를 사용한다. 예를 들면 다음과 같다.
    • https://github.com/code-yeongyu/oh-my-opencode

프롬프트 예시:

"이 코드베이스를 읽고 아키텍처 개요, 설정 방법, 사용 예시가 포함된
 종합적인 README.md를 생성해줘."

결과물 평가:

  • README가 프로젝트를 정확히 설명하는가?
  • 설정 방법이 정확하고 완전한가?
  • 라이선스, 기여 가이드, 스크린샷처럼 빠진 것이 있는가?

참고: 이 README는 Task 4에서 개선하므로 저장해 둔다.



6. Task 4: Ralph 기법

6.1 Ralph 기법이란?

Ralph 기법(Ralph technique) 은 Geoffrey Huntley가 만든 bash 스크립트 루프로, The Simpsons의 Ralph Wiggum에서 이름을 따왔다. AI 코딩 에이전트를 작업이 완료될 때까지 반복적으로 실행하여 자동화한다.

그림 2. Ralph 기법의 이름이 유래한 Ralph Wiggum

그림 2. Ralph 기법의 이름이 유래한 Ralph Wiggum

작동 방식:

  • 무한 루프: while true로 목표가 달성될 때까지 에이전트를 계속 실행한다.
  • 새로운 컨텍스트: 매 반복마다 깨끗한 상태로 시작하여 AI가 막히는 것을 방지한다.
  • 파일 기반 메모리: 에이전트가 대화 기록 대신 파일 시스템(git, 진행 상황 파일)을 읽고 쓴다.
  • 자는 동안 코드 배포: 밤새 자율적으로 테스트하고 변경 사항을 적용한다.

핵심: Ralph 기법의 핵심 아이디어는 AI 에이전트가 한 번에 완벽히 해내지 못해도 반복하면 점점 나아진다는 것이다. 각 반복에서 에이전트는 (1) 현재 상태를 파일 시스템에서 읽고, (2) 무엇이 부족한지 판단하고, (3) 수정한다. 대화 기록 대신 파일 시스템을 기억 장치로 사용하므로, 매번 새로운 세션에서도 이전 진행 상황을 이어갈 수 있다.

참고: 기본 bash 스크립트. Ralph 루프의 기본 형태는 다음과 같다.

while true; do
  gemini "PROGRESS.md를 읽고, 미완성 항목을 하나 골라 구현해"
  git add -A && git commit -m "auto: progress update"
done

핵심은 (1) while true로 무한 반복하고, (2) 매 반복에서 에이전트가 파일 시스템(PROGRESS.md)을 읽어 현재 상태를 파악하며, (3) 결과를 git으로 저장하여 다음 반복에서도 이전 작업을 이어갈 수 있다는 것이다.

6.2 Ralphton 해커톤 사례

한국 최초의 Ralphton 해커톤에서는 참가자 13명이 첫날 하네스를 구성한 뒤 AI 에이전트에게 밤새 자율적으로 코딩을 시키고, 다음 날 아침 결과를 검토하였다 [1].

그림 3. OpenClaw 로고

그림 3. OpenClaw 로고

지표 값 설명
코드 줄 수 100K 우승 팀이 에이전트에게 작성하게 한 코드 총량
테스트 코드 비율 70% 우승 팀 코드 10만 줄 중 자동 검증 기준인 테스트 코드 약 7만 줄의 비율
추론 루프 횟수 133 우승 팀이 PRD와 스펙의 모호함을 없애려고 에이전트에게 소크라테스식 문답을 반복시킨 횟수

표 3. Ralphton 우승 팀의 주요 지표

엔지니어링의 진화:

flowchart LR
    P["프롬프트 엔지니어링 (무엇을 말할지)"] --> C["컨텍스트 엔지니어링 (무엇을 제공할지)"]
    C --> H["하네스 엔지니어링 (어떻게 검증할지)"]
Loading

그림 4. 프롬프트, 컨텍스트, 하네스 엔지니어링으로 이어지는 진화

참고: 여기서 주목할 통계는 코드의 70%가 테스트 코드라는 점이다. AI 에이전트가 자율적으로 작업할 때 테스트 코드는 검증 기준의 역할을 한다. 테스트가 통과하면 올바른 코드라고 판단하고, 실패하면 수정을 반복한다. AI가 스스로 검증할 수 있는 구조를 만드는 것이 하네스 엔지니어링의 핵심이다.

참고: 세 단계의 차이는 다음과 같다 [1].

  • 프롬프트 엔지니어링: 무엇을 말할지를 다루며, 좋은 질문과 지시를 작성하는 기술이다.
  • 컨텍스트 엔지니어링: 무엇을 제공할지를 다루며, 에이전트에게 적절한 파일, 문서, 예시를 제공하여 맥락을 갖추게 하는 기술이다.
  • 하네스 엔지니어링: 어떻게 검증할지를 다루며, 테스트나 루브릭처럼 AI가 스스로 결과를 판단할 수 있는 자동 검증 구조를 설계하는 기술이다.

6.3 Ralph 실습

Ralph 기법을 사용하여 Task 3의 README를 반복적으로 개선한다.

워크플로우 예시:

나:      "고품질 오픈소스 README 평가를 위한 루브릭을 만들어줘."
에이전트:  8개 기준 반환 (설명, 설치, 사용법, 아키텍처, ...)

나:      "네가 작성한 README를 이 루브릭으로 평가해봐. 각 기준별 점수를 매겨."
에이전트:  6/8 점수, 미흡: 아키텍처 다이어그램, 기여 가이드

나:      "실패한 기준을 모두 수정해. 모든 기준이 충족될 때까지 계속해."
에이전트:  자율적으로 반복: README 업데이트, 재평가, 다시 수정...

결과:    8/8, 모든 기준 충족.

핵심 통찰: 이 과정이 바로 Ralph 루프이다.

  • 매 반복에서 에이전트는 평가 → 문제 발견 → 수정 → 재평가를 수행한다.
  • 사용자가 목표와 기준을 설정하면, 에이전트가 완료할 때까지 반복한다.
  • bash 루프와 같은 원리로, 지속적인 반복이 1회성 프롬프트보다 효과적이다.
  • 출력이 품질 기준을 충족하거나 반복해도 개선이 미미할 때 멈춘다. 보통 2~3회면 충분하다.


7. Task 5: 정렬 벤치마크 만들기

에이전트를 사용하여 멀티 파일 정렬 벤치마크를 만든다.

프롬프트 예시:

"버블 정렬, 병합 정렬, Python 내장 정렬을 비교하는 Python 정렬 벤치마크를 만들어줘.
 타이밍 유틸리티와 결과 테이블을 포함하고,
 코드를 별도 모듈로 구성해줘."

예상 결과물:

파일 역할
sorting.py 정렬 알고리즘
timer.py 타이밍 유틸리티
benchmark.py 메인 실행기
README.md 문서화

표 4. 정렬 벤치마크의 예상 파일 구성

참고: 벤치마크가 비교하는 세 정렬 방법은 다음과 같으며, 각 알고리즘의 동작과 복잡도 분석은 3주차에서 자세히 다룬다.

  • 버블 정렬(Bubble Sort): 인접한 두 원소를 비교하고 교환하며 정렬한다. O(n²)이다. 구현이 가장 간단하지만 세 방법 중 가장 느리다.
  • 병합 정렬(Merge Sort): 배열을 반으로 나누고, 각각 정렬한 후 합친다. O(n log n)이다. 분할 정복의 대표적 예시이다.
  • Python 내장 정렬: Timsort라는 알고리즘을 사용하며, 병합 정렬과 삽입 정렬을 결합한 하이브리드이다. O(n log n)이다. 세 방법 중 실제로 가장 빠르다.

7.1 관찰할 점

완벽한 벤치마크가 목표가 아니며, 과정이 중요하다.

에이전트가 어떻게 하는지 관찰한다:

  • 복잡한 문제를 여러 파일로 분리하는 방법
  • 각 구성 요소의 역할을 설명하는 방법
  • 피드백을 주었을 때 오류를 처리하는 방법
  • 빌드가 실패했을 때 반복하는 방법 (실패가 있는 경우)

후속 프롬프트 시도:

  • "결과를 막대 차트로 시각화해줘"
  • "각 정렬 알고리즘의 시간 복잡도를 설명해줘"
  • "벤치마크가 큰 N에서 크래시해. 고쳐줘"


8. 2주차 실습과의 연결

2주차 실습에서는 O(n²) 풀이와 O(n) 풀이를 비교하는 복잡도 분석 실습을 한다.



요약

개념 핵심 요약
코딩 에이전트 파일 시스템에 직접 접근하여 코드를 읽고, 실행하고, 수정하는 AI 기반 CLI 도구이다.
동작 흐름 읽기(Read), 계획(Plan), 실행(Act), 검증(Verify)을 반복한다.
에이전트 선택 Gemini CLI(무료, 권장), Claude Code(유료, 멀티 파일 추론), Codex CLI(유료, 오픈소스) 중에서 고른다.
Task 1: 설치 npm install -g로 설치하고 Node.js가 필요하며, 인증과 간단한 프롬프트로 동작을 확인한다.
Task 2: 파일 정리 에이전트에게 실제 작업을 맡기되, 실행 전에 계획을 보여 달라고 요청하는 것이 핵심이다.
Task 3: 문서화 에이전트로 README.md를 생성한 뒤 정확성과 완전성을 직접 평가한다.
Task 4: Ralph 기법 bash 루프로 에이전트를 반복 실행하고 파일 기반 메모리로 상태를 유지하며, 지속적 반복이 1회성 프롬프트보다 효과적이다.
Ralphton 해커톤 우승 팀은 에이전트로 10만 줄의 코드를 작성했고 그중 70%가 테스트 코드였으며, 하네스 엔지니어링의 핵심은 AI가 스스로 검증할 수 있는 구조이다.
엔지니어링 진화 프롬프트 엔지니어링에서 컨텍스트 엔지니어링을 거쳐 하네스 엔지니어링으로 발전하였다.
Task 5: 정렬 벤치마크 멀티 파일 프로젝트로 버블 정렬 O(n²), 병합 정렬 O(n log n), Python 내장 정렬(Timsort) O(n log n)을 비교한다.
핵심 교훈 코딩 에이전트는 도구일 뿐이며, 산출물을 이해하는 것은 여전히 사용자의 책임이다.


점검 문제

  1. 코딩 에이전트와 단순 코드 자동완성 도구의 차이점은 무엇인가?

    정답

    코드 자동완성 도구(예: 전통적인 IntelliSense)는 지역적인 문맥을 기반으로 다음 토큰이나 한 줄을 제안할 뿐이며, 모든 동작은 개발자가 직접 수행한다. 반면 코딩 에이전트(Coding Agent) 는 한 차원 더 높은 수준에서 동작한다. 파일 시스템을 읽고, 다단계 작업을 계획하고, 셸 명령을 실행하며, 여러 파일을 자율적으로 편집하는 Read → Plan → Act → Verify 루프를 수행한다. 자동완성이 "다음에 무엇이 올까?"에 답한다면, 에이전트는 "이 목표를 달성하라"에 답한다. 즉, 복사하여 붙여 넣는 과정 없이 코드 작성, 실행, 검증까지의 루프를 닫는다.

  2. Ralph 기법에서 후속 프롬프트의 구체성이 왜 중요한가? 단순히 "더 좋게 만들어 줘"라고 하면 어떻게 되는가?

    정답

    Ralph 루프는 매 반복에서 에이전트가 현재 상태를 명시적 기준과 비교하는 것에 의존한다. "더 좋게 만들어 줘" 같은 모호한 지시는 루브릭이 없으므로 에이전트가 표류한다. 이미 정상인 부분을 다시 쓰거나, 스타일을 오락가락하거나, 주관적으로 충분하다고 판단한 상태에서 멈춰 버린다. 구체적인 프롬프트("이 8항목 루브릭으로 평가한 뒤 실패한 모든 기준을 수정해")는 루프를 하네스 엔지니어링으로 전환시킨다. 에이전트가 자신의 출력을 스스로 검증하고 측정 가능한 목표로 수렴할 수 있게 되며, Ralphton 우승 팀이 133회의 문답 루프를 돌릴 수 있었던 것도 같은 원리이다.

  3. 정렬 벤치마크를 실행한 후, 큰 입력에서 가장 빠른 알고리즘은 무엇이었는가? 그 이유는?

    정답

    큰 입력에서는 Python 내장 sorted() 가 가장 빠르다. 이 함수는 병합 정렬과 삽입 정렬의 하이브리드인 Timsort를 사용하며, O(n log n) 시간 복잡도를 가지면서 최적화된 C 코드로 구현되어 있고 실제 데이터의 이미 정렬된 부분 수열(run)을 활용한다. 병합 정렬(Merge Sort) 도 O(n log n) 이지만 순수 Python으로 구현되면 추가 메모리 할당 오버헤드 때문에 더 느리다. 버블 정렬(Bubble Sort) 은 O(n²) 이므로 n = 100,000 정도만 되어도 O(n log n) 알고리즘보다 약 n / log₂(n) ≈ 6,000배 느려져 사실상 사용할 수 없다.

  4. Claude Code에서 --dangerously-skip-permissions 플래그는 무엇을 하며, 왜 주의해야 하는가?

    정답

    이 플래그는 파일 편집, 셸 명령 실행, 네트워크 호출에 대한 Claude Code의 모든 동작별 확인 프롬프트를 우회시켜 에이전트가 사용자에게 묻지 않고 자율적으로 실행하게 만든다. Ralph 루프나 격리된 CI 환경처럼 확인 프롬프트가 루프를 막는 상황에서는 유용하다. 그러나 rm -rf, force-push, 비밀 키 유출 같은 파괴적 동작을 막아 줄 사람의 검증 지점이 사라진다는 위험이 있다. 따라서 컨테이너, 일회용 VM, 운영 자격 증명이 없는 샌드박스 같은 격리된 환경에서만 사용해야 하며, 실수를 되돌릴 수 없는 시스템에서는 사용하지 않아야 한다.



참고 문헌

  1. 장동욱, "한국 최초 랄프톤 후기 : 하네스 엔지니어링 시대," Substack, Mar. 2026. https://briandwjang.substack.com/p/8d3