복잡한 구축 과정 없이, 개인 PC 환경 그대로의 파일을 실시간 스트리밍 서비스로 구축해 주는 스탠드얼론 NAS 앱입니다.
git clone https://github.com/ggm77/FSHS-backend
git clone https://github.com/ggm77/FSHS-frontend-web
cd ./FSHS-frontend-web
npm install
npm run build
mkdir ../FSHS-backend/src/main/resources/static
mv dist/* ../FSHS-backend/src/main/resources/static
cd ../FSHS-backend
./gradlew build
cd build/libs
java -jar ./FSHS-2.0.0.jar
- OS 독립성: 특정 NAS OS가 아닌 일반 OS(Windows, macOS, Linux) 위에서 프로그램 형태로 동작하도록 설계되었습니다.
- 실시간 스트리밍: 브라우저에서 지원하지 않는 코덱의 경우 FFmpeg를 통해 실시간 트랜스코딩 스트리밍을 제공합니다.
- 간편한 마이그레이션: 기존 파일 시스템을 그대로 인식하므로, 별도의 데이터 이동 없이 설치 즉시 NAS로 활용 가능합니다.
- 현대적 UI/UX: 깔끔하고 직관적인 인터페이스를 제공합니다.
- 파일 관리: 업로드, 다운로드, 파일 탐색 및 검색 기능 제공.
- 파일 스트리밍: 이미지/비디오 갤러리 뷰 및 음악/영상 재생목록 기능.
- 다중 사용자 지원: 사용자별 루트 폴더 분리를 통한 독립적 저장 공간 제공.
- 파일 동기화: 실제 디스크의 파일 정보와 DB 캐시 정보를 일치시키는 동기화 기능.
- 파일 공유: 로그인 없이도 접근 가능한 파일 공유 링크 생성 기능 제공.
- 트랜스코딩 설정 관리: 관리자가 트랜스코딩 화질 및 하드웨어 가속(H264 인코더 등) 설정을 조회/변경 가능.
- Language: Java 25
- Framework: Spring Boot 4.0.2
- Database: SQLite3
- Media Processing: FFmpeg
com.seohamin.fshs.v2
├ domain
| ├ auth/file (비로그인 공유 파일 접근 API)
| ├ file (파일 관련 API)
| ├ folder (폴더 관련 API)
| ├ share (공유 관련 API)
| ├ system (시스템 관련 API)
| ├ transcoding (트랜스코딩 설정 API)
| └ user (유저 관련 API)
└ global
├ config (시큐리티, 스웨거 등 공통 설정)
├ exception (커스텀 예외 처리)
├ infra (FFmpeg, 메타데이터 추출, 스토리지 등 외부 연동)
├ init (초기 관리자/시스템 루트 등 부팅 초기화)
├ util (유틸 도구 모음)
└ validation (요청 검증 그룹)
시스템은 SQLite를 사용하여 파일 메타데이터를 캐싱하며, 실제 파일 시스템과 유기적으로 연동됩니다.
- Member: 사용자 계정 정보 및 권한(Role)을 관리합니다.
- Folder: 유저별로 독립된 루트 폴더를 가지며, 디렉토리 계층 구조를 저장합니다.
- File: 파일의 상대 경로, 크기, MIME 타입, 미디어 코덱 정보 및 카테고리(IMAGE, VIDEO 등)를 저장하여 빠른 조회를 지원합니다.
- SharedFile: 파일 공유 시 발급되는 공유 키와 소유자 정보를 관리합니다.
- TranscodingSetting: 트랜스코딩 화질 및 하드웨어 가속(H264 인코더) 설정을 관리합니다.
- PersistentLogins: 자동 로그인(remember-me)을 위한 토큰 정보를 관리합니다.
본 프로젝트는 일관된 히스토리 관리를 위해 아래의 커밋 메세지 형식을 준수합니다.
| Type | Description | Example |
|---|---|---|
| feat | 새로운 기능 추가, 구현 | feat: login 기능 구현 |
| fix | 버그 픽스 | fix: color 버그 수정 |
| refactor | 코드 리팩토링 | refactor: 변수명 수정 |
| chore | 파일 이동, 경로 변경, 이름 변경 | chore: feet -> feat 이름 변경 |
| docs | 주석이나 리드미 수정 | docs: 리드미 수정 |
| style | UI 작업, 스타일 관련 파일 추가 및 수정 | style: 폰트 등록 |
| test | 테스트 케이스 생성 | test: 테스트 케이스 생성 |
- 세션 기반 인증 방식 구현 및 유저 API
- 파일 및 폴더 조회/관리 API 구현
- FFmpeg 기반 실시간 트랜스코딩 스트리밍 구현
- 디스크 정보 동기화
- 파일 탐색 기능
- 파일 공유 링크 생성 및 미디어 재생목록 기능
- 하나의 루트 폴더를 여러 유저가 공동으로 관리하는 기능 지원
- UPS 연동을 통한 안전한 서버 종료 지원
- 부분 업로드/다운로드를 통한 대용량 파일(100GB+) 지원
- 자동 파일 변경 감지 체크 기능
