3. 고쳐도 안 깨지는 코드
남의 코드를 빨리 파악하는 순서
이 차시를 마치면
처음 보는 프로젝트를 여덟 단계 순서로 빠르게 파악합니다.
남이 만든 LangGraph 프로젝트를 열었을 때 어디부터 봐야 할까요. 읽는 순서가 따로 있습니다.
파일 순서대로 읽으면 어렵습니다
알파벳 순이나 폴더 순으로 읽으면 세부 구현부터 만나게 됩니다. 그러면 이 코드가 전체에서 어느 자리에 있는지 모른 채 읽게 됩니다.
비유
낯선 건물에서 길을 찾을 때 각 방을 하나씩 열어 보는 것과 먼저 층별 안내도를 보는 것의 차이입니다. 안내도를 보면 방 세 개만 열어 봐도 됩니다.
권장 순서 여덟 단계
| 순서 | 파일 | 여기서 확인할 것 |
|---|---|---|
| 1 | graph.py | 어떤 Node 가 있는가 · START 가 어디로 가는가 · 조건부 분기는 어디에 있는가 · END 는 언제 발생하는가 |
| 2 | state.py | Graph 가 무엇을 기억하는가 |
| 3 | routing.py | 어떤 조건으로 갈림길이 생기는가 |
| 4 | nodes.py | 각 단계가 실제로 무엇을 하는가 |
| 5 | tools.py | 외부 세계와 어떤 접점이 있는가 |
| 6 | schemas.py | LLM 과 코드 사이의 데이터 형식이 무엇인가 |
| 7 | prompts.py | LLM 판단 기준이 무엇인가 |
| 8 | tests/ | 의도된 동작이 무엇인가 |
이 순서는 전체 구조 → 상태 → 분기 → 세부 구현 으로 내려갑니다.
보안 점검을 할 때는 순서를 바꿉니다
"이 Agent 가 밖으로 무엇을 할 수 있는가"를 먼저 알고 싶다면 5번 tools.py 부터 읽습니다. 외부와 닿는 지점이 거기 모여 있기 때문입니다. 분석
그다음 graph.py 로 가서 그 도구를 부르는 Node 앞에 승인 단계가 있는지 확인합니다. 두 파일만 봐도 위험한 구조인지 판단할 수 있습니다.
1번에서 무엇을 볼 것인가
builder = StateGraph(AppState)
builder.add_node("retrieve", retrieve)
builder.add_node("generate", generate)
builder.add_edge(START, "retrieve")
builder.add_edge("retrieve", "generate")
builder.add_edge("generate", END)
graph = builder.compile()
여기서 세 가지를 확인합니다.
- 등록된 Node 이름과 Edge 가 가리키는 이름이 일치하는가
- START 에서 END 로 가는 경로가 실제로 있는가
compile()에 Checkpointer 가 있는가 — 없으면 이 그래프는 멈췄다가 이어서 실행할 수 없습니다
3번은 특히 중요합니다. 승인 절차를 넣으려면 Checkpointer 가 반드시 있어야 하기 때문입니다.
이 차시의 파이썬 코드는 개념을 보이려고 떼어 놓은 예시 조각입니다. 문법 검사는 통과하지만 그대로 돌려서 결과를 확인한 코드는 아닙니다. 실행까지 검증한 코드는 4번과 6번 트랙에 있으며, 그 차시에는 무엇을 어떻게 확인했는지 따로 적어 두었습니다.
이해도 확인
문항을 불러오는 중입니다.