๐Ÿช„์Šค๋งˆ์ผ๊ฒŒ์ดํŠธ ์œˆํ„ฐ๋ฐ๋ธŒ์บ ํ”„ 2๊ธฐ ์ตœ์ข…๋ฐœํ‘œ ๋‚ด์šฉ์ •๋ฆฌ!

์ดํ•˜์–€ยท2023๋…„ 2์›” 22์ผ
0

๐ŸŽฟ Smailegate(Winter-Devcamp)

๋ชฉ๋ก ๋ณด๊ธฐ
39/49

๐Ÿงธ ๋งก์€ ์—ญํ• 

  • ์œ ์ €, ์ธ์ฆ/์ธ๊ฐ€ ๊ฐœ๋ฐœ
    Spring Security + JWT๋ฅผ ์ด์šฉํ•œ ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ์ •๋ณด ์กฐํšŒ ๋ฐ ์ˆ˜์ •, ๋กœ๊ทธ์•„์›ƒ, ํ† ํฐ ์žฌ๋ฐœ๊ธ‰ api ๊ฐœ๋ฐœ

๐ŸŽข ๋ชฉํ‘œ ๋‹ฌ์„ฑ ์ •๋„

  • ์„ค๊ณ„๋ถ€ํ„ฐ ๊ฐœ๋ฐœ๊นŒ์ง€ ๊ทธ ์‹œ๊ธฐ์— ํ–ˆ๋˜ ๊ณ ๋ฏผ๋“ค๊ณผ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •์„ ๊พธ์ค€ํ•˜๊ฒŒ ๋ธ”๋กœ๊ทธ์— ๊ธฐ๋กํ•˜์—ฌ ๋น„์Šทํ•œ ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ์— ํ™œ์šฉํ–ˆ์Œ.

  • ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ ์ด์ „์—๋Š” ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ํ•™์Šตํ•˜๊ณ , ๊ธฐ์ดˆ์ ์ธ ์ผ€์ด์Šค๋ฅผ ๊ฐ„๋‹จํžˆ ๋งŒ๋“ค์–ด๊ฐ€๋ฉฐ ๊ฒฝํ—˜์„ ์Œ“๊ณ , ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„์—๋Š” ์ผ€์ด์Šค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•จ.

  • REST API๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ฌด์ž‘์ • ํ”„๋ก ํŠธ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ Postman๊ณผ ๊ฐ™์€ ํˆด์„ ํ™œ์šฉํ•˜์—ฌ ํŒ€์—์„œ ๊ฒฐ์ •ํ•œ ์ปค์Šคํ…€ ์‘๋‹ต์„ ๋ฐ›๊ณ , ์ž˜๋ชป๋œ ์ฝ”๋“œ๋Š” ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ.

  • ๋‹ฌ์„ฑ๋„ : 70%

    • ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ๋ฐฐํฌ ์™„๋ฃŒ(ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ์ •๋ณด ์กฐํšŒ ๋“ฑ)
    • ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์ง„ํ–‰ X

๐Ÿ“ถ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•œ ์„ค๊ณ„

  • ์ธ์ฆ์ธ๊ฐ€ ์„œ๋ฒ„:
    • ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚˜๋Š” ์ธ์ฆ์ธ๊ฐ€ ์ž‘์—…์˜ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด MySQL๊ณผ Redis ํ•จ๊ป˜ ์‚ฌ์šฉ
      -> ์‚ฌ์šฉ์ž ์ •๋ณด๋Š” ์ค‘์š”ํ•˜๊ณ  ๋ฏผ๊ฐํ•œ ์ •๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ ์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์™„์ „ํžˆ MySQL์„ ๊ฑท์–ด๋‚ผ ์ˆ˜๋Š” ์—†๋‹ค๊ณ  ํŒ๋‹จ

