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

๐ŸŒฑ

๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ: Fandom-k ๋ณธ๋ฌธ

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

๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ: Fandom-k

soo2051 2025. 3. 21. 20:07

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

  • ํ”„๋กœ์ ํŠธ ์ธ์› : ํ”„๋ก ํŠธ์—”๋“œ 3๋ช…
  • ๊ธฐ๊ฐ„ : 24.10.24 - 24.11.08
  • ํ”„๋กœ์ ํŠธ : ํŒฌ๋“ค์ด ์ข‹์•„ํ•˜๋Š” ์•„์ด๋Œ์—๊ฒŒ ํˆฌํ‘œํ•˜๊ณ  ํ›„์›ํ•  ์ˆ˜ ์žˆ๋Š” ํŒฌ๋ค ํ”Œ๋žซํผ
  • GitHub: https://github.com/FandomKteam5/main
  • ํ˜‘์—… : GitHub, Notion, Discord
  • ๊ธฐ์ˆ  ์Šคํƒ : React, CSS

 

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

  • ์ด๋‹ฌ์˜ ์ฐจํŠธ
  • ํˆฌํ‘œ ๋ชจ๋‹ฌ + ํฌ๋ ˆ๋”ง ๋ถ€์กฑ ๋ชจ๋‹ฌ 
  • ๋ฐœํ‘œ ์ž๋ฃŒ ์ œ์ž‘

 

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

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

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

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

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

  • ๋ฉ”์ธ ๋žœ๋”ฉ ํŽ˜์ด์ง€
  • ์ด๋‹ฌ์˜ ์ฐจํŠธ
  • ํ›„์›ํ•˜๊ธฐ
  • ๋งˆ์ดํŽ˜์ด์ง€

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


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

๋ฌธ์ œ (1) - ์ด๋‹ฌ์˜ ์ฐจํŠธ๋ฅผ ์—ฌ์ž ์•„์ด๋Œ / ๋‚จ์ž ์•„์ด๋Œ๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ ์ธ๊ธฐ ์ˆœ์œผ๋กœ ์ •๋ ฌ

1. ๋ฌธ์ œ

์ฐจํŠธ๋Š” ๋‚จ์ž/์—ฌ์ž ์•„์ด๋Œ๋กœ ๋ถ„๋ฅ˜๋˜์–ด์•ผ ํ–ˆ๊ณ , ์ธ๊ธฐ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ '๋” ๋ณด๊ธฐ' ๋ฒ„ํŠผ์„ ํ†ตํ•ด ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™•์žฅํ•˜๋Š” UX๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

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

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

 

3. ๊ฒฐ๊ณผ

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

๋˜ํ•œ '๋” ๋ณด๊ธฐ' ๋ฒ„ํŠผ์„ ํ†ตํ•ด ํŽ˜์ด์ง€๋„ค์ด์…˜ ์—†์ด ๋ชฉ๋ก์„ ์ด์–ด์„œ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ–ˆ์ง€๋งŒ, ํ•ญ๋ชฉ ์ˆ˜๊ฐ€ 10๊ฐœ ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ์—๋„ ๋ฒ„ํŠผ์ด ๋น„ํ™œ์„ฑํ™”๋˜์ง€ ์•Š๊ณ  ๊ณ„์† ํ‘œ์‹œ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

→ ๊ฐœ์„  ๋ฐฉํ–ฅ : ์‘๋‹ต๋ฐ›์€ ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋”๋ณด๊ธฐ ๋ฒ„ํŠผ ๋…ธ์ถœ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•˜๊ฑฐ๋‚˜, ์„œ๋ฒ„ ์‘๋‹ต ๋‚ด์— 'hasMore' ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์šฉํ•œ ์กฐ๊ฑด ๋ถ„๊ธฐ ๋“ฑ์„ ํ†ตํ•ด ๋ณด๋‹ค ์•ˆ์ •์ ์ธ ๋กœ๋”ฉ ๋กœ์ง์„ ์„ค๊ณ„

 

