← 포트폴리오 목록

3D 아파트 인테리어 편집 스튜디오

본 프로젝트의 핵심 요구사항인 아파트 3D 공간 렌더링과 벽지·바닥재·가구 편집을 반영한 프로젝트입니다.

3D 씬 충돌 경계 계산 로직 구현Raycaster 기반 벽·바닥 충돌 감지로 카메라와 가구 이동 범위를 방 경계 내로 제한하는 로직 설계
재질 스왑 렌더링 파이프라인 구축메시 텍스처 동적 교체 구조를 설계해 방별 벽지·바닥재 프리셋 10종 이상을 관리할 수 있는 기반 구현
인테리어 스냅샷 직렬화 구조 설계가구·재질 상태를 JSONB로 직렬화·복원하는 하이드레이션 로직 구현, 디바운스 저장으로 API 호출 최소화
서비스 타입Web
업종플랫폼
기술 스택
ReactTypeScriptThree.jsReact Three FiberTailwind CSSNode.jsExpressPrismaPostgreSQL
주요 기능
  • 3D 인테리어 편집
  • 아파트 타입 선택
  • 마이 공간 관리
  • 회원 인증 및 프로필
Overview

프로젝트 개요

범위: 개발, 디자인, 기획

본 프로젝트의 핵심 요구사항인 아파트 3D 공간 렌더링과 벽지·바닥재·가구 편집을 반영한 프로젝트입니다. React Three Fiber 기반 3D 뷰어에서 시점을 전환하며 인테리어를 실시간으로 꾸미고, 편집 상태를 저장·복원하는 흐름까지 구현합니다.

작업 범위

  • 3D 인테리어 편집: 아파트 3D 공간에 진입해 시점을 전환하며 자유롭게 이동하고, 벽지·바닥재 교체와 가구 배치·이동·회전을 실시간으로 적용합니다
  • 아파트 타입 선택: 2개 아파트 타입 중 하나를 선택해 나만의 3D 공간을 생성합니다
  • 마이 공간 관리: 편집한 인테리어 결과를 저장하고, 저장된 공간 목록과 마지막 편집 시각을 확인해 이어서 편집합니다
  • 회원 인증 및 프로필: 이메일 기반 회원가입·로그인과 닉네임·프로필 이미지 등록·수정을 제공합니다

주요 업무

  • 3D 인테리어 편집 화면: React Three Fiber Canvas 위에 좌측 카탈로그 패널, 중앙 3D 뷰포트, 우측 속성 인스펙터를 배치해 선택-편집-확인 흐름을 한 화면에서 완결합니다
  • 아파트 타입 선택 화면: 타입 선택 시 서버에 공간 레코드를 생성하고 기본 배치 프리셋을 로드해 곧바로 3D 뷰어로 진입할 수 있도록 연결합니다
  • 마이 공간 관리 화면: 씬 그래프의 오브젝트 상태를 JSON 스냅샷으로 직렬화해 저장하고, 목록 화면에서 스냅샷 메타데이터를 조회해 복원 진입점을 제공합니다
  • 회원 인증 및 프로필 화면: JWT 기반 인증 미들웨어로 세션을 관리하고, 프로필 이미지는 오브젝트 스토리지에 업로드 후 URL을 프로필 레코드에 저장합니다
3D 아파트 인테리어 편집 스튜디오
요구사항 정의

프로젝트 핵심 과제

프로젝트 진행 시 해결한 핵심 기술 과제입니다.

제공되는 3D 모델 파일의 포맷·스케일이 렌더링 파이프라인과 다를 수 있어

로드 시 자동 스케일 보정 및 포맷 검증 로직으로 대응합니다

가구 배치 시 충돌·겹침 판정이 복잡한 실내 구조에서 오탐될 수 있어

경계 상자 1차 필터 후 정밀 충돌 검사를 2단계로 나누는 방식으로 대응합니다

가구 3D 에셋 카탈로그가 무제한으로 확장되면 로딩 성능이 저하될 수 있어

사전 등록 세트(10~15종)로 스코프를 제한하고 지연 로딩을 적용합니다

재질 텍스처 교체 시 대용량 이미지 로딩으로 프레임 드랍이 발생할 수 있어

텍스처 압축과 프리로드 캐싱으로 대응합니다

구현 내용

핵심 기능 상세

핵심 기능 1

3D 인테리어 편집

아파트 3D 공간에 진입해 시점을 전환하며 자유롭게 이동하고, 벽지·바닥재 교체와 가구 배치·이동·회전을 실시간으로 적용합니다.

  • React Three Fiber PerspectiveCamera 2대(1인칭/상단)를 상태값으로 전환하고 Raycaster로 벽·바닥 충돌 경계를 계산해 카메라 이동 범위를 제한
  • 좌측 카탈로그에서 벽지/바닥재 썸네일 선택 시 대상 메시의 재질 텍스처를 즉시 교체
  • 이동·회전 기즈모를 3D 씬에 직접 렌더링하고 경계 상자 충돌 검사로 가구 겹침을 방지

우측 인스펙터 패널이 선택된 오브젝트의 위치·회전·재질 값을 3D 씬과 실시간 양방향 바인딩하는 속성 편집 구조를 구현합니다.