โš™๏ธ ๋ณ€๊ฒฝ๋œ ์•„ํ‚คํ…์ฒ˜

  • ๋กœ๊ทธ์ธ ์„œ๋ฒ„ ๋ณ€๊ฒฝ ์ด์œ 
    • ์ด์ „ ์•„ํ‚คํ…์ฒ˜
  • ์ž‘์€ ๋ฒ”์œ„์—์„œ์˜ MSA๋Š” ์ข‹์ง€ ์•Š์€ ๋ฐฉํ–ฅ + ์„œ๋ฒ„๋ฅผ ๋„ˆ๋ฌด ์ž˜๊ฐœ ์ชผ๊ฐœ๋ฉด ๋ฐฐํฌ ๋ฐ ์—ฐ๋™์— ๋งŽ์€ ์–ด๋ ค์›€์„ ๊ฒช๊ฒŒ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์ค„์ด๊ธฐ ์œ„ํ•ด
    • ์ฃผ์–ด์ง„ ์‹œ๊ฐ„ ๋‚ด์— ์„œ๋ฒ„๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์ด ์ชผ๊ฐœ์ ธ์žˆ๋˜ ๋กœ์ง์€ ๊ณผ๊ฐํžˆ ํ•ฉ์น˜๋Š” ๋ฐฉ์‹ ์‚ฌ์šฉ โ†’ ํ•ด๋‹น ์ˆ˜์ • ์ดํ›„(์ฝ”๋“œ๋ฆฌ๋ทฐ ๋‚ด์šฉ ๋ฐ˜์˜) Auth Server์™€ User Server๋ฅผ ์ชผ๊ฐœ์ง€ ์•Š๊ณ  ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋กœ ์ƒ๊ฐํ•˜๊ณ  ํ•ฉ์น˜๊ฒŒ ๋˜์—ˆ์Œ.

โ—๋ฌธ์ œ ํ•ด๊ฒฐ

  • ์„ค๋ช… ์ด์™ธ์˜ ๋” ๋‹ค์–‘ํ•œ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…๋“ค์˜ ํ•ด๊ฒฐ ๊ณผ์ • ์ƒ์„ธ๋Š” ๋ธ”๋กœ๊ทธ ์ฐธ๊ณ 

๐ŸŽฅ AccessToken payload์— ๋‹‰๋„ค์ž„ ์ •๋ณด ์ถ”๊ฐ€ ์‹คํŒจ

  • ๋ชฉํ‘œ : ํƒ€ ์„œ๋ฒ„์˜ ์š”์ฒญ ์‹œ AccessToken payload์— ์œ ์ €์˜ nickname ์ •๋ณด๋ฅผ ๋‹ด์•„ ์ „๋‹ฌ
  • ์›์ธ : ํƒ€ ์„œ๋ฒ„์—์„œ์˜ ์œ ์ € ํŒŒ์•…์„ ์œ„ํ•ด AccessToken์˜ payload์— ๋‹‰๋„ค์ž„ ์ •๋ณด๋ฅผ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ–ˆ์œผ๋‚˜ ํ•ด๋‹น ์ฝ”๋“œ์˜ ์ˆ˜์ •๋งŒ์œผ๋กœ๋Š” ๋ฐ˜์˜์ด ์•ˆ๋จ.
  • ํ•ด๊ฒฐ ๊ณผ์ • :
    ๐Ÿ“ Subject์— ํฌํ•จ โ†’ X
    ๐Ÿ“ Claim ์ƒ์„ฑ ๋ฐ ๋‹‰๋„ค์ž„ ์‚ฝ์ž… โ†’ X
    ๐Ÿ“ payload ํ•จ์ˆ˜ ์ƒ์„ฑ ๋ฐ ๋‹‰๋„ค์ž„ ์‚ฝ์ž… โ†’ X
    ๐Ÿ“ ํŒ€ ์Šฌ๋ž™์— ์งˆ๋ฌธ ๋ฐ ํ•ด๊ฒฐ(Claim โ†’ Claims) โ†’ X
  • ํ•ด๊ฒฐ : ๋‹‰๋„ค์ž„ ์ •๋ณด๋ฅผ payload์— ๋„ฃ๋Š” ๋ฐฉ๋ฒ• ๋Œ€์‹  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ
    โ†’ ํ† ํฐ payload์˜ user_id๋ฅผ ํ†ตํ•ด ๋‹‰๋„ค์ž„ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜์—ฌ ๋ฐ›์•„์˜ค๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ
  • ์–ป์€ ๊ฒƒ : ์›์ธ์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋“ค์˜ ์œ ์ € ์ •๋ณด ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ์‚ดํ”ผ๋ฉฐ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹‰๋„ค์ž„ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋ ค ์‹œ๋„ํ•œ ๊ฒƒ

