Studying๐Ÿ’จ

[CodeStates] pre project - ํšŒ๊ณ 

hae02y 2023. 8. 23. 19:57
๋ฐ˜์‘ํ˜•

BE ๊ด€์ ์—์„œ์˜ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

์ฝ”๋“œ์Šคํ…Œ์ด์ธ  ๋ฐฑ์—”๋“œ ๋ถ€ํŠธ์บ ํ”„๋ฅผ ๋งˆ์น˜๊ณ  ์ฒ˜์Œ์œผ๋กœ ํŒ€ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋‹ค. ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ํด๋ก ์ฝ”๋”ฉ์ด๋ผ๋Š” ์ฃผ์ œ๋กœ FE 3๋ช…, BE 3๋ช…์ด ํ˜‘์—…ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋˜์—ˆ๋‹ค. ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ์ง„ํ–‰ํ•œ ์ฒซ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ์—ฌ์„œ ์• ์ •์ด ๋„˜์น˜๊ณ , ๋‚˜์—๊ฒŒ ์ •๋ง ์†Œ์ค‘ํ•œ ๊ฒฝํ—˜์ด์˜€๋‹ค.

 

๊ธฐ๊ฐ„

2023์›” 08์›”04์ผ ~ 08์›” 23์ผ (2์ฃผ)

 

๋ฐฑ์—”๋“œ ๊ธฐ์ˆ ์Šคํƒ

  • Java 11.0.20
  • Spring Boot 2.7.14
  • Spring Data JPA
  • MySQL
  • H2 (๊ฐœ๋ฐœ๊ณผ์ •)
  • Spring Security
  • ๋ฐฐํฌ : AWS + RDS
  • CICD : Github Action + AWS CodeDeploy

 

ํ…Œ์ด๋ธ” ๋ช…์„ธ์„œ

pre_016_แ„‹แ…ตแ†ฏแ„ƒแ…กแ†ซแ„’แ…ขแ„‡แ…ฉแ„Œแ…ญ - แ„แ…ฆแ„‹แ…ตแ„‡แ…ณแ†ฏ แ„†แ…งแ†ผแ„‰แ…ฆแ„‰แ…ฅ.pdf
0.07MB

์‚ฌ์šฉ์ž ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜์„œ๋ฅผ ์ž‘์„ฑํ•œ๋’ค DB๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ๋ถ„์„ํ•ด๋ณด๋‹ˆ ํšŒ์›๊ฐ€์ž…์„ ํ•ด์•ผํ•˜๋ฏ€๋กœ ํšŒ์› ํ…Œ์ด๋ธ”์ด ํ•„์š”ํ•˜์˜€๊ณ , ์งˆ๋ฌธ, ๋‹ต๋ณ€ ํ…Œ์ด๋ธ”์ด ํ•„์š”ํ•˜๋‹จ ๊ฒƒ์„ ๋„์ถœํ–ˆ๋‹ค. ์งˆ๋ฌธ์—๋Š” ์กฐํšŒ์ˆ˜ ๊ธฐ๋Šฅ๊ณผ ํƒœ๊ทธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ํšŒ์› 1๋ช…์ด ์—ฌ๋Ÿฌ๊ฐœ์˜ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์ด ์ž‘์„ฑ ๊ฐ€๋Šฅํ•˜์—ฌ 1:N ๊ด€๊ณ„๋กœ ์„ค์ •ํ•˜์˜€๊ณ , ์งˆ๋ฌธ๊ณผ ํƒœ๊ทธ์˜ ๊ฒฝ์šฐ์—๋Š” N:M์˜ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋Š”๊ฒƒ์„ ์งˆ๋ฌธํƒœ๊ทธ ํ…Œ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•˜์—ฌ 1:N N:1๊ด€๊ณ„๋ฅผ ๊ฐ–๋„๋ก ํ•˜์˜€๋‹ค. ์ œ๋Œ€๋กœ ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ›จ์”ฌ ๋” ๋งŽ์€ ํ…Œ์ด๋ธ”์ด ํ•„์š”ํ•˜์˜€์ง€๋งŒ, ์‹œ๊ฐ„์ด 2์ฃผ๋ผ๋Š” ์ ๊ณผ ์ฒซ ํ”„๋กœ์ ํŠธ๋ผ๋Š” ์ ์—์„œ ์ง„์งœ ๊ตฌํ˜„ํ•ด๋‚ผ์ˆ˜์žˆ๋Š” ๊ธฐ๋Šฅ๋งŒ ์„ ํƒํ•˜์—ฌ ์ž‘์„ฑํ•˜๊ธฐ๋กœ ์˜๊ฒฌ์ด ๋ชจ์—ฌ์กŒ๋‹ค.

 