๋ฌธ์ œ (2) - '์ฐจํŠธ ํˆฌํ‘œํ•˜๊ธฐ' ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํˆฌํ‘œ ๋ชจ๋‹ฌ์ฐฝ์„ ํ‘œ์‹œํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ฐธ์—ฌ ์œ ๋„

1. ๋ฌธ์ œ

ํˆฌํ‘œ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํ‘œ์‹œ๋˜๋Š” ๋ชจ๋‹ฌ(ChartModal)๊ณผ, ํฌ๋ ˆ๋”ง์ด ๋ถ€์กฑํ•  ๊ฒฝ์šฐ ํ‘œ์‹œ๋˜๋Š” ๋ชจ๋‹ฌ(LackModal)์ด ์—ฐ์†์ ์œผ๋กœ ์—ด๋ฆฌ๋Š” ๊ตฌ์กฐ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํฌ๋ ˆ๋”ง ๋ถ€์กฑ ๋ชจ๋‹ฌ์„ ๋‹ซ์œผ๋ฉด, ๊ทธ๋ณด๋‹ค ๋จผ์ € ์—ด๋ ธ๋˜ ํˆฌํ‘œ ๋ชจ๋‹ฌ๊นŒ์ง€ ํ•จ๊ป˜ ๋‹ซํžˆ๋Š” ํ˜„์ƒ์ด ์žˆ์—ˆ๊ณ , ์ด๋Š” ๋ชจ๋‹ฌ์˜ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋Š” ์ ์—์„œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ํ˜ผ๋ž€์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์˜€์Šต๋‹ˆ๋‹ค.

 

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

๊ธฐ์กด์—๋Š” ํฌ๋ ˆ๋”ง ๋ถ€์กฑ ์‹œ closeModal()์„ ํ˜ธ์ถœํ•ด ๋‘ ๋ชจ๋‹ฌ์ด ๋ชจ๋‘ ๋‹ซํ˜”์ง€๋งŒ, ์ด ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ด ๋ชจ๋‹ฌ ์ƒํƒœ๋ฅผ ๋ถ„๋ฆฌ ๊ด€๋ฆฌํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
isOpen(ํˆฌํ‘œ ๋ชจ๋‹ฌ), showLackModal(ํฌ๋ ˆ๋”ง ๋ชจ๋‹ฌ) ๋‘ ์ƒํƒœ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง ๋˜ํ•œ ํ•ด๋‹น ์ƒํƒœ์— ๋”ฐ๋ผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ œ์–ดํ•จ์œผ๋กœ์จ ๋ชจ๋‹ฌ ๊ฐ„ ์ œ์–ด ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

3. ๊ฒฐ๊ณผ

ํˆฌํ‘œ ํ๋ฆ„์—์„œ ๋ชจ๋‹ฌ ์ œ์–ด๊ฐ€ ์•ˆ์ •์ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ UX ํ˜ผ๋ž€์ด ์ค„์–ด๋“ค์—ˆ๊ณ , ๋‘ ๋ชจ๋‹ฌ์˜ ๋‹ซํž˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ๋˜๋ฉด์„œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

→ ๊ฐœ์„  ๋ฐฉํ–ฅ : ํ˜„์žฌ๋„ ๋‘ ๋ชจ๋‹ฌ์ด ๊ฐ™์€ DOM ํŠธ๋ฆฌ ๋‚ด์—์„œ ์ค‘์ฒฉ ๋ Œ๋”๋ง๋˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ–ฅํ›„์—๋Š” ์ „์—ญ ์ƒํƒœ๋กœ ๋ชจ๋‹ฌ์„ ํ†ตํ•ฉ ์ œ์–ดํ•˜๋Š” ๋ฐฉ์‹์„ ๋„์ž…

 

๋ฌธ์ œ (3) - API ์š”์ฒญ ๋กœ์ง ๋ชจ๋“ˆํ™” ๋ฐ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

