๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐ŸŒฑ

์ค‘๊ธ‰ ํ”„๋กœ์ ํŠธ: Linkbrary ๋ณธ๋ฌธ

์ฝ”๋“œ์ž‡ ์Šคํ”„๋ฆฐํŠธ ํ”„๋ก ํŠธ์—”๋“œ 11๊ธฐ

์ค‘๊ธ‰ ํ”„๋กœ์ ํŠธ: Linkbrary

soo2051 2025. 3. 21. 21:12

๐Ÿ“ข ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

  • ํ”„๋กœ์ ํŠธ ์ธ์› : ํ”„๋ก ํŠธ์—”๋“œ 4๋ช…
  • ๊ธฐ๊ฐ„ : 24.12.13 - 25.01.02
  • ํ”„๋กœ์ ํŠธ : ์›ํ•˜๋Š” ๋งํฌ๋ฅผ ์ €์žฅ, ๊ฒ€์ƒ‰, ๊ณต์œ  ๋ฐ ํด๋”๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค
  • GitHub: https://github.com/codeit-fe11-part3-team4/linkbrary
  • ํ˜‘์—… : GitHub, Notion, Discord
  • ๊ธฐ์ˆ  ์Šคํƒ : React, Next.js(App Route), Typescript, Tailwind CSS

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๋‚ด ์—ญํ• 

  • ํŒŒ์ผ ๊ตฌ์กฐ ๋ฐ tailwind ์„ค์ •
  • ํ—ค๋”, ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
  • ๋งํฌ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ (๋งํฌ ํŽ˜์ด์ง€, ์ฆ๊ฒจ์ฐพ๊ธฐ ํŽ˜์ด์ง€ ๊ณตํ†ต)
  • ์ฆ๊ฒจ์ฐพ๊ธฐ ํŽ˜์ด์ง€ ๊ตฌํ˜„
  • ๋ฐœํ‘œ

 

๐Ÿ’ป ํ”„๋กœ์ ํŠธ ๊ณผ์ •

๐Ÿ”— API ์—ฐ๋™ – Swagger ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ API ์‚ฌ์šฉ

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ฝ”๋“œ์ž‡ ์ธก์—์„œ ์ œ๊ณตํ•œ Swagger ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ API๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. Swagger ๋ฌธ์„œ๋Š” ๋ช…์„ธ๊ฐ€ ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ํ•„์š”ํ•œ ์š”์ฒญ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿงฉ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ์™€ ์—ญํ•  ๋ถ„๋‹ด

ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์—ˆ์œผ๋ฉฐ, ๊ฐ๊ฐ์„ ์ปดํฌ๋„ŒํŠธ ์ค‘์‹ฌ์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฉ”์ธ ๋žœ๋”ฉ ํŽ˜์ด์ง€
  • ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€
  • ๋งํฌ ํŽ˜์ด์ง€
  • ์ฆ๊ฒจ์ฐพ๊ธฐ ํŽ˜์ด์ง€

์ปดํฌ๋„ŒํŠธ๋Š” ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์—ˆ์œผ๋ฉฐ, ๊ฐ ๊ธฐ๋Šฅ๋ณ„ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ๊ด€๋ฆฌ๋ฅผ ์ฒด๊ณ„ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.


๐ŸŽ“ ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ ๊ณผ์ •

๋ฌธ์ œ (1) - ๋งํฌ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ๊ณตํ†ตํ™” ๋ฐ ์กฐ๊ฑด๋ถ€ UI ๋ Œ๋”๋ง

1. ๋ฌธ์ œ

๋งํฌ ํŽ˜์ด์ง€์™€ ์ฆ๊ฒจ์ฐพ๊ธฐ ํŽ˜์ด์ง€ ๋ชจ๋‘ ๋งํฌ ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๊ฐ๊ฐ์˜ ํŽ˜์ด์ง€์—์„œ ๋ณ„๋„ ๋กœ์ง๊ณผ UI ๊ตฌ์กฐ๋กœ ์ค‘๋ณต ๊ตฌํ˜„์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ผ€๋ฐฅ ๋ฒ„ํŠผ์ด๋‚˜ ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ฒ„ํŠผ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์€ ํŽ˜์ด์ง€๋ณ„๋กœ ๋…ธ์ถœ ์กฐ๊ฑด์ด ๋‹ฌ๋ž์ง€๋งŒ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

 

