Files
aio-01d4-stu/Lecture/70/03-STAGE3-CHANGE-AND-VERSION.md
T

4.8 KiB

3단계 · 재사용 구조의 변경 관리

  • 교시: 56교시 (14:0015:50)
  • 실습: Lab 03
  • 이 단계가 끝나면: 여러 곳에서 쓰는 모듈을 바꿀 때 하위 호환인지 판단하고, 깨지는 변경은 새 버전으로 나란히 두며, 영향 받는 테스트를 모두 돌릴 수 있다.
flowchart LR
  A["1. 재사용의 대가"] --> B["2. 하위 호환<br/>(같은 id)"] --> C["3. 깨지는 변경<br/>(새 id)"] --> D["4. 계약은 층마다"] --> E["5. 영향 표"]

1. 재사용의 대가

모듈을 한 번 고치면 쓰는 곳이 모두 함께 바뀝니다. 좋은 점(규칙 하나로 모두 고침)이자 위험(하나 고쳤는데 여럿이 깨짐)입니다.

질문 답에 따라
예전 호출이 아무것도 바꾸지 않아도 예전처럼 동작하나? 예 → 하위 호환, 같은 id로 고침
결과 필드가 없어지거나 뜻이 바뀌나? 예 → 깨지는 변경, 새 id로 새 버전

2. 하위 호환 변경: 사외 링크 금지

바꾼 것 하위 호환인 이유
새 입력 allowed_domains 없으면 기본값 intra.example.com → 예전 호출은 고칠 필요 없음
새 코드 external_link 기존 결과 필드(passed, codes, issues)는 그대로, codes에 하나 더 들어갈 뿐

수업 준비 때 (1회씩):

단계 결과
바꾸기 전 lab03 3/4 (바깥 링크를 못 잡음)
처음 고침: new URL(...)로 호스트 읽기 2/4 — 사내 링크까지 막음. Code 노드 안에서 URL을 쓸 수 없어 모든 링크가 "읽기 실패 = 바깥"으로 처리됨
호스트를 글자로 잘라 읽기 4/4
push 직후 쓰는 곳 모듈 시험 5/5 · 공지 키트 5/5 · SMS 4/4

같은 id로 push한 순간 키트와 SMS가 모두 새 모듈을 씁니다. 그래서 쓰는 곳 테스트를 모두 다시 돌립니다. 사내 링크까지 막혔던 버그가 그대로 나갔다면 공지와 문자가 함께 멈췄을 것입니다.

3. 깨지는 변경: 심각도

팀장: "글자 수 초과는 경고만, 나머지는 막기. 결과에 blocking과 warnings를." 문자는 지금 그대로.

v1.1 modRuleCheck01 v2 modRuleCheck02
passed 뜻 문제가 하나도 없음 막는 문제가 없음 (경고는 있어도 됨)
결과 codes, issues blocking, warnings, issues
쓰는 곳 SMS, 시험용 웹훅 공지 키트, v2 시험용 웹훅

passed의 뜻과 결과 필드가 바뀌므로 같은 id로 고치면 SMS가 그 순간 깨집니다. 그래서 v2를 나란히 두고 키트만 옮겼습니다. 수업 준비 때 cases/lab03-v2.json(v2 모듈 · 키트 · SMS를 한 번에) 5/5.

4. 계약은 층마다

flowchart LR
  T["lab01 테스트<br/>(키트를 쓰는 쪽)"] -->|"codes를 읽음"| K["공지 키트"] -->|"blocking · warnings"| M[["모듈 v2"]]
수업 준비 때 lab01
키트를 v2로 옮기며 결과를 blocking·warnings로 바꾸고 codes를 뺌 2/5
codes를 남기고(blocking + warnings) 새 필드를 더함 5/5

모듈의 깨지는 변경을 새 id로 막아도, 중간 층(키트)이 그 변화를 자기 계약으로 흘려보내면 그 위가 깨집니다. 새 필드는 더하고, 예전 필드는 남깁니다.

5. 영향 표

모듈을 바꾸기 전에 "누가 쓰나"를 표로 만듭니다. 에이전트에게 my-work/*.json에서 executeWorkflow의 workflowId를 찾게 하면 빠릅니다 (확인은 사람이).

모듈 · 버전 쓰는 워크플로우 돌릴 테스트
modRuleCheck01 (v1.1) SMS, 시험용 웹훅 lab02-challenge, lab02-module, lab03
modRuleCheck02 (v2) 공지 키트, v2 시험용 웹훅 lab01, lab01-challenge, lab03-v2

수업 준비 때 키트의 어려운 케이스 7개 (kind의 대소문자·공백, 한국어 이름, 공백만 보낸 사실, 없는 종류, 바깥·사내 링크, "아주 짧게"): 예제 2 키트 3/7 → 최종본 7/7. 고친 곳은 키트만(설정 표 앞에서 kind 다듬기, 사실 공백 확인, 없는 종류 처리)이었고 모듈은 고치지 않았습니다. 영향 표 덕분에 "키트 테스트만 돌리면 된다"는 것을 바로 알 수 있습니다.

정리

  • 예전 호출이 그대로 동작하면 하위 호환 → 같은 id, 그리고 쓰는 곳 테스트를 모두
  • 결과의 뜻·필드가 바뀌면 새 id로 나란히, 쓰는 곳을 하나씩 옮긴다
  • 계약은 층마다: 중간 층도 예전 필드를 남기고 새 필드를 더한다
  • 바꾸기 전에 영향 표: 누가 쓰고, 어떤 테스트를 돌릴지