-
Notifications
You must be signed in to change notification settings - Fork 0
DEV_PLAN
⚠️ 이 문서는 일정을 세우고 진행 상황을 점검하기 위한 자료입니다. 이미 확정된 7개 설계 문서의 약속을 바꾸지 않으며, 그 위에서 "전시 서비스 전체가 완성되기까지 해야 할 일"을 순서대로 정리한 것입니다. 단계와 기간은 제안이며 팀 합의로 조정합니다.여러 분야의 사람이 함께 보는 문서이므로, 어려운 용어는 괄호로 짧게 풀어 적었습니다. 더 깊은 내용은 각 항목에 연결된 설계 문서를 참고하세요.
출발점은 SYSTEM_DESIGN §14의 큰 일정과 SYSTEM_DESIGN §16.5의 추가 작업입니다.
작성일: 2026-05-31
이 전시 시스템은 여러 프로그램(카메라 추적, 로봇 제어, 태블릿 화면, 판단을 내리는 인공지능 등)이 서로 정해진 형식의 메시지를 주고받으며 돌아갑니다. 비유하자면 여러 부서가 같은 양식의 서류로만 소통하는 회사와 같습니다.
⚠️ 그래서 "서로 주고받을 메시지의 형식(약속)을 가장 먼저 확정" 하는 것이 모든 작업의 출발점입니다. 이 약속이 늦어지면 모든 팀이 동시에 멈춥니다.
표기 약속:
-
[ ]만들어야 할 것 ·[?]확인·점검해야 할 것 ·[★]시연 시나리오(SYSTEM_DESIGN §16)에서 새로 추가된 것 - 아직 결정되지 않은 사항은 임의로 정하지 않고 "결정 필요"로만 표시합니다.
| 단계 | 한마디로 | 기간(제안) | 이 단계가 끝났다고 보는 기준 |
|---|---|---|---|
| 0단계 | 개발 환경·가짜 장비(mock) 준비 | 3~5일 | 내 컴퓨터에서 전체 시스템이 가짜 장비로 한 번 켜짐 |
| 1단계 | 기초 공사 (약속·뼈대 만들기) | 2주 | 모든 프로그램이 빈 껍데기 상태로 서로 연결됨 |
| 2단계 | 카페 한 곳에서 입장 감지 → 태블릿 안내 | 3주 | 손님이 들어오면 태블릿에 선택지가 뜸 |
| 3단계 | 로봇(SPOT) 연결 + 안전장치 | 3주 | 카페에서 로봇이 실제로 반응 |
| 4단계 | 인공지능이 상황 판단해 반응 | 2~3주 | AI가 상황에 맞춰 안내·로봇 동작을 결정 |
| 5단계 | 네 공간 전체 + 두 번째 로봇 + 여러 명 동시 | 4주 | 동시에 3명, 로봇 2대가 겹치지 않고 동작 |
| 6단계 | 시연 이야기(여섯 장면) 완성 | 2주 | 도입부부터 마무리까지 전체 체험 흐름 완성 |
| 7단계 | 운영 안정화 · 예행연습 | 2주 | 전시 운영에 견디는지 리허설 통과 |
각 단계의 자세한 목표와 할 일은 아래와 같습니다.
한마디로: 본격적으로 만들기 전에, 각자 컴퓨터에서 실제 로봇·카메라·태블릿 없이도 전체 시스템을 한 번 켜볼 수 있는 "연습용 환경"을 갖춥니다.
이 단계에서 하는 것: 개발에 필요한 도구를 깔고, 메시지 중계 서버(MQTT)와 상태 저장 프로그램(Home Assistant)을 내 컴퓨터에 띄우고, 실제 장비 자리를 대신할 가짜 장비(mock) 를 준비합니다. 이게 끝나면 누구나 자기 컴퓨터에서 시스템을 돌려보며 개발할 수 있어, 1단계부터 여러 명이 막힘없이 동시에 일할 수 있습니다.
⚠️ 이 단계는 새로 "만드는" 게 거의 없습니다 — 이미 정리된 개발 환경 가이드(DEVELOPMENT §0)대로 갖추고 켜보는 준비 단계입니다. 자세한 명령·설정은 그 문서를 따릅니다.
- 개발에 필요한 기본 도구 설치 (프로그램을 묶어 실행하는 도구, 두 프로그래밍 언어 실행기 등)
- 소스 코드 내려받고 각 프로그램의 개발용 부품(의존성) 설치
- 코드 올리기 전 자동 검사 장치 켜기
- 메시지 중계 서버(MQTT) 띄우고, 각 프로그램이 필요한 통로만 쓰도록 권한 적용 (SERVICES §1)
- 상태 저장·운영 화면 프로그램(Home Assistant) 띄우고 메시지 중계 서버와 연결
- [?] 메시지가 실제로 흐르는지 들여다보는 도구로 연결 확인
- 가짜 로봇 — 실제 SPOT 대신 명령에 반응하는 흉내내기 프로그램
- 가짜 카메라 신호 — 실제 카메라 없이 "사람이 들어왔다"는 신호를 보내는 작은 도구
- 가짜 태블릿 — 브라우저로 띄우는 간단한 태블릿 화면 흉내
- 비밀번호·열쇠 같은 민감 정보는 따로 보관하고 코드에 섞지 않기
- [?] 가짜 카메라가 보낸 신호가 변환 프로그램(bridge)을 거쳐 "입장" 메시지로 바뀌어 흐르는지 확인 (DEVELOPMENT §6의 Phase 0)
이 단계 완료 기준: 실제 장비 없이도, 내 컴퓨터에서 메시지 중계 서버·상태 저장 프로그램·변환 프로그램이 떠 있고, 가짜 카메라 신호 하나가 "입장" 메시지로 바뀌어 흐르는 것을 눈으로 확인할 수 있다.
한마디로: 본격적인 개발 전에, 모든 프로그램이 따를 "공통 약속"과 "빈 뼈대"를 먼저 세웁니다.
이 단계에서 만드는 것: 프로그램들이 주고받을 메시지의 형식, 공간·로봇 정보를 적어두는 설정 파일, 그리고 전체 시스템을 한 번에 켜고 끌 수 있는 환경. 이게 끝나면 각 팀이 빈 껍데기 상태로라도 서로 메시지를 주고받으며 동시에 일할 수 있습니다.
- 모든 메시지를 같은 "공통 봉투"에 담는 규칙 만들기 (보내는 곳·시각·추적용 번호를 항상 포함)
- 메시지 형식을 한 곳에 정의하고, 파이썬·타입스크립트(주로 쓰는 두 프로그래밍 언어) 양쪽에서 똑같이 쓰도록 자동 변환
- 주고받는 모든 메시지의 내용 형식 정리 — 카메라·세션·로봇·태블릿·상황·안전·상태 종류 전부 (MQTT_SCHEMA §3)
- 로봇 구분 이름을 코드에 박아넣지 않고 설정 파일에서 읽어오게 하기 (나중에 로봇이 바뀌어도 한 곳만 고치도록, SYSTEM_DESIGN §7.2)
- 나중에 형식을 바꿔야 할 때의 규칙 정하기 (기존 것은 깨지 않고 새 항목만 추가)
- [?] 같은 메시지가 두 번 와도 한 번만 처리하도록 거르는 기능 + 점검
-
zones.yaml— 네 공간(카페·공원·차량·집)의 위치를 실제 전시장 좌표로 한 곳에 정의 -
robots.yaml— 로봇 목록과 각자 할 수 있는 동작, 최고 속도 정리 (SPOT + 두 번째 로봇 자리 미리 마련) - 카메라·로봇의 위치 보정값을 적어둘 파일 양식 준비
- 공간 좌표를 카메라 화면 좌표로 자동 변환하는 스크립트 (사람이 손으로 계산하지 않게)
- 카메라가 사람을 인식할 때의 민감도 설정값 (너무 예민하면 깜빡거리고, 너무 둔하면 느려짐)
- 모든 프로그램을 한 묶음으로 켜고 끄는 설정 (Docker Compose — 여러 프로그램을 통째로 실행하는 도구)
- 메시지 중계 서버 설정 + 각 프로그램이 꼭 필요한 통로만 쓰도록 권한 제한 (SERVICES §1)
- 상태 저장·운영 화면 담당 프로그램(Home Assistant) 기본 설정
- 비밀번호 같은 민감 정보는 따로 보관하고 코드에 섞지 않기
- 각 프로그램이 "나 살아있어요" 신호를 주기적으로 보내게 하기 (이상 감지용)
- 요청이 어디서 느려졌는지 한 줄로 따라가 볼 수 있는 추적 장치 (SERVICES §9.5.1)
- 성능 수치 수집·기록 보관 장치 (단, 분석용 장기 저장이 아니라 운영 점검용 단기 보관)
- 코드 자동 검사 장치 — 글자 형식·오류·테스트를 통과해야만 반영되게
- 완성된 프로그램을 보관소에 올리고 버전을 붙이는 자동화
이 단계 완료 기준: 모든 프로그램이 빈 껍데기로라도 켜지고, "살아있어요" 신호를 주고받으며, 메시지 하나가 시스템을 한 바퀴 도는 게 추적 장치에 한 줄로 보인다.
한마디로: 로봇과 인공지능은 아직 빼고, "손님이 카페에 들어오면 태블릿에 선택지가 뜨는" 기본 흐름부터 완성합니다.
이 단계에서 만드는 것: 입구에서 손님과 태블릿을 짝지어 주는 과정, 카메라가 입장을 알아채는 기능, 그리고 태블릿 화면. 아직 안내 내용은 미리 정해둔 고정 문구로 띄웁니다.
- 카페 카메라 연결, 사람 감지, 영상은 저장하지 않도록 설정 (개인정보 보호)
- 카페 공간 범위를 카메라 화면에 표시
- [?] 카메라가 보내는 신호가 잘 들어오는지 확인
- 카메라 프로그램의 신호를 우리 시스템의 "입장/퇴장" 메시지로 바꾸기
- 깜빡임 방지 — 경계에서 잠깐 스친 건 무시하고, 일정 시간(약 0.8초) 머물러야 입장으로 인정 (SERVICES §4)
- 손님의 옷차림·외형 특징값을 뽑아 누가 누구인지 잠깐 구분 (얼굴 인식 아님, 체험 끝나면 삭제)
- 카메라가 바뀌어도 같은 사람으로 이어서 추적
- 손님의 대략적 위치를 자주(초당 5번) 전달
- 체험이 끝나면 그 손님의 외형 특징값을 즉시 삭제
- [?] 단위 점검 + 동시에 10명이 있어도 충분히 빠른지 확인
- 태블릿에 일회용 QR코드를 띄우고 체험용 번호 발급 (4시간 후 자동 만료)
- 태블릿 화면: QR코드 + "카메라를 봐주세요" 안내 + 5초 카운트다운
- 입구 카메라가 QR코드를 읽어 그 손님과 번호를 연결
- 연결되면 "체험 시작" 메시지 보내기
- [?] 잘 안 될 때의 처리 4가지 (60초 내 인식 실패 시 다시 시작 / QR 못 읽으면 무시 / 다시 짝짓기 / 번호 만료 시 거절)
- 태블릿과 서버를 잇는 연결 담당 프로그램 — 안내 메시지를 받아 화면으로 보내고, 손님의 선택을 서버로 전달
- 태블릿 앱: 받은 선택지·메시지를 화면에 표시, 선택하면 서버로 전송
- 인터넷이 잠깐 끊겨도 자동으로 다시 연결하고 입력을 잃지 않기
- 화면에 잘 떴는지 확인 신호 보내기
- [?] 가짜 환경에서 메시지가 오가는지 점검
- 체험이 시작되면 그 손님의 상태 정보를 만들어 저장
- 체험이 끝나면 그 정보를 "사용 안 함"으로 표시 (개인정보 정리)
- [?] 임시 도구로 선택지를 보내, 태블릿에 실제로 뜨는지 확인 (인공지능이 들어오기 전 빈자리 메우기)
이 단계 완료 기준: QR 짝짓기 → 카페 입장 → (임시로 보낸) 선택지가 태블릿에 표시 → 손님이 고르면 그 선택이 서버로 전달되는 전 과정이 끊김 없이 이어진다.
한마디로: 카페에서 로봇이 실제로 움직이게 합니다. 단, 안전장치를 로봇 연결과 동시에 완성합니다.
이 단계에서 만드는 것: 로봇을 명령으로 움직이는 연결 프로그램과, 사람과 부딪히지 않게 막는 안전장치. 안전은 인공지능보다 먼저 갖춥니다.
- 바닥에 기준 표식을 두고 카메라가 보는 좌표와 실제 좌표를 맞추기 (SYSTEM_DESIGN §8.3)
- 로봇이 인식하는 좌표와 전시장 실제 좌표를 맞추기
- [?] 로봇이 충전대에 들어갈 때마다 위치 오차를 자동으로 바로잡는지 확인
- 어떤 로봇이든 같은 방식으로 명령할 수 있는 공통 틀 만들기
- SPOT 로봇 연결 — 이동·따라가기·정지·앉기·서기·몸짓·바라보기
- 전시장 좌표로 내린 명령을 로봇이 이해하는 좌표로 변환
- 인공지능이 로봇에게 명령을 보낼 통로 열기
- 비상 시 운영자가 직접 명령을 보낼 수 있는 보조 통로도 같은 줄로 합치기
- 로봇 상태(배터리·위치·현재 동작·고장)를 1초마다 알리기
- 명령 처리 결과와 고장 신호 보내기
- 비상 정지 버튼 — 누르면 모든 로봇 즉시 멈추고, 운영자가 풀기 전까지 명령 차단
- 정해진 공간 밖으로 가라는 명령은 거부
- 사람과 너무 가까우면 이동 명령 잠시 차단
- 로봇과 연락이 2초 이상 끊기면 자동으로 멈추기
- 명령 우선순위 정하기 — 안전 > 운영자 > 인공지능 순서, 비슷한 명령은 중복 제거
- [?] 일부러 비상 정지를 걸었을 때 대기 중인 명령이 100% 차단되는지, 잘못된 명령이 잘 걸러지는지 점검
- [★] 문 잠금 같은 보안 동작은 인공지능이 스스로 못 하게 분리 (SYSTEM_DESIGN §11.3.3) — 정해진 규칙이나 운영자만 가능
- 인공지능이 멈췄을 때를 대비한 카페용 대체 동작 1개 준비
이 단계 완료 기준: 카페 입장 → 로봇이 손님을 바라보고 태블릿에 선택지 표시 → 비상 정지 버튼을 누르면 즉시 멈춘다.
한마디로: 미리 정해둔 고정 동작을, 인공지능이 상황을 보고 그때그때 결정하는 방식으로 바꿉니다.
이 단계에서 만드는 것: 손님 상태·공간·로봇 상태를 종합해 인공지능(Claude)이 판단을 내리는 핵심 프로그램과, 인공지능이 위험한 결정을 못 하도록 막는 안전 검문.
- 판단 흐름 만들기 — 정보 모으기 → 인공지능에 묻기 → 안전 검문 → 명령 실행, 실패하면 대체 동작 (SERVICES §5)
- 반응을 시작할 신호들 받기 (입장, 태블릿 선택, 상황 변화 등)
- 손님·로봇·환경 정보를 모아 한눈에 정리
- 로봇이 지금 누구를 상대하고 있는지 표시해 두기 (겹치지 않게, SYSTEM_DESIGN §7.3)
- 한 손님에게 여러 결정이 동시에 가지 않도록 차례대로 처리, 다른 손님은 동시에 처리
- 같은 신호가 두 번 와도 한 번만 처리
- 인공지능이 쓸 수 있는 동작 목록 정의 (로봇 명령·선택지 표시·메시지 표시·정보 갱신)
- 인공지능이 로봇·태블릿 프로그램을 직접 부를 수 있게 연결
- 매번 반복되는 지시문은 재사용해 비용·속도 아끼기
- [?] 인공지능 모델 비교 측정 — 똑똑한 모델(Opus)과 빠른 모델(Sonnet) 중 선택 (응답이 2.5초 안에 오는지 확인, 결정 필요)
- 명령 형식 검사 → 허용된 동작인지 확인 → 정해진 공간 안인지 확인 → 속도 제한
- 거부된 명령은 횟수만 세고 기록 한 줄 남기기 (내용 저장은 안 함)
- [?] 일부러 잘못된 명령 1,000건을 넣어 100% 걸러지는지 점검
- 인공지능이 응답하지 못하면 공간별로 미리 정해둔 동작으로 대신하기
- 짧은 시간에 같은 신호가 반복되면 한 번만 반응
- 카페용 행동 대본 작성 (도입부·마무리는 6단계에서)
이 단계 완료 기준: 카페 입장 시 인공지능이 상황에 맞춰 선택지·로봇 동작을 그때그때 결정하고, 인공지능을 일부러 멈추면 미리 정해둔 동작으로 자연스럽게 넘어간다.
한마디로: 카페에서 만든 방식을 공원·차량·집으로 넓히고, 동시에 3명·로봇 2대가 겹치지 않게 합니다.
이 단계에서 만드는 것: 나머지 세 공간, 두 번째 로봇, 그리고 여러 손님·여러 로봇이 동시에 있을 때의 정리 규칙.
- 공원·차량·집의 카메라·공간 범위·위치 보정
- 공간을 옮길 때도 같은 사람으로 잘 이어지게 정확도 높이기
- 공간별 행동 대본 3개 추가 (공원·차량·집)
- 인공지능 멈춤 대비 대체 동작을 네 공간 모두에 마련
- [?] 두 번째 로봇 모델 결정 (결정 필요)
- [★] 두 번째 로봇 연결 프로그램 만들기
- [★] 물건 가져다주기 동작 추가 (로봇 결정 후)
- 두 번째 로봇 위치 보정 + 설정 파일에 실제 이름 반영
5-C. 여러 명·여러 로봇 정리 (SYSTEM_DESIGN §7.3)
- 한 로봇에 명령이 몰리면 차례대로 처리하고 중복은 제거
- 한 로봇이 여러 손님에게 필요할 때 — 다른 로봇을 보내거나, 로봇 없이 태블릿으로만 응대
- [?] 동시에 3명이 있어도 반응이 1.5초 안에 시작되는지 확인
- 날씨·시간대·방문자 수 같은 환경 정보를 시스템에 반영
- [?] 손님 기분을 어떻게 입력받을지 결정 — 태블릿에서 직접 선택 vs 표정·자세로 추정 (결정 필요)
- [★] (도입하기로 하면) 표정·자세로 기분 추정 — 단, 그 정보는 저장하지 않고 즉시 폐기 (SYSTEM_DESIGN §11.3.1)
이 단계 완료 기준: 한 사람이 네 공간을 가로질러 다녀도, 동시에 여러 명이 붐벼도 사람을 헷갈리지 않고 동작한다.
한마디로: 도입부부터 마무리까지 이어지는 체험 이야기(SYSTEM_DESIGN §16의 여섯 장면)를 실제로 연출합니다. 새로 만들 메시지 종류는 없고, 행동 대본과 동작 몇 개만 추가합니다.
- [★] 도입부 대본 만들기 (네 가지 테마 중 선택)
- [★] 마무리 대본 만들기 (체험을 돌아보는 "동행일기")
- 같은 집 공간이라도 아침(출근 준비)과 저녁(귀가)을 직전에 어디 있었는지로 구분
- 공원 장면과 집의 돌발 상황이 동시에 일어날 때 한 손님 안에서 차례대로 처리
- [★] 동행일기 — 체험이 끝나면 인공지능이 글로 요약, 개인 식별 정보는 빼고, 최대 7일 후 자동 삭제 (SYSTEM_DESIGN §11.3.2)
- [★] 차량 디스플레이는 태블릿과 같은 방식으로 다루기 (전체화면·음성 위주)
- [★] 문 잠금 같은 보안 장면은 정해진 규칙으로만 시연 (인공지능 자율 결정 금지 재확인)
- 돌발 상황 연출 — 집 공간 창문형 화면에 외부 영상을 틀고, 그 화면을 보는 카메라 1대 추가
- [?] 옷차림 추천(여러 일정에 맞는 의상) 피드백을 집 아침 대본에 반영
이 단계 완료 기준: 귀빈 1명과 자유 관람객이 동시에 있어도 여섯 장면 전체 흐름을 끝까지 체험할 수 있다.
한마디로: 실제 전시장에서 며칠씩 끊김 없이 돌아가도록 다듬고, 운영자가 볼 화면과 안내서를 만듭니다.
- 경고 규칙 — 로봇 연결 끊김·인공지능 거부율 급증·추적 정확도 저하 시 알림 (SYSTEM_DESIGN §10)
- 운영자 화면 — 로봇 상태, 전시장 지도 위 손님 위치, 비상 정지 시 큰 경고, 최근 공간 이용 현황
- 운영자가 한눈에 보는 상태·기록·흐름 종합 화면
- [?] 인공지능을 일부러 끈 뒤 대체 동작이 잘 작동하는지 예행 점검 (SERVICES §3)
- 개인정보가 정말 지워졌는지 확인하는 점검 + 전시장 입구 안내문
- 백업·비밀번호 교체·복구 절차 정리 (DEPLOYMENT.md)
- 운영 안내서 작성 + 사무실 축소 환경에서 예행연습
- [?] 붐비는 상황 예행연습 (동시 3명 + 귀빈 + 돌발 상황)
특정 단계에만 두지 말고 처음부터 끝까지 계속 챙겨야 하는 항목입니다.
| 항목 | 시작 | 설명 |
|---|---|---|
| 위치 보정 | 3단계 | 카메라나 전시장 배치가 바뀌면 다시 맞추기 (SYSTEM_DESIGN §8.3.4) |
| 상태 추적·기록 | 1단계 | 프로그램이 추가될 때마다 추적·수치 수집을 바로 연결 |
| 개인정보 삭제 | 2단계 | 체험 종료 시 정보가 지워지는지 매번 확인 |
| 코드 품질 검사 | 1단계 | 프로그램이 늘어도 자동 검사 통과율 유지 |
- 0단계(개발 환경·mock)가 가장 먼저입니다 — 이게 안 되면 아무도 자기 컴퓨터에서 시스템을 돌려볼 수 없습니다.
- 1단계(약속·뼈대)가 모든 동시 작업의 전제입니다.
- 2단계의 카메라 연결과 태블릿 화면은 약속만 정해지면 동시에 만들 수 있습니다.
- 인공지능 판단(4단계) 은 태블릿과 로봇이 임시 상태로라도 떠 있으면 시작할 수 있습니다.
- 안전장치(3-C) 는 인공지능(4단계)보다 반드시 먼저 완성합니다.
4. 아직 결정되지 않아 챙겨야 할 사항 (SYSTEM_DESIGN §15)
정하지 않고 두면 해당 단계가 막히는 항목입니다.
| # | 결정할 내용 | 막히는 단계 | 참고 |
|---|---|---|---|
| 1 | 두 번째 로봇 모델 (KAIST 후보) | 5단계 | 후보 평가 기준 마련됨 |
| 2 | 인공지능 모델 — 똑똑한 것(Opus) vs 빠른 것(Sonnet) | 4단계 | 응답 속도 측정 후 결정 |
| 3 | 손님 기분 입력 방식 — 직접 선택 vs 표정 추정 | 5단계 | 둘 다 쓰는 방안도 검토 |
| 4 | 영상 저장 정책 | 6단계 | 현재는 저장 안 함, 글 요약만 보관 |
| 5 | 운영 인원 — 1명 vs 2명 교대 | 7단계 | 귀빈과 자유 관람 동시 진행 시 2명 유리 |