JMsuper / Plming-SpringBoot-Backend

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Backend

๐Ÿ˜„ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ


๐Ÿ” ํ•ต์‹ฌ ๊ธฐ๋Šฅ

1. ๊ฒŒ์‹œ๊ธ€ ๊ด€๋ จ ํ•ต์‹ฌ ๊ธฐ๋Šฅ

  • ๊ฒŒ์‹œ๊ธ€ CRUD

    • Spring Data JPA๋ฅผ ํ™œ์šฉํ•ด ๊ฒŒ์‹œ๊ธ€ CRUD API ๊ตฌํ˜„
    • ์‚ฌ์šฉ ์ด์œ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ SQL์„ ์ง์ ‘ ๋‹ค๋ฃฐ ๊ฒฝ์šฐ SQL๊ณผ ์—”ํ‹ฐํ‹ฐ ์‚ฌ์ด์— ๊ฐ•ํ•œ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜์–ด ํ•„๋“œ๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ์—๋„ CRUD ์ฝ”๋“œ์™€ SQL ๋Œ€๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Spring Data JPA๋ฅผ ์‚ฌ์šฉํ•ด CRUD ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.
  • ๊ฒŒ์‹œ๊ธ€ ์‹ ์ฒญ CRUD

    • Spring Data JPA๋ฅผ ํ™œ์šฉํ•ด ๊ฒŒ์‹œ๊ธ€ ์‹ ์ฒญ CRUD API ๊ตฌํ˜„
  • ๊ฒŒ์‹œ๊ธ€ ๋Œ“๊ธ€ CRUD

    • Spring Data JPA๋ฅผ ํ™œ์šฉํ•ด ๊ฒŒ์‹œ๊ธ€ ๋Œ“๊ธ€ CRUD API ๊ตฌํ˜„
  • ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰

    • QueryDSL๋ฅผ ํ™œ์šฉํ•ด ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰ API ๊ตฌํ˜„
    • ์‚ฌ์šฉ ์ด์œ : ์ฝ”๋“œ๋ฅผ ์ฟผ๋ฆฌ๋กœ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋ฅผ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ์ž๋™ ์™„์„ฑ ๋“ฑ IDE์˜ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋˜ํ•œ ๋™์ ์ธ ์ฟผ๋ฆฌ ์ž‘์„ฑ์ด ํŽธ๋ฆฌํ•˜๊ณ , ์ฟผ๋ฆฌ ์ž‘์„ฑ ์‹œ ์ œ์•ฝ ์กฐ๊ฑด ๋“ฑ์„ ๋ฉ”์„œ๋“œ ์ถ”์ถœ์„ ํ†ตํ•ด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— QueryDSL์„ ์‚ฌ์šฉํ•ด ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰ API๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.

2. ์‚ฌ์šฉ์ž ๊ด€๋ จ ํ•ต์‹ฌ ๊ธฐ๋Šฅ

  • ์ด๋ฉ”์ผ ๋กœ๊ทธ์ธ + ์†Œ์…œ ๋กœ๊ทธ์ธ

    • cors๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Spring Security์‚ฌ์šฉ
    • ์ด๋ฉ”์ผ ๋กœ๊ทธ์ธ๊ณผ ์†Œ์…œ ๋กœ๊ทธ์ธ์˜ API๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด, Spring Security Oauth๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ง์ ‘ Oauth ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜์—ฌ ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.
    • httpsํ†ต์‹  ์‹œ ๋ธŒ๋ผ์šฐ์ €์— ์ฟ ํ‚ค๊ฐ€ ์ €์žฅ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์ฟ ํ‚ค์— 'SameSite=None'๊ณผ 'Secure' ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.
    • JWT ํ† ํฐ์„ ํ™œ์šฉํ•˜์—ฌ '์ธ๊ฐ€'๋ฅผ ๊ตฌํ˜„
    • ์„ ํƒ ์ด์œ  : AWS EC2 ํ”„๋ฆฌํ‹ฐ์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ, ์„ธ์…˜์„ ํ™œ์šฉํ•˜์—ฌ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€๋ฅผ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ ์„œ๋ฒ„์— ๋ถ€๋‹ด์ด ๋  ๊ฒƒ์ด๋‹ค. ์„œ๋ฒ„์— ๋ถ€๋‹ด์ด ๋œ ๊ฐ€๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด, JWTํ† ํฐ ๋ฐฉ์‹์„ ํ™œ์šฉํ•˜์˜€๋‹ค.
  • ์ชฝ์ง€ ๊ธฐ๋Šฅ

    • ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด QueryDSL์„ ์‚ฌ์šฉ
  • ์•Œ๋ฆผ ๊ธฐ๋Šฅ

    • DB์— ์•Œ๋ฆผ์„ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์€ Spring Data JPA๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„
    • ์›น ํ†ต์‹  ๋ฐฉ๋ฒ•์€ SSE ํ†ต์‹  ๋ฐฉ๋ฒ•์„ ํ™œ์šฉ
    • ์„ ํƒ ์ด์œ : SSE๋Š” ์›น์†Œ์ผ“๊ณผ ๋‹ฌ๋ฆฌ ๋ณ„๋„์˜ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  HTTP ํ”„๋กœํ† ์ฝœ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ๊ฐ€๋ณ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์•Œ๋ฆผ ๊ธฐ๋Šฅ์€ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์›น ์†Œ์ผ“ ํ†ต์‹ ๋ณด๋‹ค ๊ฐ€๋ฒผ์šด SSE ํ†ต์‹  ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— SSE ํ†ต์‹  ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ–ˆ๋‹ค.

