swyp3-babpool / babpool-backend

๐Ÿ† ์Šค์œ„ํ”„ 3๊ธฐ 1์œ„ ์ˆ˜์ƒ
https://bab-pool.com
MIT License
0 stars 0 forks source link

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ Babpool Backend Server ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ

license code DBMS member

์šด์šฉ์ค‘์ธ ํŽ˜์ด์ง€ ๋งํฌ ๐Ÿ‘‰ https://bab-pool.com

babpool_intro_image

๐Ÿ—‚๏ธ Index

  1. ๊ฐœ์š”
  2. BE ๊ธฐ์ˆ  ์Šคํƒ
  3. BE ์ฑŒ๋ฆฐ์ง€ & ํ•ด๊ฒฐ
  4. ER ๋‹ค์ด์–ด๊ทธ๋žจ
  5. ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜
  6. ์‹œ์ž‘ ๊ฐ€์ด๋“œ
  7. CI/CD ํŒŒ์ดํ”„๋ผ์ธ
  8. ๊ธฐํƒ€ ๋ฌธ์„œ
  9. ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ
  10. BE ๊ธฐ์—ฌ๋„
  11. ์†Œ๊ฐ

๐Ÿ“– Outline

์†Œ๊ฐœ

๊ฐœ๋ฐœ ๊ธฐ๊ฐ„

๊ฐœ๋ฐœ ์ธ์›

๐Ÿ”ง BE Skill Stack

image

๊ตฌ๋ถ„ ๊ธฐ์ˆ  ๋ช… ์„ ์ • ์ด์œ 
DB MySQL RDBMS ์ค‘ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ MySQL์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์˜์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ MyBatis ORM์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๋ณต์žกํ•œ ์กฐํšŒ์ฟผ๋ฆฌ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์ฟผ๋ฆฌ์˜ ์‚ฌ์šฉ์€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์—ผ๋‘ํ•ด ์ฟผ๋ฆฌ ์ž‘์„ฑ์— ๋Œ€ํ•œ ์—ญ๋Ÿ‰์„ ํ–ฅ์ƒํ•˜๊ธฐ ์œ„ํ•ด SQL Mapper ํ”„๋ ˆ์ž„์›Œํฌ์ธ MyBatis๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
API ๋ฌธ์„œํ™” Swagger RestDocs, Swagger์™€ RestDocs์˜ ๊ฒฐํ•ฉ, ์—‘์…€๋ฌธ์„œ, ํฌ์ŠคํŠธ๋งจ ๋“ฑ ์—ฌ๋Ÿฌ API ๋ฌธ์„œํ™” ๋„๊ตฌ๋ฅผ ๋ชจ๋‘ ๊ฒฝํ—˜ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์งง์€ ๊ธฐ๊ฐ„์•ˆ์— ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ„ํŽธํ•˜๊ณ  ์ƒ์‚ฐ์„ฑ์ด ๋†’์€ Swagger๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
ํด๋ผ์šฐ๋“œ AWS ํ”„๋ฆฌํ‹ฐ์–ด ์š”๊ธˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์šฉ ๋ถ€๋‹ด ์—†์ด ๋‹ค์–‘ํ•œ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋ฅผ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Azure, OCI, GCP ์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋ž˜ํผ๋Ÿฐ์Šค์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋” ํฌ๋‹ค๋Š” ์ ์—์„œ ์ฑ„ํƒ.
์Šคํ† ๋ฆฌ์ง€ AWS S3 EC2์— ์ €์žฅ ์‹œ, ์ธ์Šคํ„ด์Šค์˜ ์šฉ๋Ÿ‰์ด ๋ถ€์กฑํ•ด์ง€๊ณ , ํŒŒ์ผ ๊ด€๋ฆฌ์˜ ์–ด๋ ค์›€์ด ์žˆ์Œ. ํŒŒ์ผ ์ €์žฅ์— ์šฉ์ด.
๊ฐ€์ƒํ™˜๊ฒฝ Docker ์ปจํ…Œ์ด๋„ˆ์˜ ํŠน์ง•์— ์˜ํ•ด ํ™˜๊ฒฝ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ณ  ์•ˆ์ •์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์‚ฌ์šฉ.
ํ”„๋ก์‹œ ์„œ๋ฒ„ Nginx
์‹ค์‹œ๊ฐ„์•Œ๋ฆผ Stomp ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋ŠํŽ˜์ด์ง€์— ์กด์žฌํ•ด๋„ ์•ฝ์† ์š”์ฒญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด, ๋ฉ”์‹œ์ง€ ๊ธฐ๋ฐ˜์˜ ์›น์†Œ์ผ“ ๋น„๋™๊ธฐ ํ”„๋กœํ† ์ฝœ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ œ๊ณตํ•˜๋Š” STOMP๋ฅผ ์‚ฌ์šฉ.

