λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
AI

ν•˜λ„€μŠ€ μ—”μ§€λ‹ˆμ–΄λ§(Harness Engineering): AI μ—μ΄μ „νŠΈλ₯Ό ν”„λ‘œλ•μ…˜μ—μ„œ μ‹ λ’°ν•  수 있게 λ§Œλ“œλŠ” 기술

by The era of AI 2026. 4. 11.
728x90

λ“€μ–΄κ°€λ©°

GPT-5, Claude Opus 4.6 같은 μ΅œμ‹  λͺ¨λΈμ΄ λ“±μž₯해도 AI μ—μ΄μ „νŠΈλ₯Ό μ‹€μ œ ν”„λ‘œλ•μ…˜μ— νˆ¬μž…ν•˜λ©΄ μ—¬μ „νžˆ 같은 λ¬Έμ œκ°€ λ°˜λ³΅λ©λ‹ˆλ‹€. ν™˜κ°(hallucination), λ¬΄ν•œ 루프, 잘λͺ»λœ 도ꡬ 호좜, μž₯κΈ° μž‘μ—…μ—μ„œμ˜ λ“œλ¦¬ν”„νŠΈ(drift)... 더 쒋은 λͺ¨λΈλ‘œ κ΅μ²΄ν•œλ‹€κ³  ν•΄μ„œ ν•΄κ²°λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ λ“±μž₯ν•œ κ°œλ…μ΄ λ°”λ‘œ ν•˜λ„€μŠ€ μ—”μ§€λ‹ˆμ–΄λ§(Harness Engineering) μž…λ‹ˆλ‹€.

ν•˜λ„€μŠ€ μ—”μ§€λ‹ˆμ–΄λ§μ΄λž€, AI μ—μ΄μ „νŠΈκ°€ ν”„λ‘œλ•μ…˜μ—μ„œ μ‹ λ’°μ„± 있게 λ™μž‘ν•˜λ„λ‘ κ·Έ 주변에 μ œμ•½(constraints), 도ꡬ(tools), ν”Όλ“œλ°± 루프(feedback loops)λ₯Ό μ„€κ³„ν•˜λŠ” 인프라 곡학 λΆ„μ•Όμž…λ‹ˆλ‹€.

 

핡심 톡찰은 λ‹¨μˆœν•©λ‹ˆλ‹€. "μ—μ΄μ „νŠΈ 자체λ₯Ό 더 λ˜‘λ˜‘ν•˜κ²Œ λ§Œλ“€λ € ν•˜μ§€ 말고, μ—μ΄μ „νŠΈλ₯Ό λ‘˜λŸ¬μ‹Ό ν™˜κ²½μ„ 더 λ‹¨λ‹¨ν•˜κ²Œ μ„€κ³„ν•˜λΌ."


μ™œ "ν•˜λ„€μŠ€(Harness)"인가?

μ›λž˜ ML 평가 λΆ„μ•Όμ—μ„œ μ“°μ΄λ˜ "eval harness"λΌλŠ” μš©μ–΄κ°€ μ—μ΄μ „νŠΈ μ‹œμŠ€ν…œ μ „λ°˜μœΌλ‘œ ν™•μž₯된 κ²ƒμž…λ‹ˆλ‹€. 마치 말(horse)μ—κ²Œ 마ꡬ(harness)λ₯Ό μ±„μ›Œ μ›ν•˜λŠ” λ°©ν–₯으둜 μΌν•˜κ²Œ ν•˜λ“―, LLMμ΄λΌλŠ” κ°•λ ₯ν•˜μ§€λ§Œ 예츑 λΆˆκ°€λŠ₯ν•œ 엔진에 ꡬ쑰물을 μ”Œμ›Œ ν†΅μ œ κ°€λŠ₯ν•œ 일꾼으둜 λ§Œλ“œλŠ” 것이죠.

 

λΉ„μœ ν•˜μžλ©΄ μ΄λ ‡μŠ΅λ‹ˆλ‹€.

"μ‹ λ’°ν•  수 μ—†λŠ” μ™Έμ£Ό μž‘μ—…μžμ—κ²Œ 일을 λ§‘κΈΈ λ•Œ, μ–΄λ–€ μ§€κ·Έ(jig), 체크리슀트, κ²€μˆ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°–μΆ°μ•Ό 결과물이 μ‹ λ’° κ°€λŠ₯ν•΄μ§ˆκΉŒ?"

κ·Έ 지그와 체크리슀트의 총합이 λ°”λ‘œ ν•˜λ„€μŠ€μž…λ‹ˆλ‹€.


ν•˜λ„€μŠ€μ˜ 3κ°€μ§€ 핡심 κ΅¬μ„±μš”μ†Œ

πŸ— 전체 ꡬ쑰도

1️⃣ μ œμ•½ (Constraints) — "ν•˜μ§€ 말아야 ν•  것"의 섀계

μ—μ΄μ „νŠΈκ°€ ν•  수 μžˆλŠ” 행동 곡간을 μ˜λ„μ μœΌλ‘œ μ’νž™λ‹ˆλ‹€.

