๋ฌธ์ ์ํฉ
- ํ๋ก์ ํธ ์ด๊ธฐ์ ๋ก๊ทธ์ธยทํ์๊ฐ์
๋ก์ง์ ์ง์ ๊ตฌํํ๊ณ ์ธ์
์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ์ผ๋, ์ ์ฅ์ ๋
ธ์ถ ์ํ(CSS), ํ ํฐ ์๋ช
/๊ฐฑ์ ๊ด๋ฆฌ ๋ฑ์ ๋ณด์ ์ทจ์ฝ์ ์ด ๋๋ฌ๋จ.
- ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ(์์
๋ก๊ทธ์ธ ์ฐ๋, ์๋ฒ ์ฌ์ด๋ ๋ณดํธ ๋ฑ) ์ธก๋ฉด์์๋ ํ๊ณ๊ฐ ์์ด ๊ฐ์ ์ด ํ์ํ์.
ํ๊ฒฝ
- ํ๋ก์ ํธ: ์น ์ ํ๋ฆฌ์ผ์ด์
์ธ์ฆ ์ ํ
- ์คํ: Next.js, TypeScript, NextAuth
- ์ธ๋ถ ์ฐ๋: Google OAuth(์ถ๊ฐ ์์
๋ก๊ทธ์ธ ํ์ฅ ๊ฐ๋ฅ)
์ฆ์/๋ก๊ทธ
์ฆ์: ์ธ์
์คํ ๋ฆฌ์ง์ ๋ฏผ๊ฐ ์ ๋ณด ์ ์ฅ, ํ ํฐ ๋ง๋ฃ/๊ฐฑ์ ์๋ ๊ด๋ฆฌ, SSR ๋ณดํธ ๋ฏธํก
๋ก๊ทธ: ๋ช
์์ ์๋ฌ๋ ์ ์ผ๋ ์ธ์ฆ ํ๋ฆ์ ์ผ๊ด์ฑ/๋ณด์์ฑ ๋ถ์กฑ์ผ๋ก ์ด์ฉ ๋ฆฌ์คํฌ ์กด์ฌ
์์ธ ๋ถ์
- ๋ธ๋ผ์ฐ์ ์ ์ฅ์(sessionStorage/localStorage) ๊ธฐ๋ฐ ์ธ์ฆ์ XSS ์ ๋
ธ์ถ ์ํ์ด ์กด์ฌ.
- ์ปค์คํ
๋ก์ง์ ํ ํฐ ๋กํ
์ด์
/๋ง๋ฃ ์ฒ๋ฆฌ/CSRF ๋๋น/์๋ฒ ์ฌ์ด๋ ๋ณดํธ๋ฅผ ์ผ๊ด์ ์ผ๋ก ์ปค๋ฒํ๊ธฐ ์ด๋ ค์.
- ์์
๋ก๊ทธ์ธ(์: Google) ํตํฉ ์ ํ์ค ํ๋กํ ์ฝ๊ณผ์ ์ธ๋ถ ์ฐจ์ด๋ฅผ ์ง์ ๊ด๋ฆฌํด์ผ ํ๋ ๋ถ๋ด์ด ํผ.
ํด๊ฒฐ ๋ฐฉ๋ฒ
- NextAuth ๋์
๊ฒฐ์ ๋ฐ ํ์ต
- ๊ณต์ ๋ฌธ์ ๊ธฐ๋ฐ์ผ๋ก ์ธ์
์ ๋ต, JWT ์ ๋ต, ์ฝ๋ฐฑ ๊ตฌ์กฐ(session/jwt/signIn) ์ดํด.
- JWT ์ ๋ต ์ฑํ
session: { strategy: 'jwt' }๋ก ์ค์ ํ๊ณ , ํ ํฐ์ ํ์ํ ํด๋ ์(roles, id ๋ฑ)์ jwt/session ์ฝ๋ฐฑ์์ ์์ ํ๊ฒ ์ฃผ์
.
- ํ๋ก๋ฐ์ด๋ ํตํฉ
- Google OAuth ํ๋ก๋ฐ์ด๋๋ฅผ ์ถ๊ฐํ๊ณ ๊ธฐ์กด ์ปค์คํ
๋ก๊ทธ์ธ ํ๋ฆ์ NextAuth์ ์ธ์ฆ ์๋ํฌ์ธํธ๋ก ์ด๊ด.
- ํ์ ์ Credentials Provider๋ก ๊ธฐ์กด ํผ ๋ก๊ทธ์ธ๋ ํก์(์๋ฒ์์ ๋น๋ฐ๋ฒํธ ๊ฒ์ฆ ํ JWT ์์ฑ/๋ณํฉ).
- ๋ณดํธ ๊ตฌ๊ฐ ์ ๋ฆฌ
- ๋ฏธ๋ค์จ์ด ๋๋ ์๋ฒ ์ก์
/๋ผ์ฐํธ ํธ๋ค๋ฌ์์
auth()/getServerSession()์ผ๋ก ๋ณดํธ, ํด๋ผ์ด์ธํธ๋ useSession()์ผ๋ก ์ํ ๊ด๋ฆฌ.
- ๋ฐ์ดํฐ/๊ถํ ๋ชจ๋ธ ์ ๋ฆฌ
- ์ฌ์ฉ์ ์คํค๋ง์ ์ญํ /๊ถํ์ ํ์คํํ๊ณ , JWT์ ์ต์ ์ ๋ณด๋ง ํฌํจ. ์๋ฒ์์ ์ถ๊ฐ ๊ฒ์ฆ ์ํ.
๊ฒ์ฆ
- ๋ก๊ทธ์ธ/๋ก๊ทธ์์/ํ ํฐ ๊ฐฑ์ ํ๋ฆ, ๋ณดํธ ๋ผ์ฐํธ ์ ๊ทผ ์ ์ด, SSR ํ์ด์ง์์์ ์ธ์
์ธ์
๊ฒ์ฆ.
- Google OAuth ๋ก๊ทธ์ธ, ๊ธฐ์กด ์ฌ์ฉ์์์ ๋งคํ, ์คํจ/์ทจ์ ํ๋ก์ฐ ์ฒ๋ฆฌ ํ์ธ.
๋ฐฐ์ด ์
- ์ธ์ฆ์ ํ์คํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ๋ฉด ๋ณด์ยท์ ์ง๋ณด์ยทํ์ฅ์ฑ ๋ชจ๋๋ฅผ ๊ฐ์ ํ ์ ์์.
- JWT/์ธ์
์ ๋ต๊ณผ ์ฝ๋ฐฑ ์ค๊ณ๋ฅผ ์ผ์ฐ ํ์ ํ๋ฉด ์ดํ ๊ถํ ๋ชจ๋ธ๊ณผ ๋ผ์ฐํ
๋ณดํธ๊ฐ ๋จ์ํด์ง.
- ์์
๋ก๊ทธ์ธ ํตํฉ์ ์ฌ์ฉ์ ํธ์์ฑ๊ณผ ์ง์
์ฅ๋ฒฝ์ ๋ฎ์ถ๋ฉฐ, ์ด์ ๋น์ฉ์ ์ค์ฌ์ค.
์ฐธ๊ณ
- NextAuth ๊ณต์ ๋ฌธ์(๊ตฌ์ฑ/์ฝ๋ฐฑ/ํ๋ก๋ฐ์ด๋)