✨ React, Vite, TypeScript 기반으로 제작된 모던하고 빠른 정적 사진 갤러리 웹 애플리케이션입니다.
- 🔍 자동 메타데이터 추출: 사진의 EXIF 데이터를 자동으로 분석하여 카메라 기종, 렌즈, 조리개, 셔터 스피드, ISO, 초점 거리 등의 정보를 추출합니다.
- ⚡ 이미지 자동 최적화: 썸네일과 WebP 포맷의 최적화된 이미지를 자동으로 생성하여 빠른 렌더링 속도와 대역폭 절감 효과를 제공합니다.
- 🖼️ WebP 이미지 포맷: 모든 사진을 WebP 포맷으로 관리하여 원본 대비 약 75%의 용량 절감 효과를 제공합니다.
make convert명령으로 JPG, RAW, HEIC 등을 WebP로 간편하게 변환할 수 있습니다. - 📁 폴더 기반 카테고리:
public/photos디렉토리 내에 생성한 폴더 구조를 기반으로 카테고리가 자동으로 분류됩니다. - 🔎 검색 및 필터링 기능: 파일명, 카메라 모델명, 렌즈명 등으로 사진을 검색할 수 있으며 카테고리 탭으로 쉽게 모아볼 수 있습니다.
- 🌗 반응형 디자인 및 다크 모드: 다양한 화면 크기에 맞춰 동작하는 완벽한 반응형 그리드 UI와 Lightbox 뷰어, 그리고 눈이 편안한 다크 모드를 지원합니다.
초기 빌드를 진행할 때 RAW 파일과 HEIC 이미지를 처리하기 위해 운영 체제의 네이티브 시스템 도구를 사용합니다.
macOS는 기본 내장된 sips 도구를 사용하므로 HEIC/RAW 처리를 위한 별도의 추가 프로그램 설치가 필요하지 않습니다.
RAW 파일의 EXIF 처리를 위한 exiftool과, HEIC 로드를 위한 heif-convert가 필요합니다.
sudo apt-get install libimage-exiftool-perl libheif-examplesnpm install사진이나 RAW/HEIC 파일들을 public/photos 디렉토리 안에 넣어주세요. 하위 폴더별로 사진을 모아두면, 그 폴더 이름이 카테고리로 자동 인식됩니다.
public/
└── photos/
├── 🌿 nature/
│ └── DSC0001.ARW
└── 🏙️ street/
└── IMG_1234.HEIC
스크립트를 실행하여 모든 사진의 WebP 썸네일과 고해상도 이미지를 생성하고, EXIF 데이터를 추출해 src/data/photos.json 파일을 만듭니다.
npm run generate💡 참고: 원본 사진의 개수와 크기에 따라 스크립트 실행 시간이 다소 소요될 수 있습니다.
npm run dev브라우저에서 http://localhost:5173 으로 접속해 방금 생성된 갤러리를 확인할 수 있습니다! 🎉
npm run build배포에 사용할 최적화된 정적 파일들이 dist 폴더에 생성됩니다.
- Frontend: React 19 ⚛️, TypeScript 📘, Vite ⚡, CSS Modules 🎨
- Image Processing: Node.js 🟩, Sharp 🔪, exifr 📷
- Deployment: 완전한 정적 파일 형태로 빌드되므로 Vercel, Netlify, GitHub Pages 및 일반 웹 서버 등 어디든지 쉽게 배포할 수 있습니다. 🌐
이 프로젝트는 MIT 라이선스를 따릅니다. 자세한 내용은 LICENSE 파일을 참조하세요.