본문으로 건너뛰기
JournalTORIS / FIELD NOTES

← 블로그 프로젝트 기록

scene1과 UUID 사이: 교육 뷰어에서 ID의 역할을 다시 생각했다

교육 뷰어의 장면 ID와 콘텐츠 ID를 구성하며 마주한 식별자 문제. 순서, 참조, 표시 번호를 같은 값으로 처리하면 왜 수정이 어려워지는지 돌아본다.

약 2분 읽기

#회고 #TypeScript #데이터모델링

유주환 · Founder, Full Stack Developer

토리스(Toris) · 발행

프로젝트를 돌아보는 30일 · 2/30
과거 프로젝트 경험을 날짜별로 엮은 회고입니다. 표시 날짜는 연재 기준일이며, 실제 작업일과 다를 수 있습니다.

이 글의 목차
장면 ID는 저장 상태와 외부 참조, 배열 위치는 재생 순서, 표시 번호는 학습 번호에 연결되는 세 역할을 분리한 개념도.
개념도 — 장면 ID·배열 위치·표시 번호를 각각 저장 참조·재생 순서·학습 번호에 대응.

교육 뷰어의 JSON을 만들 때 어떤 ID는 scene1, scene2처럼 직접 정해야 했고, 어떤 ID는 UUID로 생성해도 됐다. 처음에는 문자열 생성 방식의 차이로 보였다. 하지만 작업을 이어 갈수록 핵심은 이름이 아니라 그 값을 누가 참조하느냐에 있었다.

순서처럼 보이는 식별자

장면 이름에 숫자가 들어가면 배열 순서와 같다고 생각하기 쉽다. 그런데 앞에 장면을 삽입하거나 표지를 추가하면 문제가 달라진다. 화면의 세 번째 장면이 학습 문제의 세 번째 항목이라는 보장이 없다. 외부 도구가 특정 장면을 참조하고 있다면 화면 순서를 바꾸는 일이 참조를 바꾸는 일로 번질 수도 있다.

당시 CreateJson에서 장면과 내부 콘텐츠를 구성하며, 자동 생성할 값과 호출하는 쪽에서 넣어야 할 값을 구분할 필요가 있었다. 모두 UUID로 바꾸면 기존 규약을 놓치고, 모두 순번으로 만들면 독립적으로 다뤄야 할 콘텐츠까지 순서에 묶인다.

지금이라면 세 가지를 따로 적겠다

값맡길 역할바뀌는 시점
장면 ID저장 상태와 외부 참조 연결장면의 정체성이 바뀔 때
배열 위치현재 재생 순서장면을 이동할 때
표시 번호사용자에게 보이는 학습 번호표지·문항 포함 규칙이 바뀔 때

이 표는 당시 구현이 완벽히 이랬다는 뜻은 아니다. 그때의 질문을 지금 설계 기준으로 다시 정리한 것이다. 기존 형식이 scene1을 요구한다면 먼저 호환성을 지키되, 번호를 해석하는 규칙이 여러 컴포넌트에 퍼지지 않게 경계를 두겠다.

생성 시점도 계약의 일부였다

UUID 자체보다 중요한 것은 언제 생성하느냐다. 콘텐츠를 처음 만들 때 한 번 생성한 ID와 화면을 다시 그릴 때 생성한 ID는 전혀 다른 결과를 만든다. 후자는 저장해 둔 풀이 상태와 연결되지 않을 수 있다. JSON 생성기는 데이터를 만드는 도구이면서 이후 화면과 저장소 사이의 약속을 만드는 도구이기도 했다.

나는 이 일을 통해 사람이 읽기 좋은 이름과 시스템이 오래 참조할 이름을 구별하게 됐다. 작은 ID 규칙을 먼저 정하는 일은 과한 설계가 아니었다. 나중에 콘텐츠 순서를 바꿀 자유를 확보하는 작업이었다.

관련 기록: 교육 콘텐츠 플랫폼 개발 경험

READERS / LIVE

읽고 난 뒤의 대화

조회 —

댓글 삭제 시 필요합니다. 8–128자로 입력해 주세요.

댓글은 바로 공개됩니다. 개인정보와 공격적인 표현은 남기지 말아주세요.

    댓글 삭제

    댓글 작성 시 설정한 비밀번호를 다시 입력해 주세요. 삭제한 댓글은 복구할 수 없습니다.

    더 읽어보기

    2026년 8월 31일1/N 정산에서 나머지 1원을 누가 갖는가2026년 8월 29일LOVETRIP에서 외부 응답을 그대로 화면에 보내지 않은 이유2026년 8월 28일앱·API·어드민을 한 저장소에 두면 무엇이 쉬워지고 어려워질까
    TORIS

    INDEPENDENT DEVELOPER
    BASED IN KOREA

    korea@toris.krEnglish home ↗