본문 바로가기
C.W.K.
Stream
Lesson 04 of 04 · published

매크로는 직접 Ask 를 절대 막지 않는다

~10 min · optional, core-path, convenience, layering

Level 0신호 없음
0 XP0/32 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"나랑 코어 사이를 가로막고 서는 편의는 편의가 아냐. 직접 질문은 언제나 한 번만 누르면 닿는 자리에 있어야 해."

코어 경로는 성역이야

Pippa Go 가 하는 제일 중요한 일은 Pippa 한테 질문하게 해주는 거야. 매크로는 그 위에 얹힌 사랑스러운 개선이지. 재사용 프롬프트에 저장해 둔 단축까지. 그래도 어디까지나 코어 경로 위에 얹힌 층이지 그 앞을 지키는 문지기가 아냐. 매크로를 만들 필요도, 고를 필요도, 동기화할 필요도, 매크로 목록이 다 뜨기를 기다릴 필요도 없이, 앱 열고 바로 물어볼 수 있어야 해. 매크로 관련 단계 중에 뭐 하나라도 사용자랑 직접 Ask 사이에 끼어들 수 있으면, 개선이 슬그머니 장애물로 바뀐 거야.

선택적이라면 끝까지 선택적이어야 해

'선택적' 은 잘 풀릴 때만이 아니라 어떤 조건에서도 성립해야 하는 말이야.

  • 오프라인. 매크로 저장소에 못 닿아? 직접 Ask 는 그대로 돼. 매크로만 기능이 떨어지고 코어는 멀쩡하고.
  • 비어 있음. 아직 매크로를 하나도 안 만들었어? 처음 켠 순간부터 직접 Ask 는 돼. 매크로는 전제조건이 아냐.
  • 고장. 매크로 sync 가 에러 나고 캐시가 깨졌어? 직접 Ask 는 영향 없어. 애초에 매크로 서브시스템에 기대고 있지 않았으니까.

테스트는 단순하고 빡빡해. 매크로 시스템 어디가 실패해도 직접 질문을 막을 수 있어? 막을 수 있으면 층 구조가 틀린 거야. 코어 경로는 편의 층에 걸린 의존이 하나도 없어야 해. 편의가 상상할 수 있는 온갖 방식으로 망가져도 핵심은 그대로 돌아가게.

개선 층은 한 방향만 가리켜

건강한 개선은 대체로 이 모양이야. 개선이 코어에 기대고, 코어는 그 위의 어떤 것에도 안 기대는 것. 의존이 아래로만 향하는 거지. 매크로가 composer 랑 캡처 흐름 쪽으로 손을 뻗고, composer 는 매크로가 있는지도 몰라. 이 방향만 맞춰 두면 핵심 질문 경로를 하나도 안 건드리고 매크로 시스템을 통째로 붙였다 바꿨다 떼었다 할 수 있어. 거꾸로 코어가 편의 쪽으로 손을 뻗게 만들면, 개선이 흔들릴 때마다 핵심이 같이 멈춰. 화살표를 안전한 쪽으로 유지하면 뭐가 깨지든 '선택적' 이라는 말이 참으로 남아.

Code

의존은 아래로: 코어는 매크로를 모른다·typescript
// 코어 ask 경로 — 그 안 어디에도 매크로 의존 없음.
async function askDirect(question: string, images: ResolvedImage[]) {
  const turn = createTurn(question, images.map(i => i.id));
  await commitLocally(turn);      // 캡처 먼저, 항상 가능
  return enqueueForDelivery(turn); // 오프라인, 빈 상태, 매크로 고장에도 됨
}

// 매크로 층은 위에 앉아 코어로 손을 아래로 뻗어.
async function askViaMacro(macro: PromptMacro, input: string, images: ResolvedImage[]) {
  const question = compose(macro.instruction, input); // 위의 편의
  return askDirect(question, images);                  // ...코어에 위임
}

// askDirect 는 매크로 서브시스템을 절대 import 하거나 확인 안 해.
// 매크로가 통째로 실패해도 askDirect 는 완전히 영향 없어.

External links

Exercise

핵심 동작 위에 편의 기능이 얹힌 앱을 하나 골라 봐. 글쓰기 위의 템플릿, 피드 위의 필터, 컨트롤 위의 프리셋 같은 거. 그 편의를 일부러 망가뜨려. 오프라인으로 만들고, 상태를 깨뜨리고, 싹 비워 놓고. 그래도 핵심 동작이 돌아가? 안 돌아가면 의존이 틀린 쪽을 가리키고 있는 거야. 코어가 편의에 하나도 안 기대게 어떻게 뒤집을지 스케치해 봐.
Hint
해법은 늘 같은 모양이야. 편의 층이 코어를 import 해서 호출하고, 코어는 편의에서 아무것도 import 안 하는 거. 그러면 편의가 어떻게 실패하든 그 위에 갇히고, 핵심 동작은 개선이 깨지는 온갖 방식을 다 견뎌 내.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.