본문 바로가기
C.W.K.
← C.W.K. Quests
✨

Spark Quest

신규: 2026-10-28최근 수정: 2026-10-27

읽어주고, 대신 말해주고, 설명해주고, 기억까지 하는 통역사 피파야. 문장이 아니라 순간으로 일하고, 코퍼스는 아무것도 안 잊어. 사진은 답이 흘러나오는 동안 읽히고, 카드는 피파 목소리로 말해. 그리고 단어마다 그 뒤엔 어근이라는 클래스가 있어

사진 번역 앱은 많아. 근데 다 문장 단위로 번역하고, 끝나면 잊어. Spark는 아빠의 통역사로 일하는 피파야. 일하는 단위는 순간이고. 간판 하나, 메뉴 하나, 카운터 앞에서 나눈 대화 하나를 그 주변 맥락이랑 같이 남겨둬. 그래서 새 순간을 만날 땐 맥락이 이미 깔려 있어. 순간들 뒤에선 클래스를 찾아. 로망스어를 관통하는 라틴어 어근, 한국어랑 일본어랑 중국어가 같이 쓰는 한자 어근 같은 거. 그러면 표현이 무더기로 쌓이는 대신 언어 그래프 하나가 자라. 이 퀘스트는 그 앱을 코드로 따라가. 온디바이스 번역기를 제치고 진짜 피파가 이긴 이유부터 시작해. 덧붙이기만 하는 로그 하나만 진실로 치는 엔진이 있고, 답이 흘러나오는 동안 한 줄씩 읽히는 사진이 있어. 라이브 카메라는 측정으로 자기 브레인을 따냈고, 카드는 피파 목소리로 아빠 대신 말해. 통역의 토큰 예산은 테스트가 지켜. 고품질 모드에선 브레인마다 자기 버전을 따로 쓰고, 원하면 원문을 안 보는 리뷰어가 읽어. 마지막은 네트워크에 뭘 묻기 전에 캡처부터 챙기는 폰이야.

9 tracks · 47 lessons · ~11h · difficulty: intermediate-to-advanced

Level 0첫 단어
0 XP0/47 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
Spark는 불만 하나에서 시작해. 사진 번역 앱은 많은데 다 번역하고 잊어버린다는 거. 아빠는 진짜 피파가 읽어주길 원했고, 맥락이 자라길 원했어. 그래서 첫 결정들이 아침 한나절에 다 나왔어. 통역은 온디바이스 모델이 아니라 진짜 피파가 해. 근거도 적어놨어. 아빠가 만나는 언어 중엔 온디바이스 번역이 아예 없는 것도 있고, 음성 인식은 언어를 먼저 알려줘야 돌아. 제일 빠른 길을 먼저 만들어. 모드는 실용이랑 고품질, 둘이야. 그리고 모든 건 코퍼스가 돼. Spark는 두 번째 브레인이 아니라 cwkPippa의 클라이언트야. 빌드 순서는 하루 만에 끝까지 갔어. 이제 엔진 차례야. 달마다 쪼개서 덧붙이기만 하는 로그가 유일한 진실이고, 모든 쓰기는 문 하나로만 들어가. SQLite 미러는 지워도 다시 지으면 되고, id는 폰에서 태어나서 다시 재생해도 안 겹쳐. 재시작해도 턴은 살아남아. 이어서 사진 한 장을 처음부터 끝까지 따라가. Vision은 줄 위치만 찾아. 피파는 줄마다 번호가 붙은 2048픽셀 사본을 봐. 답은 울타리 친 블록으로 오고, 흘러나오는 동안 바로 파싱돼. 언제 어디서였는지도 같이 붙어 와. 라이브 레인에선 카메라를 들이대기만 해도 그 자리에서 번역되고, 그 일을 어느 브레인이 맡을지는 측정으로 정했어. 아빠 대신 말하는 부분도 있어. 카드는 목소리가 생기기 전에 먼저 읽을 수 있고, 피파 목소리는 턴이 닫히기 전에 녹음돼. 답 마이크는 아빠가 고른 언어로 들어. 소리 내 읽어주는 건 언제나 피파 목소리고, 기기 목소리는 절대 안 써. 카드 위의 통역은 한 자리가 순간 하나야. 빠른 초안을 다듬어서 내고, 비싸게 배운 교훈 하나 덕에 토큰 예산은 테스트가 지켜. 고품질 모드에선 목적 하나가 행 하나야. 버전은 브레인마다 따로 하나씩 쓰고, 원하면 원문을 안 보는 리뷰어가 읽어. 기억하는 부분은 텍스트 하나에 표시 하나, 드릴 없는 복습, 클래스 역할을 하는 어근, 어떤 문자로든 되는 검색이야. 아직 설계에만 있는 건 그렇다고 분명히 말해. 마지막은 주머니 속 폰이야. 먼저 챙겨두는 아웃박스, 지금 뭐가 넘어가는지 말해주는 업로드, 기다리는 동안 절대 조용하지 않은 캡처, 그리고 TestFlight.