2. ํ•ด๊ฒฐ๋ฐฉ์‹

Card ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ณตํ†ตํ™”ํ•˜๊ณ , ๋‚ด๋ถ€์—์„œ usePathname()์„ ํ†ตํ•ด ํ˜„์žฌ ํŽ˜์ด์ง€ ๊ฒฝ๋กœ(/links, /favorite)๋ฅผ ํŒ๋ณ„ํ•˜์—ฌ boolean ๊ฐ’์„ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ผ€๋ฐฅ ๋ฒ„ํŠผ, ์ฆ๊ฒจ์ฐพ๊ธฐ ๋ฒ„ํŠผ์„ ์กฐ๊ฑด๋ถ€๋กœ ๋ Œ๋”๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฆ๊ฒจ์ฐพ๊ธฐ ํŽ˜์ด์ง€์—์„œ๋Š” ํ•ด๋‹น ๋ฒ„ํŠผ๋“ค์ด ์ˆจ๊ฒจ์ง€๊ณ , ๋งํฌ ํŽ˜์ด์ง€์—์„œ๋Š” ํด๋ฆญ ์‹œ API๋ฅผ ํ˜ธ์ถœํ•ด ์ฆ๊ฒจ์ฐพ๊ธฐ ์ƒํƒœ๋ฅผ ํ† ๊ธ€ํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

3. ๊ฒฐ๊ณผ

๋™์ผํ•œ UI ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŽ˜์ด์ง€๋ณ„ ๋™์ž‘์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , props ์—†์ด๋„ ํŽ˜์ด์ง€ ๊ตฌ๋ถ„์ด ๊ฐ€๋Šฅํ•ด์ง€๋ฉฐ ์ปดํฌ๋„ŒํŠธ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

→ ๊ฐœ์„  ๋ฐฉํ–ฅ : pathname ์˜์กด์ด ๊ฐ•ํ•ด์ง€๋ฉด์„œ ๋ผ์šฐํŒ… ๋ณ€๊ฒฝ ์‹œ UI ๋กœ์ง ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๊ตฌ์กฐ๊ฐ€ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ถ”ํ›„์—๋Š” ์ƒํƒœ ๊ธฐ๋ฐ˜ ํ˜น์€ context ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ตฌ์กฐ๋„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Œ

 

๋ฌธ์ œ (2) - CardList ์ปดํฌ๋„ŒํŠธ ๋„์ž… ์‹คํŒจ์™€ Card ๋‚ด๋ถ€ ํ†ตํ•ฉ

1. ๋ฌธ์ œ

์ดˆ๊ธฐ ์„ค๊ณ„์—์„œ๋Š” CardList ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „์ฒด ๋งํฌ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ  ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ ๋’ค, ๊ฐ๊ฐ์˜ Card ์ปดํฌ๋„ŒํŠธ๋กœ props๋ฅผ ๋‚ด๋ ค๋ณด๋‚ด๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ•˜๋ ค ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์˜€์ง€๋งŒ, ์‹ค์ œ ๊ตฌํ˜„ ๊ณผ์ •์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค:

  • props ๊นŠ์ด์™€ ์–‘์ด ๋งŽ์•„์ ธ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์—ฐ๊ฒฐ์ด ์ ์  ๋ณต์žกํ•ด์กŒ๊ณ , ์ค‘๊ฐ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜๋Š” ๊ณผ์ •๋„ ๋งŽ์•„์กŒ์Šต๋‹ˆ๋‹ค.
  • ํŽ˜์ด์ง€ ์ „ํ™˜, ์ฆ๊ฒจ์ฐพ๊ธฐ ์ƒํƒœ, ๊ฒ€์ƒ‰ ํ•„ํ„ฐ๋ง, ํด๋” ์•„์ด๋””, ํŽ˜์ด์ง€ ์‚ฌ์ด์ฆˆ ๋“ฑ ๋‹ค์–‘ํ•œ ์ƒํƒœ์˜ ํ๋ฆ„์ด ์—ฐ๋™๋˜๋ฉด์„œ, ์ƒํƒœ ์ „๋‹ฌ ๊ตฌ์กฐ๊ฐ€ ๊ผฌ์ด๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ , ๊ทธ์— ๋”ฐ๋ผ ํŠน์ • ๋™์ž‘์ด ํ•œ ์ชฝ ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ๋ฐ˜์˜๋˜๊ฑฐ๋‚˜ ๋น„๋™๊ธฐ ํ๋ฆ„์ด ์–ด๊ธ‹๋‚˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

2. ํ•ด๊ฒฐ๋ฐฉ์‹

๊ฒฐ๊ตญ CardList๋Š” ์ œ๊ฑฐํ•˜๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ Card ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์ƒํƒœ ์š”์ฒญ๊ณผ ๊ด€๋ฆฌ, ๋ Œ๋”๋ง์„ ํ†ตํ•ฉ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค

  • useEffect๋กœ pathname, folderId, searchQuery, currentPage, pageSize๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค API๋ฅผ ํ˜ธ์ถœํ•ด ๋ฐ์ดํ„ฐ ์š”์ฒญ์„ ์ง์ ‘ ์ฒ˜๋ฆฌ
  • putFavoriteLink API ์š”์ฒญ ํ›„ ์ „์ฒด ๋งํฌ ์ƒํƒœ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ํ๋ฆ„๋„ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ํ†ตํ•ฉ ๊ด€๋ฆฌ
  • searchQuery์— ๋”ฐ๋ผ filteredLinks ์ƒํƒœ๋ฅผ ๋งŒ๋“ค์–ด ๊ฒ€์ƒ‰ ํ•„ํ„ฐ๋ง๋„ Card ๋‚ด๋ถ€์—์„œ ์ฒ˜๋ฆฌ

 

3. ๊ฒฐ๊ณผ

 

  • props ์ „๋‹ฌ์ด ๋ณต์žกํ•˜๊ฒŒ ์–ฝํ˜€์žˆ๋˜ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ™”๋˜์–ด ์ฝ”๋“œ์˜ ์ถ”์  ๊ฐ€๋Šฅ์„ฑ๊ณผ ๋””๋ฒ„๊น… ํŽธ์˜์„ฑ์ด ๋†’์•„์กŒ์Šต๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€ ์ƒํƒœ ๊ธฐ๋ฐ˜ ๋ Œ๋”๋ง ํ๋ฆ„์ด ๋ช…ํ™•ํ•ด์กŒ๊ณ , ๋ฒ„ํŠผ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง, ์ฆ๊ฒจ์ฐพ๊ธฐ ๋™์ž‘ ๋“ฑ๋„ ํŽ˜์ด์ง€ ๊ธฐ์ค€์œผ๋กœ ์ž˜ ๋™์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ ์  ์ปค์ง€๋ฉด์„œ ๋ Œ๋”๋ง, ์š”์ฒญ ์ฒ˜๋ฆฌ, UI ์ œ์–ด ๋กœ์ง์ด ํ•˜๋‚˜์— ๋ชฐ๋ฆฌ๊ฒŒ ๋˜์–ด ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•œ ๊ตฌ์กฐ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

→ ๊ฐœ์„  ๋ฐฉํ–ฅ

ํ˜„ ๊ตฌ์กฐ๋Š” ๋น ๋ฅธ ๊ตฌํ˜„์—๋Š” ์œ ๋ฆฌํ–ˆ์ง€๋งŒ, ์žฅ๊ธฐ์ ์œผ๋กœ๋Š” ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์— ์žˆ์–ด ๊ตฌ์กฐ์ ์ธ ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ๋Š” Card ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๋งํฌ์™€ ์ฆ๊ฒจ์ฐพ๊ธฐ ๊ด€๋ จ API ์š”์ฒญ, ์ƒํƒœ ๊ด€๋ฆฌ, ๋ Œ๋”๋ง๊นŒ์ง€ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์–ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ ์  ๋ฌด๊ฑฐ์›Œ์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ ์ธก๋ฉด์—์„œ๋„ ์•„์‰ฌ์›€์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์›๋ž˜๋Š” CardList์—์„œ API ์š”์ฒญ๊ณผ ์ƒํƒœ๋ฅผ ์ „์—ญ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  Card์—๋Š” ๋ Œ๋”๋ง๋งŒ ์œ„์ž„ํ•˜๋ ค ํ–ˆ์ง€๋งŒ, props ์ „๋‹ฌ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ๋น„๋™๊ธฐ ํ๋ฆ„์ด ๊ผฌ์ด๋ฉด์„œ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” props ์ „๋‹ฌ์ด ๋ฐ˜๋“œ์‹œ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ๋ณด๋‹ค๋Š”, ์—ญํ• ๊ณผ ํ๋ฆ„์ด ๋ช…ํ™•ํžˆ ์ •์˜๋˜์ง€ ์•Š์€ ์„ค๊ณ„์˜ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.

์ด์— ๋”ฐ๋ผ ๊ฐ ํŽ˜์ด์ง€์—์„œ ํ•„์š”ํ•œ API ํ˜ธ์ถœ๊ณผ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๊ณ , Card ์ปดํฌ๋„ŒํŠธ๋Š” UI ๋ Œ๋”๋ง๋งŒ ๋งก๋„๋ก ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉํ–ฅ์ด ์ ํ•ฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๋Š” ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ์ง€ ๊ฒฐ์ •ํ•˜๊ณ , Card๋Š” ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์ค„์ง€์—๋งŒ ์ง‘์ค‘ํ•˜๊ฒŒ ๋จ์œผ๋กœ์จ ๊ตฌ์กฐ์  ๋ช…ํ™•์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํŽ˜์ด์ง€ ๋‹จ์—์„œ๋Š” React Query, Suspense, ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๋“ฑ ๋‹ค์–‘ํ•œ ์ „๋žต์„ ์ž์œ ๋กญ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ฆ๊ฒจ์ฐพ๊ธฐ ํŽ˜์ด์ง€์™€ ๋งํฌ ํŽ˜์ด์ง€์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ ์†Œ์Šค๊ฐ€ ๋ช…ํ™•ํžˆ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ํŽ˜์ด์ง€ ๋‹จ์—์„œ API๋ฅผ ๋ถ„๊ธฐํ•˜๋Š” ๊ฒƒ์ด ๋” ๋ช…๋ฃŒํ•œ ํ๋ฆ„์„ ๋งŒ๋“ค์–ด๋ƒ…๋‹ˆ๋‹ค.

props๊ฐ€ ๋งŽ์•„์ง€๋Š” ์ƒํ™ฉ์€ ํ•„์—ฐ์ ์ผ ์ˆ˜ ์žˆ์œผ๋‚˜, ์ด๋Š” ๋ฐ˜๋“œ์‹œ ์•ˆํ‹ฐํŒจํ„ด์ด ์•„๋‹ˆ๋ฉฐ ๋ช…ํ™•ํ•œ ์„ค๊ณ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉด ์˜คํžˆ๋ ค ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋” ์‰ฝ๊ฒŒ ์ถ”์ ํ•˜๊ณ  ํ†ต์ œํ•  ์ˆ˜ ์žˆ๊ณ , ๋ถˆํ•„์š”ํ•œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ์˜ ๋„์ž…์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ณต์œ ๊ฐ€ ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” Context, Zustand์™€ ๊ฐ™์€ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋„์ž…ํ•˜์—ฌ ์—ญํ•  ๋ถ„๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ํ•„์š”ํ•œ ๊ณต์œ ๋Š” ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ–ฅํ›„ ๋ฆฌํŒฉํ† ๋ง ์‹œ์—๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ฑ…์ž„ ๋‹จ์œ„๋ฅผ ์žฌ์ •์˜ํ•˜๊ณ , CardList → Card ๊ตฌ์กฐ๋ฅผ ์žฌ๋„์ž…ํ•˜๋˜ ์ƒํƒœ ํ๋ฆ„์„ ํŽ˜์ด์ง€ ๋˜๋Š” ๋ž˜ํผ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ปจํŠธ๋กคํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐœ์„ ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

 

  • ํŽ˜์ด์ง€: ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ์ง€ ๊ฒฐ์ • (API ํ˜ธ์ถœ, ํ•„ํ„ฐ๋ง, ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋“ฑ)
  • CardList: ๋ฐ˜๋ณต ๋ Œ๋”๋ง, key ๋ฐ layout ๊ตฌ์„ฑ ๋“ฑ ๋ชฉ๋ก UI ์ฑ…์ž„
  • Card: ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”์™€ ์œ ์ € ์ธํ„ฐ๋ž™์…˜ ๋‹ด๋‹น (UI ์ค‘์‹ฌ)

 

 

