# zyovn/cheeeese-be architecture

> Architecture diagram of the GitHub repository zyovn/cheeeese-be, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/zyovn/cheeeese-be
- Repository: https://github.com/zyovn/cheeeese-be

## Overview

Cheeeese is a Spring backend for seven-day shared photo albums. Users authenticate, create or join albums, upload and browse photos, and can finalize a four-cut selection; album expiry and storage cleanup are also represented in the codebase. The graph emphasizes those product stages plus OAuth, user profiles, and AI summaries. Several services and controllers were not sampled, so their connections are omitted or marked unverified rather than inferred from names alone.

Main entry points: [`src/main/java/com/cheeeese/photo/application/PhotoQueryService.java`](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/photo/application/PhotoQueryService.java) (Photo Queries), [`src/main/java/com/cheeeese/album/infrastructure/persistence/AlbumRepository.java`](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/infrastructure/persistence/AlbumRepository.java) (Album Records), [`src/main/java/com/cheeeese/album/application/AlbumQueryService.java`](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/application/AlbumQueryService.java) (Album Discovery), [`src/main/java/com/cheeeese/cheese4cut/application/Cheese4cutService.java`](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/cheese4cut/application/Cheese4cutService.java) (Four-Cut Selection)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity &amp; Profiles"]
  node_user["User Profiles<br/>[UserService.java]"]
  node_userstore[("User Records")]
  node_oauth["Kakao OAuth"]
  node_auth["Token Auth<br/>[AuthService.java]"]
  node_refreshstore[("Refresh Tokens")]
end

subgraph group_albums["Shared Albums"]
  node_albumapi["Album APIs"]
  node_albumqueryapi["Album Queries"]
  node_albumservice["Album Operations<br/>[AlbumService.java]"]
  node_albumquery["Album Discovery"]
  node_albummodel["Album Rules<br/>[Album.java]"]
  node_albumstore[("Album Records")]
  node_expiration["Album Expiry"]
end

subgraph group_photos["Photo Sharing"]
  node_photoapi["Photo APIs"]
  node_photoservice["Photo Queries"]
  node_photostore[("Photo Records")]
  node_likestore[("Photo Likes")]
  node_upload["Upload &amp; Callback<br/>[PhotoService.java]"]
  node_presign["Upload URLs"]
end

subgraph group_fourcut["Four-Cut &amp; AI"]
  node_fourcutservice["Four-Cut Selection"]
  node_aiservice["AI Summary"]
  node_clova["Clova AI<br/>[ClovaClient.java]"]
end

subgraph group_platform["Platform Services"]
  node_storage["Object Storage<br/>[S3Util.java]"]
  node_redis[("Redis Cache")]
end

node_actor(("Album User"))

node_oauth -->|"loads or creates"| node_userstore
node_auth -->|"loads user"| node_userstore
node_auth -->|"saves tokens"| node_refreshstore
node_albumqueryapi -->|"calls"| node_albumquery
node_albumquery -.->|"queries albums"| node_albumstore
node_albumquery -.->|"loads makers"| node_userstore
node_albumquery -.->|"uses cut photos"| node_fourcutservice
node_photoservice -->|"queries photos"| node_photostore
node_photoservice -->|"queries likes"| node_likestore
node_photoservice -->|"loads album"| node_albumstore
node_photoservice -->|"caches pages"| node_redis
node_photoapi -->|"calls"| node_photoservice
node_fourcutservice -->|"selects photos"| node_photostore
node_fourcutservice -->|"loads album"| node_albumstore
node_aiservice -.->|"calls AI"| node_clova
node_presign -.->|"issues upload URLs"| node_storage
node_upload -.->|"records uploads"| node_photostore
node_actor -.->|"manages albums"| node_albumapi
node_actor -.->|"browses albums"| node_albumqueryapi
node_actor -->|"browses photos"| node_photoapi
node_albumservice -.->|"manages records"| node_albumstore
node_expiration -.->|"expires albums"| node_albumstore