๐Ÿ”ฅ BE Challenge & Solution

1) ๋ฐฅ ์•ฝ์† ๋™์‹œ ์š”์ฒญ ๋ฐœ์ƒ ์‹œ, Race Condition ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

2) ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋Š” ๊ฒฝ์šฐ, ํŽ˜์ด์ง• ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ์ €ํ•˜.

๐Ÿ“Š ERD

๋‹ค์Œ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์Šคํ‚ค๋งˆ์™€ ํ…Œ์ด๋ธ”๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ ERD์ž…๋‹ˆ๋‹ค.

๋ฐ˜์ •๊ทœํ™” ์ „ MVP ๊ธฐ๊ฐ„ ERD ERD_before

๋ฐ˜์ •๊ทœํ™” ํ›„ ์ตœ์ข… ERD ERD_after

๐Ÿ”จ Server Architecture

Architecture

์‹œ์ž‘ ๊ฐ€์ด๋“œ


ํ•ด๋‹น ์‹œ์ž‘ ๊ฐ€์ด๋“œ๋Š”, ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ฆ ์ƒ์„ธ ๋‚ด์šฉ ๋”๋ณด๊ธฐ ### ์‚ฌ์ „ ์ค€๋น„ - Java JDK 17์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. - JAVA_HOME ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. - IDE ์ธํ…”๋ฆฌ์ œ์ด ํˆด์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ### ํ”„๋กœ์ ํŠธ ํด๋ก  ๋ฐ ๋นŒ๋“œ 1. ์ €์žฅ์†Œ ํด๋ก  ```bash git clone https://github.com/proHyundo/your-repository.git ``` 2. IntelliJ ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด๊ณ  Gradle ์˜์กด์„ฑ์„ ์ž๋™์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. ## Running the tests To run the tests, use the following command: ```bash ./gradlew test ```

๐Ÿš€ CI/CD ํŒŒ์ดํ”„๋ผ์ธ


Github Actions์™€ Docker Compose ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ CI/CD๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. github-actions-server.yaml ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๊ณผ ํ•จ๊ป˜ main ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ๋˜๋ฉด, Github Actions๊ฐ€ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ • ์Šคํฌ๋ฆฝํŠธ๋Š” '.github/workflows/github-actions-server.yaml'(๋งํฌ)์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ฃผ์š” ๋‹จ๊ณ„

  1. ๋นŒ๋“œ

    • ์ฒดํฌ์•„์›ƒ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ
    • Java ํ™˜๊ฒฝ ์„ค์ •
    • ํ…Œ์ŠคํŠธ ๋ฐ ๋™์ž‘์— ํ•„์š”ํ•œ ๊ฐ์ข… ํŒŒ์ผ(application.yml, data.sql, schema.sql, log4jdbc.log4j2.properties)์„ Github Secretes ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ƒ์„ฑ ๋ฐ ์—…๋กœ๋“œ
    • Gradle ์„ค์ •, ./gradlew clean build -i ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ
  2. Docker ์ž‘์—…

    • ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DockerHub์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฐฐํฌ ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ๋ณต์‚ฌ

    • ์‹œํฌ๋ฆฟ์—์„œ docker-compose.yaml์„ ์ƒ์„ฑํ•˜์—ฌ VM์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
    • app.conf(NGINX ๊ตฌ์„ฑ)๊ฐ€ ์ƒ์„ฑ๋˜์–ด VM์— ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค.
    • promtail-config.yml์ด ์ƒ์„ฑ๋˜์–ด VM์— ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค.
  4. VM์— ๋ฐฐํฌ

    • VM์— SSH๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ์™€ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    • ์ƒˆ Docker ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    • Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” Docker ์ด๋ฏธ์ง€๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  5. CI/CD ๊ฒฐ๊ณผ Slack ์•Œ๋ฆผ

    • ์›Œํฌํ”Œ๋กœ ๊ฒฐ๊ณผ๋ฅผ Slack์— ๋ณด๋ƒ…๋‹ˆ๋‹ค.

๐Ÿ“‚ Project Structure

