공공데이터 기반, 전국 해수욕장 실시간 혼잡도 관리 시스템
"MVP(Prototype) 개발 경험을 바탕으로, 대규모 트래픽을 고려한 성능 최적화(Redis)와 데이터 무결성(Flyway)을 갖춘 V1을 구축하고 있습니다."
Current Phase: V1 Refactoring & Performance Tuning 🚀
2025.09 ~ 2025.10: MVP(최소 기능 제품) 개발 완료
2025.11 ~ 현재: V1 아키텍처 고도화 및 인프라 설계 진행 중
초기 MVP 모델을 검증한 후, 현재는 실제 운영 가능한 수준의 안정성을 확보하기 위해 기술 스택을 확장하고 있습니다. 특히 데이터 일관성(Flyway)과 응답 속도 개선(Redis)에 집중하고 있습니다.
- MVP 단계: 핵심 도메인(해수욕장, 날씨) CRUD 및 기본 API 구현 완료
- DB 고도화: Flyway 도입을 통한 스키마 형상 관리 및 마이그레이션 자동화
- 성능 최적화: Redis 캐싱 적용을 통한 조회 성능 개선 (진행 중)
- CI/CD 구축: Jenkins vs GitHub Actions 비교 분석 및 파이프라인 설계 단계
- 확장 기능: 사용자 리뷰 시스템 및 위치 기반 추천 알고리즘 탑재
단순 구현을 넘어, 데이터의 신뢰성과 시스템 성능을 높이기 위해 다음과 같은 기술적 도전을 진행 중입니다.
- Problem: 로컬과 배포 환경 간의 DB 스키마 불일치 문제 발생
- Solution: Flyway를 도입하여 DB 변경 이력을 코드로 관리(Version Control)하고, 환경 간 스키마 싱크를 100% 일치시켜 배포 안정성을 확보했습니다.
- Problem: 반복적인 기상 데이터 조회로 인한 DB 부하 및 응답 지연 우려
- Solution: Redis를 활용한 캐싱 전략(Global Cache)을 수립하여, 자주 조회되는 데이터의 응답 속도를 획기적으로 단축하고 DB 부하를 분산시켰습니다.
- V1 Refactoring: 유지보수성을 위해 도메인형 디렉토리 구조로 재설계하고, QueryDSL을 도입해 동적 쿼리의 타입 안정성을 확보했습니다.
Beach_complex/
├── 📁 src/main/java/com/beachcheck/
│ ├── 📁 config/ # 설정 파일 (Security, Redis, Cache, JWT)
│ ├── 📁 controller/ # REST API 엔드포인트
│ ├── 📁 service/ # 비즈니스 로직
│ ├── 📁 repository/ # JPA 레포지토리
│ ├── 📁 domain/ # 엔티티 클래스
│ ├── 📁 dto/ # DTO (Request/Response)
│ ├── 📁 security/ # JWT 인증 필터
│ ├── 📁 exception/ # 예외 핸들러
│ ├── 📁 util/ # 유틸리티 클래스
│ └── 📁 scheduler/ # 스케줄러 (데이터 수집 등)
│
├── 📁 src/main/resources/
│ ├── 📁 db/migration/ # Flyway 마이그레이션 스크립트
│ ├── 📄 application.yml # 애플리케이션 설정
│ └── 📄 application-dev.yml # 개발 환경 설정
│
├── 📁 front/
│ ├── 📁 src/
│ │ ├── 📁 api/ # API 호출 로직
│ │ ├── 📁 components/ # React 컴포넌트
│ │ ├── 📁 hooks/ # Custom Hooks
│ │ ├── 📁 types/ # TypeScript 타입 정의
│ │ ├── 📁 utils/ # 유틸리티 함수
│ │ ├── 📁 constants/ # 상수 정의
│ │ ├── 📁 data/ # 정적 데이터
│ │ ├── 📁 assets/ # 이미지, 폰트 등
│ │ ├── 📄 App.tsx # 메인 앱 컴포넌트
│ │ └── 📄 main.tsx # 엔트리 포인트
│ ├── 📄 package.json # 프론트엔드 의존성
│ └── 📄 vite.config.ts # Vite 설정
│
├── 📁 docs/ # 프로젝트 문서
├── 📄 build.gradle # Gradle 빌드 설정
├── 📄 docker-compose.yml # Docker 설정
└── 📄 README.md
"우리는 코드를 기록하고, 리뷰하며 성장합니다."
저희 팀은 기능 구현 속도보다 코드의 품질과 팀원 간의 싱크(Sync)를 최우선으로 합니다.
- GitHub Flow:
main브랜치를 보호하고, 모든 기능은 개별 브랜치에서 개발합니다. - Code Review: 현재 약 70+ Commits, 22+ Pull Requests를 통해 팀원 간 상호 피드백을 진행했으며, 승인(Approve) 없이는 병합하지 않습니다.
- Issue Tracking: GitHub Issues를 활용해 할 일을 관리하고 진행 상황을 투명하게 공유합니다.
이 프로젝트를 로컬 환경에서 실행하는 방법을 안내합니다.
- JDK 21
- Node.js 20+
- Docker Desktop (DB 실행용)
git clone https://github.com/PHJ2000/Beach_complex.git
cd Beach_complexdocker-compose up -d./gradlew bootRuncd front
npm install
npm run dev- Frontend:
http://localhost:5173 - Backend API:
http://localhost:8080 - API Docs (Swagger):
http://localhost:8080/swagger-ui.html
| 역할 | 이름 | GitHub | 담당 업무 |
|---|---|---|---|
| BE (Infra/Lead) | [박재홍] | @PHJ2000 | 핵심 비즈니스 로직 구현, 아키텍처 설계, 코드 리팩토링 |
| BE (Feature) | [박건우] | @GunwooPar | 핵심 비즈니스 로직 구현, API 개발, 코드 리팩토링 |
| FE (PM) | [정도경] | @DoGyeong888 | UI/UX 설계, 프론트엔드 개발 |
이 프로젝트는 MIT 라이선스를 따릅니다.