1. ๋ฌธ์ œ

๋ชจ๋“  API ์š”์ฒญ ๋กœ์ง์„ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ถ„๋ฆฌํ•ด ๋ชจ๋“ˆํ™”ํ•˜๊ณ , ์š”์ฒญ๋งˆ๋‹ค fetch, try-catch, response.ok ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ ์šฉํ•˜์—ฌ ์ผ๊ด€๋œ ์š”์ฒญ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ปค์Šคํ…€ ํ›… useLoad๋ฅผ ํ™œ์šฉํ•ด ๋กœ๋”ฉ ๋ฐ ์—๋Ÿฌ ์ƒํƒœ๋ฅผ ํ•จ๊ป˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐํ™”๋Š” ์ด๋ฃจ์–ด์กŒ์ง€๋งŒ, ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๊ฐ€ ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์œผ๋กœ ํ™•์žฅ๋˜์ง€๋Š” ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ผ๋ถ€ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์—ฌ์ „ํžˆ try-catch ๋ฐฉ์‹์œผ๋กœ ์ง์ ‘ API ํ˜ธ์ถœ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋ณ„๋„๋กœ ํ•˜์ง€ ์•Š์•„ ์ „์ฒด ํ๋ฆ„์—์„œ ๋กœ๋”ฉ/์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์˜ ์ผ๊ด€์„ฑ ๋ถ€์กฑ๊ณผ ์ฝ”๋“œ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณต๋˜๋Š” ํ”ผ๋“œ๋ฐฑ์€ ๋Œ€๋ถ€๋ถ„ alert() ๋˜๋Š” ์ฝ˜์†” ๋กœ๊ทธ ์ˆ˜์ค€์— ๊ทธ์ณ, UX ํ–ฅ์ƒ ์ธก๋ฉด์—์„œ๋Š” ์•„์‰ฌ์›€์ด ๋‚จ์•˜์Šต๋‹ˆ๋‹ค.

 

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

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

 

3. ๊ฒฐ๊ณผ

API ์š”์ฒญ ํ๋ฆ„์€ ์ •๋ฆฌ๋˜์–ด ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์กŒ๊ณ , ์ผ๋ถ€ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ํ›…์„ ํ†ตํ•œ ์žฌ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

 

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

try-catch
์žฅ์ :
- ์ง๊ด€์ ์ธ ํ๋ฆ„ ์ œ์–ด: ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์ž๋™์œผ๋กœ catch๋กœ ํ๋ฆ„์ด ์ด๋™
- ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜ ํฌ์ฐฉ ๊ฐ€๋Šฅ: ๋„คํŠธ์›Œํฌ ์—๋Ÿฌ, JSON ํŒŒ์‹ฑ ์˜ค๋ฅ˜ ๋“ฑ
- async/await๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ ์‹œ ๋™๊ธฐ์ ์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ
๋‹จ์ :
- ํ๋ฆ„ ์ œ์–ด์˜ ์œ ์—ฐ์„ฑ์ด ๋ถ€์กฑํ•˜๊ณ , ์„ฑ๊ณต/์‹คํŒจ ์™ธ ์ƒํƒœ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์–ด๋ ค์›€
- catch ๋‚ด๋ถ€๊ฐ€ ๋ณต์žกํ•ด์ง€๊ธฐ ์‰ฌ์›€ (์—๋Ÿฌ ๋ถ„๊ธฐ ๋กœ์ง ์ถ”๊ฐ€ ํ•„์š”)
- ์˜๋„๋œ ์‹คํŒจ๋„ ์—๋Ÿฌ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ, ์˜ค๋ฅ˜์˜ ์˜๋ฏธ๊ฐ€ ๋ถˆ๋ช…ํ™•ํ•ด์งˆ ์ˆ˜ ์žˆ์Œ