๊ณผ๊ฑฐ 3-Tier ๊ตฌ์กฐ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค๊ณ„ํ•˜์˜€์„ ๋•Œ, ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์œ ์ง€๋ณด์ˆ˜์— ์–ด๋ ค์›€ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ, ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก, ํด๋ž˜์Šค ๊ฐ„์˜ ์˜์กด๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ƒˆ๋กœ์šด ๊ด€์‹ฌ์‚ฌ๊ฐ€ ์ƒ๊ธฐ๊ฑฐ๋‚˜ ๊ธฐ์กด์˜ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ํŒจํ‚ค์ง€ ๋ถ„๋ฆฌ์™€ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง์ด ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ 3-Tier ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•œ DDD(Domain-Driven Design)์˜ ์ผ๋ถ€๋ฅผ ์ ์šฉํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์€ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํฌ๊ฒŒ ๋„๋ฉ”์ธ, ์ธํ”„๋ผ ๊ทธ๋ฆฌ๊ณ  ์ „์—ญ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ ํŒจํ‚ค์ง€๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋ฉฐ, ์ธํ”„๋ผ ํŒจํ‚ค์ง€๋Š” ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ์˜ ์—ฐ๋™์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ „์—ญ ํŒจํ‚ค์ง€๋Š” ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๋ ˆ์ด์–ด์— ์ถ”๊ฐ€์ ์ธ ํŒŒ์‚ฌ๋“œ ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ, ํŒจํ‚ค์ง€ ์ˆœํ™˜์ฐธ์กฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿ“ฆ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๋”๋ณด๊ธฐ ```yaml โ”œโ”€โ”€ domain โ”‚ย ย  โ”œโ”€โ”€ appointment โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ api โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ request โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ application โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ response โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ appointmentdetail โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ config โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dao โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ domain โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ exception โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ errorcode โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ handler โ”‚ย ย  โ”œโ”€โ”€ facade โ”‚ย ย  โ”œโ”€โ”€ keyword โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ application โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dao โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ response โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ domain โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ exception โ”‚ย ย  โ”œโ”€โ”€ possibledatetime โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ api โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ request โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ application โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ response โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dao โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ domain โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ exception โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ errorcode โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ handler โ”‚ย ย  โ”œโ”€โ”€ profile โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ api โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ request โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ application โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ response โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ config โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dao โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ domain โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ exception โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ errorcode โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ handler โ”‚ย ย  โ”œโ”€โ”€ reject โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ api โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ application โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ response โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dao โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ exception โ”‚ย ย  โ”œโ”€โ”€ review โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ api โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ request โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ application โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ response โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dao โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ domain โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ exception โ”‚ย ย  โ””โ”€โ”€ user โ”‚ย ย  โ”œโ”€โ”€ api โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ requset โ”‚ย ย  โ”œโ”€โ”€ application โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ response โ”‚ย ย  โ”œโ”€โ”€ dao โ”‚ย ย  โ”œโ”€โ”€ domain โ”‚ย ย  โ””โ”€โ”€ exception โ”‚ย ย  โ”œโ”€โ”€ errorcode โ”‚ย ย  โ””โ”€โ”€ handler โ”œโ”€โ”€ global โ”‚ย ย  โ”œโ”€โ”€ common โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ exception โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ errorcode โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ handler โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ request โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ response โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ config โ”‚ย ย  โ”œโ”€โ”€ config โ”‚ย ย  โ”œโ”€โ”€ jwt โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ api โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ application โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ response โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ exception โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ errorcode โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ handler โ”‚ย ย  โ”œโ”€โ”€ logging โ”‚ย ย  โ”œโ”€โ”€ message โ”‚ย ย  โ”œโ”€โ”€ swagger โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ exception โ”‚ย ย  โ”œโ”€โ”€ tsid โ”‚ย ย  โ””โ”€โ”€ uuid โ”‚ย ย  โ”œโ”€โ”€ application โ”‚ย ย  โ”œโ”€โ”€ dao โ”‚ย ย  โ”œโ”€โ”€ domain โ”‚ย ย  โ”œโ”€โ”€ exception โ”‚ย ย  โ””โ”€โ”€ util โ””โ”€โ”€ infra โ”œโ”€โ”€ auth โ”‚ย ย  โ”œโ”€โ”€ dao โ”‚ย ย  โ”œโ”€โ”€ domain โ”‚ย ย  โ”œโ”€โ”€ exception โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ errorcode โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ handler โ”‚ย ย  โ”œโ”€โ”€ kakao โ”‚ย ย  โ”œโ”€โ”€ response โ”‚ย ย  โ””โ”€โ”€ service โ”œโ”€โ”€ health โ”‚ย ย  โ”œโ”€โ”€ api โ”‚ย ย  โ”œโ”€โ”€ application โ”‚ย ย  โ””โ”€โ”€ dao โ”œโ”€โ”€ redis โ”‚ย ย  โ”œโ”€โ”€ dao โ”‚ย ย  โ””โ”€โ”€ domain โ””โ”€โ”€ s3 โ”œโ”€โ”€ application โ”œโ”€โ”€ config โ””โ”€โ”€ exception ```

๐Ÿ‘จโ€๐Ÿ’ป BE ๊ธฐ์—ฌ๋„

์†กํ˜„๋„

๊ฐ•์—ฐ์ฃผ

์†Œ๊ฐ

image

ETC