# chaedogyung/jpaboard architecture

> Architecture diagram of the GitHub repository chaedogyung/jpaboard, 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/chaedogyung/jpaboard
- Repository: https://github.com/chaedogyung/jpaboard

## Overview

This is a Spring/JPA OTT application with video catalog, detail and likes workflows, plus member accounts and a community board with attachments and replies. Browsing requests enter the controllers, pass through services and repositories, and persist domain entities; video uploads also write media files. The graph retains the documented authentication and OAuth capability, though configuration wiring and some controller/service internals were not excerpted, so uncertain links are omitted.

Main entry points: [`src/main/java/com/jpaboard/service/VideoService.java`](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/service/VideoService.java) (Video service), [`src/main/java/com/jpaboard/controller/BoardController.java`](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/controller/BoardController.java) (Board routes), [`src/main/java/com/jpaboard/service/BoardService.java`](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/service/BoardService.java) (Board service), [`src/main/java/com/jpaboard/repository/MemberRepository.java`](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/MemberRepository.java) (Member repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_catalog["Video catalog"]
  node_video_routes["Video routes"]
  node_video_logic["Video service<br/>[VideoService.java]"]
  node_home_routes["Home routes"]
  node_home_logic["Home service<br/>[MainService.java]"]
  node_likes_routes["Like routes"]
  node_media_store[("Video media files")]
end

subgraph group_community["Community board"]
  node_board_routes["Board routes"]
  node_board_logic["Board service<br/>[BoardService.java]"]
  node_reply_logic["Reply service<br/>[ReplyService.java]"]
  node_file_logic["Board file service"]
  node_board_files[("Board attachment files")]
end

subgraph group_identity["Accounts and auth"]
  node_member_routes["Member routes"]
  node_member_logic["Member service<br/>[MemberService.java]"]
  node_oauth_login["OAuth login"]
  node_principal["Principal details"]
end

subgraph group_persistence["Persistence"]
  node_video_repo["Video repository"]
  node_like_repo["Like repository"]
  node_member_repo["Member repository"]
  node_board_repo["Board repository"]
  node_file_repo["Board file repository"]
  node_reply_repo["Reply repository"]
  node_genre_repo["Genre repository"]
  node_database[("Application database")]
end

node_viewer(("Viewer"))

node_viewer -->|"requests"| node_video_routes
node_video_routes -->|"invokes"| node_video_logic
node_video_logic -->|"queries and saves"| node_video_repo
node_video_logic -->|"reads and writes likes"| node_like_repo
node_video_logic -->|"loads member"| node_member_repo
node_video_logic -->|"lists genres"| node_genre_repo
node_video_logic -->|"writes uploaded media"| node_media_store
node_viewer -->|"requests home"| node_home_routes
node_home_routes -->|"invokes"| node_home_logic
node_home_logic -->|"queries catalog"| node_video_repo
node_viewer -->|"submits likes"| node_likes_routes
node_likes_routes -->|"invokes"| node_video_logic
node_viewer -->|"requests board"| node_board_routes
node_board_routes -->|"invokes"| node_board_logic
node_board_routes -->|"invokes"| node_reply_logic
node_board_routes -->|"invokes"| node_file_logic
node_board_logic -->|"persists and searches"| node_board_repo
node_board_logic -->|"stores file metadata"| node_file_repo
node_board_logic -->|"writes attachments"| node_board_files
node_file_logic -->|"loads file metadata"| node_file_repo
node_reply_logic -->|"loads parent board"| node_board_repo
node_reply_logic -->|"persists replies"| node_reply_repo
node_viewer -->|"registers or logs in"| node_member_routes
node_member_routes -->|"invokes"| node_member_logic
node_member_logic -->|"loads and stores members"| node_member_repo
node_oauth_login -->|"loads OAuth member"| node_member_repo
node_oauth_login -->|"creates principal"| node_principal
node_video_repo -.->|"queries video data"| node_database
node_like_repo -.->|"queries like data"| node_database
node_member_repo -.->|"queries member data"| node_database
node_board_repo -.->|"queries board data"| node_database
node_file_repo -.->|"queries file metadata"| node_database
node_reply_repo -.->|"queries replies"| node_database
node_genre_repo -.->|"queries genres"| node_database

click node_video_routes "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/controller/VideoController.java"
click node_video_logic "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/service/VideoService.java"
click node_home_routes "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/controller/MainController.java"
click node_home_logic "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/service/MainService.java"
click node_likes_routes "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/controller/VideoLikesController.java"
click node_board_routes "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/controller/BoardController.java"
click node_board_logic "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/service/BoardService.java"
click node_reply_logic "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/service/ReplyService.java"
click node_file_logic "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/service/BoardFileService.java"
click node_member_routes "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/controller/MemberController.java"
click node_member_logic "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/service/MemberService.java"
click node_oauth_login "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/config/PrincipalOauth2Service.java"
click node_principal "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/config/oauth/PrincipalDetails.java"
click node_video_repo "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/VideoRepository.java"
click node_like_repo "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/LikeRepository.java"
click node_member_repo "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/MemberRepository.java"
click node_board_repo "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/BoardRepository.java"
click node_file_repo "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/BoardFileRepository.java"
click node_reply_repo "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/ReplyRepository.java"
click node_genre_repo "https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/GenresRepository.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_video_routes,node_video_logic,node_home_routes,node_home_logic,node_likes_routes,node_media_store,node_viewer toneBlue
class node_board_routes,node_board_logic,node_reply_logic,node_file_logic,node_board_files toneAmber
class node_member_routes,node_member_logic,node_oauth_login,node_principal toneMint
class node_video_repo,node_like_repo,node_member_repo,node_board_repo,node_file_repo,node_reply_repo,node_genre_repo,node_database toneRose
```

## Components

### Video catalog

- [Video routes](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/controller/VideoController.java): `src/main/java/com/jpaboard/controller/VideoController.java`
- [Video service](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/service/VideoService.java): `src/main/java/com/jpaboard/service/VideoService.java`
- [Home routes](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/controller/MainController.java): `src/main/java/com/jpaboard/controller/MainController.java`
- [Home service](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/service/MainService.java): `src/main/java/com/jpaboard/service/MainService.java`
- [Like routes](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/controller/VideoLikesController.java): `src/main/java/com/jpaboard/controller/VideoLikesController.java`
- **Video media files**

### Community board

- [Board routes](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/controller/BoardController.java): `src/main/java/com/jpaboard/controller/BoardController.java`
- [Board service](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/service/BoardService.java): `src/main/java/com/jpaboard/service/BoardService.java`
- [Reply service](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/service/ReplyService.java): `src/main/java/com/jpaboard/service/ReplyService.java`
- [Board file service](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/service/BoardFileService.java): `src/main/java/com/jpaboard/service/BoardFileService.java`
- **Board attachment files**

### Accounts and auth

- [Member routes](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/controller/MemberController.java): `src/main/java/com/jpaboard/controller/MemberController.java`
- [Member service](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/service/MemberService.java): `src/main/java/com/jpaboard/service/MemberService.java`
- [OAuth login](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/config/PrincipalOauth2Service.java): `src/main/java/com/jpaboard/config/PrincipalOauth2Service.java`
- [Principal details](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/config/oauth/PrincipalDetails.java): `src/main/java/com/jpaboard/config/oauth/PrincipalDetails.java`

### Persistence

- [Video repository](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/VideoRepository.java): `src/main/java/com/jpaboard/repository/VideoRepository.java`
- [Like repository](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/LikeRepository.java): `src/main/java/com/jpaboard/repository/LikeRepository.java`
- [Member repository](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/MemberRepository.java): `src/main/java/com/jpaboard/repository/MemberRepository.java`
- [Board repository](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/BoardRepository.java): `src/main/java/com/jpaboard/repository/BoardRepository.java`
- [Board file repository](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/BoardFileRepository.java): `src/main/java/com/jpaboard/repository/BoardFileRepository.java`
- [Reply repository](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/ReplyRepository.java): `src/main/java/com/jpaboard/repository/ReplyRepository.java`
- [Genre repository](https://github.com/chaedogyung/jpaboard/blob/main/src/main/java/com/jpaboard/repository/GenresRepository.java): `src/main/java/com/jpaboard/repository/GenresRepository.java`
- **Application database**

### Other components

- **Viewer**

## Connections

- Viewer → Video routes: requests (evidence: `src/main/java/com/jpaboard/controller/VideoController.java`)
- Video routes → Video service: invokes (evidence: `src/main/java/com/jpaboard/controller/VideoController.java`)
- Video service → Video repository: queries and saves (evidence: `src/main/java/com/jpaboard/service/VideoService.java`)
- Video service → Like repository: reads and writes likes (evidence: `src/main/java/com/jpaboard/service/VideoService.java`)
- Video service → Member repository: loads member (evidence: `src/main/java/com/jpaboard/service/VideoService.java`)
- Video service → Genre repository: lists genres (evidence: `src/main/java/com/jpaboard/service/VideoService.java`)
- Video service → Video media files: writes uploaded media (evidence: `src/main/java/com/jpaboard/service/VideoService.java`)
- Viewer → Home routes: requests home (evidence: `src/main/java/com/jpaboard/controller/MainController.java`)
- Home routes → Home service: invokes (evidence: `src/main/java/com/jpaboard/controller/MainController.java`)
- Home service → Video repository: queries catalog (evidence: `src/main/java/com/jpaboard/service/MainService.java`)
- Viewer → Like routes: submits likes (evidence: `src/main/java/com/jpaboard/controller/VideoLikesController.java`)
- Like routes → Video service: invokes (evidence: `src/main/java/com/jpaboard/controller/VideoLikesController.java`)
- Viewer → Board routes: requests board (evidence: `src/main/java/com/jpaboard/controller/BoardController.java`)
- Board routes → Board service: invokes (evidence: `src/main/java/com/jpaboard/controller/BoardController.java`)
- Board routes → Reply service: invokes (evidence: `src/main/java/com/jpaboard/controller/BoardController.java`)
- Board routes → Board file service: invokes (evidence: `src/main/java/com/jpaboard/controller/BoardController.java`)
- Board service → Board repository: persists and searches (evidence: `src/main/java/com/jpaboard/service/BoardService.java`)
- Board service → Board file repository: stores file metadata (evidence: `src/main/java/com/jpaboard/service/BoardService.java`)
- Board service → Board attachment files: writes attachments (evidence: `src/main/java/com/jpaboard/service/BoardService.java`)
- Board file service → Board file repository: loads file metadata (evidence: `src/main/java/com/jpaboard/service/BoardFileService.java`)
- Reply service → Board repository: loads parent board (evidence: `src/main/java/com/jpaboard/service/ReplyService.java`)
- Reply service → Reply repository: persists replies (evidence: `src/main/java/com/jpaboard/service/ReplyService.java`)
- Viewer → Member routes: registers or logs in (evidence: `src/main/java/com/jpaboard/controller/MemberController.java`)
- Member routes → Member service: invokes (evidence: `src/main/java/com/jpaboard/controller/MemberController.java`)
- Member service → Member repository: loads and stores members (evidence: `src/main/java/com/jpaboard/service/MemberService.java`)
- OAuth login → Member repository: loads OAuth member (evidence: `src/main/java/com/jpaboard/config/PrincipalOauth2Service.java`)
- OAuth login → Principal details: creates principal (evidence: `src/main/java/com/jpaboard/config/PrincipalOauth2Service.java`)
- Video repository → Application database: queries video data
- Like repository → Application database: queries like data
- Member repository → Application database: queries member data
- Board repository → Application database: queries board data
- Board file repository → Application database: queries file metadata
- Reply repository → Application database: queries replies
- Genre repository → Application database: queries genres