๋ฌธ์ œ (3) - ๋ฐ˜์‘ํ˜• ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ์œ„ํ•œ useViewport ํ›… ๊ตฌํ˜„

1. ๋ฌธ์ œ

์ดˆ๊ธฐ์—๋Š” pageSize ๊ฐ’์„ ๊ณ ์ •(ํ•˜๋“œ์ฝ”๋”ฉ)ํ•˜๊ฑฐ๋‚˜, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์กฐ๊ฑด๋ฌธ์œผ๋กœ ํ™”๋ฉด ํฌ๊ธฐ๋ฅผ ํŒ๋ณ„ํ•ด props๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ตฌ์กฐ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค:

  • window.innerWidth๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์กฐ๊ฑด ๋ถ„๊ธฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ณณ์— ํฉ์–ด์ ธ ์žˆ์–ด ๋กœ์ง ์ค‘๋ณต์ด ๋ฐœ์ƒํ–ˆ๊ณ ,
  • ํŽ˜์ด์ง€ ํฌ๊ธฐ ๋ณ€๊ฒฝ ์‹œ pageSize๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜๋˜์ง€ ์•Š์•„,
    ํ™”๋ฉด ๋„ˆ๋น„๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ๋ณด์—ฌ์ฃผ๋Š” ์นด๋“œ ์ˆ˜๊ฐ€ ๋™์ ์œผ๋กœ ๋ฐ”๋€Œ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ prop ์ „๋‹ฌ ๊ณผ์ •์—์„œ๋„ viewportWidth์™€ pageSize ๊ฐ„์˜ ๋™๊ธฐํ™”๊ฐ€ ๊ผฌ์—ฌ ํŽ˜์ด์ง€๋„ค์ด์…˜์ด ๋น„์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ฑฐ๋‚˜ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

 

2. ํ•ด๊ฒฐ๋ฐฉ์‹

useViewport๋ผ๋Š” ์ปค์Šคํ…€ ํ›…์„ ๋„์ž…ํ•ด ํ™”๋ฉด ํฌ๊ธฐ์™€ ํŽ˜์ด์ง€ ํฌ๊ธฐ๋ฅผ ํ†ตํ•ฉ์ ์œผ๋กœ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€์—์„œ resize ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ width, pageSize, ๋””๋ฐ”์ด์Šค ๊ตฌ๋ถ„ ์ƒํƒœ(isPC, isTablet, isMobile)๋ฅผ ํ•จ๊ป˜ ๊ด€๋ฆฌํ–ˆ์œผ๋ฉฐ, ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์ด ํ›…๋งŒ ํ˜ธ์ถœํ•˜๋ฉด, ํ˜„์žฌ ํ™”๋ฉด์— ๋งž๋Š” pageSize๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

 

3. ๊ฒฐ๊ณผ

๊ธฐ์กด์— ๋ฐœ์ƒํ•˜๋˜ prop ์ „๋‹ฌ ์˜ค๋ฅ˜์™€ ํ•˜๋“œ์ฝ”๋”ฉ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๋ธŒ๋ผ์šฐ์ € ํฌ๊ธฐ์— ๋”ฐ๋ผ ํŽ˜์ด์ง€ ์นด๋“œ ์ˆ˜๊ฐ€ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋ฉด์„œ UX๊ฐ€ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

