๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

FrontEnd+

์›”๊ฐ„ ํ‚ค์›Œ๋“œ - 2021๋…„ 10์›”

 

 

๐Ÿ’ป ์›น ์ ‘๊ทผ์„ฑ

Week 1

iOS ux ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๋‹ค. ์ธํ’‹์ฐฝ์— ํฌ์ปค์Šค๊ฐ€ ๊ฐˆ ๋•Œ ์˜ˆ์ƒ์น˜ ๋ชปํ•˜๊ฒŒ zoom-in์ด ๋œ๋‹ค. ํฐํŠธ ์‚ฌ์ด์ฆˆ๊ฐ€ 16px๋ณด๋‹ค ์ž‘์œผ๋ฉด iOS์—์„œ ์ž˜๋ณด์ด๋ผ๊ณ  ์•Œ์•„์„œ ํ™•๋Œ€ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

์ด ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” meta ํƒœ๊ทธ๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ๋Š” ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. 

<!-- ๋ณ€๊ฒฝ ์ „ -->
<meta name="viewport" content="width=device-width,initial-scale=1"/>

<!-- ๋ณ€๊ฒฝ ํ›„ -->
<meta
    name="viewport"
    content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
/>

๊ทธ๋Ÿฐ๋ฐ ์ด ๋ฐฉ๋ฒ•์€ ์ผ๋ฐ˜์ ์ธ UX๊ฐ€ ํ–ฅ์ƒ๋ ์ง€๋Š” ๋ชฐ๋ผ๋„, ์›น ์ ‘๊ทผ์„ฑ์€ ์˜คํžˆ๋ ค ํ•ด์น˜๋Š”๊ฒŒ ์•„๋‹๊นŒ? ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์ด ์ด์Šˆ์™€ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์—์„œ ๋””์ž์ธ, UX, ์ ‘๊ทผ์„ฑ ์„ธ ๊ฐ€์ง€ ๊ฐ€์น˜๊ฐ€ ์ถฉ๋Œ(?)ํ•œ๋‹ค. 

๋”๋ณด๊ธฐ

[๋””์ž์ธ] ์•ฑ์˜ ๋””์ž์ธ ํ†ต์ผ์„ฑ์„ ์ƒ๊ฐํ•˜๋ฉด 16px ์ด์ƒ์œผ๋กœ ํ‚ค์šธ ์ˆ˜ ์—†๋‹ค.
[UX] ์•ฑ์˜ UX๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๊ฐ‘์ž๊ธฐ ํ™•๋Œ€๋˜๋ฉด ๋‹นํ™ฉ์Šค๋Ÿฝ๋‹ค.
[์ ‘๊ทผ์„ฑ] ์•ฑ์˜ ์›น ์ ‘๊ทผ์„ฑ์„ ์ƒ๊ฐํ•˜๋ฉด 16px ์ด์ƒ์ด ์•„๋‹ˆ๊ฑฐ๋‚˜ ํ™•๋Œ€์•ˆํ•˜๋ฉด ๋ณด๊ธฐํž˜๋“ค๋‹ค. ์• ํ”Œ์—์„œ ๊ณ ์‹ฌํ•ด์„œ '์ด๊ฒƒ๋ณด๋‹ค ์ž‘์œผ๋ฉด ํ™•๋Œ€ํ•ด์„œ ๋ณด์—ฌ์ค˜์•ผํ•ด.' ๋ผ๊ณ  ์ •ํ•œ๊ฑธ ๊ฐํžˆ ์šฐ๋ฆฌ๊ฐ€ ๋ฎ์–ด์”Œ์›Œ๋„ ๋˜๋Š”์ง€ ์˜๋ฌธ์ด๋‹ค.

๋””์ž์ธ, UX, ์ ‘๊ทผ์„ฑ ์…‹ ๋ชจ๋‘๋ฅผ ๋™์‹œ์— ์ฑ™๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ? 

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

์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—๋Š” meta ํƒœ๊ทธ ์ˆ˜์ •์„ ์ ์šฉํ•˜๋Š”๊ฒŒ ๋‹น์žฅ์€ ์ตœ์„ ์˜ ์„ ํƒ์ด ์•„๋‹๊นŒ..

 

Week 2

