본문으로 건너뛰기
Meongspace 로고

Meongspace

AI Coding Agent를 활용해 2D에서 3D로 리뉴얼한 인터랙티브 ASMR 웹서비스

담당
  • 기획부터 배포까지 단독 진행
  • 영상과 차별화하기 위해 2D에서 3D로의 리뉴얼 방향 결정
  • 장면별 성능을 측정하고 병목을 찾아 개선
기간
  • 2026.08 최초 배포 (v1)
  • 2026.10 1차 서비스 고도화 (v2)
팀
개인
Meongspace 대표 화면

Overview

프로젝트 한눈에 보기

배경
모닥불, 달빛호수, 불꽃놀이, 오로라 장면을 보고 들으며 휴식하는 인터랙티브 ASMR 웹서비스입니다. 보기만 하는 2D 장면은 영상과 차별점이 약하다고 판단해, 2026년 10월에 시점을 조작할 수 있는 3D 서비스로 리뉴얼했습니다.
구현 범위
기획부터 3D 장면 구성, 환경음, 성능 측정과 개선, 배포까지 전 과정을 단독으로 진행했습니다. 구현은 기능 단위로 AI Coding Agent에 맡기고, 요구사항과 기술 결정, 결과 검증을 직접 맡았습니다.

주요 기능

  1. 01

    3D 장면 감상

    모닥불, 달빛호수, 불꽃놀이, 오로라 4개 3D 장면 제공

  2. 02

    시점 조작

    드래그와 휠로 장면을 둘러보고 확대 및 축소

  3. 03

    ASMR 사운드

    장면별 환경음 재생과 음량 조절

Technology

기술 선택 이유

핵심 사용 기술

  • AI Coding Agent (Codex, Claude Code)

    1인 개발이라 구현은 기능 단위로 맡기고, 요구사항과 기술 결정, 결과 검증에 집중했습니다. 스타일과 폴더 구조 규칙, 결정 근거와 성능 측정 결과를 문서로 남겨 에이전트가 작업해도 같은 기준을 유지하도록 했습니다.

  • Three.js

    카메라, 원근 투영, 조명 등 3D 기반 기능을 활용해 4개 장면을 빠르게 구성했습니다. 드래그로 중심점을 기준으로 카메라를 회전시키고, 휠과 핀치로 거리를 조절하는 시점 조작을 구현했습니다. 움직임은 프레임 속도와 무관하게 부드럽게 보간하고, 카메라가 지면 아래로 내려가지 않도록 제한했습니다.

  • Next.js

    장면마다 독립 URL과 제목, 소개, FAQ가 검색 엔진에 노출되도록 빌드 시 HTML과 메타데이터를 생성했습니다. 로그인 등 서버 기능이 없어 Static Export로 정적 파일만 배포해 서버 운영 부담을 없앴습니다.

  • Web Audio API

    장면마다 환경음을 재생하고 음량을 조절해, 시각과 함께 소리로도 휴식하는 경험을 구성했습니다. 단순 반복 재생과 달리, 음원의 끝과 시작을 2초간 겹쳐 이어 소리가 끊기지 않도록 구현했습니다.

사용 기술

  • TypeScript

    장면 소개 글을 장면 ID 기준의 Record 타입으로 정의해, 장면을 추가하고 소개 글을 빠뜨리면 컴파일 단계에서 바로 드러나도록 했습니다. 한국어와 영어 공간 목록도 같은 Space 타입을 따르도록 강제해 두 언어의 데이터 형태가 어긋나지 않게 했습니다.

  • Tailwind CSS

    장면 위에 떠 있는 컨트롤 UI를 유틸리티 클래스로 작성하고, 장면별 색상을 테마 토큰으로 정의해 일관된 화면을 유지했습니다.

  • Cloudflare Pages

    Static Export로 만든 정적 결과물을 서버 없이 그대로 배포했습니다. 정적 파일을 전 세계 CDN에서 바로 제공해 장면 스크립트와 환경음 파일을 빠르게 불러올 수 있고, 별도 서버 비용 없이 도메인 비용만으로 운영할 수 있었습니다.

Key Points

주요 경험 및 설계 결정

  1. 01

    반사 렌더링 해상도 조정으로 오로라 시점 조작 중 끊김 해소

    문제

    1920×1080 환경에서 오로라 장면의 시점을 조작하는 동안 화면이 끊기는 현상을 발견했습니다.

    측정 결과 전체 프레임 간격 중 약 15%가 정상 간격(16.7ms)의 두 배인 33ms로 늘어나 있었습니다.

    해결

    조작 중 CPU 처리 시간 p95는 1.7ms였지만, GPU 처리 시간 p95는 17.0ms로 60Hz 예산(16.7ms)을 넘었습니다. 그래서 GPU 작업 중 장면을 한 번 더 그리는 반사 렌더링을 원인으로 판단했습니다.

    메인 화면 해상도는 유지한 채 반사 렌더링 해상도만 절반으로 줄였습니다(픽셀 수 1/4).

    1920×1080 반사 렌더링에서 표시된 영역이 픽셀 4개로 채워진 격자 그림
    반사 렌더링 해상도 1920×1080
    960×540 반사 렌더링에서 같은 영역이 픽셀 1개로 채워진 격자 그림
    반사 렌더링 해상도 960×540

    결과

    같은 조건에서 재측정한 결과, 33ms로 늘어난 프레임 간격이 약 15%에서 0%로 줄었습니다.

    GPU 처리 시간 p95는 17.0ms에서 11.5ms로 개선됐습니다.

    10초 동안의 프레임 간격 분포. 대부분 16.7ms에 모여 있지만 일부가 33.3ms로 늘어남
    33ms 프레임 간격 약 15% (79/520)
    10초 동안의 프레임 간격 분포. 모든 프레임이 16.7ms 부근에 모여 있음
    33ms 프레임 간격 0%

Gallery

  1. Meongspace 프로젝트 화면 1
  2. Meongspace 프로젝트 화면 2
  3. Meongspace 프로젝트 화면 3
  4. Meongspace 프로젝트 화면 4
  5. Meongspace 프로젝트 화면 5
  6. Meongspace 프로젝트 화면 6