→ ๊ฐœ์„  ๋ฐฉํ–ฅ : ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ€ window ๊ฐ์ฒด์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ํ™˜๊ฒฝ(window๋Š” ์—๋Ÿฌ ๋ฐœ์ƒ)์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์กฐ๊ฑด ๋ถ„๊ธฐ๋ฅผ ๋ณด์™„ํ•  ํ•„์š”๊ฐ€ ์žˆ์œผ๋ฉฐ(useEffect ๋‚ด๋ถ€์—์„œ๋งŒ window ๊ด€๋ จ ์ž‘์—…ํ•˜๋„๋ก ๊ตฌ์กฐํ™”), ์ถ”ํ›„์—๋Š” ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋” ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด Context ๊ธฐ๋ฐ˜ ๋˜๋Š” ์ƒํƒœ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ ๋กœ์ง ์ตœ์ ํ™”๋„ ๊ณ ๋ ค


๐ŸŽ“ ๋ฐฐ์šด ์ /๋А๋‚€ ์ 

1. App Router ๊ธฐ๋ฐ˜์˜ ํŽ˜์ด์ง€ ๊ตฌ์กฐ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„ ๊ฒฝํ—˜

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Next.js์˜ App Router ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ์ง์ ‘ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด Pages Router์™€๋Š” ๋‹ค๋ฅด๊ฒŒ, App Router๋Š” ํด๋” ๊ธฐ๋ฐ˜์˜ ๊ตฌ์กฐ์™€ ๋ ˆ์ด์•„์›ƒ, ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์˜ ๋ถ„๋ฆฌ, ์„œ๋ฒ„ ์•ก์…˜ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฐœ๋…์ด ๋„์ž…๋˜์–ด ์žˆ์–ด ์ฒ˜์Œ์—๋Š” ๋‚ฏ์„ค์—ˆ์ง€๋งŒ, ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์‹ค์ œ ์ ์šฉ ๋ฐฉ์‹์„ ์ตํžˆ๊ณ  ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š” ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝํ—˜์„ ํ†ตํ•ด Next.js์˜ ์ตœ์‹  ๋ผ์šฐํŒ… ๋ฐฉ์‹์„ ๋” ๊นŠ์ด ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ๊ตฌ์กฐ์ ์ธ ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ๊ฐ๊ฐ๋„ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

2. Context๋ฅผ ํ™œ์šฉํ•œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์‹ค์ „ ๊ฒฝํ—˜

๋กœ๊ทธ์ธ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด Context API๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ AuthContext๋ฅผ ํŒ€์›์ด ๊ตฌํ˜„ํ•˜์˜€๊ณ , ์ €๋Š” ํ•ด๋‹น ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด useAuth() ํ›…์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ณ  ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์—์„œ ๊ทธ์น˜์ง€ ์•Š๊ณ  Context ๋‚ด๋ถ€์˜ ํ๋ฆ„์„ ๋ถ„์„ํ•˜๋ฉด์„œ ์ƒํƒœ๋ฅผ ์ „์—ญ์—์„œ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ์˜ ํ•„์š”์„ฑ๊ณผ ์žฅ์ ์„ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

3. API ํ๋ฆ„๊ณผ ๋ฐฑ์—”๋“œ ๋กœ์ง ํŒŒ์•…์˜ ์ค‘์š”์„ฑ