API ๋ช…์„ธ์„œ

 

New Collection

The Postman Documenter generates and maintains beautiful, live documentation for your collections. Never worry about maintaining API documentation again.

documenter.getpostman.com

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

 

 

Review

๊ฒฐ๊ณผ๋ฌผ

๊นƒํ—ˆ๋ธŒ ๋งํฌ

 

 

์—ญํ• 

๋‚˜๋Š” ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ํŒ€์žฅ์—ญํ• ์„ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค. ํŒ€์„ ์ด๋Œ์ˆ˜์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์ž์ฃผ ์žˆ์ง€ ์•Š์•˜๊ณ , ๋ชจ๋‘ ์ฒ˜์Œ ํ•ด๋ณด๋Š” ํ”„๋กœ์ ํŠธ์ด๋‹ค๋ณด๋‹ˆ ์—ญํ• ์„ ์ž˜์ˆ˜ํ–‰ ํ•ด๋‚ผ ์ˆ˜ ์žˆ์„์ง€์— ๋Œ€ํ•œ ๊ฑฑ์ •์„ ๋งŽ์ด ํ•˜์˜€๋‹ค. 2์ฃผ๋ผ๋Š” ์งง์€ ๊ธฐ๊ฐ„๋™์•ˆ ์ •์ƒ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด์„œ Github Issue์™€ ์นธ๋ฐ˜์„ ํ†ตํ•ด ํŒ€์›๋“ค์˜ ์ผ์ •์„ ๊ด€๋ฆฌํ•˜๊ณ , ๋งค์ผ ์˜ค์ „, ์˜คํ›„ 2๋ฒˆ์˜ ํšŒ์˜ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ง„ํ–‰์ƒํ™ฉ๊ณผ ์ด์Šˆ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ๋ฐฉํ–ฅ์„ ์ œ์‹œํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜์˜€๋‹ค. ๊ฒจ์šฐ 6๋ช…์˜ ์‚ฌ๋žŒ์ด ๋ชจ์˜€๋Š”๋ฐ๋„ ๋‹ค๋“ค ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š”๊ฒƒ๋“ค์ด ๋‹ค๋ฅด๋‹ค๋ณด๋‹ˆ, ์ž‘์€ ์˜๊ฒฌ๊นŒ์ง€๋„ ํ†ตํ•ฉํ•˜๊ณ  ์ •๋ฆฌํ•˜์—ฌ ํŒ€์› ๋ชจ๋‘๊ฐ€ ๊ฐ™์€ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐˆ์ˆ˜์žˆ๋„๋ก ๋งŒ๋“œ๋Š”๊ฒƒ์ด ์‰ฝ์ง€ ์•Š๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ํŒ€์›์˜ ์ž…์žฅ์—์„œ ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒŒ๋„ ํŒ€์›๋ถ„๋“ค์ด ๋„ˆ๋ฌด ์—ด์‹ฌํžˆ ํ•ด์ฃผ์…จ๊ณ  ๋ฏฟ๊ณ  ๋”ฐ๋ผ์ค˜์„œ ์ข‹์€ ๊ฒฐ๊ณผ๋ฌผ์„ ๋‚ผ์ˆ˜์žˆ์—ˆ๋‹ค.

 

์ˆ˜ํ–‰ํ•œ ์—ญํ• 

  • ํŒ€์žฅ
  • DB ํ…Œ์ด๋ธ” ์ž‘์„ฑ
  • ์งˆ๋ฌธ ๋„๋ฉ”์ธ CRUD ์ž‘์„ฑ
  • ํƒœ๊ทธ ๋„๋ฉ”์ธ CUD ์ž‘์„ฑ
  • ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘
  • MySQL DB ์—ฐ๋™
  • github Action + AWS CICD ๋ฐฐํฌ ๋ฐ ์„œ๋ฒ„ ๊ด€๋ฆฌ

 

๋ฐฐ์šด ์ 

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

 

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

 

