byteforce

CPN 한국어 자습서 · Claude Certified Developer — Foundations Prep

5-8 · 종합 과제

결함 세 개를 찾아 고치고, 배포를 다시 조립하기

Cumulative task: find all three, explain each, write the correction

이 레슨은 모듈 5 전체를 한 배포 안에서 되짚는 종합 과제입니다. 규제 대상 AWS 고객에게 배포된 코드 리뷰 액셀러레이터를 놓고, 포장·배포와 버전·여러 구성요소가 맞닿는 경계 세 층에 하나씩 심어 둔 결함을 찾아봅니다. 먼저 결함을 진단하고, 그다음 고친 세 줄을 모아 배포를 다시 조립해 검증까지 이어 갑니다.

이 장에서 배우는 것What you'll learn

약 8분
1

한 배포에 심어 둔 세 층의 결함 — 포장 · 배포와 버전 · 여러 구성요소 경계

2

포장 결함 — 고정값을 인자로 빼서 다시 쓸 수 있게 만들기

3

버전 결함 — 이동 별칭을 전체 모델 ID로 고정하고 이전 버전 보존하기

4

경계 결함 — 외부에서 가져온 내용을 데이터로 감싸 인젝션 막기

5

고친 배포를 다시 조립하고, 올리기 전에 평가로 검증하기

6

진단 → 조립 → 검증 순서로 배포를 마무리하는 흐름

먼저 짚고 갈 용어
액셀러레이터 (accelerator)
여러 곳에 다시 쓸 수 있게 하나로 포장해 둔 에이전트 솔루션. 이 과제의 대상은 코드 리뷰를 돕는 액셀러레이터다.
파라미터화 (parameterize)
값을 코드 안에 고정하지 않고, 밖에서 인자로 넣도록 빼 두는 것. 고정해 두면 다른 곳에 쓸 때마다 코드를 직접 고쳐야 한다.
고정된 모델 ID (pinned model ID)
항상 같은 버전을 가리키는 전체 모델 이름. opus 같은 짧은 별칭은 시점에 따라 다른 버전을 가리키는 이동 별칭(moving alias)이다.
롤백 · 이전 버전 보존 (rollback / retain)
새 버전이 이전보다 나빠졌을 때 되돌아갈 수 있도록, 직전에 쓰던 고정 버전을 보존해 두는 것.
신뢰 경계 (trust boundary)
믿을 수 있는 내용과 믿을 수 없는 내용이 만나는 지점. 외부에서 가져온 내용을 지시로 그대로 받아들이면 이 경계가 뚫린다.
프롬프트 인젝션 (prompt injection)
외부에서 가져온 내용에 섞여 들어온 지시를, 모델이 진짜 지시로 잘못 실행하는 공격.
평가 스위트 · 기준 점수 (eval suite / baseline)
새 버전을 올리기 전에 통과해야 하는 시험 묶음과 그 통과 점수. 점수를 넘긴 버전만 배포되도록 걸어 둘 수 있다.

이번 종합 과제

Cumulative task · all topics

이번에는 모듈 5에서 따로 다룬 내용을 한 배포 안에서 한꺼번에 짚어 봅니다. 규제 대상 AWS 고객에게 배포된 코드 리뷰 액셀러레이터를 놓고, 서로 다른 세 층에 하나씩 심어 둔 결함 세 개를 찾는 과제입니다.

진행은 두 단계입니다. 먼저 결함을 진단하고, 그다음 고친 세 줄을 모아 배포를 다시 조립해 검증합니다. 진단에서 찾은 세 줄이 그대로 조립 단계의 재료가 됩니다.

큰 그림 먼저

결함이 한 층에 몰려 있지 않고 세 층에 하나씩 흩어져 있습니다. 그래서 한 곳만 고쳐서는 배포가 안전해지지 않고, 층마다 따로 살펴보는 편이 좋습니다.

진단 — 결함 세 개 찾기

Diagnose · find all three