๐ŸŽฅ ๋ณ„๋„ ๋ธŒ๋žœ์น˜๋ฅผ ์ด์šฉํ•œ Pull Request ์‹คํŒจ

https://velog.io/@dlgkdis801/ํ˜„์žฌ-์ƒํ™ฉ์ฐธ๊ณ -๋งํฌ
https://velog.io/@dlgkdis801/IntelliJ-Github-์—ฐ๋™-๋‹ค์‹œ

  • ๋ฌธ์ œ : ํŒ€ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ์— Pull Request ์‹œ๋„ ์‹œ โ€˜There isnโ€™t anything to compare.โ€™ ์—๋Ÿฌ ๋ฐœ์ƒ
  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : ์งˆ์˜ ์‘๋‹ต ์งˆ๋ฌธ & ์›์ธ ํŒŒ์•…
    - ์—๋Ÿฌ๋ฌธ์„ ์‚ดํŽด๋ณด๋ฉด, ์—ฐ๊ฒฐํ•˜๋ ค๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ๊ฐ™์€ ์ปค๋ฐ‹ ๊ธฐ๋ก์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์•„ ์—ฐ๊ฒฐ์— ์‹คํŒจํ–ˆ๋‹ค๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Œ.
    - forkํ•œ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ ๋‚ด์˜ main ๋ธŒ๋žœ์น˜์™€ AI-33 ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹ ๊ธฐ๋ก์ด ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๊ทธ๋กœ ์ธํ•ด ํŒ€ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ์˜ main์— pr์„ ์˜ฌ๋ฆด ์ˆ˜ ์—†๋Š” ๊ฒƒ์œผ๋กœ ํŒŒ์•….
  • ์›์ธ : forkํ•œ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ ๋‚ด์—์„œ main๊ณผ ๋ณ„๋„์˜ ๋ธŒ๋žœ์น˜์ธ โ€œAI-33โ€์˜ ์ปค๋ฐ‹ ๊ธฐ๋ก์„ ์—ฐ๋™ํ•˜์ง€ ์•Š๊ณ  ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์—ฐ๊ฒฐ์ด ๋Š๊ธด ๊ฒƒ์ด ์›์ธ.
  • ํ•ด๊ฒฐ : ํ”„๋กœ์ ํŠธ ๋ฐฑ์—… ํ›„, ์ƒˆ๋กœ ์ƒ์„ฑํ–ˆ๋˜ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ญ์ œ & ๋‹ค์‹œ ์ƒ์„ฑ
  • โ€˜New Branch from main..โ€™์„ ํ†ตํ•œ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ์œผ๋กœ ์ปค๋ฐ‹ ๊ธฐ๋ก์„ ์ด์–ด์ฃผ์–ด์•ผ ํ•จ.

๐ŸŽฅ AWS EC2 ๋ฐฐํฌ ์ค‘ DB ์—ฐ๋™ ์‹คํŒจ๋กœ ์ธํ•œ ์—๋Ÿฌ

https://velog.io/@dlgkdis801/SpringBoot-ํ”„๋กœ์ ํŠธ-AWS์—-๋ฐฐํฌํ•˜๊ธฐ

  • ๋ฌธ์ œ : AWS์˜ EC2 ์„œ๋ฒ„์— ์ธ์ฆ์ธ๊ฐ€์„œ๋ฒ„์˜ jarํŒŒ์ผ์„ ์˜ฌ๋ ธ์œผ๋ฉฐ, ๋นŒ๋“œ๋Š” ๋˜์ง€๋งŒ ๋กœ๊ทธ์— ์—๋Ÿฌ๊ฐ€ ๋‚จ๋Š” ์ƒํƒœ
  • ์›์ธ : DB์™€ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ์—๋Ÿฌ๋กœ ํŒ๋‹จํ•˜๊ณ  ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•„๋ด„.
  • ํ•ด๊ฒฐ๊ณผ์ •
  1. RDS๋ฅผ ์ด์šฉํ•ด ํ•ด๊ฒฐํ•ด๋ณด๋ ค ํ–ˆ์œผ๋‚˜, ๋ฐœ๊ธ‰ ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ ํ•ด๋‹น EC2 ์„œ๋ฒ„์—์„œ ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ
  2. EC2 ์„œ๋ฒ„ ์—ญ์‹œ ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ์™€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ๋‚ด์˜ ํ™˜๊ฒฝ์„ ๋กœ์ปฌ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์‹œ๋„ํ•ด๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค๊ณ  ํŒ๋‹จํ•จ.
  • ํ•ด๊ฒฐ
  1. EC2 ์„œ๋ฒ„ ๋‚ด์— Apach2(http.d ํ™œ์„ฑ ์œ„ํ•จ), MySQL(MariaDB)๋ฅผ ์„ค์น˜

  2. ํ”„๋กœ์ ํŠธ์˜ aplication.yml์— EC2 ์„œ๋ฒ„ ๋‚ด์˜ ์„ค์ •์„ ์ถ”๊ฐ€ + build.gradle runtimeOnly ์ถ”๊ฐ€

  • ์ฃผ์˜ : ์šฐ๋ถ„ํˆฌ ์„œ๋ฒ„์—๋Š” mariadb ๊ด€๋ จ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์„ค์น˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— driver class name์ด mariaDB ๊ด€๋ จ์ด์–ด์•ผํ•จ!

  1. ์žฌ๋ฐฐํฌ

๐ŸŽž๏ธ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ ํšŒ๊ณ 

ver.1

  • ์ข‹์•˜๋˜ ์ 

  • ์„ฑ๊ณตํ•œ ๋ถ€๋ถ„

    • Spring Framwork, Spring Security๋ฅผ ์‚ฌ์šฉํ•œ ํ”„๋กœ์ ํŠธ
    • REST API ์„ค๊ณ„
    • ์ธ์ฆ/์ธ๊ฐ€ ์„œ๋ฒ„์˜ ๊ตฌ์ถ• ๋ฐ ์ •์ƒ ์ž‘๋™
    • JWT ๋„์ž… ๋ฐ AccessToken๊ณผ RefreshToken์˜ ์‚ฌ์šฉ
    • MySQL๊ณผ Redis์˜ ํ˜ผ์šฉ์„ ํ†ตํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ
    • AWS EC2๋ฅผ ์ด์šฉํ•œ ๋ฐฐํฌ ๋ฐ ๋ฐฐํฌ ์‹คํŒจ ๊ฐ€๋Šฅ์„ฑ์„ ๋Œ€๋น„ํ•œ ํฌํŠธํฌ์›Œ๋”ฉ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
  • ๋ถ€์กฑํ•œ ๋ถ€๋ถ„

    • ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚˜๋Š” ์ž‘์—…(ex.ํ† ํฐ ์žฌ๋ฐœ๊ธ‰)์— ๋Œ€ํ•œ ์†๋„์™€ ํŽธ์˜์„ฑ์„ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ•œ ์„ค๊ณ„
    • ์†Œ์…œ ๋กœ๊ทธ์ธ ์ถ”๊ฐ€(OAuth 2.0)
    • Gateway ์ฐจ์›์—์„œ์˜ ์ธ์ฆ
  • ๋‹ค์–‘ํ•œ ๋ฆฌ๋ทฐ์™€ ํ”ผ๋“œ๋ฐฑ

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

  • ํ•œ๊ณ„์ 

    • ์„ค๊ณ„๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ”๋€Œ๋Š” ๊ณผ์ • โ†’ ๊ตฌํ˜„ ์„ฑ๊ณต ์—ฌ๋ถ€๋งŒ ๊ณผ๋„ํ•˜๊ฒŒ ์ง‘์ค‘ํ•ด ๊ตฌํ˜„ ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ๋ ค ํ–ˆ๋˜ ์ 
      • ์‹œ๊ฐ„ ๋ถ€์กฑ์œผ๋กœ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ•œ ์„ค๊ณ„์˜ ๊ฒฝ์šฐ, ๋‹ค์‹œ ๊ตฌํ˜„ ์ง„ํ–‰
        • ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•ด ์„ค๊ณ„๋ฅผ ๋ณ€๊ฒฝํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ํฌ๊ธฐํ–ˆ๋˜ ์„ค๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์บ ํ”„ ์ดํ›„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ด๋ณผ ์˜ˆ์ •.
    • RDBMS์—์„œ ํฌ๊ฒŒ ๋ฒ—์–ด๋‚˜์ง€ ๋ชปํ•œ DB ์„ค๊ณ„๋กœ ์ธํ•ด ์ƒˆ๋กœ ๋„์ž…๋œ Redis์˜ ์†๋„ ์ธก๋ฉด ์ด์ ์€ ํฌ๊ฒŒ ํ™œ์šฉ X
      • MySQL โ†’ Redis ์ด์šฉ
        • ์ธ์ฆ์ธ๊ฐ€์˜ ๊ฒฝ์šฐ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚˜๋Š” ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์— Redis๋ฅผ ์ค‘์ ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋ก€๊ฐ€ ๋งŽ์Œ โ†’ Redis์˜ ๋‹จ์ˆœ ๊ธฐ๋Šฅ ์ด์šฉ์ด ์•„๋‹Œ DB๋กœ์„œ์˜ ์‚ฌ์šฉ์œผ๋กœ ๋ฐœ์ „์‹œํ‚ค๊ณ  ์‹ถ์Œ.
    • Spring์˜ SpringBoot, JPA, Spring Security ๋“ฑ์—๋งŒ ์˜์กดํ•œ ๊ฐœ๋ฐœ + ์ธ์ฆ ๋ฐฉ์‹์˜ ์•„์‰ฌ์›€
      • Gateway ์ธก๋ฉด์—์„œ์˜ ์ธ์ฆ
        • ์บ ํ”„ ์ดํ›„, ์•„์‰ฌ์› ๋˜ ํ•ด๋‹น ๋ถ€๋ถ„์„ ์‹œ๋„ํ•ด๋ด„์œผ๋กœ์„œ ์„œ๋น„์Šค ๋‚ด์˜ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ๋” ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๋Š” ๊ฒฝํ—˜์„ ํ•˜๊ณ  ์‹ถ์Œ.
    • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์ž‘์„ฑ์ด ๋ฏธํกํ•œ ์ƒํƒœ๋กœ ๊ฐœ๋ฐœ ์ง„ํ–‰
      • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ๋ฒ• ์ตํžˆ๊ธฐ
        • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๊ฒฝํ—˜์ด ์ ์Œ โ†’ ๋ฌด์ž‘์ • ๊ตฌํ˜„๋ถ€ํ„ฐ ์ง„ํ–‰ํ•˜๊ณ  ์—๋Ÿฌ๋ฅผ ์žก๋Š” ์Šต๊ด€์„ ๋ฒ„๋ฆฌ์ง€ ๋ชปํ•จ โ†’ ํ•ด๋‹น ์Šต๊ด€์˜ ๊ฐœ์„ ์œผ๋กœ ์ž˜ ์ž‘์„ฑ๋œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•˜๋ฉฐ ๊ฒ€์ฆํ•˜๊ณ  ์‹ถ์Œ.
    • ์—๋Ÿฌ ๋˜๋Š” ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์ด ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ์˜ ๋Œ€์ฒ˜ ์‹œ์•ผ๊ฐ€ ์ข์•„ ์‹œ๊ฐ„ ๋Œ€๋น„ ์œ ์—ฐํ•œ ๋Œ€์‘์„ ํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„
      • ์บ ํ”„ ๊ธฐ๊ฐ„ ์ค‘ ์ž‘์„ฑํ•œ ๊ฐœ๋ฐœ ๊ธฐ๋ก๊ณผ ๋” ๋งŽ์€ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ํ†ตํ•ด ์บ ํ”„๊ฐ€ ๋๋‚˜๋”๋ผ๋„ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋˜ ๋ถ€๋ถ„๋“ค์„ ๊ณ„์†ํ•ด์„œ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋ฉฐ ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์Œ.
    • Github ์‚ฌ์šฉ์— ๋ฏธ์ˆ™ โ†’ ์—ฐ๋™ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ํ•ด๊ฒฐ์— ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ณ  ์‹ค์ˆ˜๋„ ์žฆ์•˜์Œ
      • ๊นƒํ—ˆ๋ธŒ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ์ˆ™์ง€
        • ๊นƒํ—ˆ๋ธŒ์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•์ด ๋ฏธ์ˆ™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ด ์บ ํ”„๋ฅผ ๊ณ„๊ธฐ๋กœ ํ˜‘์—…์„ ์œ„ํ•ด ๊นƒํ—ˆ๋ธŒ์— ๋Œ€ํ•ด์„œ ์ถฉ๋ถ„ํ•œ ํ•™์Šต์„ ํ†ตํ•ด ๊นƒํ—ˆ๋ธŒ๋ฅผ ์ด์ „๋ณด๋‹ค ์–ด๋ ต์ง€ ์•Š๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Œ.