click node_user "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/user/application/UserService.java"
click node_userstore "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/user/infrastructure/persistence/UserRepository.java"
click node_oauth "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/oauth2/application/CustomOAuth2UserService.java"
click node_auth "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/auth/application/AuthService.java"
click node_refreshstore "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/auth/infrastructure/persistence/RefreshTokenRepository.java"
click node_albumapi "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/presentation/AlbumController.java"
click node_albumqueryapi "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/presentation/AlbumQueryController.java"
click node_albumservice "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/application/AlbumService.java"
click node_albumquery "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/application/AlbumQueryService.java"
click node_albummodel "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/domain/Album.java"
click node_albumstore "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/infrastructure/persistence/AlbumRepository.java"
click node_expiration "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/application/AlbumExpirationService.java"
click node_photoapi "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/photo/presentation/PhotoQueryController.java"
click node_photoservice "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/photo/application/PhotoQueryService.java"
click node_photostore "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/photo/infrastructure/persistence/PhotoRepository.java"
click node_likestore "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/photo/infrastructure/persistence/PhotoLikesRepository.java"
click node_upload "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/photo/application/PhotoService.java"
click node_presign "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/photo/application/PresignedUrlService.java"
click node_fourcutservice "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/cheese4cut/application/Cheese4cutService.java"
click node_aiservice "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/cheese4cut/application/Cheese4cutAiService.java"
click node_clova "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/cheese4cut/infrastructure/ClovaClient.java"
click node_storage "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/global/util/S3Util.java"
click node_redis "https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/global/util/RedisCacheUtil.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_user,node_userstore,node_oauth,node_auth,node_refreshstore,node_actor toneBlue
class node_albumapi,node_albumqueryapi,node_albumservice,node_albumquery,node_albummodel,node_albumstore,node_expiration toneAmber
class node_photoapi,node_photoservice,node_photostore,node_likestore,node_upload,node_presign toneMint
class node_fourcutservice,node_aiservice,node_clova toneRose
class node_storage,node_redis toneIndigo
```

## Components

### Identity & Profiles

- [User Profiles](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/user/application/UserService.java): `src/main/java/com/cheeeese/user/application/UserService.java`
- [User Records](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/user/infrastructure/persistence/UserRepository.java): `src/main/java/com/cheeeese/user/infrastructure/persistence/UserRepository.java`
- [Kakao OAuth](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/oauth2/application/CustomOAuth2UserService.java): `src/main/java/com/cheeeese/oauth2/application/CustomOAuth2UserService.java`
- [Token Auth](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/auth/application/AuthService.java): `src/main/java/com/cheeeese/auth/application/AuthService.java`
- [Refresh Tokens](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/auth/infrastructure/persistence/RefreshTokenRepository.java): `src/main/java/com/cheeeese/auth/infrastructure/persistence/RefreshTokenRepository.java`

### Shared Albums

- [Album APIs](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/presentation/AlbumController.java): `src/main/java/com/cheeeese/album/presentation/AlbumController.java`
- [Album Queries](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/presentation/AlbumQueryController.java): `src/main/java/com/cheeeese/album/presentation/AlbumQueryController.java`
- [Album Operations](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/application/AlbumService.java): `src/main/java/com/cheeeese/album/application/AlbumService.java`
- [Album Discovery](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/application/AlbumQueryService.java): `src/main/java/com/cheeeese/album/application/AlbumQueryService.java`
- [Album Rules](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/domain/Album.java): `src/main/java/com/cheeeese/album/domain/Album.java`
- [Album Records](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/infrastructure/persistence/AlbumRepository.java): `src/main/java/com/cheeeese/album/infrastructure/persistence/AlbumRepository.java`
- [Album Expiry](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/album/application/AlbumExpirationService.java): `src/main/java/com/cheeeese/album/application/AlbumExpirationService.java`

### Photo Sharing

- [Photo APIs](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/photo/presentation/PhotoQueryController.java): `src/main/java/com/cheeeese/photo/presentation/PhotoQueryController.java`
- [Photo Queries](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/photo/application/PhotoQueryService.java): `src/main/java/com/cheeeese/photo/application/PhotoQueryService.java`
- [Photo Records](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/photo/infrastructure/persistence/PhotoRepository.java): `src/main/java/com/cheeeese/photo/infrastructure/persistence/PhotoRepository.java`
- [Photo Likes](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/photo/infrastructure/persistence/PhotoLikesRepository.java): `src/main/java/com/cheeeese/photo/infrastructure/persistence/PhotoLikesRepository.java`
- [Upload & Callback](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/photo/application/PhotoService.java): `src/main/java/com/cheeeese/photo/application/PhotoService.java`
- [Upload URLs](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/photo/application/PresignedUrlService.java): `src/main/java/com/cheeeese/photo/application/PresignedUrlService.java`

### Four-Cut & AI

- [Four-Cut Selection](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/cheese4cut/application/Cheese4cutService.java): `src/main/java/com/cheeeese/cheese4cut/application/Cheese4cutService.java`
- [AI Summary](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/cheese4cut/application/Cheese4cutAiService.java): `src/main/java/com/cheeeese/cheese4cut/application/Cheese4cutAiService.java`
- [Clova AI](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/cheese4cut/infrastructure/ClovaClient.java): `src/main/java/com/cheeeese/cheese4cut/infrastructure/ClovaClient.java`

### Platform Services

- [Object Storage](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/global/util/S3Util.java): `src/main/java/com/cheeeese/global/util/S3Util.java`
- [Redis Cache](https://github.com/zyovn/cheeeese-be/blob/develop/src/main/java/com/cheeeese/global/util/RedisCacheUtil.java): `src/main/java/com/cheeeese/global/util/RedisCacheUtil.java`

### Other components

- **Album User**

## Connections

- Kakao OAuth → User Records: loads or creates (evidence: `src/main/java/com/cheeeese/oauth2/application/CustomOAuth2UserService.java`)
- Token Auth → User Records: loads user (evidence: `src/main/java/com/cheeeese/auth/application/AuthService.java`)
- Token Auth → Refresh Tokens: saves tokens (evidence: `src/main/java/com/cheeeese/auth/application/AuthService.java`)
- Album Queries → Album Discovery: calls (evidence: `src/main/java/com/cheeeese/album/presentation/AlbumQueryController.java`)
- Album Discovery → Album Records: queries albums (evidence: `src/main/java/com/cheeeese/album/application/AlbumQueryService.java`)
- Album Discovery → User Records: loads makers (evidence: `src/main/java/com/cheeeese/album/application/AlbumQueryService.java`)
- Album Discovery → Four-Cut Selection: uses cut photos (evidence: `src/main/java/com/cheeeese/album/application/AlbumQueryService.java`)
- Photo Queries → Photo Records: queries photos (evidence: `src/main/java/com/cheeeese/photo/application/PhotoQueryService.java`)
- Photo Queries → Photo Likes: queries likes (evidence: `src/main/java/com/cheeeese/photo/application/PhotoQueryService.java`)
- Photo Queries → Album Records: loads album (evidence: `src/main/java/com/cheeeese/photo/application/PhotoQueryService.java`)
- Photo Queries → Redis Cache: caches pages (evidence: `src/main/java/com/cheeeese/photo/application/PhotoQueryService.java`)
- Photo APIs → Photo Queries: calls (evidence: `src/main/java/com/cheeeese/photo/presentation/PhotoQueryController.java`)
- Four-Cut Selection → Photo Records: selects photos (evidence: `src/main/java/com/cheeeese/cheese4cut/application/Cheese4cutService.java`)
- Four-Cut Selection → Album Records: loads album (evidence: `src/main/java/com/cheeeese/cheese4cut/application/Cheese4cutService.java`)
- AI Summary → Clova AI: calls AI (evidence: `src/main/java/com/cheeeese/cheese4cut/application/Cheese4cutAiService.java`)
- Upload URLs → Object Storage: issues upload URLs
- Upload & Callback → Photo Records: records uploads (evidence: `src/main/java/com/cheeeese/photo/application/PhotoService.java`)
- Album User → Album APIs: manages albums
- Album User → Album Queries: browses albums
- Album User → Photo APIs: browses photos (evidence: `src/main/java/com/cheeeese/photo/presentation/PhotoQueryController.java`)
- Album Operations → Album Records: manages records (evidence: `src/main/java/com/cheeeese/album/application/AlbumService.java`)
- Album Expiry → Album Records: expires albums
