7명이 약 2개월 동안 만든 추억 앨범 서비스입니다. 저는 인증과 앨범·편지·사진 API를 맡아 프론트엔드에 연결하고, AWS에서 팀 시연이 가능한 서버를 구성했습니다.
| 항목 | 내용 |
|---|---|
| 계기 | 2024 멋쟁이사자처럼 데모데이 팀 프로젝트 |
| 기간 | 약 2개월 |
| 팀 | 디자인 1명, 프론트엔드 2명, 백엔드 4명 |
| 내 역할 | 인증, 앨범, 편지, 사진의 백엔드 기반 |
| 협업 결과 | 프론트엔드 화면 연동, 배포된 API를 사용한 팀 시연 |
| 인프라 | AWS EC2, DB, S3, HTTPS 직접 구성 |
| 이후 작업 | 2026년 앨범 소유권과 MySQL·S3 경계 재검증 |
팀 구성, 기간, 화면 연동과 배포·시연은 저장소 소유자가 확인한 당시 맥락입니다. 코드로 확인할 수 있는 기여와는 근거의 성격이 다르므로 PROVENANCE.md에서 따로 구분했습니다.
아래 GIF는 2024년 팀이 시연에 사용한 프론트엔드 화면입니다. 현재 저장소에 프론트엔드 소스나 운영 서버가 남아 있다는 뜻은 아닙니다.
![]() 서비스 시작 |
![]() 회원가입과 로그인 |
![]() 앨범 생성 |
![]() 편지 작성 |
회원가입·로그인
→ JWT로 사용자 식별
→ 앨범 생성·조회·수정
→ 앨범 안에 편지 작성
→ 사진을 S3에 업로드하고 다시 조회
- 인증과 앨범 도메인의 entity, repository, service, controller 기반을 만들었습니다.
- 편지와 사진의 저장·조회 API를 추가하고 프론트엔드 요청 형식에 맞췄습니다.
- 애플리케이션과 DB, S3가 함께 동작하도록 AWS 환경과 HTTPS를 직접 구성했습니다.
2024년 기여는 공개 원본의 작성자 커밋으로 확인할 수 있습니다. 스티커 기능과 제품 전체를 제 개인 기여로 설명하지 않습니다.
- 프론트엔드는 HTTPS로 EC2의 Spring API를 호출했습니다.
- 인증·앨범·편지 데이터는 배포 DB에 저장했습니다.
- 사진 파일은 S3에 저장하고 API가 URL을 돌려줬습니다.
- 팀 시연은 이 배포 API를 연결한 화면으로 진행했습니다.
편집 가능한 diagrams.net 원본도 함께 보관합니다. 이 그림은 당시 배포 경계를 설명하며 장기 운영, 가용성, 실제 사용자 규모를 뜻하지 않습니다.
시간이 지난 뒤 저장소를 다시 열었을 때, 앨범 수정 요청이 인증 사용자의 소유권을 끝까지 확인하지 않는 경계가 보였습니다. 당시 팀 작업을 다시 쓴 것처럼 섞지 않고 별도 후속 작업으로 고쳤습니다.
| 확인한 경계 | 현재 검증 |
|---|---|
| 타인이 앨범 ID를 알아도 수정할 수 없어야 함 | HTTP 403과 제목 불변을 통합 테스트로 확인 |
| H2에서만 맞는 구현이면 안 됨 | MySQL Testcontainers에서 소유권과 연관 조회 확인 |
| S3 SDK 설정만 있고 요청 형태가 틀리면 안 됨 | MockWebServer로 PUT body와 ListObjects 응답 변환 확인 |
대표 근거:
전체 테스트 범위와 재현 명령은 docs/VERIFICATION.md에 정리했습니다.
Java 17이 필요합니다. 기본 실행은 H2를 사용합니다.
./gradlew bootRunMySQL과 함께 실행하려면 Docker Compose를 사용합니다.
docker compose up --build테스트:
./gradlew test실행 후 Swagger UI는 http://localhost:8080/swagger-ui.html에서 확인할 수 있습니다.
- Java 17, Spring Boot, Spring Security
- Spring Data JPA, MySQL, H2
- AWS SDK for S3
- JUnit 5, Testcontainers, MockWebServer
- Docker Compose, Gradle
- 2024년 역할은 원본 팀 저장소의 작성자 커밋으로 연결합니다.
- 팀 구성, 기간, AWS 배포와 시연은 저장소 밖의 경험이므로 owner-confirmed 사실로 분리합니다.
- 2026년 소유권·MySQL·S3 테스트를 2024년 팀 결과로 소급하지 않습니다.
- k6 스크립트는 재현 입력일 뿐입니다. 실행 환경과 raw 결과가 없는 과거 성능 수치는 주장하지 않습니다.
- 현재 공개 운영 서버, 운영 기간, 사용자 수, 수상 결과는 주장하지 않습니다.