개선의 순서는 고쳐 쓰기부터가 아니라 진단부터입니다. 아래 배포 코드를 먼저 읽고, 세 층에서 각각 무엇이 잘못됐는지 자기 말로 적어 보세요. 그대로 실행은 되는 코드지만, 포장 · 배포와 버전 · 여러 구성요소 경계 세 층에 결함이 하나씩 들어 있습니다.

AS SHIPPED — 규제 대상 AWS 고객에게 배포된 코드 리뷰 액셀러레이터

deployment · as shipped
# Packaged code-review accelerator, deployed for a regulated AWS customer
def build_agent():
    return Agent(
      model="opus",
      system_prompt=SYSTEM_PROMPT,
      repo_path="/home/acme/checkout",
      tools=[read_file, run_linter],
    )

deploy(platform="amazon_bedrock", identity=aws_role_arn)

# multi-component step: Claude Code task fetches a customer page
fetched = code_task.run(fetch_url=customer_page)
next_call(input=fetched)

이 배포는 세 가지 도구가 이어지는 구조입니다. Amazon BedrockAWS에서 여러 모델을 배포하고 호출하는 클라우드 플랫폼. 위에서 에이전트를 만들고, Claude Code 작업이 고객 페이지를 fetch해 온 다음, 그 결과를 다음 호출로 넘깁니다. 세 결함은 이 흐름의 서로 다른 지점에 하나씩 자리하고 있습니다. 다음 화면으로는 고친 세 줄을 가져가게 되니, 지금은 어디가 잘못됐는지 찾는 데까지만 집중하면 됩니다.

YOUR DIAGNOSIS — 세 결함을 각자의 말로

THREE LAYERS · THREE DEFECTS — 층별 정리

무엇이 잘못됐나고침 방향
포장repo_path가 고정값으로 적혀 다른 계약에 다시 쓰기 어렵다.build_agent(repo_path)로 인자화 — 계약마다 값만 설정한다.
배포와 버전이동 별칭 model="opus", 되돌릴 이전 버전 없음.전체 Bedrock 모델 ID로 고정하고 이전 버전을 보존한다.
여러 구성요소 경계가져온 내용을 지시처럼 그대로 전달 — 인젝션에 노출.treat_as_data()로 감싸 데이터로만 취급한다.
주의 · WATCH OUT

조립 — 고친 배포 확인하기

Assemble · verify the corrected deployment

세 결함을 찾았다면, 이제 고친 세 줄을 한 배포로 모읍니다. 각 결함이 무엇이었고, 무엇을 바꿨고, 왜 이제 배포해도 되는지 자기 말로 정리한 뒤 아래 모범 답안과 맞춰 보세요.

YOUR ASSEMBLY — 무엇을 바꿨고 왜 배포 가능한지

기억할 점

스스로 점검

Checkpoint · self-assess

원문의 점검 과제는 직접 써 보는 서술형입니다. 위에서 이미 두 번 써 봤으니, 여기서는 핵심을 객관식으로 한 번 더 짚어 봅니다.


정답을 먼저 떠올려 본 뒤 골라 보세요. 맞히면 설명이 나옵니다.

Q1이 배포의 포장 층에는 어떤 결함이 있었나요?

Q2model="opus"라고 지정한 것이 왜 문제였을까요?

Q3fetched = code_task.run(...)로 가져온 내용을 next_call(input=fetched)에 그대로 넘기면 어떤 위험이 있나요?

Q4고친 배포에서 새 버전을 올리기 전에 통과하도록 만든 장치는 무엇인가요?

MEMBER SESSION REQUIRED · REGISTRATION IS FREE

여기부터는 등록한 분에게 열립니다.

전 코스는 계속 무료입니다. 등록하면 이 코스의 남은 38개 레슨을 끝까지 읽을 수 있습니다.

등록하고 이어서 읽기

이미 등록하셨다면 그때 쓰신 이메일을 넣어 주세요.