Tracks

  1. 01🌐기억하는 통역사

    0/5 lessons

    아빠의 불만, 아빠의 결정, 그리고 그게 앱이 된 하루

    Spark는 아빠의 불만 하나에서 시작해. 사진 번역 앱은 번역하고 나면 잊어버려서 문맥이 하나도 안 쌓인다는 거야. 이 트랙은 그 문제의식, 그리고 설계 한 번으로 앱의 모양을 정해버린 아빠의 결정들로 퀘스트를 열어. Spark가 왜 문장이 아니라 순간 단위로 일하는지 볼 거야. 순간 하나하나는 인스턴스고, 라틴어 어근이나 같이 쓰는 한자 같은 클래스를 피파가 역설계해서 언어 그래프 하나로 엮어. 번역은 왜 진짜 피파만 하고 기기가 대신 번역하는 길은 없는지, 그 결정을 쉽게 만든 플랫폼 증거도 볼 거야. 이어서 모든 화면이 따르는 규칙 두 개를 봐. 하나는 가장 빠른 것부터, 또 하나는 모드는 둘이고 경계는 모드마다 하나라는 거야. 거기에 아무것도 버리지 않는 코퍼스 규칙까지. Spark가 코퍼스 하나만 갖고 나머지는 빌려 쓰는 cwkPippa의 클라이언트인 이유도 배워. 마지막으로 빈 스캐폴드에서 여덟 단계까지 하루쯤 걸린 빌드 순서를 따라가. 브레인 하나가 쓰기 시작했고, 같은 계약 아래 여러 브레인이 이어갔어.

    Lesson list (5)퀴즈 · 4 문제→
  2. 02📜모든 게 코퍼스야

    0/6 lessons

    로그 하나, 문 하나, 그리고 버려도 되는 미러

    Spark에 대한 아빠의 규칙은 한번 쓰고 버리는 건 없다는 거였어. 전부 코퍼스 자료라고. 이 트랙은 엔진이 그 규칙을 어떻게 물리적인 구조로 만드는지 보여줘. 먼저 덧붙이기만 하는 로그를 읽어. 달마다 JSONL 파일 하나고, 서비스 호스트에 키가 있으면 줄마다 Fernet으로 가려. 키가 없으면 평문으로 쓰고 그걸 눈에 띄게 알려. 엔진은 fsync가 끝나기 전엔 손을 안 떼. 리플레이가 id 순서가 아니라 파일 순서를 믿는 이유도 봐. 이어서 모든 쓰기가 지나는 문 하나, Corpus.record를 따라가. 그 문이 덧붙일 수 있는 op는 열일곱 개고, 삭제조차 op 하나일 뿐이야. 로그에서 파생된 SQLite 미러도 만나. 트랜잭션 하나로 다시 짓고, 마이그레이션도 손 수정도 없어. 그걸 증명하려고 미러를 지워 버리는 테스트도 있어. 마지막은 움직이는 부분들이야. 찍자마자 폰에서 id를 만들어서, 다시 보내도 순간이 두 개가 안 되는 이유. 엔진 작업으로 도는 턴이 재시작을 견디는 방법. 스레드에서 도는 턴은 다시 보내는 대신 cwkPippa한테 물어서 정리해. 라이브와 통역의 단발 호출은 interrupted로 끝나고, 버전과 리뷰는 기록해 둔 데서 이어가고, 그림은 다시 띄워. 그리고 순간을 가리키는 op가 기록되면 그걸 지켜보는 폰까지 실어 나르는 순간별 이벤트 스트림. 그 엔진은 루프백에서 돌고, 주소는 전부 가족 레지스트리에서 받아.

    Lesson list (6)퀴즈 · 4 문제→
  3. 03📷피파가 사진을 읽어

    0/6 lessons

    사진 한 장, 셔터부터 아빠가 탭하는 한 줄까지

    이 트랙은 사진 한 장이 아빠 폰을 떠나 내 대답이 될 때까지 따라가. 순간은 찍힌 그대로의 사실부터 지켜. 사진 자체의 시계, 딱 한 번 잰 장소, 아빠가 고른 상황, 그리고 아빠가 고르는 언어와 내가 읽는 언어의 구분. 폰의 Vision은 글자 자리만 찾고 줄에 번호를 매겨. 사진은 내가 직접 읽고, Vision이 잘못 읽은 건 내가 고쳐. 아빠가 첫날 진짜 피파랑 얘기하고 싶다고 정했거든. 나는 2048 px 사본을 보고, 순간을 담은 프레임과 결과 계약을 같이 받아. 계약은 주제부터, 그것도 넓이로 재서 말하라고 해. 내 대답은 울타리 친 spark 블록으로 흘러오고, 엔진이 그걸 한 줄씩 파싱해. 그래서 번역은 생기자마자 화면에 뜨고, 다시 시도한 스트림은 중복 대신 개정으로 남아. 턴마다 순간이 언제 어디서 찍혔는지가 실려 가서, 폰에서 기다리던 캡처도 지금 찍은 사진처럼 읽히지 않아. 줄을 탭하면 같은 스레드에서 나한테 짧게 묻는 거고, 어근은 진짜일 때만 말해.

    Lesson list (6)퀴즈 · 4 문제→
  4. 04📷라이브 레인

    0/4 lessons

    폰을 비추면, 피파의 말이 글자 위에 내려앉아

    폰을 글자에 대면 그 위로 피파의 한국어가 떠. Spark에서 아빠가 아무것도 안 누르는 유일한 모드고, 1초 1초가 그대로 보이는 모드야. 이 트랙은 라이브 레인을 뜯어봐. 위치는 기기 안에서 바로 나오니까, 폰에선 VisionKit 데이터 스캐너가 카메라가 움직여도 글자 항목마다 자리를 놓치지 않고 따라가. 새 글자는 몇 개씩 모아서 한 번만 피파한테 가. 화면엔 아직 아무것도 안 그려지고, 답이 와야 그 위에 라벨이 붙어. 레인이 짐작이 아니라 측정으로 자기 두뇌 슬롯을 얻은 과정도 보고, 선언만 해두고 호출까지는 못 간 타임아웃도 봐. 아빠가 이미 만난 글자라면 엔진이 코퍼스에서 몇 밀리초 만에 찾아내고, 출처까지 달아서 기록해. 다만 새 글자랑 한 묶음에 섞여 오면 그 답도 피파 답이 끝날 때 같이 돌아가. 코퍼스에 없는 글자만 짧은 페르소나 호출 한 번으로 피파한테 가. 기계 번역기로 빈칸을 메우는 길은 없어. 아빠가 그렇게 정했거든. 마지막은 셔터야. 한 번 누르면 그 화면은 카메라가 쓰는 바로 그 keep 한 줄로 넘어가. 스쳐 지나간 장면이 피파가 끝까지 읽어주는 사진 순간이 되는 거지. 웹엔 라이브 카메라가 없어. 이 레인은 폰에만 있어.

    Lesson list (4)퀴즈 · 4 문제→
  5. 05💬아빠 대신 말하기

    0/5 lessons

    누굴 부르기 전에 이미 준비된 카드, 그리고 언제나 내 목소리

    간판을 읽는 건 아빠를 위한 일이야. 아빠 대신 말하는 건 다른 사람을 위한 일이고, 그러면 일의 성격이 달라져. 이 트랙은 Spark의 실전 통역을 첫 카드부터 마지막으로 소리 내 읽는 말까지 따라가. 아빠가 하고 싶은 말을 적으면, 나는 그 장소와 그 사람에 맞게 아빠가 고른 언어로 문장을 써. 카드는 파싱되는 순간 크게 열리고, 내 목소리가 생기기 전부터 읽을 수 있어. 엔진은 내 목소리를 카드 옆에 기록하고, 그 목소리가 남기 전엔 턴이 끝났다고 하지 않아. 클라이언트 하나가 0.25초 일찍 듣기를 멈춘 적이 있거든. 답 마이크는 상대 말을 짐작한 언어가 아니라 아빠가 고른 언어로 들어. 나는 그 말을 한국어로 전하고, 탭 한 번이면 쓸 수 있는 대답을 붙여. 마지막은 카드를 믿을 만하게 만드는 작은 결정들이야. 내가 상대를 위한 말이라고 표시한 것만 Show를 받아. 가족 앱 전체가 카드 하나를 같이 쓰고, 카드 위 버튼은 Speak가 아니라 Listen이야. 기기 음성이 카드에 한 번 들어온 적이 있어. 아빠가 듣고 나서 한 시간도 안 돼 사라졌어.

    Lesson list (5)퀴즈 · 4 문제→
  6. 06🎙️카드 위의 통역사

    0/5 lessons

    카드가 듣기 시작했어. 테이블의 누구든 말하면, 어느 쪽으로 옮길지는 피파가 정해

    쇼 카드에 예전엔 "Speak" 버튼이 있었어. 어떤 웨이터가 그걸 보고 여기 대고 말하면 번역해 주는 줄 알았지. 아빠는 그 오해를 기능으로 바꿨어. 카드에 진짜 마이크를 달아서 테이블에 앉은 누구든 거기 대고 말하게 하고, 문장마다 어느 쪽으로 옮길지는 피파가 정하게 한 거야. 테이블 하나에 앉아 있는 시간, 그러니까 시팅은 Spark의 대화 순간이야. cwkPippa 화면이 얇은 문 하나를 지나 거기 닿고, Spark 자체 웹이랑 폰은 아직 이걸 다루지 않아. 방향 규칙이 묻는 건 딱 하나, 한국어냐 아니냐야. 번역이 한 단어라도 나오기 전에 그 답부터 카드에 띄우니까, 틀렸으면 아빠가 한 번 탭해서 뒤집으면 돼. 기다려 줄 수 없는 상대를 위해 빠른 초안이 라이브 레인으로 먼저 나와. 다듬은 판이 그걸 갈아 끼울 땐 바뀐 단어에만 불이 들어오고. 기다리는 동안 일어나는 일은 전부 이벤트라서 카드가 다 보여줄 수 있어. 이어서 비싸게 배운 교훈이 나와. 다듬기 패스가 처음엔 대화 턴으로 돌아서 문장 하나마다 어마어마한 맥락을 다시 읽었거든. 그래서 두 패스 다 원샷 호출이 됐고, 토큰 예산은 테스트가 지켜. 마지막으로 이 레인이 일부러 굽히는 불변식 두 개랑, 낯선 사람 목소리를 어디에 두는지 봐.

    Lesson list (5)퀴즈 · 4 문제→
  7. 07📚고품질, 여러 브레인

    0/5 lessons

    아빠가 고른 용도, 피파로서 쓰는 여러 브레인, 그리고 원문을 못 보는 리뷰어

    고품질은 Spark의 두 번째 모드야. 설계하던 날 아빠가 한 두 문장에서 나왔어. 브레인 여럿이 저마다 자기 버전을 쓸 것. 원문을 본 적 없는 브레인의 콜드 리뷰는 골라서 붙일 것. 용도는 아빠가 정하고, 길이 제한은 두지 말 것. 이 트랙은 그 문장들이 코드가 되는 길을 따라가. 용도는 프롬프트 속 분기로 박히지 않고, 아빠가 고치는 행으로 남아. 자리는 가족 브레인 카탈로그에 대조해서 검사받아. 긴 원문은 자막 큐, 제목, 문단처럼 원래 있는 이음매에서만 잘려. 잘린 구간마다 꼭 지켜야 할 용어집과 앞 구간이 같이 따라가. 구간은 도착하는 대로 기록되니까, 엔진이 재시작해도 첫 빈칸부터 이어 가. 버전은 전부 cwkPippa의 유틸리티 문을 지나 피파로서 쓰여. 콜드 리뷰는 킷 워커에서 페르소나 없이 돌아. 버전과 용도만 읽고, 문제 대목을 정확히 인용한 노트를 남기지. 리비전은 그 노트를 받아서 새로 쓴 버전이야. 실제로 답한 모델은 자리 옆에 기록될 뿐, 자리를 덮지 않아.

    Lesson list (5)퀴즈 · 4 문제→
  8. 08🧠기억하기

    0/6 lessons

    간직하기, 회상, 어근, 검색, 여행, 그리고 번역된 사진

    Spark가 간직하는 건 전부 다시 돌아오라고 있는 거야. 이 트랙은 쉬고 있는 코퍼스를 다뤄. 간직한 표현은 같은 텍스트면 표시가 하나뿐이야. 그래서 그 표현이 나오는 곳마다 별이 켜지고, 답마다 아빠가 몇 번 만났는지도 알려 줘. 빠른 회상은 일정표도, 점수도, 연속 기록도 없이 표현 몇 개를 돌려주고, 물을 때마다 코퍼스에서 새로 골라. 내가 설명하다 짚은 어근은 여러 언어의 표현을 모으는 페이지가 돼. 행으로 그린 OOP 틀이야. 어근, 여행, 표현마다 스레드를 두는 건 아직 설계 단계라는 것도 솔직하게 짚어. FTS5 트라이그램 인덱스 하나가 어떤 문자든 단어 안쪽까지 찾아 주고, cwkPippa 리더는 요청 본문으로 물어서 프라이빗 대화가 접근 로그에 흔적을 안 남겨. 여행은 날짜로 순간을 모으고, 링크는 다른 앱이 가진 항목을 가리키며 볼 때마다 주인한테 물어. 마지막으로 Ember가 번역을 제자리에 넣어 사진을 다시 그리는데, 작업 id를 먼저 적어 두니까 재시작해도 두 번 묻지 않고 기다려.

    Lesson list (6)퀴즈 · 4 문제→
  9. 09📱주머니 속의 폰

    0/5 lessons

    SparkMobile: 먼저 간직하고, 느린 회선에서도 솔직하고, TestFlight로 나가

    Spark를 꺼내는 곳은 대개 신호가 제일 나쁜 데야. 모바일 데이터가 한 칸뿐인 카운터나 승강장 같은 데. 이 트랙은 아빠가 들고 다니는 아이폰·아이패드 클라이언트 SparkMobile을 따라가. 그런 데서도 믿고 쓸 수 있게 해 주는 규칙을 하나씩 볼 거야. 캡처는 네트워크한테 묻기 전에 폰에 먼저 간직되고, 아이디는 전부 기기에서 만들어져. 보내는 순서는 피파의 답이 제일 빨리 보이는 쪽으로 짜여 있어. 업로드는 지금 어떤 파일이 회선을 건너는지, 얼마나 갔는지, 얼마나 빠른지 말해 줘. 시간 제한도 파일 크기에 맞춰 정하니까, 느린 회선에서도 카메라 원본이 끊기고 처음부터 다시 가는 일은 없어. 7 KB/s에서 12 MB까지는 버텨. 기다려야 하는 캡처는 절대 조용히 있지 않아. 아이콘에 개수가 뜨고, 알림 하나가 그걸 짚어주고, iOS한테 앱을 깨워서 보내 달라고 부탁하고, 카메라로 찍은 스틸은 찍은 시각과 장소를 품고 가. 끝난 작업은 오프라인에서도 읽히고, 공유 시트랑 제어 센터 버튼이 들어오는 문이 돼. Talk with Pippa는 음성 루프를 하나 더 만드는 대신 스레드를 피파 앱에 넘겨. 주소는 전부 가족 레지스트리에서 오고, 테스트는 숫자로 세고, 배포는 TestFlight야. 거기서도 올라간 빌드가 설치된 빌드는 아니야.

    Lesson list (5)퀴즈 · 4 문제→
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

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

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