# seoulmilk4/seoulmilk_be architecture

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

- Interactive diagram: https://gitdiagram.com/seoulmilk4/seoulmilk_be
- Repository: https://github.com/seoulmilk4/seoulmilk_be

## Overview

Seoulmilk is a backend for agency, employee, and administrator workflows, including authentication and tax-invoice handling. Users authenticate, then access role-specific operations; tax invoices can be queried, updated, deleted, exported, and processed through OCR or tax-service integrations. The tree and sampled files establish the domain areas, while excerpts show concrete authentication calls and invoice query capabilities. Most controllers, tax implementations, and integrations were not sampled, so their relationships are left unverified rather than presented as confirmed call paths.

Main entry points: [`src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax`](https://github.com/seoulmilk4/seoulmilk_be/tree/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax) (Tax endpoints), [`src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/service/AgencyAuthService.java`](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/service/AgencyAuthService.java) (Agency authentication), [`src/main/java/com/seoulmilk/seoulmilkServer/domain/member/service/MemberAuthService.java`](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/member/service/MemberAuthService.java) (Employee authentication), [`src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/service/AdminAuthService.java`](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/service/AdminAuthService.java) (Admin authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity and access"]
  node_agency_auth["Agency authentication"]
  node_member_auth["Employee authentication"]
  node_admin_auth["Admin authentication"]
end

subgraph group_operations["Agency administration"]
  node_agency_records[("Agency records<br/>[Agency.java]")]
  node_employee_records[("Employee records<br/>[Member.java]")]
  node_admin_records[("Admin record<br/>[Admin.java]")]
  node_admin_ops["Agency and staff management"]
  node_agency_ops["Agency operations<br/>[AgencyService.java]"]
  node_agency_api["Agency endpoints"]
  node_admin_api["Admin endpoints"]
end

subgraph group_tax["Tax invoices"]
  node_tax_api["Tax endpoints"]
  node_tax_queries["Tax search and export"]
  node_tax_commands["Tax changes"]
  node_tax_records[("Tax invoice records<br/>[NtsTax.java]")]
  node_ocr["OCR processing"]
end

subgraph group_shared["Shared services"]
  node_codef_auth["Codef token service"]
  node_mail_otp["Email and OTP"]
  node_refresh_tokens[("Refresh-token storage")]
  node_verification_store[("OTP verification storage")]
  node_jwt["JWT provider<br/>[JwtProvider.java]"]
end

node_agency_user(("Agency user"))
node_employee_user(("Employee"))
node_admin_user(("Administrator"))
node_clova["Clova OCR"]
node_hometax["Hometax service"]

node_agency_user -->|"authenticates"| node_agency_auth
node_employee_user -->|"authenticates"| node_member_auth
node_admin_user -->|"authenticates"| node_admin_auth
node_agency_auth -->|"reads and updates"| node_agency_records
node_agency_auth -->|"stores verification"| node_verification_store
node_agency_auth -->|"sends OTP"| node_mail_otp
node_agency_auth -->|"creates tokens"| node_jwt
node_agency_auth -->|"stores refresh token"| node_refresh_tokens
node_member_auth -->|"reads and updates"| node_employee_records
node_member_auth -->|"stores verification"| node_verification_store
node_member_auth -->|"sends OTP"| node_mail_otp
node_member_auth -->|"creates tokens"| node_jwt
node_member_auth -->|"stores refresh token"| node_refresh_tokens
node_admin_auth -->|"reads admin"| node_admin_records
node_admin_auth -->|"creates tokens"| node_jwt
node_admin_auth -->|"stores refresh token"| node_refresh_tokens
node_admin_user -.->|"manages accounts"| node_admin_api
node_admin_api -.->|"dispatches operations"| node_admin_ops
node_admin_ops -.->|"manages agencies"| node_agency_records
node_admin_ops -.->|"manages employees"| node_employee_records
node_agency_user -.->|"uses endpoints"| node_agency_api
node_agency_api -.->|"dispatches operations"| node_agency_ops
node_employee_user -.->|"uses endpoints"| node_tax_api
node_agency_user -.->|"uses endpoints"| node_tax_api
node_admin_user -.->|"uses endpoints"| node_tax_api
node_tax_api -.->|"requests queries"| node_tax_queries
node_tax_api -.->|"requests changes"| node_tax_commands
node_tax_queries -.->|"queries records"| node_tax_records
node_tax_commands -.->|"changes records"| node_tax_records
node_ocr -.->|"requests OCR"| node_clova
node_tax_api -.->|"requests processing"| node_ocr
node_tax_api -.->|"requests tax data"| node_hometax
node_tax_api -.->|"uses token service"| node_codef_auth

click node_agency_auth "https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/service/AgencyAuthService.java"
click node_member_auth "https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/member/service/MemberAuthService.java"
click node_admin_auth "https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/service/AdminAuthService.java"
click node_agency_records "https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/domain/Agency.java"
click node_employee_records "https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/member/domain/Member.java"
click node_admin_records "https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/domain/Admin.java"
click node_admin_ops "https://github.com/seoulmilk4/seoulmilk_be/tree/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/service"
click node_agency_ops "https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/service/AgencyService.java"
click node_agency_api "https://github.com/seoulmilk4/seoulmilk_be/tree/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/controller"
click node_admin_api "https://github.com/seoulmilk4/seoulmilk_be/tree/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/controller"
click node_tax_api "https://github.com/seoulmilk4/seoulmilk_be/tree/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax"
click node_tax_queries "https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/service/NtsTaxQueryService.java"
click node_tax_commands "https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/service/NtsTaxCommandService.java"
click node_tax_records "https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/domain/NtsTax.java"
click node_ocr "https://github.com/seoulmilk4/seoulmilk_be/tree/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/ocr"
click node_codef_auth "https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/global/codef/service/CodefAuthService.java"
click node_mail_otp "https://github.com/seoulmilk4/seoulmilk_be/tree/dev/src/main/java/com/seoulmilk/seoulmilkServer/global/mail/service"
click node_refresh_tokens "https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/global/auth/repository/RefreshTokenRepository.java"
click node_verification_store "https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/global/auth/repository/AuthVerifyRepository.java"
click node_jwt "https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/global/jwt/provider/JwtProvider.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_agency_auth,node_member_auth,node_admin_auth,node_agency_user toneBlue
class node_agency_records,node_employee_records,node_admin_records,node_admin_ops,node_agency_ops,node_agency_api,node_admin_api toneAmber
class node_tax_api,node_tax_queries,node_tax_commands,node_tax_records,node_ocr toneMint
class node_codef_auth,node_mail_otp,node_refresh_tokens,node_verification_store,node_jwt toneRose
class node_employee_user,node_admin_user,node_clova,node_hometax toneIndigo
```

## Components

### Identity and access

- [Agency authentication](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/service/AgencyAuthService.java): `src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/service/AgencyAuthService.java`
- [Employee authentication](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/member/service/MemberAuthService.java): `src/main/java/com/seoulmilk/seoulmilkServer/domain/member/service/MemberAuthService.java`
- [Admin authentication](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/service/AdminAuthService.java): `src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/service/AdminAuthService.java`

### Agency administration

- [Agency records](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/domain/Agency.java): `src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/domain/Agency.java`
- [Employee records](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/member/domain/Member.java): `src/main/java/com/seoulmilk/seoulmilkServer/domain/member/domain/Member.java`
- [Admin record](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/domain/Admin.java): `src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/domain/Admin.java`
- [Agency and staff management](https://github.com/seoulmilk4/seoulmilk_be/tree/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/service): `src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/service`
- [Agency operations](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/service/AgencyService.java): `src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/service/AgencyService.java`
- [Agency endpoints](https://github.com/seoulmilk4/seoulmilk_be/tree/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/controller): `src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/controller`
- [Admin endpoints](https://github.com/seoulmilk4/seoulmilk_be/tree/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/controller): `src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/controller`

### Tax invoices

- [Tax endpoints](https://github.com/seoulmilk4/seoulmilk_be/tree/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax): `src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax`
- [Tax search and export](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/service/NtsTaxQueryService.java): `src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/service/NtsTaxQueryService.java`
- [Tax changes](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/service/NtsTaxCommandService.java): `src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/service/NtsTaxCommandService.java`
- [Tax invoice records](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/domain/NtsTax.java): `src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/domain/NtsTax.java`
- [OCR processing](https://github.com/seoulmilk4/seoulmilk_be/tree/dev/src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/ocr): `src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/ocr`

### Shared services

- [Codef token service](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/global/codef/service/CodefAuthService.java): `src/main/java/com/seoulmilk/seoulmilkServer/global/codef/service/CodefAuthService.java`
- [Email and OTP](https://github.com/seoulmilk4/seoulmilk_be/tree/dev/src/main/java/com/seoulmilk/seoulmilkServer/global/mail/service): `src/main/java/com/seoulmilk/seoulmilkServer/global/mail/service`
- [Refresh-token storage](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/global/auth/repository/RefreshTokenRepository.java): `src/main/java/com/seoulmilk/seoulmilkServer/global/auth/repository/RefreshTokenRepository.java`
- [OTP verification storage](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/global/auth/repository/AuthVerifyRepository.java): `src/main/java/com/seoulmilk/seoulmilkServer/global/auth/repository/AuthVerifyRepository.java`
- [JWT provider](https://github.com/seoulmilk4/seoulmilk_be/blob/dev/src/main/java/com/seoulmilk/seoulmilkServer/global/jwt/provider/JwtProvider.java): `src/main/java/com/seoulmilk/seoulmilkServer/global/jwt/provider/JwtProvider.java`

### Other components

- **Agency user**
- **Employee**
- **Administrator**
- **Clova OCR**
- **Hometax service**

## Connections

- Agency user → Agency authentication: authenticates (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/service/AgencyAuthService.java`)
- Employee → Employee authentication: authenticates (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/member/service/MemberAuthService.java`)
- Administrator → Admin authentication: authenticates (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/service/AdminAuthService.java`)
- Agency authentication → Agency records: reads and updates (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/service/AgencyAuthService.java`)
- Agency authentication → OTP verification storage: stores verification (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/service/AgencyAuthService.java`)
- Agency authentication → Email and OTP: sends OTP (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/service/AgencyAuthService.java`)
- Agency authentication → JWT provider: creates tokens (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/service/AgencyAuthService.java`)
- Agency authentication → Refresh-token storage: stores refresh token (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/agency/service/AgencyAuthService.java`)
- Employee authentication → Employee records: reads and updates (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/member/service/MemberAuthService.java`)
- Employee authentication → OTP verification storage: stores verification (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/member/service/MemberAuthService.java`)
- Employee authentication → Email and OTP: sends OTP (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/member/service/MemberAuthService.java`)
- Employee authentication → JWT provider: creates tokens (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/member/service/MemberAuthService.java`)
- Employee authentication → Refresh-token storage: stores refresh token (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/member/service/MemberAuthService.java`)
- Admin authentication → Admin record: reads admin (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/service/AdminAuthService.java`)
- Admin authentication → JWT provider: creates tokens (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/service/AdminAuthService.java`)
- Admin authentication → Refresh-token storage: stores refresh token (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/service/AdminAuthService.java`)
- Administrator → Admin endpoints: manages accounts
- Admin endpoints → Agency and staff management: dispatches operations (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/controller/AdminController.java`)
- Agency and staff management → Agency records: manages agencies (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/service/AdminEmployeeService.java`)
- Agency and staff management → Employee records: manages employees (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/admin/service/AdminEmployeeService.java`)
- Agency user → Agency endpoints: uses endpoints
- Agency endpoints → Agency operations: dispatches operations
- Employee → Tax endpoints: uses endpoints
- Agency user → Tax endpoints: uses endpoints
- Administrator → Tax endpoints: uses endpoints
- Tax endpoints → Tax search and export: requests queries (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/service/NtsTaxQueryServiceImpl.java`)
- Tax endpoints → Tax changes: requests changes (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/service/NtsTaxCommandService.java`)
- Tax search and export → Tax invoice records: queries records (evidence: `src/main/java/com/seoulmilk/seoulmilkServer/domain/ntsTax/service/NtsTaxQueryService.java`)
- Tax changes → Tax invoice records: changes records
- OCR processing → Clova OCR: requests OCR
- Tax endpoints → OCR processing: requests processing
- Tax endpoints → Hometax service: requests tax data
- Tax endpoints → Codef token service: uses token service
