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

거절된 기능은 백로그가 아니야

~12 min · constraints, resource-ownership, siblings, scope

Level 0원석
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"'실시간 시세 추가' 는 백로그 항목이 아니라 거절된 기능이다."

옆집에서 온 제약

시장 데이터 플랜은 자산군당 실시간 스트리밍 연결 하나만 허용하고, 포트폴리오 형제의 서빙 프로세스가 이미 그걸 쥐고 있어. 그 앱은 프로덕션에서 돌아가는 중이고, 그 연결로 자기 일을 하고 있고.

그래서 Touchstone 은 그 제공자한테 REST 로만 붙어. 영구적으로. "플랜 업그레이드할 때까지" 도 아니고 "공용 연결 브로커 만들 때까지" 도 아니야. 아키텍처 문서가 그 결과를 쓸 수 있는 제일 센 표현으로 못 박았고, 그 표현 자체가 배울 점이야. 백로그 항목이 아니라 거절된 기능.

차이가 말투에 있는 게 아니야

백로그 항목은 날짜만 비워둔 약속이야. 목록에 앉아 있고, 재추정되고, 몇 달마다 누가 지금이 그때냐고 물어. 설계도 바꿔. 사람들이 거기 이음매를 남기고, "나중에 갈아끼우게" 추상을 쓰고, 그 이음매를 아무것도 안 쓰고 있다고 정확히 지적하는 사람한테서 리뷰에서 방어해.

거절된 기능은 닫힌 질문이야. 뭘 짓냐가 바뀌어. 스트리밍 이음매 없음, 구현 하나짜리 어댑터 인터페이스 없음, 그날을 위해 예약해둔 설정 플래그 없음. 그리고 결정적으로, 누가 그걸 제안했을 때 벌어지는 일이 바뀌어. 답이 "좋은 생각이야, 백로그에 있어" 가 아니라 "저건 왜 남의 연결인지" 가 되거든.

결정만 적지 말고 이유를 적어. "실시간 시세 없음" 은 새 사람이 올 때마다 재심을 부르는 문장이야. "자산군당 연결 하나, 포트폴리오 앱 서빙 프로세스가 소유" 는 세상의 사실 하나를 바꾸지 않으면 재심이 안 돼. 그리고 그 사실이 진짜 바뀌면, 이 메모가 정확히 어느 사실을 확인해야 하는지 알려주고.

형제 앱들 사이의 자원 소유권

일반 패턴은 뽑아둘 값어치가 있어. 작은 애플리케이션 여럿이 외부 할당량 하나를 공유하는 데면 어디든 나오거든. 유료 좌석 하나, API 요청 한도 하나, 웹훅 등록 하나, OAuth 앱 하나, 허용 목록에 오른 아웃바운드 IP 하나.

실패 모드는 조용하고 구체적이야. 아무도 소유자를 안 적어놨고, 앱 둘이 쓰고, 두 번째 게 돌아가는 것처럼 보여. 새 세션이 슬롯을 가져가서 제공자가 첫 번째 연결을 끊기 전까지는. 증상은 아무 잘못도 안 한 앱한테 떨어져. 증상이 떨어질 수 있는 최악의 자리야. 거기가 바로 아무도 원인을 안 찾아볼 유일한 자리거든.

수선은 싸고 일찍 해야 해. 양쪽 앱 아키텍처 문서에 소유자 이름을 적고, 비소유자한테 뭐가 따라오는지 적어. 여기서 비소유자 문장은 모호하지 않아. 그 제공자에 대해 REST 만, 영구히.

이게 금지 안 하는 것도 봐. 이 제약은 제공자 하나의 스트리밍 예산에 관한 거야. Touchstone 이 한국/일본 시세용으로 다른 라이브러리를 읽거나 게이지 뒤 계열용으로 공개 거시 소스를 읽는 걸 막지 않아. 범위가 잘 잡힌 제약은 정확한 자원 이름을 대. 범위가 흐릿한 제약("외부 데이터 쓰지 마") 이었으면 아무 이유 없이 이 제품 대부분을 막았을 거야.

Code

공유 할당량 제약의 모양, 한 번만 적어두기·text
RESOURCE:  one live streaming connection per asset class
ALLOWANCE: the market data plan
OWNER:     the portfolio app's serving process (in production)

CONSEQUENCE FOR THIS APP:
  REST-only against that provider, permanently.
  "Add live prices" is REJECTED, not deferred.

WHAT IT DOES NOT FORBID:
  - a different library for KR / JP quotes
  - public macro series for the gauge inputs
  - any amount of REST polling within the daily cadence

WHAT WOULD REOPEN IT:
  the plan's per-asset-class limit changing, OR
  the portfolio app releasing the connection
  -> named facts, so a future reader knows what to re-check

External links

Exercise

네 시스템들이 공유하는 외부 할당량을 나열해봐. API 요청 한도, 유료 좌석, 웹훅 등록, 허용 목록 IP, 단일 인스턴스 연동. 각각에 소유자를 적고, 그래서 비소유자가 뭘 하면 안 되는지 적어. 소유자를 한 줄로 못 대는 할당량은 두 팀이 동시에 바빠지는 그 주를 기다리고 있는 살아 있는 사고야.
Hint
위험한 건 새로 온 쪽한테 시끄럽게 터지는 대신 소유자 쪽에서 조용히 터지는 할당량이야. 한도에서 제공자 동작이 '제일 오래된 세션을 끊는다' 면, 증상은 몇 달째 멀쩡히 돌던 앱에서 나타나.

Progress

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

댓글 0

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

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