← 포트폴리오 목록

플랜테리어 공간 시뮬레이션 웹·아이패드 앱

방 사진 업로드, 빛·공간 분석, 식물 에셋 드래그 배치, 이미지 렌더링, 저장까지 이어지는 플랜테리어 플로우를 Next.js와 TypeScript로 구현하는 프로젝트입니다.

프로젝트 납품 요약

아래 프로젝트 개요와 핵심 기능에서 구현 화면을 확인할 수 있습니다.

서비스 타입Web
업종플랫폼
기술 스택
Next.jsTypeScriptIonicCapacitorSupabasePostgreSQLNode.jsTailwind CSSKonva
주요 기능
  • 사진 업로드·공간 분석
  • 식물 배치 캔버스
  • 렌더링·저장
  • 아이패드 가로 화면 대응

프로젝트 개요

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

방 사진 업로드, 빛·공간 분석, 식물 에셋 드래그 배치, 이미지 렌더링, 저장까지 이어지는 플랜테리어 플로우를 Next.js와 TypeScript로 구현하는 프로젝트입니다. 아이패드 가로 화면은 Ionic과 Capacitor로 패키징하는 구조로 설계했습니다.

작업 범위

  • 사진 업로드·공간 분석: 방 사진을 올리면 빛이 드는 방향과 배치 가능한 영역을 요약 카드로 보여주는 화면입니다
  • 식물 배치 캔버스: 식물 에셋을 방 사진 위로 끌어다 놓고 크기와 위치를 조절하는 편집 화면입니다
  • 렌더링·저장: 배치 결과를 이미지 엔진에 보내 합성 이미지를 만들고 내 프로젝트로 저장하는 화면입니다
  • 아이패드 가로 화면 대응: 아이패드 가로 화면과 데스크톱 브라우저에서 같은 플로우가 동작하도록 맞춘 반응형 화면입니다

주요 업무

  • 사진 업로드·공간 분석 화면: 업로드 파일 형식·용량 검증 후 외부 이미지 분석 API 결과를 구조화해 공간 분석 패널에 표시합니다
  • 식물 배치 캔버스 화면: Konva 레이어 위에서 드래그·리사이즈·회전 변환을 처리하고 줌과 스크롤을 제스처별로 분리합니다
  • 렌더링·저장 화면: 렌더 요청을 비동기 작업으로 등록하고 완료 시 결과 이미지를 보관함에 저장합니다
  • 아이패드 가로 화면 대응 화면: Ionic 컴포넌트와 Capacitor 패키징 구조를 적용하고 뷰포트별 패널 배치를 전환합니다
플랜테리어 공간 시뮬레이션 웹·아이패드 앱
요구사항 정의

프로젝트 핵심 과제

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

손가락 줌과 식물 드래그가 충돌하는 터치 환경에서 제스처 우선순위 규칙 설계

사진 해상도와 캔버스 좌표계가 달라 배치 위치가 렌더 결과와 어긋나지 않

좌표 변환 설계 필요

외부 이미지 분석·생성 API의 응답 지연에 대비한 작업 재시도와 상태 안내 설계

다른 사용자의 방 사진과 결과 이미지에 접근하지 못하

Storage 경로와 RLS 정책 검증 필요

구현 내용

핵심 기능 상세

핵심 기능 1

사진 업로드·공간 분석

방 사진을 올리면 빛이 드는 방향과 배치 가능한 영역을 요약 카드로 보여주는 화면입니다. 업로드 파일 형식·용량 검증 후 외부 이미지 분석 API 결과를 구조화해 공간 분석 패널에 표시합니다.

  • Supabase Storage 서명 URL 업로드와 MIME·용량 서버 검증 적용
  • 외부 이미지 분석 API 응답을 Zod 스키마로 검증해 분석 카드에 매핑
  • 업로드 진행률 표시와 스켈레톤 로딩으로 대기 상태 가시화

업로드 검증과 분석 결과 스키마 검증을 분리해 잘못된 파일과 비정상 응답이 화면까지 전달되지 않는 구조를 구현합니다.

사진 업로드·공간 분석
사진 업로드·공간 분석 실제 화면
핵심 기능 2

식물 배치 캔버스