์นด๋“œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ณตํ†ตํ™”ํ•˜๊ณ  ์ฆ๊ฒจ์ฐพ๊ธฐ ํŽ˜์ด์ง€์— ์ ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ, ์ฆ๊ฒจ์ฐพ๊ธฐ API ํ˜ธ์ถœ ํ๋ฆ„์„ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ ์ƒํƒœ๋กœ ์ž‘์—…์„ ์‹œ์ž‘ํ•ด ์‹œ๊ฐ„์ด ์ง€์ฒด๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ๊ฒจ์ฐพ๊ธฐ๋œ ๋งํฌ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ์ฆ๊ฒจ์ฐพ๊ธฐ ํด๋”์— ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ „์ œ ์กฐ๊ฑด์„ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์•„๋ฌด๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ˜ธ์ถœํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ดํ›„ ํŒ€์›์˜ ๋„์›€์„ ๋ฐ›์•„ API ์‚ฌ์šฉ ํ๋ฆ„์„ ๋‹ค์‹œ ์ •๋ฆฌํ•˜๊ณ  ๋‚˜์„œ์•ผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์ด ๊ณผ์ •์„ ํ†ตํ•ด ๋‹จ์ˆœํžˆ ํ™”๋ฉด UI ๊ตฌํ˜„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๊ธฐ๋Šฅ ์ž‘๋™์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฐฑ์—”๋“œ ๋กœ์ง๊นŒ์ง€ ์ •ํ™•ํžˆ ์ดํ•ดํ•œ ๋’ค ์ž‘์—…์— ๋“ค์–ด๊ฐ€๋Š” ์Šต๊ด€์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€๋ฅผ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ข ์•„์‰ฌ์šด ์ 

1. API ๋ช…์„ธ ํ™•์ธ ๋ฐ ํ๋ฆ„ ํŒŒ์•…์˜ ๋ถ€์กฑ

์ฆ๊ฒจ์ฐพ๊ธฐ ํŽ˜์ด์ง€๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ, ์ฆ๊ฒจ์ฐพ๊ธฐ ๋งํฌ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์ „์— ๋ณ„๋„์˜ API๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๋งํฌ๋ฅผ ์ฆ๊ฒจ์ฐพ๊ธฐ ํด๋”์— ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ณผ์ •์„ ๋†“์น˜๊ณ  ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์•„๋ฌด ๋ฐ์ดํ„ฐ๋„ ๋ฐ›์•„์˜ค์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ๊ฐ€ ์ง€์†๋˜์—ˆ๊ณ , ๋ฌธ์ œ ์›์ธ์„ ์ฐพ๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ ํŒ€์›๊ณผ์˜ ์†Œํ†ต์„ ํ†ตํ•ด API ๊ตฌ์กฐ์™€ ํ๋ฆ„์„ ์žฌ์ •๋น„ํ•˜๋ฉด์„œ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ, ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ๋ฐฑ์—”๋“œ ๋กœ์ง๊นŒ์ง€ ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•˜๊ณ  ํ๋ฆ„์„ ๋จผ์ € ์„ค๊ณ„ํ–ˆ๋”๋ผ๋ฉด ๋” ์ˆ˜์›”ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒƒ์ด๋ผ๋Š” ์•„์‰ฌ์›€์ด ๋‚จ์•˜์Šต๋‹ˆ๋‹ค.

 

2. Context ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์œ„์ฃผ ์ ‘๊ทผ

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

 

3. ์นด๋“œ ์ปดํฌ๋„ŒํŠธ์™€ ๋ฆฌ์ŠคํŠธ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ ์‹คํŒจ

์ฒ˜์Œ์—๋Š” ๋งํฌ ๋ชฉ๋ก์„ CardList์™€ Card ํ˜•ํƒœ๋กœ ๋ถ„๋ฆฌ๋œ ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ–ˆ์ง€๋งŒ, API ํ˜ธ์ถœ ํ๋ฆ„๊ณผ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ์—‡๊ฐˆ๋ฆฌ๋ฉด์„œ ์˜ˆ์ƒ๋ณด๋‹ค ๋ณต์žกํ•œ ๊ตฌ์กฐ๊ฐ€ ๋˜์—ˆ๊ณ , ๊ฒฐ๊ตญ Card ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜์—์„œ ๋ชจ๋“  ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฌด๊ฑฐ์›Œ์ง€๊ณ  ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ ์ธก๋ฉด์—์„œ๋„ ์•„์‰ฌ์›€์ด ๋‚จ์•˜์Šต๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ๋กœ์ง์„ ์ถ”๊ฐ€ํ•œ ์ ์ด ์›์ธ์ด์—ˆ์œผ๋ฉฐ, ์ดํ›„์—๋Š” ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ ํ๋ฆ„๊ณผ ์ปดํฌ๋„ŒํŠธ ์—ญํ• ์„ ๋” ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•œ ๋’ค ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐœ์„ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.