Result ๊ฐ์ฒด ๋ฐ˜ํ™˜ ๋ฐฉ์‹
์žฅ์ :
- ์„ฑ๊ณต/์‹คํŒจ ์—ฌ๋ถ€๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ„๊ธฐ ๊ฐ€๋Šฅ
- ์ƒํƒœ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์— ๋งž๋Š” UX ํ”ผ๋“œ๋ฐฑ ์ฒ˜๋ฆฌ ์šฉ์ด
- ์—๋Ÿฌ๋ฅผ ์˜ˆ์™ธ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋กœ ๋‹ค๋ฃธ์œผ๋กœ์จ ๋กœ์ง ์˜ˆ์ธก ๊ฐ€๋Šฅ
- ์ปดํฌ๋„ŒํŠธ์—์„œ try-catch ์—†์ด ๋กœ์ง ๋ถ„๊ธฐ ๊ฐ€๋Šฅ (์ฝ”๋“œ ๊ฐ„๊ฒฐ)
๋‹จ์ :
- ๋ชจ๋“  API ์š”์ฒญ ํ•จ์ˆ˜๊ฐ€ ๋™์ผํ•œ ํ˜•์‹์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ฝ”๋“œ ํ†ต์ผ์„ฑ ํ•„์š”
- ์—๋Ÿฌ ์ถ”์  ์‹œ try-catch๋ณด๋‹ค ๋””๋ฒ„๊น…์ด ์–ด๋ ต๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ์Œ
- ์„ฑ๊ณต/์‹คํŒจ ๋ถ„๊ธฐ ์ฝ”๋“œ๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž‘์„ฑ๋˜์–ด ์žฅํ™ฉํ•ด์งˆ ์ˆ˜ ์žˆ์Œ

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

React Query
์žฅ์ :
- ์บ์‹ฑ, ์ƒํƒœ ๊ด€๋ฆฌ, ๋ฆฌํŽ˜์นญ, ์—๋Ÿฌ ์ฒ˜๋ฆฌ๊นŒ์ง€ ์ž๋™ํ™”
- isLoading, isError, data, error ๋“ฑ์˜ ์ƒํƒœ๋ฅผ ์ฆ‰์‹œ ํ™œ์šฉ ๊ฐ€๋Šฅ
- refetch, onSuccess, onError, onSettled ๋“ฑ ๋น„๋™๊ธฐ ํ๋ฆ„์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ด ๊ฐ€๋Šฅ
- ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์ „์—ญ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
๋‹จ์ :
- ๊ฐœ๋…์ด ๋งŽ์•„ ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ์žˆ์Œ (QueryKey, QueryClient ๋“ฑ)
- ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ๋Š” ๊ณผํ•œ ์„ค์ •์ผ ์ˆ˜ ์žˆ์Œ
- React Query ์ž์ฒด ๋™์ž‘๊ณผ ์ถฉ๋Œ ์‹œ ๋””๋ฒ„๊น… ์–ด๋ ค์›€์ด ์žˆ์Œ

