0%

Unity

독서 기록이 게임 속 나무로 자라난다면 어떨까요?

전*원··수정됨 2026.07.21

독서 기록이 게임 속 나무로 자라난다면 어떨까요?

도서관에서 빌린 책의 감상문을 남길 때마다 내 캐릭터 옆 나무가 한 단계씩 커지고, 완성된 기록은 QR 코드로 스마트폰에 바로 담아갈 수 있다면요. 이번 포스팅에서는 SQLite 로컬 DB와 공공도서관 REST API, 그리고 클라우드 Object Storage를 Unity 하나로 엮어낸 '나만의 독서기록장' 키오스크 콘텐츠의 기술적인 구현 과정을 공유합니다.

아키텍처_01_전체구조.png

1. 시스템 아키텍처 개요

본 프로젝트는 크게 세 가지 단계로 구성됩니다.

사용자 인증: 바코드 스캔 / ID·PW / 게스트 세 가지 경로로 로그인, 공공도서관 REST API로 대출 이력 조회

감상문 작성: 감정 단어 토큰 선택과 한글 온스크린 키보드 직접 입력을 결합한 하이브리드 방식, 금지어 필터 및 200자 제한 적용

보상 및 공유: SQLite에 기록 저장 → 나무 성장 단계 갱신 → 화면 캡처를 Object Storage에 업로드하여 QR 코드 생성

이 모든 과정은 Unity 2021 LTS를 메인 플랫폼으로, ECONTENTSTYPE enum 기반의 상태 머신(State Machine)을 통해 7단계 화면 흐름으로 통합 관리됩니다.

2. 주요 기술적 구현

2.1 SQLite + CSV 기반 데이터 매니지먼트 (DataBaseManagementSystem.cs)

모든 사용자 데이터, 책 목록, 리뷰, 보상 규칙은 DataBaseManagementSystem이 단일 진입점으로 관리합니다. 앱 시작 시 LoadingAllData()Application.persistentDataPath/mydb.sqlite에서 userdatareviews 두 테이블을 로드하고, 이어서 LoadingBookleanData()가 공공도서관 API로 빌린 책 목록을 조회해 "작성 완료 / 미작성" 으로 자동 분리합니다. 보상 규칙은 코드가 아닌 Resources/Csv/RewardTable.csv에 선언되어 있어, 출석·독서량·카테고리별 보상 조건을 코드 수정 없이 CSV만 갱신하면 되도록 설계했습니다.

2.2 하이브리드 감상문 입력과 다단계 검증 (WriteAReviewManager.cs)

감상문은 단순 텍스트 필드가 아닌 감정 단어 토큰 선택 UI한글 온스크린 키보드 두 가지 입력 방식을 조합하여 작성됩니다. 단어 풀은 Theme / Story / Influence / Emotion 네 가지 타입EWORDTYPE)으로 분류되어 있고, ToggleToken()으로 토큰을 더하거나 빼면서 GetFinalText()가 최종 텍스트를 합성합니다. 저장 직전 Save()에서는 3,000줄 이상의 BadWord.txt를 참조한 금지어 필터, 200자 제한, 빈 입력 차단의 3단 검증을 통과한 경우에만 SQLite INSERT가 실행됩니다.

Theme: 책의 주제·장르 카테고리

Story: 줄거리 요약 키워드

Influence: 나에게 미친 영향

Emotion: 감정 표현

2.3 스크린샷 → 클라우드 → QR 파이프라인 (QRCreateManager.cs)

완성된 감상문 화면은 QR 코드 한 장으로 스마트폰에 즉시 전송됩니다. CaptureFream()RectTransform의 월드 좌표를 스크린 좌표로 변환해 Texture2D로 캡처한 뒤 PNG로 인코딩하고, AWS SDK의 PutObjectRequest를 이용해 CannedACL.PublicRead 정책으로 Object Storage에 업로드합니다. 반환된 퍼블릭 URL을 ZXing 라이브러리의 BarcodeWriter에 넘겨 256×256 QR 텍스처를 실시간으로 생성하고, 이를 UI에 표시해 관람객이 곧바로 스캔할 수 있도록 했습니다.

3. 사용자 경험(UX) 최적화

5단계 × 6프레임 나무 성장 시각화 : TreeManagertreeLevel 0~4와 각 단계별 6프레임 = 총 30개 이미지를 전환하며, 최종 단계의 마지막 프레임에만 과일이 맺히는 특수 연출로 성취감을 극대화했습니다.

8종 캐릭터와 랜덤 애니메이션 : Bear·Elephant·Monky·Prince·Princess·Rabbit·Sheep·Wolf 중 선택한 캐릭터가 Idle·Head·Hand·Walk 네 가지 애니메이션을 무작위로 재생해, 같은 캐릭터도 볼 때마다 다른 인상을 줍니다.

무인 키오스크 대응 유휴 타임아웃 : GameQuitManager가 일정 시간 동안 입력이 없으면 자동으로 로그아웃 후 Title로 복귀해, 다음 이용자가 매번 깨끗한 상태에서 시작하도록 보장합니다.

마스킹된 사용자 이름 표시 : LoginManager.Login()이 첫 글자와 마지막 글자 사이를 * 로 가려 개인정보를 보호하면서도 "내가 맞구나" 하는 확인감을 제공합니다.

4. 마치며

이 프로젝트는 도서관이라는 오프라인 공간에 게임화(Gamification)소셜 공유 를 얹는 작업이었습니다. 공공 API로 실제 대출 이력을 가져와 감상문 작성에 자동으로 연결하고, SQLite로 개인 기록을 축적하며, 클라우드를 거쳐 QR 한 장으로 스마트폰까지 전달되는 파이프라인은 기술적으로도 흥미롭지만, 독서라는 정적 활동에 "내 나무가 자라는 재미"라는 동기 부여를 심어 주었다는 점에서 큰 의미가 있었습니다.

향후에는 감상문 재작성 기능과 나무 성장 이외의 추가 미니게임, 그리고 독서량 기반 월간 랭킹 시스템을 도입하여 반복 방문 동기를 강화할 예정입니다.

읽기 도구

6분 읽기

이 글이 도움이 되었나요?

다음으로 읽기