Skip to content

Repository files navigation

따옴 (Ddaom) — Backend

핫플 포토 가이드 앱 "따옴"의 API 서버.

Spring Boot 기반 REST API 서버입니다. 장소·포토존·사진 데이터를 관리하고, Google OAuth 로그인과 JWT 인증, 사진/이미지의 S3 업로드, 네이버 검색·지오코딩 프록시를 제공합니다.

기술 스택

영역 사용 기술
언어·런타임 Java 21
프레임워크 Spring Boot 4.x (Web, Data JPA, Security, Validation)
인증 Spring Security + JWT (jjwt), Google OAuth2 ID Token 검증
DB PostgreSQL
스토리지 AWS S3 (이미지 업로드)
빌드 Gradle

응답 형식

모든 API는 공통 래퍼로 응답합니다.

{
  "code": "SUCCESS",
  "message": "성공",
  "data": {}
}

Authorization: Bearer {token} 헤더로 JWT 인증합니다. /api/auth/**를 제외한 대부분의 엔드포인트가 인증을 요구합니다.

주요 API

도메인 엔드포인트 (대표)
Auth POST /api/auth/google (Google 로그인 → JWT 발급)
User GET /api/users/{id}, GET /api/users/me, PATCH /api/users/me/nickname, PATCH /api/users/me/profile-image
Follow POST/DELETE /api/follows/{id}, GET /api/follows/{id}/followers|followings|counts
Place GET/POST /api/places, GET/PUT/DELETE /api/places/{id}, 좋아요·저장 CRUD
PhotoSpot POST/DELETE /api/places/{id}/photo-spots
Photo GET /api/photos, POST /api/photos(multipart), 좋아요·인기·파생(derivation)
Upload POST /api/uploads/images (S3 업로드 → imageUrl)
네이버 프록시 GET /api/places/search, /search/image, /geocode

전체 명세는 API.md 참고.

프로젝트 구조

도메인별 패키지로 구성되며, 각 도메인은 controller / service / repository / entity / dto 계층을 가집니다.

src/main/java/com/ddaom/backend/
├── auth/          # Google 로그인, JWT 발급
├── user/          # 유저 프로필, 닉네임·프로필 이미지
├── follow/        # 팔로우/언팔로우
├── place/         # 장소, 포토존, 좋아요·저장, 네이버 검색·지오코딩 프록시
├── photo/         # 사진 업로드·조회·좋아요·파생
├── upload/        # S3 이미지 업로드
├── config/        # Security, CORS, 레이트리밋, WebMvc 설정
├── base/          # 공통 베이스
└── response/      # 공통 응답·예외 처리

시작하기

사전 준비

  • JDK 21
  • PostgreSQL
  • 아래 환경변수 (코드에 평문 보관하지 않고 EnvironmentFile 등으로 주입)
환경변수 설명
DB_USERNAME / DB_PASSWORD PostgreSQL 접속 정보
JWT_SECRET JWT 서명 키 (base64, 512bit 이상). 빈값이면 부팅 실패
NAVER_SEARCH_CLIENT_ID / NAVER_SEARCH_CLIENT_SECRET 네이버 검색 API
NAVER_MAP_CLIENT_ID / NAVER_MAP_CLIENT_SECRET 네이버 지도(지오코딩) API

실행

# 로컬 실행
JAVA_HOME=$(/usr/libexec/java_home -v 21) ./gradlew bootRun

# 빌드(JAR)
./gradlew clean bootJar -x test

테스트

./gradlew test

보안 메모

  • 비밀값(DB·JWT·네이버 키)은 모두 환경변수 전용 — 코드/설정 파일에 평문 커밋 금지
  • 외부 키(네이버)는 백엔드 프록시로만 호출(클라이언트 노출 방지) + 사용자당 레이트리밋
  • 이미지 업로드는 매직바이트 검사로 실제 이미지 형식만 허용(jpg/png/gif/webp/bmp/heic/heif)
  • 인증은 STATELESS(JWT) — 쿠키·세션 미사용

About

따옴(Ddaom) API 서버 — 장소·포토존·사진 관리, JWT 인증, S3 업로드, 네이버 검색 프록시 (Spring Boot)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages