C.W.K.
Stream
Lesson 01 of 05 · published

검색은 자동완성이 아냐

~11 min · two-regimes, search-vs-complete, latency, api-design

Level 0불 꺼진 심지
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"둘 다 텍스트를 받아 코퍼스에서 텍스트를 돌려줘. 그럼 같은 거겠지? 아냐. 둘은 latency 절벽의 반대편에 있어."

하나처럼 보이는 둘

Lantern 은 형제처럼 보이는 두 종류 질문에 답해. 검색: "장기 투자에 관한 구절을 찾아줘." 자동완성: "'장기 투자자가 물어야 할 유일한 질문' 을 치는 중 — 내 코퍼스가 하듯 끝내줘." 둘 다 텍스트를 받고, 둘 다 같은 코퍼스에서 텍스트를 돌려줘. 게으른 본능은 둘 다 하는 엔드포인트 하나를 짓는 거야. 그 본능은 틀렸고, 이유는 물리야.

latency 예산이 선을 그어

검색은 인터랙티브 야: 사람이 쿼리를 치고 엔터를 눌렀고, 좋은 답을 위해 한 박자 기다릴 거야. 그 박자 — 수백 ms — 는 키워드 인덱스를 상의하고, 벡터 검색을 돌리고, 둘을 융합하고, 선택적으로 rerank 하기에 충분한 시간이야. 자동완성은 키스트로크 등급 이야: 치는 대로, 모든 문자마다 발사되고, 수십 ms 안에 못 답하면 쓸모없는 것보다 나빠 — 네 손가락 뒤에 처져. 네트워크 왕복은커녕 모델 호출 예산도 없어.

일도 선을 그어

둘은 다른 질문에도 답해. 검색은 관련성 을 원해: 가장 잘 매칭되는 구절을, 순위 매겨, 코퍼스 어디 있든. 자동완성은 연속 을 원해: 커서 밑의 정확한 prefix 가 주어지면, 네 글에서 실제로 뒤따르는 단어가 뭐야? 하나는 옳은 책을 가져오는 사서고, 다른 하나는 네 자신의 목소리가 네 문장을 끝내는 거야. 한 경로를 두 일에 최적화하면 각각에 그저 그렇게 돼.

두 기능이 인터페이스는 공유하되 latency 예산은 안 하면, 분리해. 표면적 유사성 — 같은 입력, 같은 출력 — 은 함정이야. 하나가 ms 안에 답해야 하고 다른 하나가 한 박자 쓸 수 있으면, 공유 구현을 반대 방향으로 당길 거야. 각자 한 일을 잘하는 깨끗한 엔드포인트 둘이, 둘 다 타협하는 영리한 엔드포인트 하나를 이겨.

한 엔진, 두 엔드포인트

두 레짐은 표면 아래 전부를 공유해 — 같은 코퍼스, 같은 인덱스, 같은 chunk — 근데 두 별도 계약의 두 별도 엔드포인트를 노출해. 검색은 벡터와 rerank 를 위해 네트워크 너머로 손 뻗을 수 있고, degrade 하면 알려. 자동완성은 로컬 기계를 절대 안 떠나. 둘을 별개 경로로 두는 건 중복이 아냐. 키스트로크와 쿼리가 같은 이벤트가 아니고, 같은 척해서 서비스하면 안 된다는 정직한 인정이야.

Code

키스트로크와 쿼리가 같은 이벤트가 아니라 엔드포인트 둘·python
# Same corpus underneath, two endpoints with two very different contracts.

@app.post("/api/search")
def search(query: str, mode: str = "hybrid", k: int = 8, rerank: bool = False):
    # Budget: ~100s of ms. May use vectors + fusion + optional rerank.
    # Announces degradation. This is the interactive 'find relevant passages' path.
    ...

@app.post("/api/complete")
def complete(prefix: str, k: int = 5):
    # Budget: tens of ms, on EVERY keystroke. No embeddings. No network. No model.
    # This is the 'finish my sentence from the corpus' path. Local index only.
    ...

# Merging these into one endpoint would force completion to carry search's
# machinery — and the keystroke path can't afford a single network hop.

External links

Exercise

네가 쓰는 앱에서 인터페이스는 공유하되 속도가 다르게 느껴지는 두 기능을 떠올려 — 가령 검색창 대 그 자동완성 드롭다운. 각각의 latency 예산을 추정해. 한 코드 경로로 구현할래 두 개로? 빠른 게 느린 것과 기계를 공유하면 뭘 포기하게 될지 나열해.
Hint
신호는 latency 절벽이야: 한 기능이 보이는 한 박자를 쓸 수 있고 다른 게 즉각처럼 느껴져야 하면, 공유 구현이 빠른 걸 느린 것의 무게를 지게 강요해. 각자 자기 예산을 소유하는 두 경로가 거의 항상 이겨.

Progress

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

댓글 0

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

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