식물 에셋을 방 사진 위로 끌어다 놓고 크기와 위치를 조절하는 편집 화면입니다. Konva 레이어 위에서 드래그·리사이즈·회전 변환을 처리하고 줌과 스크롤을 제스처별로 분리합니다.

  • Konva Transformer로 선택 요소의 크기·회전 핸들 구현
  • 포인터 이벤트 기반 두 손가락 줌과 한 손가락 이동 제스처 분리
  • Zustand와 실행 취소 스택으로 배치 상태 이력 관리

마우스와 터치 입력을 하나의 포인터 이벤트 계층으로 통합해 데스크톱과 아이패드에서 같은 조작감을 제공하도록 설계합니다.

식물 배치 캔버스
식물 배치 캔버스 실제 화면
핵심 기능 3

렌더링·저장

배치 결과를 이미지 엔진에 보내 합성 이미지를 만들고 내 프로젝트로 저장하는 화면입니다. 렌더 요청을 비동기 작업으로 등록하고 완료 시 결과 이미지를 보관함에 저장합니다.

  • 렌더 요청 상태 폴링과 Supabase Realtime 구독으로 진행 상태 갱신
  • 결과 이미지를 사용자별 Storage 경로에 저장하고 RLS로 접근 제한
  • 실패 시 재시도 버튼과 사유 안내 상태 설계

렌더 작업 상태를 대기·진행·완료·실패로 모델링해 로딩 애니메이션과 오류 안내가 상태와 일치하도록 구현합니다.

렌더링·저장
렌더링·저장 실제 화면
핵심 기능 4

아이패드 가로 화면 대응

아이패드 가로 화면과 데스크톱 브라우저에서 같은 플로우가 동작하도록 맞춘 반응형 화면입니다. Ionic 컴포넌트와 Capacitor 패키징 구조를 적용하고 뷰포트별 패널 배치를 전환합니다.

  • Capacitor 설정과 Ionic 컴포넌트로 웹앱 패키징 구조 구성
  • 가로 모드 기준 패널 배치와 안전 영역 여백 처리
  • 에뮬레이터와 브라우저 개발자 도구 기반 뷰포트 점검 체크리스트 작성

하나의 Next.js 코드베이스에서 웹과 아이패드 앱을 함께 대응하는 패키징 구조를 설계합니다.

아이패드 가로 화면 대응
아이패드 가로 화면 대응 실제 화면
구현 과정

프로젝트 진행 단계

STEP 1

사용자 플로우와 데이터 모델 설계 · 2026.10

업로드부터 저장까지 플로우 정의, 프로젝트·배치·렌더 결과 테이블과 RLS 정책 설계

STEP 2

업로드·공간 분석 연동 · 2026.10

Storage 서명 업로드, 파일 검증, 외부 이미지 분석 API 연동 구현

STEP 3

배치 캔버스·렌더 보관함 구현 · 2026.10

Konva 기반 드래그·리사이즈·줌과 비동기 렌더 상태 모델, 결과 보관함 구현

STEP 4

아이패드 패키징·다기기 점검 · 2026.10

Capacitor 빌드 구성, 가로 화면 레이아웃과 뷰포트별 점검 항목 정리

개발 결과

포인터 통합 캔버스 제스처 설계마우스·터치를 포인터 이벤트로 통합하고 줌·이동·선택 제스처를 분리하는 입력 계층을 구현합니다
업로드 검증 파이프라인 구축서명 URL 업로드, MIME·용량 검증, 사용자별 Storage 경로와 RLS 정책을 하나의 흐름으로 구성합니다
렌더 작업 상태 머신 설계대기·진행·완료·실패 상태 전이를 모델링하고 Realtime 구독으로 화면 로딩 표시와 연동합니다
웹·아이패드 단일 코드베이스 구조 구축Next.js 화면을 Ionic과 Capacitor로 패키징하는 구조와 가로 모드 패널 레이아웃을 설계합니다

기술적 주안점

  • 업로드 검증과 분석 결과 스키마 검증을 분리해 잘못된 파일과 비정상 응답이 화면까지 전달되지 않는 구조를 구현합니다
  • 마우스와 터치 입력을 하나의 포인터 이벤트 계층으로 통합해 데스크톱과 아이패드에서 같은 조작감을 제공하도록 설계합니다
  • 렌더 작업 상태를 대기·진행·완료·실패로 모델링해 로딩 애니메이션과 오류 안내가 상태와 일치하도록 구현합니다

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

필요한 기능과 일정을 알려주시면 개발 범위를 함께 정리하겠습니다.

프로젝트 문의