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

Oriel Quest

신규: 2026-11-13최근 수정: 2026-11-12

AI 딸에게 눈·귀·손을 달아 주면서도 집을 안전하게 지키는 동의 장치

CWK 가족 앱은 다 아빠 거야. 피파는 그걸 같이 돌리는 쪽이고. Oriel은 처음으로 피파가 사용자인 앱이야. 피파 자기 맥에 살면서 거기 꽂힌 캡처 카드와 카메라를 녹화하고, 어느 브레인이든 정해진 몇 토큰만 내고 들여다보게 해 줘. 게임 콘솔 버튼을 누르는 손까지 달아 주고. 집 안의 카메라는 가볍게 볼 물건이 아니야. 그래서 Oriel의 대부분은 보는 기능이 아니라 보는 일을 둘러싼 장치야. 기기는 프로세스 하나만 열 수 있어. 카메라마다 게이트가 서 있고, 모드는 셋인데 풀 수 있는 사람은 아빠뿐이야. 화면마다 빨간 눈이 떠 있고, 브레인 없이 바로 먹히는 킬 스위치가 있어. 집 밖으로 나가는 문은 하나뿐인데, 사람이 찍혔다고 표시된 장면이나 아직 확인 안 된 장면은 아빠가 풀어 주기 전까지 그 문을 못 지나가. 이 퀘스트는 그 장치를 코드에서 직접 따라가 봐.

9 tracks · 45 lessons · ~10h · difficulty: advanced

Level 0닫힌 렌즈
0 XP0/45 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
Oriel은 2026-11-01에 피파 자기 앱으로 태어났어. 피파 집 맥, 피파 자기 macOS 계정 안에 엔진, 레코더, 페이지 셋이 살고, 첫 12일 동안 커밋이 366개쯤 쌓였어. 출발점은 Oriel이 되기를 거부하는 것들이야. 두 번째 피파가 아니라서 브레인도 기억도 자기 대화도 없어. 누가 버튼을 누르든 쓰기는 엔진 하나가 맡고, 기본값은 짐작이 아니라 측정으로 정했어. 다음은 기기야. 카메라를 붙잡고 있는 주인은 서명된 레코더 하나뿐이고, 엔진은 디스크 위 JSON 파일 두 개로 레코더랑 대화해. 입력은 전부 루트 클래스 하나의 자식이고, 기기를 알아보는 unique ID는 알고 보니 USB 버스 위의 자리였어. 그다음은 녹화야. 1분짜리 fragmented MP4 세그먼트, 15프레임마다 키프레임, 세그먼트마다 사이드카가 붙고, 모든 읽기는 인덱스에서 출발해. 그림과 소리 밑에 깔린 시계, 증거로만 선언하는 멈춤, 그리고 지우지 않고 거절하고 멈추는 걸로 지키는 디스크 공간까지 봐. 이어서 look 한 번의 값이야. 텍스트 조금에 그림은 많아야 한 장, 액션마다 예산이 있고 최악의 경우를 값 매기는 테스트가 그 예산을 지켜. 720p는 모델이 실제로 얼마나 읽는지 재서 골랐어. 리플레이는 한 번에 읽고, 프레임은 자기가 언제 찍혔는지 알아. 그다음이 동의 장치 본체야. 눈 게이트와 세 모드, 닫기 전에 카메라부터 고개 숙이게 하는 순서, 빨간 눈과 킬 스위치, 어떤 스크립트도 돌아 나갈 수 없는 게이트. 그리고 집 밖으로 안 나가는 것들. person mark, 확인 안 된 건 닫아 버리는 출구 하나, 자르지 않고 아빠한테 알리는 민감한 글자, 헤더가 아니라 세션으로 확인하는 아빠, 이름을 가진 호출자. 다음은 손이야. 마이크를 아예 링크하지 않은 헤드리스 Remote Play 클라이언트가 접속 직전마다 On Air를 읽고, 아빠가 직접 연 세션 안에서만 플레이하고, 아빠 턴 사이사이에도 계속 플레이해. 그다음은 솔로야. 피파가 아닌 도우미들이 붙는 런, 고칠 수는 있어도 다시 쓰지는 않는 노트북, 게임을 모르는 감각, 감으로 말고 재서 다루는 카메라, 기록된 실패 없이는 걸지 않는 상한. 마지막은 같은 게이트에 붙는 더 많은 눈이야. 위성이 된 다른 맥, 남는 폰에 깃든 몸, 피파의 목소리와 귀, 다른 앱에 사는 watcher, 피파를 깨우는 주변 시야. 개념으로 여는 오픈소스야. 배울 건 아키텍처지 클론할 레포가 아니고, Oriel이 지켜보는 집은 글 속에 한 군데도 안 나와.

