Skip to content

sjh9714/memory_of_year

Repository files navigation

Memory of Year

Memory of Year는 2024년 공개 협업 저장소에서 시작한 앨범, 편지, 사진 관리 서비스의 Spring Boot REST API 백엔드입니다. JWT 인증, S3 파일 업로드, MySQL/H2 실행 환경, Swagger 문서, k6 부하 테스트 스크립트를 포함합니다.

프로젝트 맥락

원본 저장소의 공개 커밋으로 본인의 인증·앨범·편지·사진 기반 작업을 확인할 수 있습니다. 현재 저장소의 2026년 리팩터링과 테스트 보강은 당시 협업 기간과 분리합니다. 자세한 근거는 PROVENANCE.md에 정리했습니다.

구분 내용
공개 원본 2024GanzithonPYTHON/7_Ganzi_BackEnd
2024 본인 기여 인증, 앨범, 편지, 사진의 백엔드 기반
2026 후속 작업 리팩터링, 테스트, MySQL/Docker, 문서 보강
주장 경계 팀 규모·배포·실사용자 수는 공개 근거 없이 주장하지 않음

서비스 화면

아래 화면은 저장소 소유자가 확인한 당시 프론트엔드 데모 맥락입니다. 현재 저장소에 프론트엔드 소스나 공개 배포가 있음을 뜻하지 않습니다.

프로젝트 시작 화면
프로젝트 시작
회원가입과 로그인 화면
회원가입 & 로그인
앨범 생성 화면
앨범 생성
편지 생성 화면
편지 생성

문제 의식

추억을 앨범 단위로 모으는 서비스에서는 사용자 인증, 미디어 업로드, 앨범별 편지/사진 조회가 함께 동작해야 합니다. 이 저장소는 그 흐름을 REST API로 나누고, 목록 조회에서 발생할 수 있는 N+1 쿼리를 줄이는 방식까지 함께 정리합니다.

주요 기능

  • 회원가입, 로그인, 로그아웃과 JWT 필터 기반 인증
  • 앨범 생성, 조회, 수정
  • 앨범 안의 편지 작성, 목록, 상세 조회
  • 사진 업로드와 조회, 스티커 업로드와 목록 조회
  • AWS S3 연동 설정과 로컬 기본값
  • 공통 응답 형식과 전역 예외 처리
  • Swagger UI, Actuator health/metrics/info
  • k6 기반 회원가입, 로그인, 앨범 조회, 편지 목록 부하 테스트

기술 스택

영역 기술
Backend Java 17, Spring Boot 3.3.5, Spring Web, Spring Security
Persistence Spring Data JPA, MySQL 8, H2
Storage AWS SDK S3
API Docs springdoc-openapi
Test / Quality JUnit 5, Spring Security Test, MySQL Testcontainers, MockWebServer S3 boundary, JaCoCo, k6
Infra Docker, Docker Compose, Gradle

구조

src/main/java/com/demo/album/
├── config/       # Security, Swagger, S3, Web 설정
├── controller/   # User, Album, Letter, Photo, Sticker API
├── dto/          # 요청/응답 DTO와 공통 응답
├── entity/       # User, Album, Letter, Photo, Sticker
├── exception/    # 전역 예외 처리
├── filter/       # JWT 필터
├── repository/   # JPA Repository
├── service/      # 비즈니스 로직
└── util/         # JwtTokenProvider

실행 방법

기본 프로필은 H2 인메모리 DB를 사용합니다.

./gradlew bootRun

MySQL 프로필로 실행하려면 Docker Compose를 사용하거나 MySQL 환경 변수를 설정합니다.

docker compose up --build
./gradlew bootRun --args='--spring.profiles.active=mysql'

H2 전용 Compose 파일도 포함되어 있습니다.

docker compose -f docker-compose.h2.yml up --build

테스트와 커버리지 리포트는 Gradle로 실행합니다.

./gradlew test
./gradlew test jacocoTestReport

실행 후 API 문서는 http://localhost:8080/swagger-ui.html에서 확인할 수 있습니다.

성능 테스트

load-test/에는 다음 k6 스크립트가 포함되어 있습니다.

k6 run load-test/01-register.js
k6 run load-test/02-login.js
k6 run load-test/03-album-get.js
k6 run load-test/04-letters.js

검증 경계

  • load-test/는 재실행 가능한 시나리오 입력입니다.
  • raw 결과와 실행 환경이 함께 보존되지 않은 과거 수치는 공개 측정값으로 사용하지 않습니다.
  • LetterRepository의 photo count 서브쿼리와 테스트는 현재 조회 경로를 검증하지만 과거 대비 성능 개선율을 증명하지 않습니다.
  • MySQL Testcontainers 테스트는 실제 MySQL dialect의 소유권·연관 조회 경계를 검증합니다.
  • S3 HTTP boundary 테스트는 AWS SDK가 생성하는 요청과 응답 parsing을 검증하며 실제 AWS 운영 이력은 아닙니다.

참고 사항

  • 로컬 기본 설정은 S3 접근 키가 없어도 애플리케이션이 기동되도록 더미 값을 둡니다.
  • 실제 S3 업로드를 사용하려면 CLOUD_AWS_S3_BUCKET, CLOUD_AWS_REGION, CLOUD_AWS_ACCESS_KEY, CLOUD_AWS_SECRET_KEY를 환경에 맞게 지정해야 합니다.

About

앨범·편지·사진·스티커를 관리하는 추억 서비스 Spring Boot API (멋쟁이사자처럼 12기 7인 팀 프로젝트)

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors