๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

25-02-20

๐Ÿ“Œ Daily Reportโ€‹

https://github.com/ssginc-be/DOKI/issues/4


๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ์ƒํ™ฉโ€‹

์ด์ œ ๋‚จ์€ ๊ธฐ๊ฐ„์ด ์–ผ๋งˆ ์—†๋‹ค. ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋•Œ ์ตœ๋Œ€์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ๋“œ๋ ค์•ผ ํ•˜๋Š”๋ฐ ๊ธฐํš์— CRUD๊ฐ€ ๋‹ค ์—†์–ด์„œ(ํŠนํžˆ DELETE) ์ด๊ฒŒ ์‹ฌ์‚ฌ ํ•ญ๋ชฉ ์ƒ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„์ง€ ๊ฑฑ์ •์ด๋‹ค.

๋ชจ๋‹ˆํ„ฐ๋ง์ด๋‚˜ ํผํฌ๋จผ์Šค ๋ถ€๋ถ„๋“ค์€ ๋‚ด๊ฐ€ ํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์ธ๋ฐ ๋ญ๋ž„๊นŒ, 'ํ•˜๊ณ ์‹ถ๋‹ค' ๋ ˆ๋ฒจ์„ ๋„˜์–ด์„ฐ๋‹ค.

'ํ•œ๋‹ค', '์•ˆํ•˜๋Š” ๋ฏธ๋ž˜๋Š” ์—†๋‹ค'๋ผ๋Š” ์ƒ๊ฐ์ด ๋” ์ง€๋ฐฐ์ ์ด๋‹ค.

์†”์งํžˆ ์ง‘์ค‘์„ ์œ„ํ•ด ์ง‘์—์„œ ์•„๋ฌด์™€๋„ ์ƒํ˜ธ์ž‘์šฉ ์—†์ด ์ž‘์—…ํ•˜๊ณ  ์‹ถ๋‹ค. (์ƒํ˜ธ์ž‘์šฉ์ด ์žˆ์œผ๋ฉด ํ˜„์žฌ ์ˆ˜์ค€์˜ ๋ชฐ์ž…์ด ์ข€ ํํŠธ๋Ÿฌ์ง„๋‹ค.)

๊ทผ๋ฐ ๋ฐ–์—์„œ ์ด๋Ÿฌํ•œ ๋ชฐ์ž…์„ ์œ ์ง€ํ•˜๋„๋ก ์—ฐ์Šตํ•˜๋Š” ๋‹น์žฅ์˜ ํ™˜๊ฒฝ์ด ์ข‹์€ ๊ฒฝํ—˜์ด๋ผ๊ณ  ์ƒ๊ฐ์€ ํ•œ๋‹ค.


๐Ÿ“Œ ER Diagramโ€‹

https://www.erdcloud.com/d/iALeanZK8tosAe79p

๋‹ค์Œ์˜ ๋„๋ฉ”์ธ์„ drop ํ–ˆ๋‹ค.

  • ๊ฒฐ์ œ: ์ƒํ’ˆ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ์ฃผ๋ฌธ, ๊ฒฐ์ œ
  • ์ฑ„ํŒ…: ์ฑ—๋ด‡, ์‹ ๊ณ 
  • ๊ถŒํ•œ: ํŒ์—…์Šคํ† ์–ด ์šด์˜์ž(MANAGER)

์™œ๋ƒํ•˜๋ฉด ์ด์ „ ํฌํŠธํด๋ฆฌ์˜ค๋“ค์˜ PR์„ ํ†ตํ•ด ํ•ด๋‹น ๋„๋ฉ”์ธ์€ ์ด๋ฏธ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

๊ถŒํ•œ ๋ถ€๋ถ„์— ์žˆ์–ด์„  ์šด์˜์ž๊ฐ€ ๋‚ ๋ผ๊ฐ€๋ฏ€๋กœ ํ”Œ๋žซํผ ๊ด€๋ฆฌ์ž๊ฐ€ ๋ฌธ์„œ ์ƒ์˜ ํŒ์—…์Šคํ† ์–ด ์ •๋ณด๋ฅผ ์ง์ ‘ ๋“ฑ๋กํ•ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ๊ธฐํš ๋ณ€๊ฒฝ.