3D 인테리어 편집
3D 인테리어 편집 실제 화면
핵심 기능 2

아파트 타입 선택

2개 아파트 타입 중 하나를 선택해 나만의 3D 공간을 생성합니다. 타입 선택 시 서버에 공간 레코드를 생성하고 기본 배치 프리셋을 로드해 곧바로 3D 뷰어로 진입할 수 있도록 연결합니다.

  • React Query mutation으로 타입 선택 즉시 공간 레코드를 생성하고 캐시를 무효화해 마이 공간 목록에 반영
  • Prisma 스키마로 아파트 타입별 기본 배치 프리셋을 정규화해 신규 생성 시 초기값으로 주입
  • 생성 완료 시 활성 공간 ID를 라우트 파라미터로 전달해 3D 뷰어가 해당 공간을 즉시 로드

타입 선택부터 3D 공간 생성까지 단일 트랜잭션으로 처리해 중간 이탈 시 불완전한 공간 레코드가 남지 않도록 구현합니다.

아파트 타입 선택
아파트 타입 선택 실제 화면
핵심 기능 3

마이 공간 관리

편집한 인테리어 결과를 저장하고, 저장된 공간 목록과 마지막 편집 시각을 확인해 이어서 편집합니다.

  • 가구·재질 상태를 오브젝트 배열로 직렬화해 PostgreSQL JSONB 컬럼에 저장
  • 저장 시 2초 디바운스를 적용해 편집 중 과도한 API 호출을 방지
  • 복원 시 저장된 스냅샷을 순회하며 R3F 씬에 오브젝트를 재생성하는 하이드레이션 로직 구현

자동 저장과 수동 저장 버튼을 함께 제공해 시연 도중에도 안전하게 편집 상태를 보존하는 저장 구조를 구현합니다.

마이 공간 관리
마이 공간 관리 실제 화면
핵심 기능 4

회원 인증 및 프로필

이메일 기반 회원가입·로그인과 닉네임·프로필 이미지 등록·수정을 제공합니다. JWT 기반 인증 미들웨어로 세션을 관리하고, 프로필 이미지는 오브젝트 스토리지에 업로드 후 URL을 프로필 레코드에 저장합니다.

  • JWT 액세스/리프레시 토큰 발급 및 검증 미들웨어를 Express에 구현해 인증 상태를 유지
  • 프로필 이미지 업로드는 Multer로 수신 후 오브젝트 스토리지에 저장하고 presigned URL로 반환
  • React Hook Form과 스키마 검증 라이브러리로 회원가입 폼 유효성 검증(이메일 형식, 비밀번호 규칙)을 구현

닉네임 변경 시 다른 사용자 공간 방명록·목록에 반영된 표시명도 함께 갱신되는 참조 무결성을 구현합니다.

회원 인증 및 프로필
회원 인증 및 프로필 실제 화면
구현 과정

프로젝트 진행 단계

STEP 1

요구사항 분석 및 3D 데이터 모델 설계 · 2026.09

아파트 타입·공간·가구 배치 데이터 구조 분석, PostgreSQL 테이블 설계 및 3D 자산 파이프라인 정의

STEP 2

3D 뷰어 및 카메라 컨트롤 개발 · 2026.09

React Three Fiber 기반 씬 구성, 1인칭/상단 카메라 전환, 충돌 경계 계산 로직 구현

STEP 3

인테리어 편집 기능 개발 · 2026.09

재질 스왑, 이동·회전 기즈모 기반 가구 배치, 인스펙터 패널 연동

STEP 4

저장·복원 및 인증 API 개발 · 2026.09

JSON 스냅샷 저장/복원 API, JWT 인증 미들웨어, 프로필 이미지 업로드 구현

STEP 5

통합 테스트 및 시연 배포 · 2026.09

3D 렌더링 성능 점검, 크로스 브라우저 테스트, 시연 가능한 배포 환경 구성

프로젝트 성과

주요 성과

3D 씬 충돌 경계 계산 로직 구현Raycaster 기반 벽·바닥 충돌 감지로 카메라와 가구 이동 범위를 방 경계 내로 제한하는 로직 설계
재질 스왑 렌더링 파이프라인 구축메시 텍스처 동적 교체 구조를 설계해 방별 벽지·바닥재 프리셋 10종 이상을 관리할 수 있는 기반 구현
인테리어 스냅샷 직렬화 구조 설계가구·재질 상태를 JSONB로 직렬화·복원하는 하이드레이션 로직 구현, 디바운스 저장으로 API 호출 최소화
Highlights

기술적 주안점

  • 우측 인스펙터 패널이 선택된 오브젝트의 위치·회전·재질 값을 3D 씬과 실시간 양방향 바인딩하는 속성 편집 구조를 구현합니다
  • 타입 선택부터 3D 공간 생성까지 단일 트랜잭션으로 처리해 중간 이탈 시 불완전한 공간 레코드가 남지 않도록 구현합니다
  • 자동 저장과 수동 저장 버튼을 함께 제공해 시연 도중에도 안전하게 편집 상태를 보존하는 저장 구조를 구현합니다

유사한 프로젝트를 기획하고 계신가요?

FIRSTPIP이 개발 범위와 로드맵을 함께 정리해드립니다

무료 상담 시작하기