μ œμ•½ μœ ν˜• μ˜ˆμ‹œ
μƒŒλ“œλ°•μŠ€ 격리된 νŒŒμΌμ‹œμŠ€ν…œ, μ»¨ν…Œμ΄λ„ˆ, λ„€νŠΈμ›Œν¬ ν™”μ΄νŠΈλ¦¬μŠ€νŠΈ
κΆŒν•œ 게이트 파괴적 μž‘μ—…(μ‚­μ œ, 결제 λ“±) μ „ μ‚¬μš©μž 승인 ν•„μˆ˜
좜λ ₯ μŠ€ν‚€λ§ˆ JSON Schema κ°•μ œ, μœ νš¨ν•˜μ§€ μ•ŠμœΌλ©΄ μž¬μ‹œλ„
μ˜ˆμ‚° ν•œκ³„ 토큰/μŠ€ν…/λΉ„μš© μƒν•œμ„ 
κ°•μ œ 절차 "λ¨Όμ € κ³„νšμ„ μ„Έμš°κ³ , κ·Έ λ‹€μŒ μ‹€ν–‰" 같은 μ›Œν¬ν”Œλ‘œμš° κ°•μ œ

2️⃣ 도ꡬ (Tools) — 1κΈ‰ μ‹œλ―ΌμœΌλ‘œμ„œμ˜ 도ꡬ 섀계

쒋은 λ„κ΅¬λŠ” λͺ¨ν˜Έν•œ μΆ”λ‘  문제λ₯Ό μ‹ λ’°μ„± μžˆλŠ” ν•¨μˆ˜ 호좜둜 λ°”κΏ‰λ‹ˆλ‹€.

쒋은 λ„κ΅¬μ˜ νŠΉμ§•:

  • βœ… λͺ…ν™•ν•œ 계약(contract)κ³Ό νƒ€μž…
  • βœ… 정보가 ν’λΆ€ν•œ μ—λŸ¬ λ©”μ‹œμ§€ ("File not found"κ°€ μ•„λ‹ˆλΌ "File not found at /x/y. Did you mean /x/z?")
  • βœ… κ°€λŠ₯ν•œ 경우 λ©±λ“±μ„±(idempotency)
  • βœ… μ μ ˆν•œ 좔상화 μˆ˜μ€€ (λ„ˆλ¬΄ μ €μˆ˜μ€€λ„, λ„ˆλ¬΄ λ§ˆλ²• 같지도 μ•Šκ²Œ)

λ‚˜μœ 도ꡬ vs 쒋은 도ꡬ μ˜ˆμ‹œ:

# ❌ λ‚˜μœ 도ꡬ: λͺ¨ν˜Έν•˜κ³  μ—λŸ¬κ°€ 뢈친절
def run(cmd: str) -> str:
    return os.system(cmd)  # μ—μ΄μ „νŠΈκ°€ 뭘 잘λͺ»ν–ˆλŠ”μ§€ μ•Œ 수 μ—†μŒ

# βœ… 쒋은 도ꡬ: λͺ…ν™•ν•œ 계약, μΉœμ ˆν•œ μ—λŸ¬
def search_files(
    pattern: str, 
    directory: str = "/workspace"
) -> SearchResult:
    """파일 λ‚΄μš©μ„ κ²€μƒ‰ν•©λ‹ˆλ‹€.
    
    Returns:
        SearchResult with matches, or error with suggestions.
    """
    if not os.path.exists(directory):
        return SearchResult(
            error=f"Directory '{directory}' not found.",
            suggestions=find_similar_dirs(directory)
        )
    ...

3️⃣ ν”Όλ“œλ°± 루프 (Feedback Loops) — λΉ λ₯Έ μ‹€νŒ¨μ™€ ν•™μŠ΅

μ—μ΄μ „νŠΈμ™€ μš΄μ˜μžκ°€ "λ­”κ°€ 잘λͺ»λμŒ"을 λΉ λ₯΄κ²Œ μ•Œμ•„μ°¨λ¦¬κ³  μˆ˜μ •ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

  • λŸ°νƒ€μž„ μ‹ ν˜Έ: ν…ŒμŠ€νŠΈ κ²°κ³Ό, νƒ€μž… 체컀, λ¦°ν„°, μ‹€ν–‰ 트레이슀
  • κ΄€μΈ‘μ„±(Observability): λͺ¨λ“  λ‹¨κ³„μ˜ νŠΈλ ˆμ΄μ‹±, λΉ„μš©/μ§€μ—° λ©”νŠΈλ¦­
  • μ˜€ν”„λΌμΈ 평가(Eval Harness): 배포 μ „ νšŒκ·€ ν…ŒμŠ€νŠΈ
  • HITL(Human-in-the-loop): μ€‘μš” λΆ„κΈ°μ μ—μ„œμ˜ μ‚¬λžŒ κ²€ν† 
  • λ¦¬ν”Œλ ˆμ΄/디버깅: μ‹€νŒ¨ μΌ€μ΄μŠ€ μž¬ν˜„ 도ꡬ