Fandom-K ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์š”์ฒญ ํ๋ฆ„์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด fetch + try-catch + response.ok ๊ธฐ๋ฐ˜์˜ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ๊ธฐ๊ฐ„์˜ ์†Œ๊ทœ๋ชจ ํŒ€ ํ”„๋กœ์ ํŠธ๋ผ๋Š” ์ƒํ™ฉ์—์„œ ๋น ๋ฅธ ๊ฐœ๋ฐœ๊ณผ ์ง๊ด€์ ์ธ ๊ตฌํ˜„์—๋Š” ์ ํ•ฉํ–ˆ์ง€๋งŒ, ์ƒํƒœ๋ณ„ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ์˜ ์œ ์—ฐ์„ฑ ๋ถ€์กฑ๊ณผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ ์„ค๊ณ„์˜ ์–ด๋ ค์›€์ด๋ผ๋Š” ํ•œ๊ณ„๋ฅผ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ๋‹จ์ˆœํ•œ ํ”„๋กœ์ ํŠธ์ผ์ˆ˜๋ก ์š”์ฒญ ์„ฑ๊ณต ์—ฌ๋ถ€ ์™ธ์—๋„ 400, 409์™€ ๊ฐ™์€ HTTP ์ƒํƒœ์— ๋”ฐ๋ผ ๋ช…ํ™•ํ•œ ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ(UI ๋ถ„๊ธฐ)์ด ํ•„์š”ํ•˜๋ฏ€๋กœ, ๋‹จ์ผ catch ๋ธ”๋ก์—์„œ ๋ชจ๋“  ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹๋ณด๋‹ค๋Š” try-catch ๊ตฌ์กฐ ์•ˆ์— Result ๊ฐ์ฒด ํŒจํ„ด์„ ํ•จ๊ป˜ ํ™œ์šฉํ•ด ์ƒํƒœ๋ณ„ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๊ฐœ์„ ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ž์œผ๋กœ๋Š” axios, ์ธํ„ฐ์…‰ํ„ฐ, ์ปค์Šคํ…€ ํ›…, Result ๊ฐ์ฒด ํŒจํ„ด ๋“ฑ์œผ๋กœ API ์š”์ฒญ ๋กœ์ง์„ ๊ตฌ์กฐํ™”ํ•˜๊ณ  ์ „์—ญ์ ์œผ๋กœ ์ผ๊ด€๋œ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ์ฒด๊ณ„๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ, UX์˜ ์ •๊ตํ•จ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊นŒ์ง€ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐœ์ „์‹œํ‚ค๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฌธ์ œ (4) - ํˆฌํ‘œ ํ›„ ์ƒํƒœ ๋ฐ˜์˜์„ ์œ„ํ•œ window.location.reload() ์ฒ˜๋ฆฌ

1. ๋ฌธ์ œ

ํˆฌํ‘œ๋ฅผ ์™„๋ฃŒํ•˜๋”๋ผ๋„ ์ฐจํŠธ ๋ฐ์ดํ„ฐ์— ์ฆ‰์‹œ ๋ฐ˜์˜๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ "์ •์ƒ์ ์œผ๋กœ ํˆฌํ‘œ๊ฐ€ ๋˜์—ˆ๋Š”์ง€" ํ™•์ธ์ด ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ”ผ๋“œ๋ฐฑ ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ UX ์†์‹ค๋กœ ์ด์–ด์กŒ์Šต๋‹ˆ๋‹ค.

 

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

ํˆฌํ‘œ ์„ฑ๊ณต ์‹œ window.location.reload()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํŽ˜์ด์ง€ ์ „์ฒด ์ƒˆ๋กœ๊ณ ์นจ์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

3. ๊ฒฐ๊ณผ

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

 

→ ๊ฐœ์„  ๋ฐฉํ–ฅ : ์ƒํƒœ ๊ธฐ๋ฐ˜์œผ๋กœ ํˆฌํ‘œ ์„ฑ๊ณต ์‹œ ์ฐจํŠธ ๋ฐ์ดํ„ฐ๋งŒ refetchํ•˜์—ฌ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜๋˜๋„๋ก ๊ฐœ์„  ํ•„์š”


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

1. ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์˜ ์ค‘์š”์„ฑ

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

 

2. ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๊ตฌ์กฐํ™”์˜ ํ•„์š”์„ฑ

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” try-catch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ์š”์ฒญ ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. API ํ˜ธ์ถœ ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ณณ์— ํฉ์–ด์ ธ ์žˆ์–ด ์ค‘๋ณต ๋กœ์ง์ด ๋งŽ๊ณ , ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์› ์œผ๋ฉฐ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ƒํƒœ์— ๋”ฐ๋ฅธ UI ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฏธํกํ–ˆ๊ณ  ๋กœ๋”ฉ ์ค‘ ์ƒํƒœ์™€ ์‹คํŒจ ์ƒํƒœ๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ๋ชปํ•ด ํ๋ฆ„์ด ๋ณต์žกํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ alert()์ด๋‚˜ console.log()๋กœ๋งŒ ์—๋Ÿฌ๋ฅผ ํ™•์ธํ•˜๋Š” ๋“ฑ ํ”ผ๋“œ๋ฐฑ ๋ฐฉ์‹์ด ๋‹จ์ˆœํ•˜๊ณ  ํ•œ์ •์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

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

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด API ์š”์ฒญ ๋กœ์ง์„ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ /services/RankApi.js ํŒŒ์ผ์— ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์š”์ฒญ ํ•จ์ˆ˜๋Š” fetch ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ , response.ok๋ฅผ ํ†ตํ•ด HTTP ์ƒํƒœ๋ฅผ ์ฒดํฌํ•œ ๋’ค, try-catch๋กœ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  response.json()์œผ๋กœ ํŒŒ์‹ฑํ•˜๋Š” ๊ตฌ์กฐ๋กœ ํ†ต์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ API ์š”์ฒญ ์ฝ”๋“œ๋ฅผ ํ•œ ๊ณณ์— ๋ชจ์•„๋‘์ž ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•จ์ˆ˜๋งŒ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ , ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ปค์Šคํ…€ ํ›…์„ ์‚ฌ์šฉํ•œ ๊ฒฝํ—˜์€ ์ œํ•œ์ ์ด์—ˆ์œผ๋ฉฐ, ํ”„๋กœ์ ํŠธ ์ „์ฒด์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•œ ์ปค์Šคํ…€ ํ›…์€ ๋ฐ˜์‘ํ˜• ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ useWindowSize ํ•˜๋‚˜๋ฟ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ›…์€ ๋ทฐํฌํŠธ ํฌ๊ธฐ์— ๋”ฐ๋ผ ํŽ˜์ด์ง€ ์ƒํƒœ(MOBILE, TABLET, DESKTOP)๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉฐ, API ํ˜ธ์ถœ์ด๋‚˜ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ตฌ์กฐํ™”๋œ ์ปค์Šคํ…€ ํ›…์€ ๋„์ž…ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

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

 

3. ํ˜‘์—…์˜ ์–ด๋ ค์›€๊ณผ ์ฑ…์ž„๊ฐ

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


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

1. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ API ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์‚ฌ์ „ ์ดํ•ด ๋ถ€์กฑ

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

 

2. ํˆฌํ‘œ ๊ฒฐ๊ณผ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜ ๋ฏธํก

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

 

3. ํ…Œ์ŠคํŠธ ๋ฐ QA๊ฐ€ ๋ถ€์กฑํ–ˆ๋˜ ์ 

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

 

4. ์ปค๋ฐ‹ ๋ฐ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์Šต๊ด€ ๋ถ€์กฑ

์ฒซ ํŒ€ ํ”„๋กœ์ ํŠธ์ด๋‹ค ๋ณด๋‹ˆ, ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ๋‚˜ PR(PR ์š”์ฒญ)์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์˜ฌ๋ฆฌ๋Š” ์Šต๊ด€์ด ์ œ๋Œ€๋กœ ์žกํ˜€ ์žˆ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ฐ์ž ๋งก์€ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์ง‘์ค‘ํ•˜๋А๋ผ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฌธํ™”๋„ ์ž˜ ์ •์ฐฉ๋˜์ง€ ๋ชปํ–ˆ๊ณ , ๊ทธ ๊ฒฐ๊ณผ ์ฝ”๋“œ ์ „๋ฐ˜์— ๋Œ€ํ•œ ํŒ€์› ๊ฐ„์˜ ์ดํ•ด๋„๊ฐ€ ๋ถ€์กฑํ•ด์ง€๋Š” ์ƒํ™ฉ๋„ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

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

 

5. ์„ฑ๊ณผ ์ „๋‹ฌ๋ ฅ ๋ถ€์กฑ

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

 

6. ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„ ๋ถ€์กฑ

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

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

 

7. ํŒ€ ํšŒ์˜ ์ฐธ์—ฌ ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ํ˜‘์—… ์–ด๋ ค์›€

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

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

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