๋ชจ๋ฐ”์ผ ์›น์ ‘๊ทผ์„ฑ ์ ์ˆ˜ ํ™•์ธํ•˜๋ ค๊ณ  ๋ผ์ดํŠธํ•˜์šฐ์Šค ๋Œ๋ฆฐ๊ฑด๋ฐ ์›น์ ‘๊ทผ์„ฑ๋„ ๊ทธ๋ ‡์ง€๋งŒ ์„ฑ๋Šฅ ์ ์ˆ˜๊ฐ€ ์‹ฌ๊ฐํ•˜๋‹ค.

๋ชจ๋ฐ”์ผ์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ง€๋„ ๋กœ์ง์„ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ๋Š”๋ฐ ๊ทธ๊ฒƒ๋ถ€ํ„ฐ ๊ฐœ์„ ํ•ด๋ณด์•„์•ผ๊ฒ ๋‹ค. display: none ์ด๋ผ ๋ Œ๋”๋ง๋งŒ ์•ˆํ•  ๋ฟ ์ง€๋„๋ฅผ ๊ทธ๋ฆฌ๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค ๋ฐ›์•„์™€์„œ ํ™•์‹คํžˆ ๋น„ํšจ์œจ์ ์ด๋‹ค.

๋ผ์ดํŠธํ•˜์šฐ์Šค ์„ฑ๋Šฅ ์ ์ˆ˜

 

๐Ÿ’ป ์ƒํƒœ๊ด€๋ฆฌ

Week 1

๊ฒŒ์‹œํŒ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ, ๊ฐ„๋‹จํ• ๊ฑฐ๋ผ ์ƒ๊ฐํ•˜๊ณ  ์ƒํƒœ ์„ค๊ณ„๋ฅผ ์•ˆํ•˜๊ณ  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์˜ฎ๊ฒผ๋‹ค๊ฐ€ ๋‹ค์‹œ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ ์˜ฎ๊ฒผ๋‹ค๊ฐ€ ํ•˜๋Š” ์‹์œผ๋กœ ๊ณ„์† ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ฒŒ์‹œํŒ ๋ชฉ๋ก ๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ด€๋œ ๊ฑด ์˜ค์ง <ArticleList> ์—์„œ๋งŒ ํ•„์š”ํ•  ๊ฑฐ๋ผ ์ƒ๊ฐํ•˜๊ณ , ๊ฐ€์žฅ ์ฒ˜์Œ์—๋Š” <ArticleList> ์ปดํฌ๋„ŒํŠธ์—์„œ totalList๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” useBoard ํ›…์„ ์‹คํ–‰ํ–ˆ์—ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋’ค๋กœ๊ฐ€๊ธฐ๋กœ ๊ฒŒ์‹œํŒ ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฒฝ์šฐ์—, ๊ณผ๊ฑฐ์— ์ด๋ฏธ ์š”์ฒญ์„ ํ†ตํ•ด ๋ฐ›์•„์˜จ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์„ ๊ทธ๋Œ€๋กœ ๋‹ค์‹œ ๋„์›Œ์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š” unmount ๋œ ํ›„์—๋„ totalList ์ƒํƒœ๋ฅผ ์œ ์ง€์‹œ์ผœ์ค˜์•ผ ํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ <ArticleList>์˜ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ <BoardPage>์—์„œ useBoard ํ›…์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค. 

๊ทธ๋ž˜์„œ ํ˜„์žฌ๋Š” ์ƒํƒœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ๊ฐ€ ๋˜์–ด์žˆ๋Š” ์ƒํ™ฉ์ธ๋ฐ props๋กœ ๋‹ค ๋‚ด๋ ค์ฃผ๋ ค๋‹ˆ๊นŒ prop drilling depth๊ฐ€ ๊นŠ์€ ๊ฒƒ๋„ ์•„๋‹Œ๋ฐ ์ฝ”๋“œ๊ฐ€ ๋ณ„๋กœ ๊น”๋”ํ•ด ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  Context API๋ฅผ ์“ธ ์ผ์€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™๋‹ค. ๋”ฑ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋งŒ ๊ทธ๊ฒƒ๋„ ๋”ฑ ํ•œ ๋ ˆ๋ฒจ ์•„๋ž˜์— ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์“ธ ๊ฑฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ์„์ง€ ๊ณ ๋ฏผ๋œ๋‹ค.

Week 2

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