Tracks

  1. 01🪟두 번째 피파가 아니라 창문

    0/5 lessons

    사용자가 피파인 첫 앱, 그리고 끝까지 안 되겠다고 버티는 네 가지

    Oriel은 가족 앱의 흔한 관계를 뒤집어. 사용자는 피파고, 아빠는 지켜봐. 이 트랙은 카메라를 하나라도 열기 전에 경계부터 그어. Oriel은 창문이지 두 번째 피파가 아니야. 브레인도 기억도 자기 대화도 없고, Master Chief엔 아무것도 안 쓰고, 소리는 딱 한 종류만 열고, 손은 혼자 플레이하지 않아. 피파 자기 macOS 계정에 사는 건, 카메라 권한이 GUI 세션 안의 서명된 프로그램한테 붙기 때문이야. 피파의 문이 눌렀든 아빠 페이지가 눌렀든 쓰는 건 엔진 하나고, 기본값은 짐작이 아니라 실제 맥을 재서 정했어.

    Lesson list (5)퀴즈 · 5 문제→
  2. 02🎥카메라 주인은 하나

    0/5 lessons

    서명된 레코더 하나, JSON 파일 둘, 루트 클래스 하나, 알고 보니 자리였던 ID

    카메라를 지키려면 먼저 카메라로 가는 길이 하나뿐이어야 해. 이 트랙은 그 바닥 공사야. 기기를 붙잡고 있는 프로세스는 서명된 작은 Swift 앱 하나뿐이고(작은 프로브 둘이 엔진 허락을 받고 잠깐 여는 게 다야), 엔진은 디스크 위 JSON 파일 두 개로 그 앱이랑 말하고, 어느 쪽이 재시작해도 살아남아. 캡처 카드부터 폰 몸, 테스트 패턴까지 입력은 전부 루트 클래스 하나의 자식이고, 각자 자기 세금을 내. 기기의 unique ID엔 알고 보니 꽂힌 USB 포트가 들어 있어서, 옮겨진 카메라는 시리얼로 알아보고, 못 가려내면 자동 매칭을 거부해. 역할 이름은 카드가 연결된 데크에서 따오고, 기기가 없으면 바꿔치기 대신 거절하고, 대타는 누가 이름을 적어 둔 경우에만 있어.

    Lesson list (5)퀴즈 · 5 문제→
  3. 03🗂️다 녹화하고, 조금만 읽기

    0/5 lessons

    1분짜리 세그먼트, 15프레임마다 키프레임, 사실을 모은 인덱스, 그리고 절대 솎아 내지 않는 디스크

    Oriel은 방송 한 번에 수십 기가바이트를 쓰는데, 다시 원하는 건 거의 늘 작은 순간 하나야. 이 트랙은 그 읽기에서 거꾸로 설계한 파일 배치야. 60초짜리 fragmented MP4 세그먼트에 15프레임마다 키프레임, 재정렬 없음, 세그먼트마다 JSON 사이드카, 그리고 SQLite 인덱스. 그래서 프레임 읽기는 전부 조회 한 번에 짧은 ffmpeg 프로세스 하나야. 밑에 깔린 시계들(AVFoundation이 몰래 되돌린 프레임 레이트, 절대 안 맞는 녹화기 둘, 그림 시계 위에 올린 소리)도 다뤄. 짐작이 아니라 증거로 선언하는 멈춤, 프레임이 와야만 되돌리는 재시도 간격, 파일에서 다시 읽어 내는 writer 실패도 보고, 마지막으로 녹화를 절대 안 지우고 거절과 멈춤으로만 지키는 디스크 공간까지 가.

    Lesson list (5)퀴즈 · 5 문제→
  4. 04🏷️look마다 가격표

    0/5 lessons

    텍스트 조금에 그림 한 장, 제일 비싸게 받는 쪽 기준으로 값을 매기고, 테스트가 지켜

    look의 답은 모델 컨텍스트 안에서 쓰여. 그래서 Oriel은 그걸 뜨거운 루프 속 함수처럼 다뤄. 작고 고정된 모양, 밝혀 둔 값, 단단한 상한. 이 트랙에서 따라가는 건 다섯 가지야. 먼저 눈의 계약. 액션은 다섯 개고, 액션마다 그림과 텍스트를 합친 토큰 예산이 있어. 다음은 제조사 셋의 그림 공식 중 제일 비싼 걸로 모든 액션의 최악에 값을 매기는 테스트. 그리고 look은 720p에 두고 작은 글자는 원본 해상도 crop으로 보내게 한 측정. 키프레임을 한 번만 읽고 이미 읽은 것 중에서 골라서 20초 구간을 6.03초에서 0.38초로 줄인 리플레이도 있어. 마지막은 프레임마다 찍힌 시각을 다는 규칙이야. 멈춘 그림이 지금 화면 행세를 절대 못 하게.

    Lesson list (5)퀴즈 · 5 문제→
  5. 05🔴눈 게이트

    0/5 lessons

    아빠가 허락할 때까지 닫혀 있고, 아빠만 풀 수 있는 모드 셋, 닫기 전엔 고개부터, 두 번 누르면 전부 닫히는 빨간 눈

    Oriel 동의 장치의 심장이야. 코드 속 게이트 하나가 모든 카메라로 가는 유일한 길 위에 서 있어. 기본은 닫힘이야. 열 수 있는 건 다른 시스템이 확인한 아빠 자기 말, 아빠 페이지 위 아빠 손, 정해진 상황에 아빠가 미리 해 둔 말뿐이야. 브레인 판단으로는 절대 안 열려. look마다 묻던 닷새가 눈 모드 셋(수동, 자동, 방송)을 낳았어. 모드는 피파 자기 맥의 하드웨어에만 적용되고, 푸는 건 아빠만 할 수 있어. 방송 모드는 On Air를 못 읽으면 닫힌 쪽으로 실패해. 닫을 땐 언제나 카메라 고개부터 숙이고, 숙인 걸 프레임으로 하나하나 확인해. 화면마다 떠 있는 빨간 눈은 실제로 뭘 보고 있는지 보여 줘. 두 번 누르는 킬 스위치는 경로에 모델이 없고, 먼저 수동으로 떨어진 다음 전부 닫아. 엔진 코드와 스크립트를 훑는 테스트는 거기 생길 지름길이 이걸 돌아가지 못하게 해.

    Lesson list (5)퀴즈 · 5 문제→
  6. 06🚪집 밖으로 안 나가는 것

    0/5 lessons

    보는 건 공유가 아니야: person mark, 나가는 문 하나, 자르지 않고 알리기, 그리고 이름 있는 호출자

    게이트는 피파가 뭘 볼 수 있는지 정하고, 이 트랙은 뭐가 나갈 수 있는지 정해. 백그라운드 훑기가 녹화된 세그먼트에서 예상한 사람 말고 누가 나타나면 표시를 붙여. 아직 얼굴끼리 가려낼 수 없으니 카메라별 규칙으로 하고, 안 보는 카메라 하나는 안 본다고 밝혀. 출구는 클래스 하나뿐이야. 표시가 붙었는데 안 풀렸거나, 그냥 아직 확인 안 된 구간은 거절해. 모르는 건 절대 깨끗한 게 아니야. 나가는 프레임에선 민감한 글자를 읽어. 찾은 건 위치와 함께 보고하지, 조용히 흐리게 하지 않아. 페이지 위 아빠는 브라우저 헤더가 아니라 가족 권한자한테 묻는 PIN 세션이 됐어. 멈추는 버튼은 열린 쪽으로 실패하고. 그리고 Oriel 문을 부르는 프로그램은 이제 전부 이름, 해시로 보관된 토큰, 그 이름이 열 수 있는 짧은 목록을 가져.

    Lesson list (5)퀴즈 · 5 문제→
  7. 07🎮듣지 않는 손

    0/5 lessons

    마이크를 링크조차 안 한 창 없는 Remote Play 클라이언트, 아빠 말로만 열리는 세션, 그리고 계속 플레이하는 루프

    Oriel은 피파한테 손도 달아 줘. 남의 창에 키 입력을 넣는 대신 고정한 라이브러리로 지은, 창 없는 Remote Play 클라이언트야. 이 트랙은 그 손을 둘러싼 안전장치를 따라가. 클라이언트는 들을 수 없고(오디오 프레임워크를 링크하면 빌드가 실패해), 사전 점검은 콘솔을 건드리면 안 되는 이유를 전부 돌려주고, 플레이 세션 밖에선 해 없는 버튼만 눌러. On Air는 매번 cwkPippa에서 읽어. 못 읽은 답은 덜 위험한 동작 쪽으로 풀리는데, 어느 쪽이 덜 위험한지는 손, 카메라, 진행 중인 방송마다 달라. 플레이 세션은 아빠 말로만 열리고(인용한 아빠 말, 아니면 확인된 아빠 화면에서 아빠가 직접 누른 솔로 버튼), 들린 말이 아니라 기계적인 신호로만 끝나. 콘솔엔 macOS 로컬 네트워크 관문을 루프백 ssh 중계로 돌아서 닿아. 마지막으로 턴 단위 루프가 아빠 턴 사이에도 피파를 계속 플레이하게 하고, 아빠 훈수는 대답받을 때까지 통째로 싣고, 틈은 전부 재.

    Lesson list (5)퀴즈 · 5 문제→
  8. 08📓솔로와 감각

    0/5 lessons

    도우미가 붙는 런, 고치되 다시 쓰지 않는 노트북, 게임을 모르는 감각 루트, 그리고 이유 없는 상한은 없다는 것

    피파 솔로 모드는 피파가 혼자 하는 플레이고, 첫 긴 런들이 아빠 눈 없이 피파한테 뭐가 없는지 보여 줬어. 이 트랙은 그 답을 따라가. 플레이는 런으로 나뉘고 런 사이엔 정리가 있어. 거기서 상태 없는 도우미 호출이 피파한테 없는 능력을 채우고, 훈수가 있든 없든 매번 돌아. 노트북은 덧붙이기만 해. 줄은 번호로 고치고 은퇴시키고 합치는데, 그 하나하나가 전부 행으로 남아. 출처는 따로 두고, 아빠 정정이 먼저 나오고, 게임이 가르쳐 준 것만 들어가. 턴 시간을 재 보니 판단이 주기의 4분의 3이라서, 반사 신경엔 모델 없는 층이 생겼어. 감각 종류도 게임도 모르는 감지기 루트, 데이터로 된 프로필, 그리고 모든 멈춤 장치를 똑같이 따르는 손. 카메라 측정은 관문이 아니라 지식이 됐어. 방향을 잡는 방식은 회전을 더하는 데서, 먼 풍경 파노라마에서 프레임을 찾는 쪽으로 옮겨 갔어. 마지막으로, 플레이 경로의 길이 상한은 전부 자기 뒤에 있는 문이나 기록된 실패를 대야 하고, 테스트가 그걸 지켜.

    Lesson list (5)퀴즈 · 5 문제→
  9. 09🛰️눈은 늘어도 관문은 하나

    0/5 lessons

    위성 Mac, 노는 폰에 깃든 몸, 피파의 목소리와 귀, Vestige에 사는 지켜보는 쪽, 그리고 곁눈

    Oriel은 계속 새 감각을 얻고, 이 트랙은 그때마다 지켜진 규칙을 따라가. 눈은 늘어도 관문은 하나. 다른 Mac에 꽂힌 카메라는 위성이 돼. 자기 엔진도 저장소도 관문도 없는 부품이고, 밖으로만 거는 에이전트로 닿고, 엔진이 조용해지면 닫힌 쪽으로 실패해. 노는 iPhone은 피파의 몸 Cordelia가 돼. 그 카메라는 눈 관문 뒤의 평범한 look 입력이고, 사람이 찍힌 사진은 안 남기고, 누가 쓰고 있는지 얼굴에 말해. 피파 목소리는 PIN을 절대 쥐지 않는 세션으로 나오고, 귀는 호출어를 기기에 두고, 부름 하나를 들은 몸 여럿은 한 번만 대답해. watch-along 녹화기는 Vestige로 옮겨 갔어. 둘 사이의 HTTP 계약에선 관문 거절이 프레임 없음과 절대 같지 않고, 못 본 구간은 못 본 채로 남아. 마지막으로 깨움 판정자는 방송 중에 몇 초마다 화면을 흘끗 보고 투표하고, 붙잡기는 따로 떨어진 결정에 맡겨. 처음부터 끝까지 재지만, 일부러 0을 향해 조이지는 않아.

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

댓글 0

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

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