• JWT ํ† ํฐ ์–ด๋””์— ์ €์žฅํ•˜๋Š”๊ฒŒ ์ข‹์„๊นŒ?
    ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ JWT ํ† ํฐ์„ ์–ด๋””์— ์ €์žฅํ•ด์•ผ ์ข‹์„๊นŒ ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค.๐Ÿค”์šฐ์„  ๋‚ด๊ฐ€ ๊ฒฝํ—˜ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ํ† ํฐ์„ ์ €์žฅํ•œ ์œ„์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. access token, refresh token ๋ชจ๋‘ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅaccess token์€ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ, refresh token์€ ์ฟ ํ‚ค์— ์ €์žฅaccess token, refresh token ๋ชจ๋‘ ์ฟ ํ‚ค์— ์ €์žฅ ๊ฐœ๋ฐœ ๋‹น์‹œ์—๋Š” ๋‹จ์ˆœํžˆ (์ฝ”๋“œ์งœ๊ธฐ)ํŽธํ•ด์„œ ์œ„์™€ ๊ฐ™์ด ์„ค์ •ํ–ˆ์ง€๋งŒ, ์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋ณด์•ˆ์— ์ „ํ˜€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ํŠนํžˆ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ํ† ํฐ์„ ์ €์žฅํ–ˆ๋˜ ๊ฒƒ์€ ์ •๋ง ๋ฐ˜์„ฑํ•œ๋‹ค.๊ทธ๋ ‡๋‹ค๋ฉด ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— JWTํ† ํฐ์„ ์ €์žฅํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ด์œ ์™€ ํ† ํฐ์„ ์–ด๋””์— ์ €์žฅํ•˜๋ฉด ์ข‹์„์ง€ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค.     localStorage์— ํ† ํฐ์„ ์ €์žฅํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ด์œ 1..
    2024. 12. 16.
  • React Query์™€ SSR: ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์™€ Hydration ํ™œ์šฉ
    ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)๊ณผ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR)์ด ํ˜ผํ•ฉ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‹ค.์ •์ ์ธ ํŽ˜์ด์ง€: ๋ฐ์ดํ„ฐ ๋ณ€ํ™”๊ฐ€ ์ ์–ด ์ •์  ์ฝ˜ํ…์ธ ๋กœ ์ œ๊ณต (e.g. ๋ฉ”์ธ ํ™”๋ฉด)๋™์ ์ธ ํŽ˜์ด์ง€: ๋ฐ์ดํ„ฐ ๋ณ€ํ™”๊ฐ€ ๋งŽ์•„ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žฆ์Œ (e.g. ๊ฒŒ์‹œ๋ฌผ ๋ฆฌ์ŠคํŠธ) ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ, ๋‚˜๋Š” ์ •์ ์ธ ํŽ˜์ด์ง€๋Š” Next.js์˜ ์บ์‹œ ๊ธฐ๋Šฅ, ๋™์ ์ธ ํŽ˜์ด์ง€๋Š” React Query๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ด€๋ฆฌ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ํ•œ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ†ต์ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๋‹ค.๊ทธ๋ž˜์„œ React Query๋ฅผ SSR ํ™˜๊ฒฝ์—์„œ๋„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ–ˆ๋‹ค.     React QueryReact Query์˜ useQuery๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก ๋ฐ์ดํ„ฐ ํŒจ์นญ์„ ๋„์™€์ค€๋‹ค.SSR์—์„œ๋Š” ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์™„..
    2024. 12. 7.
  • Swiper ์‚ฌ์šฉ ํ›„๊ธฐ (feat. ํ…Œ์ผ์œˆ๋“œ)
    React์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” Swiper๋Š” ์ด๋ฏธ์ง€ ์บ๋Ÿฌ์…€์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ Tailwind CSS์™€ ํ•จ๊ป˜ Swiper๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋Š๋‚€ ์žฅ๋‹จ์ ์„ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.   ์žฅ์ 1. ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•˜๋‹คSwiper๋Š” ๊ธฐ๋ณธ์ ์ธ ์„ค์ •๋งŒ์œผ๋กœ๋„ ์‰ฝ๊ฒŒ ์บ๋Ÿฌ์…€์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.์บ๋Ÿฌ์…€์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์— ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ๋‚ด๋ถ€์— ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.  Slide 1 Slide 2   2. ๋ฌธ์„œํ™”๊ฐ€ ์ž˜๋˜์–ด์žˆ๋‹คSwiper๋Š” ๋ฌธ์„œ๊ฐ€ ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ๊ณ , ๋‹ค์–‘ํ•œ ์˜ˆ์ œ๋„ ์ œ๊ณต๋˜์–ด ์žˆ์–ด ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋„ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.Swiper - The Most Modern Mobile Touch Slider Swiper - The Most Modern Mobile Touch SliderSwiper..
    2024. 12. 7.
  • ์›น ์†Œ์ผ“๊ณผ Socket.io
    ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ Socket.io๋ฅผ ์‚ฌ์šฉํ•ด๋ณผ ๊ธฐํšŒ๊ฐ€ ์ƒ๊ฒผ๋‹ค. ์ƒ์†Œํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜€๊ณ , ์›น ์†Œ์ผ“์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋‹ค.๊ทธ๋™์•ˆ(์ง€๊ธˆ๋„) ์–ด๋ ค์›€์„ ์ฃผ์—ˆ๋˜ ์›น ์†Œ์ผ“๊ณผ Socket.io์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์ž.   ์›น ์†Œ์ผ“์ด๋ž€? ์›น ์†Œ์ผ“์€ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„ ์‚ฌ์ด์˜ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ํ†ต์‹  ์„ธ์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ณ ๊ธ‰ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์›น ์†Œ์ผ“ API๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„์˜ ์‘๋‹ต์„ ์œ„ํ•ด ์„œ๋ฒ„๋ฅผ ํด๋ง(polling) ์—†์ด๋„ ์ด๋ฒคํŠธ ์ค‘์‹ฌ ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. — MDN ๋ฌธ์„œ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด์ž.  REST API์™€์˜ ์ฐจ์ด์ REST API๋Š” ์š”์ฒญ → ์‘๋‹ต ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ตฌ์กฐ๋กœ, ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ..
    2024. 11. 25.