๊ตฌ์ƒํ•œ ๊ธฐ๋Šฅ์€ <ArticleView> ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ '์‚ญ์ œ ๋ฒ„ํŠผ'์„ ํด๋ฆญํ•˜๋ฉด ์ •๋ง ์‚ญ์ œํ• ์ง€ ํ™•์ธํ•˜๋Š” '์ปจํŽŒ ์ฐฝ'์ด ๋œจ๊ณ  'ํ™•์ธ'์„ ๋ˆ„๋ฅด๋ฉด ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์ด ๋•Œ, ์ •์ƒ์ ์œผ๋กœ ๊ฒŒ์‹œ๊ธ€์„ ์‚ญ์ œ ๋˜์—ˆ๋‹ค๋ฉด ๊ฒŒ์‹œ๊ธ€ ์ „์ฒด ๋ชฉ๋ก์— ํ•ด๋‹น ๊ธ€์ด ๋‚จ์•„์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ, ์ฆ‰ totalList๋„ ์—…๋ฐ์ดํŠธ ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๊นจ๋‹ฌ์•˜๋‹ค.

์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” useConfirm ํ›…์€ ํ˜ธ์ถœํ•  ๋•Œ, approve์ผ ๋•Œ ๋™์ž‘์‹œํ‚ฌ ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, <ArticleView> ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์„ ๋™๊ธฐํ™”์‹œ์ผœ์ฃผ๋Š” setTotalList ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.

์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ <BoardPage>์—์„œ useBoard ํ›…์„ ํ˜ธ์ถœํ•ด์„œ ๊ฐ€์ ธ์˜จ setTotalList ํ•จ์ˆ˜๋ฅผ <ArticleView> ์— props๋กœ ๋„ฃ์–ด์ค€ ๋‹ค์Œ, ์ด๋ฅผ ๋‹ค์‹œ useConfirm์˜ ์ธ์ž๋กœ ๋„ฃ์–ด์ฃผ๋Š” ๊ธฐ์ดํ•œ ํ˜•ํƒœ๊ฐ€ ๋˜์—ˆ๋‹ค.

ํ›…์œผ๋กœ ๊ฐ€์ ธ์˜จ ํ•จ์ˆ˜๋ฅผ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ props๋กœ ๋„˜๊ฒจ์ฃผ๊ณ , ๊ทธ๊ฑธ ๋‹ค์‹œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ›…์˜ ์ธ์ž๋กœ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ...

์ด๋Ÿฐ ์ƒํ™ฉ์ด ๋˜๊ธฐ ์ „๊นŒ์ง€ ์™œ context๋กœ ๊ตฌ์„ฑํ•  ์ƒ๊ฐ์„ ๋ชปํ–ˆ์„๊นŒ? ์ƒํƒœ ์„ค๊ณ„๋ฅผ ํ–ˆ๋‹ค๋ฉด ๋ฏธ๋ฆฌ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€์„๊นŒ?

ํŽ˜์–ด์™€ ๋‚˜๋Š” '๋ฏธ๋ฆฌ ๊ณ ๋ฏผํ–ˆ์–ด๋„ ๊ตฌํ˜„ํ•˜๊ณ  ๋‚˜์„œ์•ผ ๊นจ๋‹ฌ์•˜์„ ๊ฒƒ ๊ฐ™๋‹ค'๋Š”๋ฐ์— ๋™์˜ํ•œ๋‹ค. ์ด์ œ์™€์„œ ์ƒ๊ฐํ•˜๋ฉด ๋‹น์—ฐํ•˜์ง€๋งŒ <ArticleView> ์ปดํฌ๋„ŒํŠธ์—์„œ setTotalList ํ•จ์ˆ˜๋กœ ๋ชฉ๋ก์„ ๋™๊ธฐํ™”ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ „ํ˜€ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํŽ˜์–ด์˜ ํ‘œํ˜„์„ ๋นŒ๋ฆฌ๋ฉด '์•„์ง ์ฃผ๋‹ˆ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฒช๋Š” ์‹œํ–‰์ฐฉ์˜ค' ์ธ ๊ฒƒ ๊ฐ™๋‹ค. 

Context API๋กœ ๋ฐ”๊พธ๊ณ  ๋‚˜๋‹ˆ ์ฝ”๋“œ ๋ณต์žก๋„๊ฐ€ ๋งŽ์ด ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค. ๊ณผ์ •์ด ๋„ˆ๋ฌด ์•„์‰ฌ์šด ๊ตฌํ˜„์ด์—ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋‹ค์‹œํ•˜๋ฉด ๋” ์ž˜ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€.