์šด์˜์ž๊ฐ€ ๋‚ ๋ผ๊ฐ€๋ฉด์„œ ํšŒ์›๊ณ„์ • <-> ํŒ์—…์Šคํ† ์–ด ์‚ฌ์ด์˜ M:N ๊ด€๊ณ„ ์ค‘๊ณ„ํ•˜๋Š” ํ…Œ์ด๋ธ”๋„ ใ…‚ใ…‚ ํ–ˆ๋Š”๋ฐ, ์ค‘๊ณ„ ์ž์ฒด๋ฅผ ๋ฒ„๋ฆฌ๊ธด ์‹ซ์–ด์„œ ์ด๋ฅผ ํŒ์—…์Šคํ† ์–ด <-> ์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๊ณ„์— ์ ์šฉํ–ˆ๋‹ค.

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

๋Š˜ ๊ทธ๋ž˜์™”๋Š”๋ฐ, ์œ ๋‚œํžˆ automation + toleranceํ•œ ์‹œ์Šคํ…œ์— ์žฌ๋ฏธ๊ฐ€ ๋Š๊ปด์ง„๋‹ค.

๊ทธ๋งŒํผ ์ •๊ตํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์€๋ฐ ์ด๊ฒƒ๊นŒ์ง€๋Š” ์š•์‹ฌ ๊ฐ™์Œ... ๊ธฐ๊ฐ„์ด ๋„ˆ๋ฌด............ ์—†์–ด๋„ ๋„ˆ๋ฌด ์—†์Œ........

๊ฒฐ์ œ๋Š” PG ์ข€ ๋ถ™์—ฌ๋ณด๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ์•„์ˆฉ์ง€๋งŒ ๋‹ค์Œ์— ํ•˜๋ฉด ๋˜์ง€. ์ž ์‹œ ์•ˆ๋…•~


๐Ÿ“Œ ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธโ€‹

๊ธฐ์กด ์•„ํ‚คํ…์ณ์—์„œ ํฐ ๋ณ€๋™์‚ฌํ•ญ์€ ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค. auth๋Š” ๋ณ„๋„์˜ micro service๋กœ ๋‘๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธด ํ•œ๋ฐ, ๊ธฐ๊ฐ„ ๊ณ ๋ คํ•˜๋ฉด ์ง€๊ธˆ ๊ทธ๊ฑฐ ๋ถ„๋ฆฌํ•  ๋•Œ๊ฐ€ ์•„๋‹ˆ๋‹ค.

๋ถ„๋ฆฌํ•˜๋ฉด ํ• ์ˆ˜๋ก service ๊ฐ„์˜ ํ†ต์‹ ์—์„œ ์˜ค๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๋‚˜, cross-cutting concerns ๋ถ€๋ถ„์„ ๊ณ ๋ คํ•˜๊ฒŒ ๋ผ์„œ, ๊ฑ ์ด ๊ธฐ๊ฐ„์—” ์•ˆ ๊ทธ๋Ÿฌ๋Š” ๊ฒƒ์ด ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

MSA ์•„ํ‚คํ…์ณ์˜ ๋‹น์œ„์„ฑ์„ ๋‚ฉ๋“์‹œํ‚ค๋ ค๋ฉด ํ•ด๋‹น ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ๋งŽ์•„์•ผ ํ•˜๋Š”๋ฐ, ์ง€๊ธˆ ๊ตฌํ˜„์ด 0์ˆœ์œ„๋ผ ์–ด์ฉ” ์ˆ˜๊ฐ€ ์—†์Œ.

๊ทธ๋ž˜์„œ ๊ธฐ์กด์˜ ๊ณ„ํš์€, PT๋•Œ ๊ธฐ๊ฐ„ ์ƒ์˜ ํ•œ๊ณ„๋ฅผ ๋“ค๋ฉฐ ์ด ๋ถ€๋ถ„์„ ์ œ์–ธํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค. ๋ˆ„๊ฐ€ ๋ด๋„ MSA๋ผ๋Š”๋ฐ ์„œ๋น„์Šค ๋ถ„๋ฆฌ ๋”ฑ 2๊ฐœ ํ•ด๋†“์œผ๋ฉด '???' ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ใ…‹ใ…‹


์ฐธ๊ณ  ๋ ˆํผ๋Ÿฐ์Šคโ€‹

https://pixx.tistory.com/287 https://pixx.tistory.com/275 -> ์š”๊ฑฐ ๋‚ด์šฉ ์ข‹์Œ. ๋ฐฅ๋จน์œผ๋ฉด์„œ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณด์…ˆ

์ด๋ฅผ ํ†ตํ•ด flow๋ฅผ ์ •๋ฆฌํ•˜์ž๋ฉด,

  1. G/W๋Š” filter๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ๋ผ์›Œ๋„ฃ์œผ๋ฉด ์ด๊ฑธ๋กœ JWT validation์„ ์ˆ˜ํ–‰.
  2. sign up, sign in, sign out ๊ด€๋ จ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ controller, service ๊ตฌํ˜„ํ•ด์„œ common service๋กœ ใ„ฑใ„ฑ
  3. ๊ทธ๋ฆฌ๊ณ  ๊ฒธ์‚ฌ๊ฒธ์‚ฌ G/W์— routing ๋„ฃ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด์Šˆ ๋ถ„๋ฆฌํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๋ฐ”์˜๋‹ˆ ํƒ€ํ˜‘ํ•จ. (๋ฐ”๋น ์„œ ํ•˜๋Š” ํƒ€ํ˜‘์€ ๋Š˜ ๊ธฐ๋ถ„์ด ๋ณ„๋กœ๋‹ค.)


๐Ÿ“Œ JwtUtil, ์–ด๋””๋กœ ๊ฐ€์•ผํ•˜๋‚˜โ€‹

validation ๋ถ€๋ถ„์—์„œ DB๋ฅผ ํ•œ ๋ฒˆ ๊ฐ”๋‹ค์™€์•ผ ํ•˜๋Š”๋ฐ, G/W์—์„œ ๊ทธ๋Ÿด ์ˆœ ์—†๊ณ 

common service ์ชฝ์— ์‚ฌ์šฉ์ž ์กฐํšŒ api๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  OpenFeign ์จ์•ผ ํ•  ๋“ฏ! ... ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์œผ๋‚˜?

๊ทธ๋Ÿผ JwtUtil ์–ด์ฉ”๊ฑฐ์ž„. G/W๋ž‘ common service์— ์žˆ์„๋•Œ๋ž‘ ๊ฐ์ž ์‚ฌ์šฉ์ž ์ •๋ณด ํผ์˜ค๋Š” ๋ฐฉ์‹์ด ๋‹ค๋ฅด์ž๋Š ? (๋‚ด๋ถ€ API ํ˜ธ์ถœ vs. JPA ์ง๋นต ์กฐํšŒ)

ํ•ด๊ฒฐ๋ฐฉ์•ˆ ํ›„๋ณดโ€‹

  1. ๊ฐ๊ฐ์— ๋งž๋„๋ก JwtUtil์„ ๋ณต๋ถ™ํ•ด์„œ ์ž‘์„ฑํ•˜๊ธฐ -> ์•„ ์ด๊ฑด ์ข€;
  2. common service์— JwtUtil ๋‘๊ณ  G/W์—๋Š” ์œ ํ‹ธ๋”ฐ์œ„ ์—†์Œ ใ…‡ใ…‡ ๊ทธ๋ƒฅ ๋ชจ๋“  JWT ๊ด€๋ จ์„ common service์— ๋งก๊ธฐ๊ธฐ
์•ˆ์‹

...๋‹น์—ฐํžˆ 2์•ˆ์„ ์„ ํƒํ–ˆ๋‹ค.


๐Ÿ“Œ AT ์žฌ๋ฐœ๊ธ‰์˜ ์ตœ์„ ์ฑ…์€?โ€‹

ํ˜„์žฌ์˜ ๊ธฐํš์œผ๋กœ๋Š”, AT์™€ RT๋Š” ๋ชจ๋‘ ์ฟ ํ‚ค์— ๋“ค์–ด๊ฐ„๋‹ค.

๊ทธ๋Ÿผ ์ง€์ •ํ•œ path์— ๋Œ€ํ•ด์„  ๋‘˜ ๋‹ค ์ž๋™์œผ๋กœ ์˜์•„์ง€๊ณ , ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์ •๋ณด๋ฅผ ์•ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ, ์ด์šฉ์ž๊ฐ€ ํ”Œ๋žซํผ์„ ์ผœ๋‘๊ณ  ์ž ๊น ์ ์‹ฌ ๋จน๊ณ  ์™”๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

๋‹ค์‹œ ๋Œ์•„์™”์„ ๋•Œ AT๋Š” ๋งŒ๋ฃŒ๋˜์—ˆ์„ ๊ฒƒ์ด๋‹ค. ์ด ์ƒํƒœ๋กœ ์„œ๋ฒ„์— request๋ฅผ ๋ณด๋‚ด๋ฉด, ์„œ๋ฒ„๊ฐ€ ๊ฒ€์ฆ๋‹จ์—์„œ ๋งŒ๋ฃŒ๋œ ํ† ํฐ์ž„์„ ์ธ์ง€ํ•œ๋‹ค.

๊ทธ๋ž˜. ๊ทผ๋ฐ ๊ทธ ๋‹ค์Œ์€? ์ถ”๊ฐ€๋กœ ์ƒ๊ฐ์„ ๋˜ ๋‚˜์—ดํ•ด๋ณด์ž.

  1. ์„œ๋ฒ„: 401 ๋˜์ง -> ํด๋ผ: ์žฌ๋ฐœ๊ธ‰ api ํ˜ธ์ถœ -> ์„œ๋ฒ„: AT ์žฌ๋ฐœ๊ธ‰ํ•˜๊ณ  ์ฟ ํ‚ค ์„ธํŒ… -> ํด๋ผ: AT ์ฟ ํ‚ค ๊ฐฑ์‹ ๋จ -> ํด๋ผ: ๋น„์ฆˆ๋‹ˆ์Šค api ์žฌํ˜ธ์ถœ
  2. ์„œ๋ฒ„: Redis์—์„œ RT ์กฐํšŒ -> ์„œ๋ฒ„: RT ์œ ํšจํ•˜๋ฉด AT ์žฌ๋ฐœ๊ธ‰ํ•˜๊ณ  ์ฟ ํ‚ค ์„ธํŒ… + ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ -> ํด๋ผ: AT ์ฟ ํ‚ค ๊ฐฑ์‹ ๋จ

1๊ณผ 2์ค‘์—์„œ ์–ด๋Š ๋ฐฉ์‹์œผ๋กœ ํ•  ์ง€ ๋‚ด์‹ฌ ๊ณ ๋ฏผ์ด ์žˆ์—ˆ๋‹ค. ๊ทผ๋ฐ ๋ฉ˜ํ† ๋ถ„๊ป˜์„œ ๋ณดํ†ต์€ ์„œ๋ฒ„๊ฐ€ ๋œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐ„๋‹ค๊ณ  ํ•˜์…”์„œ 1์•ˆ์„ ์„ ํƒํ–ˆ๋‹ค.

๋”ฐ๋ผ์„œ JWT flow๋Š” ํ•˜๋‹จ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ๋  ๊ฒƒ ๊ฐ™๋‹ค.

ํ† ํฐ_ํ‹ฐํ‚คํƒ€์นด