ver.2

  • ๊ฐœ๋ฐœ
    • ์ธ์ฆ์ธ๊ฐ€ ๊ณผ์ •์—์„œ PHP์™€ Session ๋ฐฉ์‹ ์‚ฌ์šฉ โ†’ Spring Framwork์™€ JWT ๋ฐฉ์‹ ๋„์ž…
      • AccessToken payload์— ํ•„์š”ํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ปค์Šคํ…€ํ•˜์—ฌ ๋„ฃ๋Š” ๊ณผ์ •์—์„œ์˜ ์–ด๋ ค์›€
        • ๋‹‰๋„ค์ž„ ์ •๋ณด๋ฅผ ๋„ฃ๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•(Subject ํฌํ•จ, Claim& Claims ์‚ฝ์ž…, payload ํ•จ์ˆ˜ ์ž‘์„ฑ ๋“ฑ)์œผ๋กœ ํ•ด๊ฒฐ ์‹œ๋„ โ†’ ์‹คํŒจ
        • ์œ ์ € id๊ฐ’์„ ํ†ตํ•ด ๋‹‰๋„ค์ž„ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋Š” ๋ฐฉ๋ฒ• ์‚ฌ์šฉ
        • ์•„์‰ฌ์šด ์  : ํ† ํฐ์— ๋‹‰๋„ค์ž„ ์ •๋ณด ํฌํ•จ โ†’ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์š”์ฒญ ์‹œ ์†๋„ ์ธก๋ฉด์—์„œ ํฐ ์ด์ ์ด ์žˆ์—ˆ์„ ๊ฒƒ
        • Spring ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฒซ ๋„์ž… + ํ† ํฐ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ „๋ฐ˜์  ์ดํ•ด ๋ถ€์กฑ์ด ๊ทผ๋ณธ์  ์›์ธ์ด์—ˆ๋‹ค๊ณ  ์ƒ๊ฐ.
  • ์—ฐ๋™
    • ๊นƒํ—ˆ๋ธŒ์˜ ๊ฐœ์ธ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ๋งŒ ์‚ฌ์šฉ โ†’ forkํ•œ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ ๋‚ด ๋ณ„๋„ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ๋ฐ PR & Approve ๋ฐ›์•„ ํŒ€ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ main์— Mergeํ•˜๋Š” ๋ฐฉ์‹
      • forkํ•œ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ์˜ main๊ณผ ๋ณ„๋„ ๋ธŒ๋žœ์น˜์˜ ๋Š์–ด์ง„ commit ๊ธฐ๋ก์œผ๋กœ ์ธํ•ด ์—ฐ๋™ ๋ถˆ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฒช์Œ.
        • ํ”„๋กœ์ ํŠธ ๋ฐฑ์—… โ†’ ๋ธŒ๋žœ์น˜ ์žฌ์„ฑ์„ฑ ๋ฐ ์—ฐ๋™์œผ๋กœ ํ•ด๊ฒฐ (IntelliJ๋ฅผ ํ†ตํ•œ ๊นƒ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ์‹œ โ€˜New Branch from main..โ€™์„ ์ด์šฉํ•ด์•ผ commit ๊ธฐ๋ก ์—ฐ๋™)
        • ์•„์‰ฌ์šด ์  : ๊นƒ์— ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฐ๋™ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋งŽ์€ ์‹œ๊ฐ„ ๋‚ญ๋น„ โ†’ ๊นƒํ—ˆ๋ธŒ๋ฅผ ์ข€ ๋” ๊ณต๋ถ€ํ–ˆ์—ˆ๋‹ค๋ฉด ๊ฒช์„ ์‹œํ–‰์ฐฉ์˜ค๊ฐ€ ํ›จ์”ฌ ์ ์—ˆ์„ ๊ฒƒ
        • ๊นƒํ—ˆ๋ธŒ ์‚ฌ์šฉ ๋ฏธ์ˆ™ + ๋ฌด์ž‘์ • ์—ฐ๋™๋ถ€ํ„ฐ ์‹œ๋„ํ•œ ๊ฒƒ์ด ์›์ธ โ†’ ํ™•์‹คํ•˜์ง€ ์•Š์€ ๊ฒƒ์€ ๋ฏธ๋ฆฌ ์งˆ๋ฌธํ•˜์ž!

โ†’ ์ด ์™ธ์—๋„ ๋ฆฌ๋ทฐ์™€ ํ”ผ๋“œ๋ฐฑ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ ๋‹ค์–‘ํ•œ ๊ณ ๋ฏผ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ์–ด๋ ค์›€์„ ๊ฒช๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋งŽ์€ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์—ˆ์Œ.

  • ์‹œ๊ฐ„ ๋ถ„๋ฐฐ์— ์‹คํŒจํ•˜์—ฌ ๊ณ„ํš์„ ๋งŽ์ด ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ๋์ด ๋‚˜๊ฒŒ ๋˜์—ˆ์Œ.
  • ์•ž์œผ๋กœ์˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์‹œ๊ฐ„ ๋ถ„๋ฐฐ์™€ ๊ณ„ํš์˜ ์ค‘์š”์„ฑ์„ ์—ผ๋‘ํ•˜๋ฉฐ ํ…Œ์ŠคํŠธ์™€ ๊ฐœ์„ ๊นŒ์ง€ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์ž!
profile
์–ธ์  ๊ฐ€ ๋‚ด ์ฝ”๋“œ๋กœ ์„ธ์ƒ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก, BE ๊ฐœ๋ฐœ ๊ธฐ๋ก ๋…ธํŠธโ˜˜๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€