DATT(닻)는 사용자가 대표 구역(상권 또는 지하철역 주변)을 설정하여 해당 상권의 트렌디한 명소 정보와 추천 코스를 탐색하고 나만의 닻(Anchor) 코스를 설계하여 보관 및 공유할 수 있는 통합 정박 라이프스타일 플랫폼입니다.
본 저장소는 백엔드(Spring Boot)와 프론트엔드(Next.js), 그리고 역방향 프록시(Nginx) 설정을 포함하는 모노레포 구조로 되어 있습니다.
- Framework: Spring Boot 3.x
- Language: Java 17
- Database: PostgreSQL
- Security: Spring Security, JWT (Json Web Token)
- Build Tool: Gradle
- Framework: Next.js 16 (App Router, Turbopack)
- Language: TypeScript
- Styling: Vanilla CSS / TailwindCSS
- State/Query: Zustand, React Query
- 실시간 워크스페이스 및 다대다 채팅 (Real-time Workspace & Chat)
- 초대 코드를 통한 워크스페이스 생성 및 참가
- STOMP/WebSocket 프로토콜 기반 실시간 양방향 채팅
- Redis(Pub/Sub)와 Kafka를 연동한 분산 메시징 및 검색 동기화 파이프라인
- 고성능 하이브리드 장소 탐색 (Hybrid Place Search)
- Elasticsearch Nori 형태소 분석기 및 Ngram 부분 일치를 결합한 하이브리드 검색엔진 탑재
- 상권, 시도/시군구 필터링 및 MatchQuery 가중치(Boost) 튜닝을 통한 검색 품질 최적화
- 대규모 데이터 마이그레이션 안전망 (Safe Data Migration)
- 270만 건 이상의 장소 마스터 데이터를 OOM 없이 Elasticsearch로 적재하는 Keyset Pagination 기반 무손실 동기화 내장
- 모바일 반응형 대시보드 (Responsive Dashboard UI)
- Slack 스타일의 다중 사이드바 UI 및 모바일 해상도를 위한 슬라이드 Drawer UI 적용
datt-platform/
├── spring-boot-app/ # Spring Boot 백엔드 애플리케이션
├── next-js-app/ # Next.js 프론트엔드 애플리케이션
├── nginx/ # Nginx 리버스 프록시 설정 파일
├── docker-compose.yml # 컨테이너 오케스트레이션 설정 (PostgreSQL, Nginx, App 등)
└── README.md # 본 안내 문서
보안을 위해 API 키 및 DB 비밀번호 등의 민감한 정보는 실제 저장소에 커밋되지 않습니다. 실행 전에 각 프로젝트 디렉토리에 환경 변수 파일을 생성해 주어야 합니다.
아래의 템플릿을 참고하여 로컬 설정에 맞게 민감 정보를 설정합니다. (실제 자격 증명 정보는 제외되어 있습니다)
spring:
datasource:
url: jdbc:postgresql://localhost:5432/datt_db
username: your_db_user # 데이터베이스 사용자 계정
password: your_db_password # 데이터베이스 사용자 패스워드
security:
oauth2:
client:
registration:
kakao:
client-id: your_kakao_client_id # 카카오 OAuth Client ID
client-secret: your_kakao_client_secret # 카카오 OAuth Client Secret
jwt:
secret: your_jwt_secret_key_should_be_long_enough # JWT 토큰 서명용 비밀키프론트엔드 루트 폴더에 .env.local 파일을 생성하고 아래 내용을 입력합니다.
# API Base URL (Nginx 프록시 혹은 백엔드 주소)
NEXT_PUBLIC_API_URL=http://localhost:8080
# 카카오 지도 API JavaScript 앱 키 (카카오 개발자 콘솔 발급)
NEXT_PUBLIC_KAKAO_MAP_APP_KEY=your_kakao_map_javascript_app_key- Docker 및 Docker Compose
- Node.js 18+ & npm
- JDK 17 & Gradle 8.x
모든 서비스(데이터베이스, Nginx, 백엔드, 프론트엔드)를 컨테이너 환경에서 원클릭으로 통합 구동합니다.
- 루트 디렉토리에서 다음 명령을 실행합니다.
docker-compose up --build -d
- 웹 브라우저에서
http://localhost에 접속하여 서비스를 이용합니다. (Nginx 포트 80 기본 바인딩)
Docker를 이용해 PostgreSQL만 단독 구동합니다.
docker run --name datt-postgres -e POSTGRES_DB=datt_db -e POSTGRES_USER=your_db_user -e POSTGRES_PASSWORD=your_db_password -p 5432:5432 -d postgres:15spring-boot-app 디렉토리로 이동하여 빌드 및 실행합니다.
cd spring-boot-app
./gradlew bootRun- 백엔드 서버는 기본적으로
http://localhost:8080포트에서 실행됩니다.
next-js-app 디렉토리로 이동하여 의존성을 설치하고 개발 서버를 켭니다.
cd next-js-app
npm install
npm run dev- 프론트엔드 개발 서버는 기본적으로
http://localhost:3000포트에서 실행됩니다.