Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

TeamCompulsion/PHOTO_LINER_API

Repository files navigation

PHOTO LINER API

Caution

🚨 서비스 종료 안내 (Service Terminated)

본 서비스는 2026년 01월 01일부로 운영이 종료되었습니다. (削除) 서비스 바로가기 (削除ここまで) (접속 불가)

여행의 모든 순간을 지도 위에 그리다
Photo Liner는 사진에 담긴 순간들을 지도 위에서 직관적으로 되살려 주는 위치 기반 사진 서비스입니다.
이 레포지토리는 Photo Liner 서비스의 백엔드 API 서버입니다.


🗺️ 서비스 소개

어떤 경험을 제공하나요?

Photo Liner는 단순한 사진 보관함이 아니라, 여행 타임라인을 지도 위에 그려주는 서비스입니다.

  • 스마트폰/카메라에서 찍은 사진을 업로드하면
    • 메타데이터에서 촬영 위치와 날짜를 읽어오고,
    • 누락된 정보는 사용자가 지도에서 직접 위치를 선택하여 보정합니다.
  • 사진은 촬영 날짜별로 자동 그룹화되며,
  • 지도 위에는
    • 개별 사진 마커,
    • 다수의 사진을 모아 표시하는 클러스터 마커가 함께 보여집니다.
  • 선택한 앨범에 대해서는
    • 촬영 순서대로 경로를 그리고,
    • 슬라이더를 활용해 하루 여행 동선을 따라가듯 재생할 수 있습니다.

✨ 주요 기능

1. 사진 업로드 및 메타데이터 보정

image
  • 다중 사진 선택 후 한 번에 업로드
  • 사진 선택 모달에서 업로드 대상 선택/해제
  • 업로드 이후, 사진별로
    • 촬영 위치가 없으면 지도에서 클릭하여 위치 지정
    • 촬영 날짜가 없거나 잘못된 경우 직접 수정
  • 모든 사진의 정보가 준비되면 한 번에 저장

2. 지도 기반 사진 보관함

image
  • 좌측 패널: 날짜별로 그룹화된 썸네일 리스트
  • 우측 지도: 네이버 지도 위에 사진 썸네일 마커 표시
  • 줌 레벨에 따라 자동으로 마커 클러스터링
    • "3개", "2개"와 같이 사진 개수 표시
    • 클러스터 클릭 시 해당 영역으로 줌인

3. 앨범 & 경로 시각화

image
  • 원하는 사진들을 묶어서 앨범 생성
  • 앨범 뷰에서는
    • 지도 위에 앨범 내 사진들만 표시
    • 촬영 시각 기준으로 정렬 된 경로 라인을 점선으로 표시
    • 시작/끝 지점, 이동 순서 등 동선이 한눈에 보이도록 UI 제공
  • 하단 컨트롤에서
    • 1 / 5 형식의 인덱스와 날짜를 보여주며,
    • 좌우 화살표로 사진 순회 & 동선 따라가기 가능

4. 사진 상세 보기

image
  • 지도 위의 사진 마커 또는 썸네일을 클릭 시
    • 큰 이미지와 함께 촬영 날짜, 위치 정보 등 메타데이터가 표시되는 모달 팝업
  • 위치 정보가 있는 경우 "위치 정보 있음" 형태로 표기

5. 개별 사진 날짜 및 위치 수정

image image
  • 개별 이미지의 날짜 및 위치 수정

6. 카카오 로그인

image
  • 카카오톡 계정 기반 로그인
  • 로그인 후 개인별 사진 보관함 및 앨범 관리

🧱 시스템 아키텍처

아래는 Photo Liner의 인프라 구조입니다.

image

구성 요소

  • Users

    • 브라우저에서 React 앱 접속
    • 지도/이미지/앨범 관련 API 호출
  • CloudFront

    • 정적 리소스(React 번들) 및 이미지 캐싱
    • S3 및 EC2의 콘텐츠를 전 세계에 빠르게 전달
  • S3

    • 원본/리사이즈된 사진 파일 저장소
    • EC2 백엔드로부터 Pre-signed URL을 발급 받아 클라이언트에서 직접 업로드
  • Lambda

    • S3 업로드 이벤트 기반 트리거
    • 원본 이미지 리사이징, 썸네일 생성 등 비동기 이미지 처리
  • EC2

    • Spring Boot 기반 PHOTO_LINER_API 서버
    • React 앱 서빙 및 REST API 제공
    • RDS, SSM, S3 등과 통신
  • RDS

    • 사진/위치/앨범/사용자 정보를 저장하는 관계형 DB
    • 위치 정보는 POINT 타입으로 저장하여 공간 쿼리 지원
  • Systems Manager (Parameter Store)

    • DB 비밀번호, 외부 API 키 등 민감 정보 관리
  • GitHub

    • 코드 저장소
    • CI/CD 파이프라인 트리거 → EC2 배포
  • KakaoTalk (OAuth)

    • 카카오 로그인을 통한 사용자 인증 연동

🛠 기술 스택

Backend

  • Java 21
  • Spring Boot 3.5.7
    • Spring Web (REST API)
    • Spring Data JPA
    • Spring Validation
  • Hibernate Spatial
    • 위도/경도 Point 타입 매핑
    • 지도 뷰포트 내 사진 조회 등 공간 쿼리 처리
  • Flyway
    • DB 마이그레이션 관리

Infra & Storage

  • AWS EC2 – 애플리케이션 서버
  • AWS RDS (MySQL 8.1) – 메인 데이터베이스
  • AWS S3 – 원본/썸네일 이미지 저장소
  • AWS Lambda – 이미지 리사이징 자동화
  • AWS CloudFront – 정적 파일 및 이미지 CDN
  • AWS Systems Manager (Parameter Store) – 설정/보안 값 관리

📁 패키지 구조

PHOTO_LINER_API 프로젝트 구조

PHOTO_LINER_API
├── .github/
├── gradle/
├── src
│ ├── main
│ │ ├── java/kr/kro/photoliner
│ │ │ ├── common/model # 공통 모델 (BaseEntity)
│ │ │ ├── domain
│ │ │ │ ├── album # 앨범 도메인
│ │ │ │ ├── photo # 사진 도메인
│ │ │ │ └── user # 사용자 도메인
│ │ │ └── global
│ │ │ ├── auth # JWT 인증
│ │ │ ├── code # API 응답 코드
│ │ │ ├── config # 설정 (S3, Swagger, WebMvc 등)
│ │ │ ├── exception # 전역 예외 처리
│ │ │ └── kakao/login # 카카오 로그인 연동
│ │ └── resources
│ │ ├── application-*.yml # 프로필 별 설정
│ │ └── db/migration # Flyway 스크립트 (V1~V9)
│ └── test
├── build.gradle
├── settings.gradle
└── gradlew / gradlew.bat

도메인 구조

각 도메인(album, photo, user)은 동일한 레이어 구조를 따릅니다:

domain/{name}
├── controller # API 엔드포인트
├── dto # 요청/응답 DTO
├── model # 엔티티
├── repository # JPA Repository
├── service # 비즈니스 로직
└── infra # 외부 연동

🧑‍🧑‍🧒‍🧒 Team Members

BackEnd

image
강인화 박희찬

FrontEnd

image image image
[Claud] [Cursor] [AntiGravity]

About

Photo liner API 서버 (우아한테크코스8기 프리코스 오픈미션)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /