테넌트별 정책 기반의 파일 업로드 및 지능형 후처리 파이프라인 플랫폼
FileFlow는 다양한 파일 타입(이미지, HTML, Excel, PDF)에 대한 업로드, 처리, 후처리를 테넌트별 정책 기반으로 관리하는 엔터프라이즈 플랫폼입니다.
- 테넌트 정책 관리: 테넌트별 파일 업로드 정책 및 제약 조건 설정
- 지능형 파일 처리: 이미지 최적화, OCR, 데이터 표준화
- 확장 가능한 파이프라인: SQS 기반 비동기 후처리 파이프라인
- 완벽한 추적: 파일 업로드부터 처리까지 전 과정 이력 관리
- Java 21 + Spring Boot 3.x
- Hexagonal Architecture (Ports & Adapters)
- AWS: S3, SQS, Textract, CloudFront
- Database: MySQL, Redis
- NO Lombok Policy (Pure Java)
📦 fileflow
├── 🎯 domain # 순수 비즈니스 로직
├── 🔄 application # 유스케이스 (포트 정의)
├── 🔌 adapter
│ ├── adapter-in-rest-api # REST API
│ ├── adapter-out-persistence-jpa # 영속성
│ ├── adapter-out-redis # 캐싱
│ ├── adapter-out-aws-s3 # 파일 저장소
│ ├── adapter-out-aws-sqs # 메시징
│ └── adapter-out-aws-textract # OCR
└── 🚀 bootstrap
└── bootstrap-web-api # Spring Boot 애플리케이션
- Java 21+
- Docker (테스트용 PostgreSQL, Redis, LocalStack)
- Gradle 8.x
./gradlew clean build
./gradlew :bootstrap:bootstrap-web-api:bootRun
- NO Lombok: 순수 Java 사용
- Immutability:
private final
필드, 정적 팩토리 메서드 - Pure Domain: Domain 모듈은 외부 의존성 없음
# 테스트 + 커버리지 검증
./gradlew test
# 코드 품질 검사 (Checkstyle, SpotBugs)
./gradlew check
프로젝트에는 자동 품질 검증을 위한 Git Hooks가 설정되어 있습니다:
pre-commit
: 코드 품질 검사 및 테스트 실행
상세한 프로젝트 문서는 docs/file-flow 디렉토리를 참조하세요.
- Domain: 비즈니스 로직 중심, 프레임워크 독립적
- Application: 유스케이스 오케스트레이션
- Adapter: 외부 시스템 통합 (REST, DB, AWS 등)
Domain ← Application ← Adapter
- Domain은 어떤 모듈에도 의존하지 않음
- Application은 Domain에만 의존
- Adapter는 Application과 Domain에 의존
- 프로젝트 초기 설정
- 테넌트 정책 도메인 모델
- 정책 관리 API
- Presigned URL 발급
- S3 업로드 처리
- 메타데이터 관리
- 이미지 최적화
- 썸네일 생성
- OCR 처리
Made with Hexagonal Architecture & Spring Boot 🚀