μ‹€μ „ μ˜ˆμ‹œ: μ½”λ”© μ—μ΄μ „νŠΈμ˜ ν•˜λ„€μŠ€

Anthropic의 Claude Code, Cognition의 Devin 같은 μ½”λ”© μ—μ΄μ „νŠΈκ°€ μž‘λ™ν•˜λŠ” 방식을 λ‹¨μˆœν™”ν•˜λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

이 ꡬ쑰 덕뢄에 LLM이 잘λͺ»λœ μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ„ ν…ŒμŠ€νŠΈκ°€ μ¦‰μ‹œ μ‹€νŒ¨λ₯Ό μ•Œλ €μ£Όκ³ , μ—μ΄μ „νŠΈλŠ” κ·Έ ν”Όλ“œλ°±μ„ λ°›μ•„ 슀슀둜 μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λΈμ΄ λ˜‘λ˜‘ν•΄μ„œκ°€ μ•„λ‹ˆλΌ, ν•˜λ„€μŠ€κ°€ μ‹€νŒ¨λ₯Ό λΉ λ₯΄κ²Œ κ°€μ‹œν™”ν•˜κΈ° λ•Œλ¬Έμ— μ‹œμŠ€ν…œ 전체가 μ‹ λ’°ν•  λ§Œν•΄μ§€λŠ” κ²ƒμž…λ‹ˆλ‹€.


SRE μ‚¬κ³ λ°©μ‹μ˜ ν™•μž₯

ν•˜λ„€μŠ€ μ—”μ§€λ‹ˆμ–΄λ§μ€ 본질적으둜 비결정적(non-deterministic) μ»΄ν¬λ„ŒνŠΈμ— λŒ€ν•œ SRE μ‚¬κ³ λ°©μ‹μ˜ ν™•μž₯μž…λ‹ˆλ‹€.

 

전톡 SRE ν•˜λ„€μŠ€ μ—”μ§€λ‹ˆμ–΄λ§

전톡 SRE ν•˜λ„€μŠ€ μ—”μ§€λ‹ˆμ–΄λ§
μ„œλ²„ μž₯μ• λ₯Ό κ°€μ •ν•˜κ³  섀계 LLM μ‹€νŒ¨λ₯Ό κ°€μ •ν•˜κ³  섀계
μ„œν‚· 브레이컀, μž¬μ‹œλ„ 검증 단계, μžκ°€ μˆ˜μ • 루프
λͺ¨λ‹ˆν„°λ§/μ•Œλ¦Ό μ—μ΄μ „νŠΈ νŠΈλ ˆμ΄μ‹±, 평가 λŒ€μ‹œλ³΄λ“œ
카였슀 μ—”μ§€λ‹ˆμ–΄λ§ μ λŒ€μ  평가(adversarial eval)

마치며: μ™œ μ§€κΈˆ μ€‘μš”ν•œκ°€?

2025~2026년은 "ν”„λ‘¬ν”„νŠΈ 잘 짜기"의 μ‹œλŒ€μ—μ„œ "μ—μ΄μ „νŠΈ 인프라 잘 짜기"의 μ‹œλŒ€λ‘œ λ„˜μ–΄κ°€λŠ” λ³€κ³‘μ μž…λ‹ˆλ‹€. 더 쒋은 λͺ¨λΈμ„ κΈ°λ‹€λ¦¬λŠ” λŒ€μ‹ , μ§€κΈˆ κ°€μ§„ λͺ¨λΈλ‘œ μ‹ λ’°μ„± μžˆλŠ” μ‹œμŠ€ν…œμ„ λ§Œλ“œλŠ” λŠ₯λ ₯ — 그것이 ν•˜λ„€μŠ€ μ—”μ§€λ‹ˆμ–΄λ§μ΄ μ•½μ†ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

 

핡심은 단 ν•œ λ¬Έμž₯μž…λ‹ˆλ‹€.

"μ—μ΄μ „νŠΈλ₯Ό 더 λ˜‘λ˜‘ν•˜κ²Œ λ§Œλ“€λ € ν•˜μ§€ 말고, μŠ€μΊν΄λ”©μ„ 더 λ‹¨λ‹¨ν•˜κ²Œ λ§Œλ“€μ–΄λΌ."

λ‹€μŒ κΈ€μ—μ„œλŠ” μ‹€μ œ ν”„λ‘œλ•μ…˜ ν•˜λ„€μŠ€ νŒ¨ν„΄(검증 루프, 평가 ν•˜λ„€μŠ€ ꡬ좕, 도ꡬ 섀계 베슀트 ν”„λž™ν‹°μŠ€)을 μ½”λ“œ μ˜ˆμ‹œμ™€ ν•¨κ»˜ λ‹€λ€„λ³΄κ² μŠ΅λ‹ˆλ‹€.


#AIμ—μ΄μ „νŠΈ #ν•˜λ„€μŠ€μ—”μ§€λ‹ˆμ–΄λ§ #LLMOps #AgentInfrastructure #DevTools

728x90