๐ŸŽž ๋ฐ๋ชจ ์˜์ƒ

1. ๊ฒŒ์‹œ๊ธ€ ๊ธฐ๋Šฅ ๊ด€๋ จ ๋ฐ๋ชจ ์˜์ƒ

๋ฉ”์ธ ํ™”๋ฉด ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก
๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ •
๊ฒŒ์‹œ๊ธ€ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ๊ฒŒ์‹œ๊ธ€ ์กฐ๊ฑด ๊ฒ€์ƒ‰
๊ฒŒ์‹œ๊ธ€ ์‹ ์ฒญ ๊ฒŒ์‹œ๊ธ€ ์‹ ์ฒญ ์ทจ์†Œ
๊ฒŒ์‹œ๊ธ€ ์‹ ์ฒญ ์Šน์ธ ๊ฒŒ์‹œ๊ธ€ ์‹ ์ฒญ ๊ฑฐ์ ˆ
๋Œ“๊ธ€ ๋‹ฌ๊ธฐ ๋Œ“๊ธ€ ์‚ญ์ œ
๋Œ€๋Œ“๊ธ€ ๋‹ฌ๊ธฐ ๋Œ€๋Œ“๊ธ€ ์‚ญ์ œ

2. ์‚ฌ์šฉ์ž ๊ธฐ๋Šฅ ๊ด€๋ จ ๋ฐ๋ชจ ์˜์ƒ

ํšŒ์› ๊ฐ€์ž… ์ด๋ฉ”์ผ ๋กœ๊ทธ์ธ
๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ์นด์นด์˜ค ๋กœ๊ทธ์ธ
๊นƒํ—ˆ๋ธŒ ๋กœ๊ทธ์ธ ๋งˆ์ดํŽ˜์ด์ง€
์ชฝ์ง€ ํ™•์ธ ์ชฝ์ง€ ๋ณด๋‚ด๊ธฐ
์•Œ๋ฆผ ํ™•์ธ ํšŒ์› ํƒˆํ‡ด

๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ

  • Spring Boot (API Server)
  • Spring Security (Security)
  • MySQL (RDB)
  • JPA & QueryDSL (ORM)
  • JUnit (Test)
  • AWS (Infra)
  • Travis CI (CI)

๐Ÿญ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

๋ฐฐํฌ๊ตฌ์กฐ


๐Ÿ“ ERD ์ •์˜

ERD

๐Ÿ— ํŒจํ‚ค์ง€ ๊ตฌ์กฐ

|-- auth           			// ์ธ์ฆ
|   |-- Oauth
|   |   |-- dto
|   |   |-- entity
|   |   `-- service
|   |-- config          // ์ธ์ฆ ๊ด€๋ จ ์„ค์ •
|   |-- controller
|   `-- service
|-- board                   // ๊ฒŒ์‹œ๊ธ€ ๊ด€๋ จ ๊ธฐ๋Šฅ
|   |-- board                   // ๊ฒŒ์‹œ๊ธ€ CRUD ๊ธฐ๋Šฅ
|   |   |-- controller
|   |   |-- dto
|   |   |-- entity
|   |   |-- repository
|   |   `-- service
|   |-- boardApply          		// ๊ฒŒ์‹œ๊ธ€ ์‹ ์ฒญ ๊ธฐ๋Šฅ                              
|   |   |-- controller
|   |   |-- dto
|   |   |-- entity
|   |   |-- repository
|   |   `-- service
|   |-- boardComment            // ๊ฒŒ์‹œ๊ธ€ ๋Œ“๊ธ€ ๊ธฐ๋Šฅ 
|   |   |-- controller
|   |   |-- dto
|   |   |-- entity
|   |   |-- repository
|   |   `-- service
|   |-- boardSearch             // ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ
|   |   |-- controller
|   |   |-- dto
|   |   |-- repository
|   |   `-- service
|   `-- boardTag                // ๊ฒŒ์‹œ๊ธ€ ํƒœ๊ทธ ๊ธฐ๋Šฅ
|       |-- entity
|       |-- repository
|       `-- service
|-- config                  // ๊ณตํ†ต์ ์ธ ์„ค์ • (QueryDSL, Security, DB, Storage)
|-- event                   // Event ๋ฐœ์ƒ ์ฝ”๋“œ
|-- exception               // ๊ณตํ†ต ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
|-- message                 // ์ชฝ์ง€ ๊ธฐ๋Šฅ
|   |-- controller
|   |-- dto
|   |-- entity
|   |-- repository
|   `-- service
|-- notification            // ์•Œ๋ฆผ ๊ธฐ๋Šฅ
|   |-- common
|   |-- controller
|   |-- dto
|   |-- entity
|   |-- eventListener           // EventListener ์ฝ”๋“œ
|   |-- exception               // ์•Œ๋ฆผ ๊ด€๋ จ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
|   |-- repository
|   `-- service
|-- storage                 // ํŒŒ์ผ ์ €์žฅ ๊ธฐ๋Šฅ
|   |-- controller
|   `-- service
|-- tag                     // ๊ธฐ๋ณธ ํƒœ๊ทธ
|   `-- entity
`-- user                   // ์‚ฌ์šฉ์ž ๊ด€๋ จ ๊ธฐ๋Šฅ
    |-- configuration
    |-- controller
    |-- dto
    |-- entity
    `-- service

About


Languages

Language:Java 99.7%Language:Shell 0.3%