Y J S

์ปค์Šคํ…€ ์ธ์ฆ์—์„œ NextAuth ๊ธฐ๋ฐ˜ JWT ์ฒด๊ณ„๋กœ ์ „ํ™˜

๋ฌธ์ œ ์ƒํ™ฉ

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

ํ™˜๊ฒฝ

  • ํ”„๋กœ์ ํŠธ: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์ฆ ์ „ํ™˜
  • ์Šคํƒ: Next.js, TypeScript, NextAuth
  • ์™ธ๋ถ€ ์—ฐ๋™: Google OAuth(์ถ”๊ฐ€ ์†Œ์…œ ๋กœ๊ทธ์ธ ํ™•์žฅ ๊ฐ€๋Šฅ)

์ฆ์ƒ/๋กœ๊ทธ

์ฆ์ƒ: ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€์— ๋ฏผ๊ฐ ์ •๋ณด ์ €์žฅ, ํ† ํฐ ๋งŒ๋ฃŒ/๊ฐฑ์‹  ์ˆ˜๋™ ๊ด€๋ฆฌ, SSR ๋ณดํ˜ธ ๋ฏธํก
๋กœ๊ทธ: ๋ช…์‹œ์  ์—๋Ÿฌ๋Š” ์ ์œผ๋‚˜ ์ธ์ฆ ํ๋ฆ„์˜ ์ผ๊ด€์„ฑ/๋ณด์•ˆ์„ฑ ๋ถ€์กฑ์œผ๋กœ ์šด์šฉ ๋ฆฌ์Šคํฌ ์กด์žฌ

์›์ธ ๋ถ„์„

  • ๋ธŒ๋ผ์šฐ์ € ์ €์žฅ์†Œ(sessionStorage/localStorage) ๊ธฐ๋ฐ˜ ์ธ์ฆ์€ XSS ์‹œ ๋…ธ์ถœ ์œ„ํ—˜์ด ์กด์žฌ.
  • ์ปค์Šคํ…€ ๋กœ์ง์€ ํ† ํฐ ๋กœํ…Œ์ด์…˜/๋งŒ๋ฃŒ ์ฒ˜๋ฆฌ/CSRF ๋Œ€๋น„/์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ณดํ˜ธ๋ฅผ ์ผ๊ด€์ ์œผ๋กœ ์ปค๋ฒ„ํ•˜๊ธฐ ์–ด๋ ค์›€.
  • ์†Œ์…œ ๋กœ๊ทธ์ธ(์˜ˆ: Google) ํ†ตํ•ฉ ์‹œ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ๊ณผ์˜ ์„ธ๋ถ€ ์ฐจ์ด๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋‹ด์ด ํผ.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  1. NextAuth ๋„์ž… ๊ฒฐ์ • ๋ฐ ํ•™์Šต
    • ๊ณต์‹ ๋ฌธ์„œ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ธ์…˜ ์ „๋žต, JWT ์ „๋žต, ์ฝœ๋ฐฑ ๊ตฌ์กฐ(session/jwt/signIn) ์ดํ•ด.
  2. JWT ์ „๋žต ์ฑ„ํƒ
    • session: { strategy: 'jwt' }๋กœ ์„ค์ •ํ•˜๊ณ , ํ† ํฐ์— ํ•„์š”ํ•œ ํด๋ ˆ์ž„(roles, id ๋“ฑ)์„ jwt/session ์ฝœ๋ฐฑ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์ฃผ์ž….
  3. ํ”„๋กœ๋ฐ”์ด๋” ํ†ตํ•ฉ
    • Google OAuth ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ธฐ์กด ์ปค์Šคํ…€ ๋กœ๊ทธ์ธ ํ๋ฆ„์€ NextAuth์˜ ์ธ์ฆ ์—”๋“œํฌ์ธํŠธ๋กœ ์ด๊ด€.
    • ํ•„์š” ์‹œ Credentials Provider๋กœ ๊ธฐ์กด ํผ ๋กœ๊ทธ์ธ๋„ ํก์ˆ˜(์„œ๋ฒ„์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ ํ›„ JWT ์ƒ์„ฑ/๋ณ‘ํ•ฉ).
  4. ๋ณดํ˜ธ ๊ตฌ๊ฐ„ ์ •๋ฆฌ
    • ๋ฏธ๋“ค์›จ์–ด ๋˜๋Š” ์„œ๋ฒ„ ์•ก์…˜/๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ auth()/getServerSession()์œผ๋กœ ๋ณดํ˜ธ, ํด๋ผ์ด์–ธํŠธ๋Š” useSession()์œผ๋กœ ์ƒํƒœ ๊ด€๋ฆฌ.
  5. ๋ฐ์ดํ„ฐ/๊ถŒํ•œ ๋ชจ๋ธ ์ •๋ฆฌ
    • ์‚ฌ์šฉ์ž ์Šคํ‚ค๋งˆ์™€ ์—ญํ• /๊ถŒํ•œ์„ ํ‘œ์ค€ํ™”ํ•˜๊ณ , JWT์— ์ตœ์†Œ ์ •๋ณด๋งŒ ํฌํ•จ. ์„œ๋ฒ„์—์„œ ์ถ”๊ฐ€ ๊ฒ€์ฆ ์ˆ˜ํ–‰.

๊ฒ€์ฆ

  • ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ/ํ† ํฐ ๊ฐฑ์‹  ํ๋ฆ„, ๋ณดํ˜ธ ๋ผ์šฐํŠธ ์ ‘๊ทผ ์ œ์–ด, SSR ํŽ˜์ด์ง€์—์„œ์˜ ์„ธ์…˜ ์ธ์ž… ๊ฒ€์ฆ.
  • Google OAuth ๋กœ๊ทธ์ธ, ๊ธฐ์กด ์‚ฌ์šฉ์ž์™€์˜ ๋งคํ•‘, ์‹คํŒจ/์ทจ์†Œ ํ”Œ๋กœ์šฐ ์ฒ˜๋ฆฌ ํ™•์ธ.

๋ฐฐ์šด ์ 

  • ์ธ์ฆ์€ ํ‘œ์ค€ํ™”๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ณด์•ˆยท์œ ์ง€๋ณด์ˆ˜ยทํ™•์žฅ์„ฑ ๋ชจ๋‘๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Œ.
  • JWT/์„ธ์…˜ ์ „๋žต๊ณผ ์ฝœ๋ฐฑ ์„ค๊ณ„๋ฅผ ์ผ์ฐ ํ™•์ •ํ•˜๋ฉด ์ดํ›„ ๊ถŒํ•œ ๋ชจ๋ธ๊ณผ ๋ผ์šฐํŒ… ๋ณดํ˜ธ๊ฐ€ ๋‹จ์ˆœํ•ด์ง.
  • ์†Œ์…œ ๋กœ๊ทธ์ธ ํ†ตํ•ฉ์€ ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ๊ณผ ์ง„์ž… ์žฅ๋ฒฝ์„ ๋‚ฎ์ถ”๋ฉฐ, ์šด์˜ ๋น„์šฉ์„ ์ค„์—ฌ์คŒ.

์ฐธ๊ณ 

  • NextAuth ๊ณต์‹ ๋ฌธ์„œ(๊ตฌ์„ฑ/์ฝœ๋ฐฑ/ํ”„๋กœ๋ฐ”์ด๋”)