์„ธ๋ฒˆ์งธ๋กœ ๋ฐฐํฌ์˜ ์ค‘์š”์„ฑ์„ ๋Š๊ผˆ๋‹ค. ๋ง‰์ƒ ๊ฐœ๋ฐœ์„ ์ „๋ถ€ ๋‹ค ๋๋‚ด๋”๋ผ๋„ ๋ฐฐํฌ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋˜์ง€์•Š๋Š”๋‹ค๋ฉด ์•„๋ฌด๋Ÿฐ ์†Œ์šฉ์ด ์—†๋‹ค. ์–ด๋–ค๋ฐฉ์‹์œผ๋กœ, ์–ด๋–ค ์ž์›์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ ํ• ๊ฑด์ง€ ๊ฒฐ์ •ํ•˜๊ณ  ํ•˜๋‚˜์”ฉ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋Š”๊ฒƒ์ด ์žฌ๋ฏธ๋„ ์žˆ์—ˆ๊ณ  ์ •๋ง ์œ ์ตํ–ˆ๋˜๊ฒƒ๊ฐ™๋‹ค. ์ด์ „๊นŒ์ง€๋Š” CICD๋„ ๊ต๊ณผ์„œ์ ์ธ ๊ด€์ ์—์„œ ์ข€๋” ํŽธ๋ฆฌํ•˜๋‹ค๊ณ  ์•Œ๊ณ ์žˆ์—ˆ๋‹ค๋ฉด, ์‹ค์ œ๋กœ CICD๋ฅผ ์ ์šฉํ•˜๊ณ  ํ™œ์šฉํ•˜๋ฉด์„œ, ์™œ ์ž๋™ํ™”๊ฐ€ ํ•„์š”ํ•œ์ง€์— ๋Œ€ํ•ด์„œ ์ง๊ด€์ ์œผ๋กœ ๋‹ค๊ฐ€์™”๋‹ค.

 

 

์–ด๋ ค์› ๋˜ ์ 

CORS... ๋ง๋กœ๋งŒ ๋“ค์—ˆ๋˜ CORS๊ฐ€ ์ •๋ง ํ•œ์ฐธ๋™์•ˆ ๋ฐœ๋ชฉ์„ ์žก์•˜๋‹ค. ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด์„œ ํ”„๋ก ํŠธ ํ•œ๋ถ„๊ณผ ํ•จ๊ป˜ ์ƒˆ๋ฒฝ๊นŒ์ง€ ๋กœ์ปฌ๋กœ ์„œ๋ฒ„๋ฅผ ์—ด์–ด๋†“๊ณ  ์–‘์ชฝ์—์„œ ํ•˜๋‚˜์”ฉ ๋ฐ”๊ฟ”๊ฐ€๋ฉด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ •์ƒ๋™์ž‘ํ• ์ˆ˜์žˆ๊ฒŒ ํ•ด๊ฒฐํ•˜์˜€๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ CORS์—๋Œ€ํ•ด์„œ ์ข€๋” ์•Œ์•„๋ณด๊ณ  ๊ณต๋ถ€ํ• ์ˆ˜์žˆ์–ด์„œ ์ข‹์•˜๊ณ , ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๋™์•ˆ์€ ์ •๋ง ๋‹ต๋‹ตํ–ˆ์ง€๋งŒ ํ•ด๊ฒฐํ–ˆ์„๋•Œ์˜ ๊ทธ ์งœ๋ฆฟํ•จ์€ ์žŠ์„์ˆ˜๊ฐ€ ์—†๋‹ค!ใ…‹ใ…‹ใ…‹ใ…‹ ์ด์ œ Mainํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š”๋ฐ ํŒ€์›๋“ค์ด ๋„ˆ๋ฌด ๋ง˜์ด ์ž˜๋งž์•„์„œ Mainํ”„๋กœ์ ํŠธ๋„ ํ•จ๊ป˜ ์ง„ํ–‰ํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ํ•œ๋‹ฌ ๋ฐ˜ ์ •๋„ ๋‹ค์‹œ ํŒ€์žฅ์œผ๋กœ์จ์˜ ์—ญํ• ์„ ํ•ด์•ผํ•˜๋Š”๋ฐ ์–ด๋ ต๊ฒ ์ง€๋งŒ ์ฑ…์ž„๊ฐ์žˆ๊ฒŒ ๋…ธ๋ ฅํ•ด์•ผ๊ฒ ๋‹ค.

 

๋ฐ˜์‘ํ˜•