React: ์‚ฌ์šฉ์ž์—๊ฒŒ DEV ๋ชจ๋“œ๋ฅผ ํ”„๋กœ๋•์…˜์œผ๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š๋„๋ก ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ• ํƒ์ƒ‰

์— ๋งŒ๋“  2017๋…„ 01์›” 14์ผ  ยท  143์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/react

๊ธฐ๋Šฅ ์„ ์š”์ฒญํ•˜๊ฑฐ๋‚˜ ๋ฒ„๊ทธ ๋ฅผ ๋ณด๊ณ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
ํŠน์ง•

ํ˜„์žฌ ํ–‰๋™์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์˜ฌ๋ฐ”๋ฅธ ์ผ์„ ํ•˜๋ ค๋Š” ๊ฐœ๋ฐœ์ž๋Š” ์ข…์ข… ์‹ค์ˆ˜๋กœ DEV ๋ชจ๋“œ๋ฅผ PROD ๋ชจ๋“œ๊ฐ€ ์•„๋‹Œ ํ”„๋กœ๋•์…˜์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„ฑ๋Šฅ์— ์ƒ๋‹นํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DEV->PROD๋Š” ํ•œ ์ค„ ๋ณ€๊ฒฝ์ด์ง€๋งŒ React๊ฐ€ ๊ณ ๋ฌด์ ์œผ๋กœ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋Š” ํฐ ๋‰˜์•™์Šค ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์ด UX์™€ ๋น„๊ตํ•˜์—ฌ ๊ฐ€์ ธ์˜ค๋Š” ์ „๋ฐ˜์ ์ธ DX ๊ฐ’ ์‚ฌ์ด์— ๊ท ํ˜•์„ ์žก์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ๋ณ€๊ฒฝ ์ž์ฒด๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ์†”๋ฃจ์…˜์ด ๋” ๋‚˜์€ ๊ธฐ๋ณธ๊ฐ’์ธ์ง€ ๋˜๋Š” ๋” ๊ฐ•๋ ฅํ•œ ์˜นํ˜ธ์ธ์ง€ ์—ฌ๋ถ€๋Š” ๋ถˆ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. @sebmarkbage ์™€ ๊ฐ™์€ ์‚ฌ๋žŒ๋“ค์€ ์ด๊ฒƒ์ด ์•Œ๋ ค์ง„ ๋ฌธ์ œ์ž„์„ ์ธ์ •ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ํ† ๋ก ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Š” ๋˜ํ•œ ๊ฒฝ๊ณ  ์—†์Œ์—์„œ DEV๋กœ ์ „ํ™˜ํ•˜๋ ค๋ฉด ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์ด ์ฐจ์„ ์ฑ…์ธ ์ „์ฒด ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์—์„œ ์ด์•ผ๊ธฐํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ์ค‘๊ฐ„ ์†”๋ฃจ์…˜์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

React๋Š” ์‚ฌ์šฉ์ž๊ฐ€ PROD ๋ชจ๋“œ๋ฅผ DEV๊ฐ€ ์•„๋‹Œ ํ”„๋กœ๋•์…˜์œผ๋กœ ์ œ๊ณตํ•˜๋„๋ก ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ณ„์ธต์—์„œ ์ œ๊ณต๋˜๋Š”(๋˜๋Š” Webpack์— ์˜ํ•ด ๋นŒ๋“œ/๋ฒˆ๋“ค๋ง ์‹œ๊ฐ„ ๋™์•ˆ ์–ด๋–ป๊ฒŒ๋“  ํ•ด๊ฒฐ๋˜๋Š”) ์†”๋ฃจ์…˜์— ๋Œ€ํ•ด ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ์—๋Š” localhost ๊ฐ์ง€์—์„œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ DOM์— '๊ฐœ๋ฐœ ๋ชจ๋“œ' ๋ฉ”์‹œ์ง€ ์‚ฝ์ž…์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ์ œ์•ˆ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ™์€:

๋˜๋Š” @thelarkinn ์€ ์ด์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง• ๊ฐ์ง€๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ENV ๊ตฌ์„ฑ์„ ํ‘œ์ค€ํ™”ํ•˜๋ ค๊ณ  ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ์–ด๋Š ๊ฒƒ์ด ๊ฐ€์žฅ ํ˜„์‹ค์ ์ผ์ง€๋Š” ๋ถˆ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. React ์ฝ”์–ด๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ๋ฒ„์ „์˜ React์™€ ์–ด๋–ค ๋ธŒ๋ผ์šฐ์ €/OS๊ฐ€ ์ด ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„ ๋ฐ›๋‚˜์š”?

๋ชจ๋“  ์ตœ์‹  ๋ฒ„์ „.

@jordwalk ์˜ ์ด ์Šค๋ ˆ๋“œ์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฐ€ ๋ฒค์น˜๋งˆํฌ์— ๋Œ€ํ•ด์„œ๋„ ๊ณต์ •ํ•œ ์ง€์ ์„ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ์ตœ์ข… ๊ณ ๊ฐ์—๊ฒŒ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•œ ์ œํ’ˆ ๊ฒฝํ—˜์„ ์ตœ๊ณ ์˜ ์˜๊ด‘์œผ๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์š”์ ์ด ์ด๋ฏธ ์ œ๊ธฐ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์งˆ ๋•Œ ๊ธด ํ† ๋ก ์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์ง€๋งŒ ์ด ์ ์— ๋™์˜ํ•˜๊ณ  ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. DOM์„ ๋งŒ์ง€๊ณ  ๋‚ด๊ฐ€ dev ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฒฝ๊ณ ํ•˜๋Š” React ํฐ ์‹ค์ˆ˜๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์—๋Š” ์ด์— ๋Œ€ํ•œ ์ „๋ก€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

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

์‹ฌ์ง€์–ด 2์‹œ๊ฐ„์— ํ•œ๋ฒˆ์”ฉ ? ์•„๋‹ˆ์š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๋Š์ž„์—†๋Š” ์ž”์†Œ๋ฆฌ๋Š” ํ™•์‹คํžˆ ์‚ฌ์šฉ์ž๊ฐ€ React์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•  ๊ฒƒ์ด๊ณ  ์†”์งํžˆ ๋งํ•ด์„œ ์‚ฌ๋žŒ๋“ค์ด ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ฑ„ํƒํ•˜๋„๋ก ๋ฐ€์–ด๋‚ผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Chrome ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹๊นŒ์š”?

์˜ˆ, ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ๋“  ์ƒ์‚ฐ์— ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๋ผ๋Š” ์‚ฌ์‹ค์€ ๋งํ•  ๊ฒƒ๋„ ์—†๊ณ , ํŠน์ • ํŒ€์ด React๋ฅผ ์ฑ„ํƒํ•˜๋„๋ก ์„ค๋“ํ•˜๋Š” ๊ฒƒ์€ ์ด๋ฏธ ์ถฉ๋ถ„ํžˆ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ React์— ๋Œ€ํ•ด ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์€ ReactDOM.render(...) ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๊นŒ์ง€ ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š๊ณ , ๊ทธ๋ ‡๊ฒŒ ํ•  ๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์‹œํ•œ DOM์—๋งŒ ๋ฌผ๊ฑด์„ ๋„ฃ๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ด๊ฒƒ์ด ํ›Œ๋ฅญํ•˜๊ณ  ๊ฒฉ๋ฆฌ๋œ ๊ธฐ๋Šฅ์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ์ด์œ ์ž…๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์ด ์ถ•์†Œ๋˜์ง€ ์•Š์€ ๋ฒˆ๋“ค์„ ๋ฐฐ์†กํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋„ ๊ฐ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์บ์‹ฑํ•ด์•ผ ํ•  ๋•Œ ์บ์‹ฑํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? nginx๋ฅผ ์ตœ์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด shouldComponentUpdate ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ํ•„์š”ํ•˜์ง€ ์•Š์€๋ฐ๋„ ๋ชจ๋“  ๊ฒƒ์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ Œ๋”๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

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

๋ชจ๋“  143 ๋Œ“๊ธ€

๋ฌธ๋งฅ์ƒ React์˜ DEV ๋ฒ„์ „์„ ์ถ•์†Œํ–ˆ์Œ์„ ๊ฐ์ง€ํ•˜๋ฉด ์ด๋ฏธ ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/facebook/react/blob/8791325db03725ef4801fc58b35a3bb4486a8904/src/renderers/dom/ReactDOM.js#L91 -L98

์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์œ ์‚ฌํ•œ ํœด๋ฆฌ์Šคํ‹ฑ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๊ณ  DOM ๋Œ€ํ™” ์ƒ์ž๋ฅผ ๋” ์ ๊ทน์ ์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ทธ๋ž˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

๋˜ํ•œ renderToString ๊ฐ€ ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ํ˜ธ์ถœ๋˜๋Š” ๊ฒฝ์šฐ ๋‹จ์ผ console.warn ์ œ์•ˆ๊ณผ ํ•จ๊ป˜ ์ฐจ์ž„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ renderToString ๋Š” ๋…ธ๋“œ์—์„œ ํ˜ธ์ถœ๋˜๋ฉฐ DOM ๋Œ€ํ™” ์ƒ์ž๋ฅผ ๊ฒฝ๊ณ ํ•˜๊ฑฐ๋‚˜ ํŒ์—…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ NODE_ENV ๊ฐ€ production ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ process.env.NODE_ENV ๊ฐ€ ์ปดํŒŒ์ผ๋˜์—ˆ๋Š”์ง€๋„ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€ ๊ทธ๋ ‡๊ฒŒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@sebmarkbage ์Šค๋ ˆ๋“œ์— ๊ฐ์‚ฌ๋“œ๋ฆฌ๋ฉฐ ์‚ฌ์‹ค ์ดํ›„์— ๋ฐฐํฌํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์ด ์žˆ์Œ์„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ˜„์žฌ์˜ ๊ฒฝ๊ณ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๊ฐœ๋ฐœ์ž๋Š” ๋ฐฐํฌ๋œ ์‚ฌ์ดํŠธ์˜ ์ฝ˜์†” ์ถœ๋ ฅ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์ž์ฃผ ํ™•์ธํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ข‹์€ ์ฒซ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์œ ์‚ฌํ•œ ํœด๋ฆฌ์Šคํ‹ฑ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๊ณ  DOM ๋Œ€ํ™” ์ƒ์ž๋ฅผ ๋” ์ ๊ทน์ ์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ทธ๋ž˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆฌ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝํ—˜์  ๋ฐฉ๋ฒ•์„ ๊ฐœ์„ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค ์ ๊ทน์ ์ธ DOM ๋Œ€ํ™” ์ƒ์ž๊ฐ€ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์‚ฌ์ดํŠธ๊ฐ€ ์ตœ์ข… ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๊ณ„์† ์ž‘๋™ํ•˜๋„๋ก ๋ณด์žฅํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ฎ์€ ์„ฑ๋Šฅ์˜ ๊ณผ์ผ์ด ์žˆ๋‹ค๋Š” ์ ๊ทน์ ์ธ ํžŒํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์•ˆ์€ ์›๋ณธ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ ๋นŒ๋“œ ๋„๊ตฌ/ENV ์ˆ˜์ค€์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด DOM ์ฃผ์ž…์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

DOM์— ๋ฉ”์‹œ์ง•์„ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•˜๊ณ  ๋„ˆ๋ฌด ๊ฐ€์ •์ ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜์šฉํ•  ์ˆ˜ ์—†๋Š” IMO๋กœ ๋ณด์ด๋Š” ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์„ ๊ฐ€๋Šฅ์„ฑ์„ ์—ด์–ด์ค๋‹ˆ๋‹ค.

@thelarkinn ์€ ์ด์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ๊ฐ์ง€๋ฅผ ๋” ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ENV ๊ตฌ์„ฑ์„ ํ‘œ์ค€ํ™”ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ๋‹ค๊ณ  ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ด์ƒ์ ์ธ ๊ณต๊ฐ„์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋นŒ๋“œ ๋ฌธ์ œ์ด๋ฉฐ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋นŒ๋“œ ๋„๊ตฌ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผํ™”: ๊ณผ๊ฑฐ์—๋Š” ์ฝ˜์†”์˜ ๊ฒฝ๊ณ ๊ฐ€ ๋ณด์ด์ง€ ์•Š๊ฑฐ๋‚˜ ๋ฌด์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์ •ํ™•ํ•œ ์ˆ˜์น˜๋Š” ์—†์ง€๋งŒ ์ฝ˜์†” ๊ธฐ๋ฐ˜ ๊ฒฝ๊ณ ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” DOM ๊ธฐ๋ฐ˜ ๊ฒฝ๊ณ ๊ฐ€ ๋จผ ๊ธธ์„ ๊ฐˆ ๊ฒƒ์ด๋ผ๋Š” @addyosmani ์˜ ๋ง์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.
screenshot 2017-01-13 15 49 29

@surma ๋” ๋‚˜์€ ๊ฐ€์‹œ์„ฑ์„ ์œ„ํ•ด console.warn ๋˜๋Š” console.error ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜‰

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

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

์ด ๊ฒฝ๊ณ ์— ๋Œ€ํ•ด ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์†”์งํžˆ console.log console.{error,warn} ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด, ๊ทธ ์ด์•ผ๊ธฐ๋Š” ์ผํ™”์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ DOM ๋Œ€ํ™” ์ƒ์ž๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด _the_ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๊ฐœ์ธ์ ์œผ๋กœ ๋งˆ์Œ์— ๋“œ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒฝ์šฐ ์ตœ์†Œํ•œ ์‚ฌ์šฉ์ž๋Š” _๋ฌด์–ธ๊ฐ€_๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์•„๋งˆ๋„ "๋„์›€๋ง" ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ธฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๋ก : ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์–ด๋Š ์‹œ์ ์—์„œ ๊ฐœ๋ฐœ์ž์˜ ์–ผ๊ตด์— ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ์‚ฌ๋žŒ๋“ค์ด ๊ฐœ๋ฐœ ๋ชจ๋“œ๋กœ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋ ˆ์ž„์›Œํฌ ์ž‘์„ฑ์ž๊ฐ€ ์–ด๋–ค ๋‹จ๊ณ„์™€ ํƒ€ํ˜‘์„ ์ทจํ•  ๊ฒƒ์ธ์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ์ด์— ๋Œ€ํ•ด ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์šฉ์ด๋“  ์ œํ’ˆ์šฉ์ด๋“  ์ƒ๊ด€์—†์ด ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉด React๊ฐ€ ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์˜์‹์ ์ธ ์„ ํƒ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

DOM์— ์ฃผ์ž…๋œ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด ์ „์—ญ ๋˜๋Š” ๊ธฐํƒ€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด, ๋‹น์‹ ์€ ๋‹น์‹ ์ดํ•˜๊ณ ์žˆ๋Š” ์ผ์„ ์•Œ๊ณ  ์žˆ์Œ์„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†” ๋ฉ”์‹œ์ง€์˜ ๋ฌธ์ œ๋Š” ๋•Œ๋•Œ๋กœ ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์€ ๊ฒƒ์„ ๊ธฐ๋กํ•˜๊ฑฐ๋‚˜ ๋ฌด์‹œํ•˜๋Š” ๋‹ค๋ฅธ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์Šคํฌ๋กค์„ ์ง€๋‚˜๋ฉด ์ฒซ ๋ฒˆ์งธ ์ฝ˜์†” ๋ฉ”์‹œ์ง€๊ฐ€ ๋ณด์ด์ง€ ์•Š๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค...

ํ•„์ˆ˜ env๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•„์—ฐ์ ์œผ๋กœ ์ƒ์šฉ๊ตฌ ๋“ฑ์ด env var๋ฅผ ์„ค์ •ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์†”์งํžˆ console.log๋ฅผ ํ†ตํ•œ console.{error,warn}์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ˜์†”์„ ํ™•์ธํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ฝ˜์†”์— ๊ฒฝ๊ณ ๊ฐ€ ๊ณผ๋ถ€ํ•˜๋˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ๊ฐœ๋ฐœ์ž ๊ต์œก์— ๊ด€ํ•œ ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ (๋ถ€๋ถ„์ ์œผ๋กœ) ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ, ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ… ์€ ๋ฌผ๋ก  ์ด๊ณ  ํ•ด๊ฒฐ์ฑ…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์— ์ต์ˆ™ํ•ด์ง€๋Š” ๊ฒƒ์€ ์ข‹์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก : ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์–ด๋Š ์‹œ์ ์—์„œ ๊ฐœ๋ฐœ์ž์˜ ์–ผ๊ตด์— ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ์‚ฌ๋žŒ๋“ค์ด ๊ฐœ๋ฐœ ๋ชจ๋“œ๋กœ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋ ˆ์ž„์›Œํฌ ์ž‘์„ฑ์ž๊ฐ€ ์–ด๋–ค ๋‹จ๊ณ„์™€ ํƒ€ํ˜‘์„ ์ทจํ•  ๊ฒƒ์ธ์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ์ด์— ๋Œ€ํ•ด ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ๐Ÿ’ฏ ๊ฐœ๋ฐœ์ž์˜ ์–ผ๊ตด์„ ๋งˆ์ฃผํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅธ ์žฅ์†Œ์—์„œ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ๊ทธ๊ฒƒ์€ ์ƒ์‚ฐ ๋‹จ๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ ๋นŒ๋“œ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

DOM์— ์ฃผ์ž…๋œ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด ์ „์—ญ ๋˜๋Š” ๊ธฐํƒ€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด, ๋‹น์‹ ์€ ๋‹น์‹ ์ดํ•˜๊ณ ์žˆ๋Š” ์ผ์„ ์•Œ๊ณ  ์žˆ์Œ์„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค.

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

์ฝ˜์†” ๋ฉ”์‹œ์ง€์˜ ๋ฌธ์ œ๋Š” ๋•Œ๋•Œ๋กœ ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์€ ๊ฒƒ์„ ๊ธฐ๋กํ•˜๊ฑฐ๋‚˜ ๋ฌด์‹œํ•˜๋Š” ๋‹ค๋ฅธ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์Šคํฌ๋กค์„ ์ง€๋‚˜๋ฉด ์ฒซ ๋ฒˆ์งธ ์ฝ˜์†” ๋ฉ”์‹œ์ง€๊ฐ€ ๋ณด์ด์ง€ ์•Š๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค...

๋‚˜๋Š” ์™„์ „ํžˆ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ฝ˜์†”์ด ํ˜ผ์žกํ•ด์งˆ ์ˆ˜ ์žˆ๊ณ  ๋ฌผ๊ฑด์„ ๋†“์น˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ์ฃผ์žฅํ•˜๋Š” ์ •ํ™•ํ•œ ์ด์œ  ๋•Œ๋ฌธ์— ํ˜ผ์žกํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ”ผ๋“œ๋ฐฑ์ด๋‚˜ ์˜ค๋ฅ˜๋ฅผ ์ œ๊ณต ํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ์ฃผ์ž…๋œ ๋ฉ”์‹œ์ง€๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋ฐฉํ•ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ดํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋ฅผ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

๊ธ€์Ž„, ์•„๋งˆ๋„ ์ฝ˜์†” ํฌ๋งท์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์–ธ๊ฐ€๋ฅผ ํŠ€์–ด ๋‚˜์˜ค๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ ์–ด๋„ ๋ญ”๊ฐ€๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

capture d ecran 2017-01-14 a 02 51 44

capture d ecran 2017-01-14 a 03 05 49

๋ฌธ์ œ๋Š” ๊ฑฐ์˜ ์•„๋ฌด๋„ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ฝ˜์†”์„ ๋ณด์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ์žˆ๋Š” ์–ด๋–ค ๊ธ€๊ผด์ด๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๊ฒƒ์„ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ๋•์…˜์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ(16 ๋˜๋Š” 17)์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋„๋ก ํ•˜๋ฉด ๋†“์น˜๊ธฐ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ๋ง์€, ๊ทธ๊ฒƒ์€ (์‹ ๊ทœ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด) ๊ทธ๊ฒƒ์„ ์ฒ˜์Œ ๋ฐฐํฌํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋ฉฐ ๊ธฐ์กด ์‚ฌ์šฉ์ž๋Š” ์ƒˆ๋กœ์šด ๋ฉ”์ด์ €๋กœ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ๋ฆด๋ฆฌ์Šค ์ •๋ณด๋ฅผ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋งค์šฐ ๋ช…๋ฐฑํ•˜๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๋†“์น  ์ˆ˜ ์—†๋Š” ํ•œ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๊ฑฐ์˜ ์•„๋ฌด๋„ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ฝ˜์†”์„ ๋ณด์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ์žˆ๋Š” ์–ด๋–ค ๊ธ€๊ผด์ด๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๊ฒƒ์„ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ๋•์…˜์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ(16 ๋˜๋Š” 17)์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋„๋ก ํ•˜๋ฉด ๋†“์น˜๊ธฐ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ๋ง์€, ๊ทธ๊ฒƒ์€ (์‹ ๊ทœ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด) ๊ทธ๊ฒƒ์„ ์ฒ˜์Œ ๋ฐฐํฌํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋ฉฐ ๊ธฐ์กด ์‚ฌ์šฉ์ž๋Š” ์ƒˆ๋กœ์šด ๋ฉ”์ด์ €๋กœ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ๋ฆด๋ฆฌ์Šค ์ •๋ณด๋ฅผ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋งค์šฐ ๋ช…๋ฐฑํ•˜๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๋†“์น  ์ˆ˜ ์—†๋Š” ํ•œ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@gaearon๊ณผ ๊ฐ™์€ ๋ณ€ํ™”๋ฅผ ์—ด์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์‹œ๋„ํ•˜๋Š” ๋ฐ ๋™์˜ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๐Ÿ˜„

์ฝ˜์†” ๊ฒฝ๊ณ ๊ฐ€ ์†”๋ฃจ์…˜์ด ์•„๋‹ˆ๋ฉฐ ํŽ˜์ด์ง€์— ํ‘œ์‹œ๋˜๋Š” ๊ฒฝ๊ณ ๊ฐ€ ํ›จ์”ฌ ๋‚ซ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€ ํ‘œ์‹œ ๊ฒฝ๊ณ ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์ดํŠธ๊ฐ€ ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ์— ์žˆ์Œ์„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.
  • ํ˜œํƒ ๋ฐ ํ˜œํƒ ์—†์ด ๋ฐฐ์†กํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์„œ ๋งํฌ
  • ๋ฉ”์‹œ์ง€๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋งํฌ... 2์‹œ๊ฐ„ ๋™์•ˆ ๋ชฐ๋ผ์š”?

๋ฉ”์‹œ์ง€๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์€ ํŽ˜์ด์ง€์˜ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐฉํ•ด/๊ฐ€๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ localstorage์— ์ €์žฅ๋˜๋ฏ€๋กœ ์›๋ณธ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์ด๋ธŒ ์„œ๋ฒ„์— ๊ฒฝ๊ณ ๊ฐ€ ๊ณ„์† ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

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

๊ทธ ๊ฒฝ๊ณ (DOM์— ์‚ฝ์ž…)๋ฅผ ์ฒ˜์Œ ๋ณด์•˜์„ ๋•Œ ํ”„๋กœ๋•์…˜ ๋‹จ๊ณ„์— ์žˆ์—ˆ๋‹ค๋ฉด ์ƒ๋‹นํžˆ ํ™”๊ฐ€ ๋‚ฌ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒฝ๊ณ ๋Š” ๋ฏธ๋ฆฌ ๋ฐœ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@rtorr ๋‚ด ์ œ์•ˆ์€ ์‚ฌ์ดํŠธ๊ฐ€ ๊ฐœ๋ฐœ ๋ชจ๋“œ์— ์žˆ์„ ๋•Œ๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋‚ด๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒƒ์ด ์—†๋Š” ํ•œ ๋ฏธ๋ฆฌ ๋ณด์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jakearchibald ํ˜ผ๋ž€์„ ๋“œ๋ ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ œ ๋‹ต๋ณ€์€ ๊ท€ํ•˜๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ์— 'insert into the dom' ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋งค์šฐ ์กฐ์‹ฌํ•ด์•ผ ํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ‘ธ์‹œํ•˜๊ธฐ ์ „์— ์•Œ๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ์ง€์ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. .

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

์ง€์†์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•œ๋‹ค๋Š” DOM ๊ธฐ๋ฐ˜ ๊ฒฝ๊ณ ๋Š” ๊ดœ์ฐฎ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜์›ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ localhost์— ๋Œ€ํ•ด ์ „ํ˜€ ํ‘œ์‹œ๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

devtools๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์— ์ผ์ข…์˜ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ €๋ฅผ ๋•Œ๋ฆฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค("๋‹น์‹ ์€ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๊นŒ? [์˜ˆ/์•„๋‹ˆ์š”]"์™€ ํ•จ๊ป˜ ํฐ ์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค) ) ํŽ˜์ด์ง€์—์„œ ๊ฐ์ง€ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋งŒ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ์ž์ฒด XXS ๊ณต๊ฒฉ์—๋„ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์†์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•œ๋‹ค๋Š” DOM ๊ธฐ๋ฐ˜ ๊ฒฝ๊ณ ๋Š” ๊ดœ์ฐฎ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜์›ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๋˜ํ•œ ํ”„๋กœ๋•์…˜์—์„œ ์˜๋„ํ•˜์ง€ ์•Š์€ dom ๋…ธ๋“œ๊ฐ€ ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

@rtorr

๋‚˜๋Š” ๋˜ํ•œ ํ”„๋กœ๋•์…˜์—์„œ ์˜๋„ํ•˜์ง€ ์•Š์€ dom ๋…ธ๋“œ๊ฐ€ ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์™œ์š”? (๋‹น์‹ ์ด ํ‹€๋ ธ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹น์‹ ์˜ ์ด์œ ๋ฅผ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค)

prod ๋„๋ฉ”์ธ์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. prod ๋„๋ฉ”์ธ์ด ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ํ•ญ์ƒ DEV ๋ชจ๋“œ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ (๋„๋ฉ”์ธ URL ์„ค์ • ์š”์ฒญ ํฌํ•จ)๋ฅผ ๋ฐ›๊ณ , ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด URL์ด prod ๋„๋ฉ”์ธ๊ณผ ์ผ์น˜ํ•  ๋•Œ๋งŒ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์•Œ๋ฆฌ๊ณ  ์‹ถ์€ ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๊ฑด์„ค์ ์ธ ๋…ผ์˜๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. Webpack์€ React๊ฐ€ DEV๋ฅผ PROD๋กœ ๋ฐฐ์†กํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ๋” ์‰ฝ๊ฒŒ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” NODE_ENV๋ฅผ ๊ฐ•์ œ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” Webpack์˜ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ Webpack 3์—์„œ ์ด์™€ ๊ฐ™์€ ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์‹คํ˜„ ๊ฐ€๋Šฅํ•œ์ง€์— ๋Œ€ํ•ด Sean๊ณผ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. React + Webpack ์Šคํƒ์„ ์ดˆ๋ณด์ž์™€ ์„ฑ๋Šฅ ์นœํ™”์ ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๋‘ ์ง„์˜ ๋ชจ๋‘ ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ(DOM ์ฃผ์ž… ์•„์ด๋””์–ด)๋Š” React๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด๋ฉฐ Jake๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ฉ”์‹œ์ง€๊ฐ€ ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ ํ‘œ์‹œ๋˜๊ฑฐ๋‚˜ ๋ฌด์‹œ๋˜๋„๋ก ํ—ˆ์šฉํ•˜์—ฌ UX์˜ ๊ท ํ˜•์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•œ ์ค„๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‹ค์‹œ ๋ฐฐํฌํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ฒฝ์˜์ง„์ด ๋†€๋ผ์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ๋งˆ์Œ์— ์ „์ ์œผ๋กœ ๊ณต๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ›จ์”ฌ ๋” ๋น ๋ฅธ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ๋” ๋งŽ์€ React ์‚ฌ์ดํŠธ๋ฅผ ์–ป์œผ๋ ค๋ฉด FB๊ฐ€ ์ œ๊ณตํ•ด์•ผ ํ•  ์ œํ’ˆ์„ ์ƒ์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€ ๋” ๋‚˜์€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์œผ๋ฉด ์ œ์•ˆํ•˜์‹ญ์‹œ์˜ค.

@jakearchibald

์™œ์š”? (๋‹น์‹ ์ด ํ‹€๋ ธ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹น์‹ ์˜ ์ด์œ ๋ฅผ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค)

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

์šฐ๋ฆฌ๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋“ ์ง€ ๊ฐ„์— ๊ธฐ๋ณธ๊ฐ’์ด ๋ฌด์—‡์ด๋“  ํ”„๋กœ๋•์…˜์œผ๋กœ ์ถœํ•˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ทธ๋ ‡๊ฒŒ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ์ˆ˜์ค€๊นŒ์ง€ ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ๊ฐœ์„ ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@jakearchibald ์˜ˆ, ์–‘์ชฝ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ์Šค๋ ˆ๋“œ์— ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋‹น์‹ ์ด ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์ด๋”๋ผ๋„ ์ข‹์€ ๊ฒƒ์„ ์ƒ๊ฐํ•ด ๋‚ผ ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ๋ชจ๋‘ ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ๊ทน๋‹จ์ ์ธ ๊ฒƒ์ด ๋‹ต์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ React dev ๋„๊ตฌ๋ฅผ ์‹คํ–‰ ์ค‘์ด๋ฉด ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒฝํ—˜ํ•˜์ง€ ๋ชปํ•˜๋„๋ก DOM ๋…ธ๋“œ ๊ฒฝ๊ณ ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

@jakearchibald

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

์‚ฌ์ดํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์„ ๋•Œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ "์ค€๋น„"๋œ ๊ฒƒ์œผ๋กœ ๊ฒฐ์ •์„ ๋‚ด๋ ธ์œผ๋ฏ€๋กœ ์ƒํƒœ๋Š” ์ข‹์ง€ ์•Š์ง€๋งŒ ์žฌ์•™์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ˆ˜์‹ญ๋งŒ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์ดํŠธ ํŒŒ๊ดด(DOM ๊ฒฝ๊ณ ๋Š” ์‚ฌ์ดํŠธ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋œ ์ƒํƒœ์—์„œ ์‚ฌ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ) ๊ฒฝ๊ณ  5๊ฐœ ๋˜๋Š” ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ๋งŒ ๊ฒฝ๊ณ ํ•˜๋Š” ๊ฒƒ์€ ์žฌ์•™์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋Š” ๋นŒ๋“œ ์ฒด์ธ(์‚ฌ์šฉ์ž ์ง€์ •, create-react-app ๋˜๋Š” ๊ธฐํƒ€)์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜๊ณ  ํ•ด๋‹น ๊ฒฝ๊ณ ๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@dan-gamble ์ €๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ React Dev Tools๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ด ๊ฒฝ๊ณ ์˜ ๊ฐ€์žฅ ์‹œ๊ธ‰ํ•œ ๋Œ€์ƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@Pajn ์ž ์žฌ์ ์œผ๋กœ Chrome ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ž๋™์œผ๋กœ prod / dev ์Šค์œ„์น˜๋ฅผ ์ธ์‹ํ•˜๊ฒŒ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@dan-gamble ์•„๋‹ˆ์š”, ๋ฌผ๋ก  ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•ฑ ์—†์ด ์ „์ฒด ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์žˆ๋Š”๋ฐ, ์ด๋Š” ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ถ•์†Œ๋œ ์ฝ”๋“œ์— ๋Œ€ํ•œ ํ˜„์žฌ ๊ฒฝ๊ณ ๋ฅผ ๋ณผ ๊ฐ€๋Šฅ์„ฑ์ด ์ ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์š”์ ์ด ์ด๋ฏธ ์ œ๊ธฐ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์งˆ ๋•Œ ๊ธด ํ† ๋ก ์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์ง€๋งŒ ์ด ์ ์— ๋™์˜ํ•˜๊ณ  ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. DOM์„ ๋งŒ์ง€๊ณ  ๋‚ด๊ฐ€ dev ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฒฝ๊ณ ํ•˜๋Š” React ํฐ ์‹ค์ˆ˜๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์—๋Š” ์ด์— ๋Œ€ํ•œ ์ „๋ก€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

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

์‹ฌ์ง€์–ด 2์‹œ๊ฐ„์— ํ•œ๋ฒˆ์”ฉ ? ์•„๋‹ˆ์š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๋Š์ž„์—†๋Š” ์ž”์†Œ๋ฆฌ๋Š” ํ™•์‹คํžˆ ์‚ฌ์šฉ์ž๊ฐ€ React์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•  ๊ฒƒ์ด๊ณ  ์†”์งํžˆ ๋งํ•ด์„œ ์‚ฌ๋žŒ๋“ค์ด ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ฑ„ํƒํ•˜๋„๋ก ๋ฐ€์–ด๋‚ผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Chrome ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹๊นŒ์š”?

์˜ˆ, ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ๋“  ์ƒ์‚ฐ์— ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๋ผ๋Š” ์‚ฌ์‹ค์€ ๋งํ•  ๊ฒƒ๋„ ์—†๊ณ , ํŠน์ • ํŒ€์ด React๋ฅผ ์ฑ„ํƒํ•˜๋„๋ก ์„ค๋“ํ•˜๋Š” ๊ฒƒ์€ ์ด๋ฏธ ์ถฉ๋ถ„ํžˆ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ React์— ๋Œ€ํ•ด ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์€ ReactDOM.render(...) ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๊นŒ์ง€ ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š๊ณ , ๊ทธ๋ ‡๊ฒŒ ํ•  ๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์‹œํ•œ DOM์—๋งŒ ๋ฌผ๊ฑด์„ ๋„ฃ๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ด๊ฒƒ์ด ํ›Œ๋ฅญํ•˜๊ณ  ๊ฒฉ๋ฆฌ๋œ ๊ธฐ๋Šฅ์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ์ด์œ ์ž…๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์ด ์ถ•์†Œ๋˜์ง€ ์•Š์€ ๋ฒˆ๋“ค์„ ๋ฐฐ์†กํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋„ ๊ฐ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์บ์‹ฑํ•ด์•ผ ํ•  ๋•Œ ์บ์‹ฑํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? nginx๋ฅผ ์ตœ์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด shouldComponentUpdate ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ํ•„์š”ํ•˜์ง€ ์•Š์€๋ฐ๋„ ๋ชจ๋“  ๊ฒƒ์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ Œ๋”๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

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

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

NODE_ENV ์„ค์ •์„ ๊ฐ•์ œํ•˜๋Š” webpack๊ณผ ๊ด€๋ จํ•˜์—ฌ(์ด๋ฏธ ํ•ด๋‹น ์ €์žฅ์†Œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ) env ์„ค์ •์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์–ด๋ ค์›Œ์ง€์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ๋ฉด NODE_ENV ์‚ฌ์šฉ์„ ๊ฐ์ง€ํ•˜๊ณ  ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ฐ•์ œ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด์ž…๋‹ˆ๊นŒ?

"2์‹œ๊ฐ„"์— ๋„ˆ๋ฌด ์—ฐ์—ฐํ•˜์ง€ ๋ง™์‹œ๋‹ค. ๊ทธ๊ฒƒ์€ ์ž‘๋™ํ•˜๋Š” ํ•œ ๊ธฐ๊ฐ„์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ์ด๋ฒคํŠธ๋Š” ์˜ค๋ฆฌ์ง„๋‹น ํ•œ ๋ฒˆ๋งŒ ํ•ด์ œํ•˜๋ฉด ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•œ ํŽ˜์ด์ง€์— ์—ฌ๋Ÿฌ ๋ฐ๋ชจ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•˜๋‚˜๋ฅผ ๋‹ซ์œผ๋ฉด ๋‹ค๋ฅธ ๊ฒƒ๋„ ๋‹ซํž™๋‹ˆ๋‹ค.

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

๋ฌผ๋ก  ์ด๊ฒƒ์€ ์ž˜๋ชป๋œ ์บ์‹ฑ ํ—ค๋” ๋“ฑ์„ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ "๊ฐœ๋ฐœ ๋ชจ๋“œ"๋งŒ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ "๋ฏธ๋„๋Ÿฌ์šด ๊ฒฝ์‚ฌ" ์ธ์ˆ˜๋Š” ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์€ ๋ฒค์น˜๋งˆํฌ์— ๊ด€ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์Šค์œ„์น˜๊ฐ€ ์ „ํ™˜๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋Š๋ฆฌ๊ฒŒ ์‹คํ–‰๋˜๋Š” ์‹ค์ œ ์›น์‚ฌ์ดํŠธ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ๋งํ•˜๊ณ  ์‹ถ์€ ์ฃผ์š” ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์–ธ์  ๊ฐ€๋Š” jsbin, ์ž์Šต์„œ, ์‹ฌ์ง€์–ด ์ž‘์€ ํ…Œ์ŠคํŠธ ์‚ฌ์ดํŠธ๋ฅผ ํ•จ๊ป˜ ๋˜์ง€๊ณ  file:// ํ”„๋กœํ† ์ฝœ๋กœ ์—ฌ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ 5-10๊ฐœ์˜ ๋‹ค๋ฅธ ์žฅ์†Œ์—์„œ React ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ•์ œ์ ์ธ ๋ธŒ๋ผ์šฐ์ € ๋‚ด ๊ฒฝ๊ณ ๋Š” ์›น์ด ๋งค์šฐ ๋›ฐ์–ด๋‚œ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์œ ์—ฐํ•œ ๊ฐœ๋ฐœ์— ์ ๋Œ€์ ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์›น์˜ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์—์„œ React๋ฅผ ๋ฐฐ์šฐ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ณณ์—์„œ ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

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

๋˜ํ•œ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ์ด๋ฒคํŠธ๋Š” ์˜ค๋ฆฌ์ง„๋‹น ํ•œ ๋ฒˆ๋งŒ ํ•ด์ œํ•˜๋ฉด ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•œ ํŽ˜์ด์ง€์— ์—ฌ๋Ÿฌ ๋ฐ๋ชจ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•˜๋‚˜๋ฅผ ๋‹ซ์œผ๋ฉด ๋‹ค๋ฅธ ๊ฒƒ๋„ ๋‹ซํž™๋‹ˆ๋‹ค.

์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์œ„ํ•ด localStorage ์— ์˜์กดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. localStorage (๋˜๋Š” ๋‹ค๋ฅธ ๋กœ์ปฌ ์˜๊ตฌ ๋ฐ์ดํ„ฐ)๊ฐ€ ์–ด๋–ค ๊ฐ„๊ฒฉ์œผ๋กœ๋„ ์ง€์›Œ์ง€์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ณด์žฅ์€ ์—†์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ๋˜ํ•œ {INTERVAL} ๋งˆ๋‹ค ํ•œ ๋ฒˆ๋งŒ ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•จ์œผ๋กœ์จ ๊ฒฐ์ •๋ก ์ ์œผ๋กœ ์žฌํ˜„ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์žฌํ˜„ ๋ฐ ๋””๋ฒ„๊ทธํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ๋” ์–ด๋ ค์›Œ์กŒ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐํ•ด์•ผ ํ•  2๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž˜๋ชป๋œ ๋ฒค์น˜๋งˆํฌ, ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๋ฐฉ์ง€: ํฐ ์ฝ˜์†” ๋ฉ”์‹œ์ง€๋กœ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
  • DEV๋ฅผ ํ”„๋กœ๋•์…˜ ์‚ฌ์ดํŠธ๋กœ ๋ฐฐ์†กํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€: ์‚ฌ๋žŒ๋“ค์€ ํ”„๋กœ๋•์…˜์—์„œ devtools๋ฅผ ์—ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

DOM์„ ๊ฑด๋“œ๋ฆฌ์ง€ ๋ง๋ผ๋Š” ์ฃผ์žฅ์€ ์„ค๋“๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ฝ˜์†” ๋ฉ”์‹œ์ง€๋Š” ๊ต์œก์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด React ๊ฐœ๋ฐœ์„ ํ•˜๋Š” ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ DEV์— ๋Œ€ํ•ด ์ •๋ง ์ค‘์š”ํ•œ ๊ฒƒ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด React๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ๊ฒƒ์„ ๋ด…๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ๊ณ ๋ฅผ ์ข‹์•„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— https://github.com/facebook/react/pull/8782 ์— ๋Œ€ํ•ด ์ฃผ์ €ํ–ˆ์Šต๋‹ˆ๋‹ค(https://github.com/facebook/react/issues/ ์ฐธ์กฐ). 3877), ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€์•ˆ์„ ๊ณ ๋ คํ•˜๋ฉด ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ถ๊ธˆํ•œ. localStorage๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ ์šฉ๋˜์ง€ ์•Š๋Š” ์‚ฌ์ดํŠธ์—์„œ EU ์ฟ ํ‚ค ๋ฒ•๋ฅ ์ด ์ ์šฉ๋ฉ๋‹ˆ๊นŒ?

๊ฐœ๋ฐœ ์ค‘ ์œ ์ตํ•œ ๊ฒฝ๊ณ ๊ฐ€ ์ข‹์€ ์ƒ๊ฐ์ด๋ผ๋ฉด ์™œ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๊ธ€์Ž„, ํ•œ ๊ฐ€์ง€ ์ด์œ ๋Š” ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์„ ํ•˜๊ธฐ๋ฅผ ์›ํ–ˆ๋‹ค๋ฉด ๊ทธ๋“ค๋„ ์œ ์‚ฌํ•œ UI๋ฅผ ํŒ์—…ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋ชจ๋‘ ๋‹ซ์•„์•ผ ํ•˜๋‚˜์š”?

์ด ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋” ์ค‘์‹ฌ์ ์ธ ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์ด์ƒ์ ์ผ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Chrome์— ๊ฐœ๋ฐœ ๋ชจ๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ˜ธ์ŠคํŠธ์—๊ฒŒ ๊ฐœ๋ฐœ ๋ชจ๋“œ์— ์žˆ์Œ์„ ์•Œ๋ฆฌ๋ฉด Chrome์—์„œ ๋ฐฐ์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ํŒ์—…์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

react devtools ํ™•์žฅ์„ ํ™œ์šฉํ•˜์—ฌ dev ๋ชจ๋“œ์—์„œ react๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ์—ด ๋•Œ ์•Œ๋ฆผ์ด๋‚˜ ๋ถ„๋ช…ํ•œ ๊ฒƒ์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

capture d ecran 2017-01-14 a 17 13 43

@sebmarkbage

๊ฐœ๋ฐœ ์ค‘ ์œ ์ตํ•œ ๊ฒฝ๊ณ ๊ฐ€ ์ข‹์€ ์ƒ๊ฐ์ด๋ผ๋ฉด ์™œ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋จผ์ € ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Angular์—๋Š” http://code.gov ์™€ ๊ฐ™์€ ํ•ญ๋ชฉ์ด ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ์‹œ์ž‘๋˜๋Š” ์œ ์‚ฌํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์—†๋Š” ๊ณณ์—์„œ React๊ฐ€ ์ด ํ•ญ๋ชฉ์„ ์žก๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ๋น„์Šทํ•œ ๋ณ€๊ฒฝ์„ ํ•˜๋„๋ก ๋ฐ€์–ด๋ถ™์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๋“ค์—๊ฒŒ ๋น„์Šทํ•œ ๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚ค๋„๋ก ๊ฐ•์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jakearchibald ๊ฐ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ž์ฒด ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ž์ฒด ๊ฐœ๋ฐœ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ํ‘œ์ค€์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์ƒ๊ฐ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋žซํผ์—์„œ ํ‘œ์ค€ํ™”๋ฅผ ์‹œ๋„ํ•ด์•ผ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? @sebmarkbage ๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด

Chrome์— ๊ฐœ๋ฐœ ๋ชจ๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ˜ธ์ŠคํŠธ์—๊ฒŒ ๊ฐœ๋ฐœ ๋ชจ๋“œ์— ์žˆ์Œ์„ ์•Œ๋ฆฌ๋ฉด Chrome์—์„œ ๋ฐฐ์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ํŒ์—…์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์•„์ด๋””์–ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์„ ๋ก€: Safari์—๋Š” DevTools์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋Š” ๋ณ„๋„์˜ ๋ชจ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Chrome์ด ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋ฉด DEV ๋ชจ๋“œ์— ๋Œ€ํ•œ ํ‘œ์‹œ๊ธฐ์™€ ์ด๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” API๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ‘œ์‹œ๊ธฐ๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋งŒ ํ‘œ์‹œ๋˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋ฐฉํ•ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ๊ณต๊ธ‰์—…์ฒด๊ฐ€ ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@jide ์˜ˆ, ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋ฅผ ๋นจ๋ฆฌ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ‘œ์ค€ํ™” ๋…ธ๋ ฅ(ํ•„์š”ํ•œ ๊ฒฝ์šฐ)์„ ๊ณ ๋ คํ•˜๊ธฐ ์ „์— ๋‹จ์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ํ”ผ๊ณคํ•œ

๊ฐ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ž์ฒด ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ž์ฒด ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ(ํ•ด๋‹น ๋ชจ๋“œ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋งˆ๋‹ค ๋งค์šฐ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ), ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์œ ์‚ฌํ•˜๊ฒŒ ๊ณ ์œ ํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฒฝ๊ณ ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์™„์ „ํžˆ ๊ณต์ •ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋Š” ํŽ˜์ด์ง€์— devtools๊ฐ€ ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋Š ์ •๋„ ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ devtools๋ฅผ ์ง„์ž… ์žฅ๋ฒฝ์œผ๋กœ ๋งŒ๋“ ๋‹ค๋ฉด DOM ๊ฒฝ๊ณ ๊ฐ€ ๋†“์น  ์ˆ˜ ์—†๋Š” ๋งŽ์€ ์‚ฌ์šฉ์ž๋ฅผ ๋†“์น˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. DOM ๊ฒฝ๊ณ ๋Š” ๋” ๊ฐ„๋‹จํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ”Œ๋žซํผ ์ข…์†์„ฑ์ด ์ ๊ณ  ๋” ๋งŽ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋„๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋” ๊ฐ„๋‹จํ•˜๊ณ  ํšจ๊ณผ์ ์ธ ์‚ฌ์šด๋“œ๊ฐ€ ์Šน๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

@gaearon Chrome DevTools ์ธก์—์„œ๋Š” ์›น ํ”Œ๋žซํผ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ ์ž‘์„ฑ์ž๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ๊ณ ๋ฅผ ์•Œ๋ฆฌ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ "์œ„๋ฐ˜ API"๋ฅผ ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค๊ฐ€์˜ค๋Š” ๊ฐ์‚ฌ ํŒจ๋„ ์ƒˆ๋กœ ๊ณ ์นจ๊ณผ ๊ฐ™์€ ์œ„์น˜์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์งˆ๋ฌธ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋“ค๋ฆฌ๋ฉฐ DEV ๋ชจ๋“œ ๊ฐ์ง€์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŠน์ • ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ์›๋ž˜ ๊ณ„ํšํ–ˆ๋˜ ๊ฒƒ๋ณด๋‹ค ์กฐ๊ธˆ ๋” ํฐ ์†Œ๋ฆฌ๋ฅผ ๋‚ด๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ˜์†” ๋กœ๊ทธ ๋ฉ”์‹œ์ง€์™€ ์œ ์‚ฌํ•œ ์œ„๋ฐ˜ ํŒจ๋„์€ ํŒจ๋„์ด ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•  ๊ฒƒ์ž„์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋ฉ”์‹œ์ง•์— ๋Œ€ํ•ด ํ‘œ์ค€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€ ์•„๋ž˜์— ๋งค์šฐ ๋ˆˆ์— ๋„๋Š” ํŽ˜์ด์ง€ ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ UX ๊ณต๊ฐ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @paulirish ์™€ @s3ththompson ์—์„œ ํœด์ผ ์ฃผ๋ง ์ดํ›„์˜ ์ƒ๊ฐ์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

Fwiw, ๋‚ด ์ƒ๊ฐ์— ์ด API๋Š” ์•ž์œผ๋กœ ๋ช‡ ๋‹ฌ ๋™์•ˆ ์ค€๋น„๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ฒ˜์Œ์—๋Š” Canary์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ 6-7์ฃผ ํ›„์—๋Š” ์•ˆ์ •ํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DOM ๊ฒฝ๊ณ ๋Š” ๋” ๊ฐ„๋‹จํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋” ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด Jake์™€ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. DevTools ์†”๋ฃจ์…˜์— ๋Œ€ํ•ด ๊ณ„์† ์ด์•ผ๊ธฐํ•ฉ์‹œ๋‹ค. ํ•˜์ง€๋งŒ API๊ฐ€ ๊ท€ํ•˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž์ง€ ์•Š๊ฑฐ๋‚˜ ํƒ€์ž„๋ผ์ธ์ด ํ˜„๋ช…ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•˜์—ฌ React๊ฐ€ ๋Œ€์ฒด ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋‚ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ฐ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ž์ฒด ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ(ํ•ด๋‹น ๋ชจ๋“œ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋งˆ๋‹ค ๋งค์šฐ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ), ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์œ ์‚ฌํ•˜๊ฒŒ ๊ณ ์œ ํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฒฝ๊ณ ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์™„์ „ํžˆ ๊ณต์ •ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

@jakearchibald ํ‘œ์ค€์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์—ฌ๋Ÿฌ ํ”„๋ ˆ์ž„์›Œํฌ(๋˜๋Š” ์ œํ’ˆ๊ตฐ์—์„œ ๋’ค๋”ฐ๋ฅด๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽ˜์ด์ง€๊ฐ€ ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž„์˜์˜ ์–‘์˜ ๋น„๊ฒฐ์ •๋ก ์ ์œผ๋กœ ๋ Œ๋”๋ง๋œ ์•”ํ˜ธ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋ธŒ๋ผ์šฐ์ €๋Š” ํŽ˜์ด์ง€์— devtools๊ฐ€ ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋Š ์ •๋„ ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ด์œ ๋Š” ์ ์–ด๋„ ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ๊ฐœ๋ฐœ์ž๋ณ„ ๋ฉ”์‹œ์ง•์ด ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜์–ด์„œ๋Š” ์•ˆ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

DOM ๊ฒฝ๊ณ ๋Š” ๋” ๊ฐ„๋‹จํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋” ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

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

Fwiw, ๋‚ด ์ƒ๊ฐ์— ์ด API๋Š” ์•ž์œผ๋กœ ๋ช‡ ๋‹ฌ ๋™์•ˆ ์ค€๋น„๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ฒ˜์Œ์—๋Š” Canary์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ 6-7์ฃผ ํ›„์—๋Š” ์•ˆ์ •ํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@addyosmani ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ด๋ผ๋ฉด ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋ ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. React์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค์— ํฌํ•จ๋  ๊ฒƒ์ด๋ฉฐ ๋ฆด๋ฆฌ์Šค ํƒ€์ด๋ฐ์ด ์–ด์จŒ๋“  ์ง„ํ–‰๋˜๋Š” ํ•œ ๋ฏธ์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ์ •๋œ ์†”๋ฃจ์…˜์€ ํ–ฅํ›„ ๋ชจ๋“  ๊ฐœ๋ฐœ์— ์ž ์žฌ์ ์œผ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋งฅ๋ฝ์—์„œ ๋ช‡ ์ฃผ ๋Œ€ ๋ช‡ ๋‹ฌ์€ IMO๋กœ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ DOM์— ์ž์‹ ์ด ๋„ฃ์ง€ ์•Š์€ ๊ฒƒ์„ ์‚ฝ์ž…ํ•˜๋ฉด ์ผ๋ถ€ ๊ฐœ๋ฐœ์ž๋Š” ์นจ์ž…์„ ๋ฐ›๋Š”๋‹ค๋Š” ๋Š๋‚Œ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŽ˜์ด์ง€ ํ•˜๋‹จ์— "์ด ์‚ฌ์ดํŠธ๋Š” DevMode์— ์žˆ์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฐฐ๋„ˆ๊ฐ€ ์žˆ์œผ๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ํ›Œ๋ฅญํ•œ ์†”๋ฃจ์…˜์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์™œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋ฐ˜๋Œ€๋กœ ์ƒ๊ฐํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@aweary : "๋ณด์•ˆ ์ค‘์‹ฌ" ์‚ฌ์ดํŠธ๊ฐ€ DevMode์—์„œ ์‹œ์ž‘๋˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ๊นŒ์ง€ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. "DevMode"์—๋Š” ๋น„ํ™œ์„ฑํ™”๋œ CORS ๊ฒ€์‚ฌ ๋˜๋Š” ๋…ธ์ถœ๋œ ํ…œํ”Œ๋ฆฟ ์†Œ์Šค ์ฝ”๋“œ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋ณด์•ˆ ๊ด€๋ จ ๋ฐ”๋กœ ๊ฐ€๊ธฐ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ดํŠธ๊ฐ€ ๋ณด์•ˆ์— ์ค‘์ ์„ ๋‘” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์ผ์€ _๋ฐ˜๋“œ์‹œ_ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

("DevMode"๊ฐ€ React์—์„œ ๋งค์šฐ ๊ตฌ์ฒด์ ์ธ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ์˜ ๊ด€์ ์„ ๊ฐ€์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค)

@ํ”ผ๊ณคํ•œ

ํ‘œ์ค€์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์—ฌ๋Ÿฌ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽ˜์ด์ง€๊ฐ€ ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž„์˜์˜ ์–‘์˜ ๋น„๊ฒฐ์ •์ ์œผ๋กœ ๋ Œ๋”๋ง๋œ ๋น„๋ฐ€ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ๊ณ„์‹ญ๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ ˆ๋Œ€์ ์œผ๋กœ ๊นจ๋‹ซ๋Š”๋‹ค. ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ์—ฌ๋Ÿฌ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์žˆ๋Š” ํŽ˜์ด์ง€๋Š” ์ •๋‹นํ•œ ์ด์œ  ์—†์ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์‹ฌ๊ฐํ•˜๊ฒŒ ์†์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ๋ˆˆ์— ๋„์ง€ ์•Š๊ณ  ์ˆ˜์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์ง„ํ–‰๋˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ๊ฐœ๋ฐœ์ž(๊ฐœ๋ฐœ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฐ€์‹œ์ ์ธ ๋ฉ”์‹œ์ง€)์—๊ฒŒ ๋„ˆ๋ฌด ์ข‹์ง€ ์•Š์•„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฆ‰์‹œ ์ˆ˜์ •ํ•˜์—ฌ ํ›จ์”ฌ ๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ–ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์†๋„๋งŒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋‹ฌ๋ฆฌ ์ฃผ์žฅํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์ด๋Ÿฐ ๋ฐ˜์‘์ด ๋„ˆ๋ฌด ์•ˆํƒ€๊น๋‹ค ๐Ÿ˜ž

๋‹น์‹ ์€ ์ฐจ๋ผ๋ฆฌ ๋ˆˆ์— ๋„์ง€ ์•Š๊ณ  ๊ณ ์ •๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์›ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@jakearchibald ์ข€ ์ด์ƒํ•œ ๊ฒฐ๋ก ์ด๊ตฐ์š”. ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์œผ๋ฉด ์—ฌ๊ฐ€ ์‹œ๊ฐ„์„ ์—ฌ๊ธฐ์—์„œ ๋‹น์‹ ๊ณผ ์ด์•ผ๊ธฐํ•˜๋ฉด์„œ ๋ณด๋‚ผ ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋‹น์‹ ์˜ ํ•ด๊ฒฐ์ฑ…์— ๋™์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•ด์„œ ๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ๋ฏธํ•ด๊ฒฐ ์ƒํƒœ๋กœ ๋‘๋Š” ๊ฒƒ์„ ์‚ฌ์ž„ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์ •๋ง ๋ถˆ๊ณตํ‰ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ๊ฐœ๋ฐœ์ž(๊ฐœ๋ฐœ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฐ€์‹œ์ ์ธ ๋ฉ”์‹œ์ง€)์—๊ฒŒ ๋„ˆ๋ฌด ์ข‹์ง€ ์•Š์•„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฆ‰์‹œ ์ˆ˜์ •ํ•˜์—ฌ ํ›จ์”ฌ ๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ–ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

๊ทผ๋ณธ์ ์œผ๋กœ ์šฉ๋‚ฉํ•  ์ˆ˜ ์—†๋Š” ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์ฒ˜๋ฒŒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

"๋ณด์•ˆ ์ค‘์‹ฌ" ์‚ฌ์ดํŠธ๊ฐ€ DevMode์—์„œ ์‹œ์ž‘๋˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ๊นŒ์ง€ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@surma dev ๋ชจ๋“œ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ์•ˆ์ „ํ•˜์ง€ ์•Š์ง€๋งŒ, ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ๊ดœ์ฐฎ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ์„ ์„ ๋„˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

DOM์— ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” DOM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ณ  DOM ์ง„์ž…์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— React์— ๋Œ€ํ•ด ์ข€ ๋” ์‹คํ˜„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. DOM์— ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ  ์ž‘์—…์ž์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

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

DOM์„ ์ œ์ž๋ฆฌ์— ์œ ์ง€ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋Š” React์˜ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ฒฝํ—˜์„ ํŒŒ์•…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. master์˜ ํ˜„์žฌ ๊ธฐ๋ณธ ๊ตฌํ˜„์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํŠธ๋ฆฌ์—์„œ React ์ฝ˜ํ…์ธ ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋„ ์นจ์Šต์ ์ด๋‹ค.

๊ฐœ๋ฐœ ๋ชจ๋“œ๊ฐ€ ์•„๋‹˜์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์˜ค๋ฅ˜ ๋ชจ๋“œ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์˜๊ตฌ์ ์œผ๋กœ ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” SSL ๊ตฌ์„ฑ์ด ๊ฐ•์กฐ ํ‘œ์‹œ๋˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

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

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

capture d ecran 2017-01-14 a 17 13 43 1

DEV ๋ชจ๋“œ๋ฅผ ์˜ตํŠธ์ธํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?
๋‚˜์œ DX๋Š” ์•Œ์•„์ฐจ๋ฆฌ๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— "์ข‹์€ UX"์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ IMHO๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์—†์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋Š” ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— "์Šน๋ฆฌ"ํ•ด์•ผ ํ•จ).
์ผ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ์ด๋ฏธ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ธฐ์–ตํ•œ๋‹ค๋ฉด Relay).

๊ตฌํ˜„ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ œ์•ˆ:

  • NODE_ENV ๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ development ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ „์—ญ __DEV__ ๊ฐ€ === true ์ธ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์˜์—ญ์—์„œ ํ™œ์„ฑํ™”ํ•  ๋””๋ฒ„๊ทธ ๋„๊ตฌ ๋ชจ๋“ˆ ๋‚ด๋ณด๋‚ด๊ธฐ

์ฒซ ๋ฒˆ์งธ๊ฐ€ ๊ฐ€์žฅ ์ข‹์€ ์ด์œ ๋Š” ๋‹ค๋ฅธ ๋‘ ๊ฐœ๋Š” ๊ฐ€๋“œ ์—†์ด ํ•˜๋“œ ์ฝ”๋”ฉ๋˜์–ด(์˜ˆ: if(NODE_ENV === 'development') ๋ฌธ) ์–ด์จŒ๋“  ํ”„๋กœ๋•์…˜์œผ๋กœ ๋ฐฐ์†ก๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@mattecapu ์— ๊ด€ํ•œ ๋‘ ๋ฒˆ์งธ ์˜๊ฒฌ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. https://twitter.com/sebmarkbage/status/820047144677584896

๊ฐœ๋ฐœ์ž๊ฐ€ DEV ๋ชจ๋“œ์—์„œ ์‹คํ–‰ํ•˜์—ฌ ์‹œ์ž‘ํ•˜๋„๋ก ๊ฐ•์ œํ•˜๋Š” ์œ ์‚ฌํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์ด ๋ฌด์—‡์ธ์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋’ค์ฒ˜์ง€๋ฉด ์ •๋ง ๊ณค๋ž€ํ•˜๋‹ค.

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

์ €๋Š” ํŠน์ • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ DOM ๊ฒฝ๊ณ ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฒ„ํŠผ์˜ ์—ด๋ ฌํ•œ ํŒฌ์ด ์•„๋‹™๋‹ˆ๋‹ค. @jlongster๊ฐ€ ์ง€์ ํ–ˆ๋“ฏ์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋ฉด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ณ ํ†ต์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜์—๊ฒŒ ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ธŒ๋ผ์šฐ์ € ๊ณ ์œ ์˜ ๋™์ž‘ ๋ณ€๋™์„ฑ์„ ๋„์ž…ํ•˜์—ฌ ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์—†๋Š” "๋‚ด ์ปดํ“จํ„ฐ์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ๋‚ด ์ปดํ“จํ„ฐ์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค"๋กœ ์‰ฝ๊ฒŒ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’ ["localhost", "127.0.0.1"] ์œผ๋กœ ๊ฐœ๋ฐœ์ž ์ƒ์ž๋กœ ๊ฐ„์ฃผ๋˜๋Š” ๋„๋ฉ”์ธ์„ ๋‚˜์—ดํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ Œ๋”๋ง์— ์ „์†กํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

React.render(<App/>, 
  myDiv,
  () => { console.log('finished render!'), 
  { devDomains: ["localhost", "devbox.mycorp.com"] }
);

ํ˜„์žฌ ๋„๋ฉ”์ธ์ด ๋ชฉ๋ก์— ์žˆ์œผ๋ฉด dev ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ด ์ฒด์ œ์—์„œ:

  • localhost ๋˜๋Š” 127.0.0.1 ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ์‹œ์Šคํ…œ์—์„œ dev ๋นŒ๋“œ ์‚ฌ์šฉ : ๊ฐœ๋ฐœ์ž ๊ฒฝ๊ณ ๊ฐ€ ์—†์œผ๋ฉฐ ๊ฐœ๋ฐœ์ž ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ ๋จธ์‹ ์—์„œ dev ๋นŒ๋“œ ์‚ฌ์šฉ : render ์— ์ „๋‹ฌ๋œ ๋ชฉ๋ก์— ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•  ๋•Œ๊นŒ์ง€ DOM ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„์—๋Š” DOM ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • prod ๋จธ์‹ ์—์„œ dev ๋นŒ๋“œ ์‚ฌ์šฉ : React๋ฅผ prod ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜ํ•  ๋•Œ๊นŒ์ง€ DOM ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์ด ์†”๋ฃจ์…˜์— ๋Œ€ํ•ด ๋‚ด๊ฐ€ ๊ฑฑ์ •ํ•˜๋Š” ํ•œ ๊ฐ€์ง€๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐœ๋ฐœ ์„œ๋ฒ„ ๋„๋ฉ”์ธ ๋ชฉ๋ก์„ ๋‚จ๊ธฐ๊ณ  ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ํ”„๋กœ๋•์…˜์— ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ๋„๋ฉ”์ธ์„ ๋น„๋ฐ€๋กœ ์—ฌ๊ธฐ๋Š” ํšŒ์‚ฌ์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ƒ๊ฐ?

@aickin ํ•ด๋‹น ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๋ฌธ์ œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ์„ฑ์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๊ฒฐ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐœ๋ฐœ/์ œํ’ˆ ๊ตฌ๋ถ„์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ์‹ ๊ฒฝ ์“ฐ์ง€ ๋งˆ์„ธ์š”. ๊ฐœ๋ฐœ ์ค‘์ธ DOM ๊ฒฝ๊ณ ๊ฐ€ ์—ฌ์ „ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ธก ํ™˜๊ฒฝ์€ ๋””๋ฒ„๊ทธ ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ "ํŠน์ˆ˜" ์˜ค๋ฅ˜ ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ œ๊ณตํ•˜์ง€ ๋ง๋ผ๊ณ  ์•Œ๋ ค์คŒ์œผ๋กœ์จ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ง€์ • ์˜ค๋ฅ˜ ๊ฒฝ๊ณ„๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ํ•œ React๋ฅผ "๋น ๋ฅด๊ฒŒ ์‹คํŒจ"ํ•˜๊ณ  ๋ทฐ๋ฅผ ๋งˆ์šดํŠธ ํ•ด์ œํ•  ๊ณ„ํš์ด๋ฏ€๋กœ ๊ต์œก ํŽ˜์ด์ง€ ์—ญํ• ์„ ํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ธฐ๋ณธ "๋นจ๊ฐ„์ƒ‰ ์ƒ์ž" ์˜ค๋ฅ˜ ๊ฒฝ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๋•์…˜์—์„œ ์ฒ˜์Œ์œผ๋กœ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์„ ๋•Œ ํŠน๋ณ„ํ•œ ์ž์„ธํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ DEV ๋นŒ๋“œ์— ๋Œ€ํ•ด ๊ต์œกํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํŽ˜์ด์ง€ ํ•˜๋‹จ์— "์ด ์‚ฌ์ดํŠธ๋Š” DevMode์— ์žˆ์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฐฐ๋„ˆ๊ฐ€ ์žˆ์œผ๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ํ›Œ๋ฅญํ•œ ์†”๋ฃจ์…˜์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์™œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋ฐ˜๋Œ€๋กœ ์ƒ๊ฐํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

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

์—ฌ๋Ÿฌ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง€์›ํ•˜๊ณ  ๋” ๋ช…ํ™•ํ•˜์ง€๋งŒ ๊ถŒํ•œ ์š”์ฒญ์ด ํ•„์š”ํ•œ ๋˜ ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์€ ๋ธŒ๋ผ์šฐ์ € ์•Œ๋ฆผ์„ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„์ด๋””์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. react์˜ ํ™ˆํŽ˜์ด์ง€์—์„œ ์‹œ์ž‘ํ•˜๊ธฐ ๋ฌธ์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ react ์•ฑ์„ ๋” ๋งŽ์ด ์ƒ์„ฑํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฌธ์„œ์—์„œ npm build์˜ ์ค‘์š”์„ฑ์„ ๊ฐ•์กฐํ•˜์‹ญ์‹œ์˜ค. DOM ๊ฒฝ๊ณ ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ธ์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— @ropilz ๋Š” ์Šค๋ ˆ๋“œ์˜ ์ดˆ๊ธฐ์— "_.. ์šฐ๋ฆฌ๊ฐ€ devs.._์—๊ฒŒ ์•Œ๋ฆฌ๊ณ  ์‹ถ์€ ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค." ์ฃผ์„์œผ๋กœ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ, ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ•œ(๋˜๋Š” ์Šน์ธ๋˜์ง€ ์•Š์€) ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ•œ ์—ฌ๊ธฐ์—์„œ ํ•ด๊ฒฐ๋˜๋Š” ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š”

  • ํ”„๋กœ๋•์…˜ _์ตœ์ข… ์‚ฌ์šฉ์ž_๊ฐ€ ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ์‹คํ–‰ ์ค‘์ธ ์‚ฌ์ดํŠธ๋ฅผ ๊ฒฝํ—˜ํ•  ๋•Œ ์–ด๋–ป๊ฒŒ๋“  _๊ฐœ๋ฐœ์ž_์—๊ฒŒ ๊ฒฝ๊ณ ํ•˜๊ธฐ ์œ„ํ•ด
  • ํ”„๋กœ๋•์…˜์—์„œ console.log ๋ฉ”์‹œ์ง€(๋˜๋Š” ํ•ด๋‹น ๋ฌธ์ œ์— ๋Œ€ํ•œ DOM ๊ฒฝ๊ณ )๋ฅผ ๋ณด๋Š” ๊ฐœ๋ฐœ์ž์— ์˜์กดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ, ํ•ด๋‹น ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ๋•์…˜ ์‚ฌ์ดํŠธ ์ž์ฒด๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ(๋˜๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž, QA/ ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ ๋ฅผ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋‹ค์‹œ ๋ณด๊ณ ํ•˜๊ธฐ ์œ„ํ•ด ์ง€์› ํŒ€ ๋“ฑ)
  • ๊ฐœ๋ฐœ์ž ์ฒญ์ค‘์„ ์œ„ํ•œ DOM ํ‘œ์‹œ ๊ฒฝ๊ณ ๋ฅผ ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œํ•˜๋Š” (์œ ํšจํ•œ) UX ์ธ์ˆ˜ _against_๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

CSP์˜ report-uri ์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ดํŠธ์—์„œ ํ˜„์žฅ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋Œ€์‹  ๊ฐœ๋ฐœ ๋ชจ๋“œ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ถ„๋ช…ํžˆ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ด๋Ÿฌํ•œ ๋ณด๊ณ ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผœ์ ธ ์žˆ๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ด์ง€๋งŒ ๊ธฐ๋ณธ report-uri ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? (์šฐ๋ฆฌ๋Š” ๊ฐ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ https://report-uri.io์™€ ์œ ์‚ฌํ•œ ์ž์ฒด ๋ฌด๋ฃŒ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ŠคํŒ…ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ• ๊นŒ์š”? (์ด๋Š” React & Angular์™€ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ํšŒ์‚ฌ ํ›„์› ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” _may_ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์†Œ๊ทœ๋ชจ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ํ™•์‹คํžˆ ๋น„์‹ค์šฉ์ ์ž…๋‹ˆ๋‹ค. Preact, Vue ๋“ฑ)
  2. ๊ฒฝ๊ณ ๊ฐ€ ๋ณด๊ณ ๋˜๋ฉด ์‚ฌ์ดํŠธ ์†Œ์œ ์ž/๊ฐœ๋ฐœ์ž์—๊ฒŒ ์–ด๋–ป๊ฒŒ ํ†ต์ง€๋ฉ๋‹ˆ๊นŒ? (๋น„๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์ด๋Ÿฌํ•œ ๋ณด๊ณ ์„œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์ถ”์ /ํ†ต์ง€ํ•˜๋Š” ๋ฐ ์ž์›ํ•˜์—ฌ ๋„์›€์„ ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

๋‚˜๋Š” ์ด ์ œ์•ˆ์ด ๋‹จ์ง€ ์ƒ๊ฐ์— ๋ถˆ๊ณผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์™„์ „ํžˆ ์ธ์ •ํ•˜๋ฉฐ ์ด๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์‹ค์šฉ์ ์ธ์ง€ ๋˜๋Š” ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ CSP/HPKP ๋ณด๊ณ ์— ๋Œ€ํ•ด 'ํ”„๋กœ๋•์…˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ณด๊ณ ' ๋ฌธ์ œ๊ฐ€ ์ด๋ฏธ ๋ถ€๋ถ„์ ์œผ๋กœ ํ•ด๊ฒฐ๋œ ๊ฒƒ ๊ฐ™์•„์„œ ์—ฌ๊ธฐ์—์„œ ๋น„์Šทํ•œ ๊ฒƒ์„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ ์˜ฌ๋ ค๋ณด๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•œ ๊ฑธ์Œ ๋ฌผ๋Ÿฌ์„œ์„œ React๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ํ–‰์œ„ ๋ฅผ ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค .

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

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

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

๊ฐœ๋ฐœ์ž๋ฅผ ๋Œ๋ณด๋Š” ๊ฒƒ์€ React์˜ ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ์˜ตํŠธ์ธ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋””๋ฒ„๊ทธํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜๋ฉด ์ด๋ฅผ ์ผœ๋Š” ๋ฐฉ๋ฒ•( ์–ด๋””์—๋‚˜ ๋ฌธ์„œํ™”ํ•ด์•ผ ํ•จ)์„ ์ฐพ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”, ๋‹ค์‹œ ๋„๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ React์˜ ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ๋ฌธ์ œ.

  2. ๊ฐ„๋‹จํ•œ console.log ๋ฉ”์‹œ์ง€์— ๊ทธ๋Œ€๋กœ ๋‘์‹ญ์‹œ์˜ค(์ด๋Š” ๋น„ํ™œ์„ฑํ™” ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ). ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฐพ์•„์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์˜ค ๊ธ€์Ž„. ๋ชจ๋“  ์กฐ์ง์— ์ ‘๊ทผํ•˜์—ฌ ์ผ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํ™•์žฅ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด DOM์„ ๋งŒ์ง€๋Š” ๊ฒƒ์— ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. React๋Š” DOM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•ด ๋ณด์ด์ง€๋งŒ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ DOM์— ์ž์ฒด ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์„ธ์š”. ์ด์ฒด์  ๋‚œ๊ตญ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ์ž์ฒด ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค. process.env.NODE_ENV ๋ฅผ production ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์ด๋ฏธ ๋ธŒ๋ผ์šฐ์ €์šฉ ๋ชจ๋“ˆ ๋ฒˆ๋“ค์˜ ์ผ๋ฐ˜์ ์ธ ํ‘œ์ค€์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ์ธ์‹์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” React ๋ฌธ์„œ๊ฐ€ ๊ฐœ๋ฐœ ๋นŒ๋“œ์™€ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์‚ฌ์ด์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ˆˆ์— ๋„๊ฒŒ ๋ณด์—ฌ์ฃผ์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ๋ฅผ ์—ด ๋•Œ ๊ณ ๊ธ‰ ๊ฐ€์ด๋“œ ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ๋นŒ๋“œ์™€ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์˜ ์ฐจ์ด์ ์„ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ œ๋ชฉ์€ Optimizing Performance ์ž…๋‹ˆ๋‹ค. ์ดˆ๋ณด์ž๋“ค์€ React๊ฐ€ ๋น ๋ฅด๋‹ค๊ณ  ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ˆ๋Œ€ ๋ณด์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋น ๋ฅธ ์‹œ์ž‘ ์„น์…˜์—์„œ "ํ”„๋กœ๋•์…˜์—์„œ React ์‚ฌ์šฉ" ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ์ œ๋ชฉ์˜ ๋‹ค๋ฅธ ๋ฌธ์„œ๋ฅผ ๊ฐ–๋„๋ก ๋ฌธ์„œ๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

์šฐ๋ฆฌ๊ฐ€ ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์€ React๊ฐ€ ๋ฌธ์„œ์— ๋Œ€ํ•œ ํ•ด๋‹น ์ง€์ ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋งํฌ์™€ ํ•จ๊ป˜ ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ์‚ฌ์šฉ๋  ๋•Œ ์ฝ˜์†”์— ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ฝ˜์†”์„ ์—ฌ๋Š” ๊ฒƒ์€ ๋“œ๋ฌธ ์ผ์ด์ง€๋งŒ ๊ฐœ๋ฐœํ•  ๋•Œ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ๋Š” ํ™•์‹คํžˆ ์ฝ˜์†”์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋กœ์ปฌ์—์„œ ๊ฐœ๋ฐœํ•  ๋•Œ ํ”„๋กœ๋•์…˜์— ๊ฒŒ์‹œํ•˜๊ธฐ ์ „์— ํ•ด์•ผ ํ•  ์ผ์ด ์žˆ์Œ์„ ์•Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ฝ˜์†” ๊ฒฝ๊ณ ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  http://code.gov ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์šฐ๋ฆฌ๊ฐ€ ์˜ˆ๋ฐฉํ•ด์•ผ ํ•˜๋Š” ์ข…๋ฅ˜์˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (ํ•ด๋‹น ์‚ฌ์ดํŠธ๋Š” Angular์ด์ง€๋งŒ React์—๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค)

๋ˆ„๊ตฌ๋“ ์ง€ ๊ทธ๋“ค์—๊ฒŒ ์—ฐ๋ฝํ•˜๊ฑฐ๋‚˜ PR์„ ๋ณด๋‚ด๋ ค๋Š” ๊ฒฝ์šฐ code.gov์— ๋Œ€ํ•œ ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. https://github.com/presidential-innovation-fellows/code-gov-web/issues/221

Angular 2 is running in the development mode. Call enableProdMode() to enable the production mode.

์ €๋Š” Angular 2๋ฅผ ์‚ฌ์šฉํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค(์ด ๊ฒฝ์šฐ ์ดˆ๋ณด์ž๊ฐ€ ๋จ). ๊ฒฝ๊ณ ๋ฅผ ๋ณธ ํ›„์˜ ์ดˆ๊ธฐ ๋ฐ˜์‘์€ enableProdMode() ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Angular ์ผ€์ด์Šค์— ๋Œ€ํ•œ ์ฝ˜์†” ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋งˆ๋ฒ•์— ์˜์กดํ•˜๋Š” ๋Œ€์‹  ๋ฌธ์„œ๋ฅผ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Angular ๋ฌธ์„œ๋ฅผ ์—ด๋ฉด ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์— ๋Œ€ํ•ด ์•„๋ฌด ๊ฒƒ๋„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด Angular์™€ React ๋ชจ๋‘์˜ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค dev ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋ฌธ์„œ์— ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์„œ ๊ฐœ์„ ์ด ๊ฐœ๋ฐœ์ž ๊ต์œก์— ํฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ "์‹ค์ˆ˜"๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉ์ž ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋Œ€ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ž„์˜์˜ DOM ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์€ ๋ฐฉํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‚ฌ์ดํŠธ๊ฐ€ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ „์šฉ UI๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTTPS ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ๊ด€๋ จ ์ƒํƒœ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์›น ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ์šฐ๋ ค๊ฐ€ ๋†’์•„์ง€๋Š” ๊ฒƒ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋ธŒ๋ผ์šฐ์ € ๊ณต๊ธ‰์—…์ฒด๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐฉ๋ฌธํ•˜๋Š” ์‚ฌ์ดํŠธ๊ฐ€ ํ˜•ํŽธ์—†๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋„๊ตฌ ์ˆ˜์ค€์—์„œ ํ•ด๊ฒฐ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ webpack๊ณผ Babel์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ NODE_ENV ์„ค์ •์˜ ์ด์ ์„ ์•Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@pveyes ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. Angular ํŒ€์— ๋Œ€ํ•ด์„œ๋„ ๊ฐ™์€ ์ง€์ ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

@matthewp ์ด https://github.com/presidential-innovation-fellows/code-gov-web/issues/129 ์— ๋Œ€ํ•œ ํ›จ์”ฌ ์˜ค๋ž˜๋œ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ Angular ํŒ€์ด ์ง์ ‘ ์—ฐ๋ฝํ•˜์—ฌ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์ ์šฉํ•˜๋ ค๋Š” ์ž‘์€ ์š•๋ง. ์งˆ๋ฌธ์€ DOM ๊ฒฝ๊ณ ๊ฐ€ ์ด ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋” ๊ธด๊ธ‰ํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ–ˆ์Šต๋‹ˆ๊นŒ?

์งˆ๋ฌธ์€ DOM ๊ฒฝ๊ณ ๊ฐ€ ์ด ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋” ๊ธด๊ธ‰ํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ–ˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋“ค์€ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ๊ฒฝ๊ณ ๋ฅผ ๋ณผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฉฐ Google์—์„œ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์žŠ์–ด ๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ž˜์— ๊ทธ๊ฒƒ์„ ๊นจ๋‹ซ์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ ๋ชจ๋“œ๋กœ ๋ฐฐํฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์—๋Š” ํ”„๋กœ๋•์…˜์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ๋ฅผ ์›ํ•˜๋ฏ€๋กœ ์ž„์˜์˜ DOM ์ฒญํฌ๊ฐ€ ์‚ฝ์ž…๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ƒ์‚ฐ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— QA ๋˜๋Š” ์Šคํ…Œ์ด์ง• ์‹œ์Šคํ…œ์ด ์ด๊ฒƒ์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์‚ฌ์ดํŠธ์˜ UX๋ฅผ ๋ง์น˜๋Š” ์ด๊ฒƒ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋งŽ์€ ์ •ํฌ ์ฝ”๋“œ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์— ๋น„ํ™œ์„ฑํ™”ํ•œ ์›๋ž˜ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ƒ์‚ฐ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์ด๋™ํ–ˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

code.gov์—์„œ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์‹ค์ˆ˜๋กœ ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ •๋ถ€ ๊ณ„์•ฝ์ž๋กœ์„œ ๊ฒฝํ—˜ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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

  2. ์‚ฌ์šฉ์ž๊ฐ€ ์•Œ์•„์ฐจ๋ฆฌ๋ฉด ์ˆ˜์ •๋˜์ง€๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ ๋ฐฐํฌ ์ฐฝ๊นŒ์ง€ ๊ธฐ๋Šฅ์ด ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ์‚ฌ์šฉ์ž๋Š” ๋ช‡ ์ฃผ ๋˜๋Š” ๋ช‡ ๋‹ฌ ๋™์•ˆ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ ์–ด๋„ ๋‚ด ๊ฒฝํ—˜์€ ๊ทธ๋žฌ๋‹ค. ์š”์ ์€ ๋ฐฐํฌ ์งํ›„ DOM ์นจ์ž… ์ด ๊ฐ์ง€๋˜๋”๋ผ๋„ ํ•ด๋‹น ์ธํ”„๋ผ/ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์•Œ ์ˆ˜ ์—†์œผ๋ฉฐ ์ฆ‰์‹œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ).

๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋Š” #7360(๋…ธ๋ž€์ƒ‰ ์ƒ์ž)์ด ๋ณ‘ํ•ฉ๋  ๋•Œ ๋” ๋ˆˆ์— ๋„๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋…ธ๋ž€์ƒ‰ ์ƒ์ž์— ๋ฉ”์‹œ์ง€๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค("React Development Mode Warnings"๋ผ๊ณ  ํ•ฉ๋‹ˆ๊นŒ?).

screen shot 2017-01-15 at 20 43 33

Angular ๋ฌธ์„œ๋ฅผ ์—ด๋ฉด ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์— ๋Œ€ํ•ด ์•„๋ฌด ๊ฒƒ๋„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด Angular์™€ React ๋ชจ๋‘์˜ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค dev ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋ฌธ์„œ์— ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์„œ ๊ฐœ์„ ์ด ๊ฐœ๋ฐœ์ž ๊ต์œก์— ํฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜ ํŽ˜์ด์ง€์— ์žˆ์Šต๋‹ˆ๋‹ค.

https://facebook.github.io/react/docs/installation.html#development-and-production-versions

์„ฑ๋Šฅ ์ตœ์ ํ™”:

https://facebook.github.io/react/docs/optimizing-performance.html#use -the-production-build

๋‚˜๋Š” ๋ฌธ์„œ๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์„ ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ๊ณต์ •ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์„œ๋ฅผ ์—ด ๋•Œ ๊ณ ๊ธ‰ ๊ฐ€์ด๋“œ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ๋นŒ๋“œ์™€ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์˜ ์ฐจ์ด์ ์„ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ œ๋ชฉ์€ Optimizing Performance์ž…๋‹ˆ๋‹ค. ์ดˆ๋ณด์ž๋“ค์€ React๊ฐ€ ๋น ๋ฅด๋‹ค๊ณ  ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ˆ๋Œ€ ๋ณด์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋น ๋ฅธ ์‹œ์ž‘ ์„น์…˜์—์„œ "ํ”„๋กœ๋•์…˜์—์„œ React ์‚ฌ์šฉ" ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ์ œ๋ชฉ์˜ ๋‹ค๋ฅธ ๋ฌธ์„œ๋ฅผ ๊ฐ–๋„๋ก ๋ฌธ์„œ๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”๋กœ ์ฒซ ๋ฒˆ์งธ ํŽ˜์ด์ง€(์„ค์น˜)์— ์žˆ์Šต๋‹ˆ๋‹ค.

https://facebook.github.io/react/docs/installation.html#development-and-production-versions

๋„ค๊ฐ€ ์˜ณ์•„. ๋ฏธ์•ˆ ๋‚ด ์‹ค์ˆ˜. ๋‚˜๋Š” ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๊ฐ€ ๋‹ค๋ฅธ ์„น์…˜์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์—ฌ ๊ฑฐ๊ธฐ๋ฅผ ๋ณด์ง€ ์•Š๊ณ  ๋Œ€์‹  ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ๊ด€๋ จ ์ œ๋ชฉ์„ ๊ฒ€์ƒ‰ํ–ˆ์Šต๋‹ˆ๋‹ค(์ตœ์ ํ™” ์„ฑ๋Šฅ ํŽ˜์ด์ง€๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค). ๋‚ด๊ฐ€ ๋” ์ž˜ ์•Œ์•˜์–ด์•ผ ํ–ˆ๋‹ค.

์ €๋Š” React์˜ ์ดˆ๋ณด์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด ๊ฐ€์ •์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์„œ๋ฅผ ์—ด ๋•Œ - React ๋ฌธ์„œ๋Š” prod vs dev์— ๋Œ€ํ•ด ์‚ฌ์ „์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค - ์„ค์น˜ ๋ฌธ์„œ๋ฅผ ์—ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค ๐Ÿ™‡

๊ฑฑ์ • ๋งˆ. ๋ˆˆ์— ์ž˜ ๋„์ง€ ์•Š์œผ๋ฉด ๋” ๋‚˜์€ ๋ฐฐ์น˜๋ฅผ ์œ„ํ•œ ์ œ์•ˆ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ „์šฉ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค( Deploying to Production ).

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

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์œ ์ผํ•œ ์‹ค์ œ ๋ฐฉ๋ฒ•์€ ๊ฐ์ง€ํ•˜๊ณ  ์•Œ๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@KrisSiegel ํŒŒ๋น„์ฝ˜์ด ์บ์‹œ๋˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์ ์ž…๋‹ˆ๋‹ค. 1~2์ดˆ ํ›„์— ์ „ํ™˜ํ•œ ๋‹ค์Œ ๋ช‡ ์ดˆ๋งˆ๋‹ค ์งง๊ฒŒ ๋‹ค์‹œ ๋’ค์ง‘์–ด์•ผ ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ์บ์‹ฑ ๋ฐ ๋ถ๋งˆํฌ ๋ฌธ์ œ๊ฐ€ ์žฌ์ •์˜ ๋œ ์•„์ด์ฝ˜ ์‹œ๊ฐ„์— ์‹œ๊ฐ„์„ ๋งž์ถœ ๊ฐ€๋Šฅ์„ฑ์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” favicon์— ๋Œ€ํ•œ JS ์กฐ์ž‘์ด ์บ์‹œ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ์•„๋งˆ๋„ ๋‚ด๊ฐ€ ํ‹€๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ„ํ•œ ํ›„ํฌ๋ฅผ ๊ฐ–๋Š” ์ ์ ˆํ•œ ์žฅ์†Œ๊ฐ€ Chrome์ด๋‚˜ Firefox๊ฐ€ ์•„๋‹ˆ๋ผ webpack, Browserify ๋˜๋Š” Rollup์ด๋ผ๊ณ  ์ฃผ์žฅํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

@taion ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ํ™•์‹คํžˆ DOM์ด ์•„๋‹Œ ๋นŒ๋“œ ๋„๊ตฌ์— ์†ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋…ธ๋“œ env๊ฐ€ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์— ๋Œ€ํ•ด ํ”„๋กœ๋•์…˜์œผ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๋นŒ๋“œ ๋„๊ตฌ ์žฅ์†Œ์—ฌ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์ข‹์€ ๊ฐ€์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

npm run build ๊ฐ€ ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰๋˜๊ณ  ํ™˜๊ฒฝ์ด ํ”„๋กœ๋•์…˜์œผ๋กœ ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์ถœ๋ ฅ๊ณผ ํ•จ๊ป˜ ํ„ฐ๋ฏธ๋„์— ๋นจ๊ฐ„์ƒ‰ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. env is not set to production, some scripts may be in development mode

ํ˜„์žฌ webpack์—์„œ ๊ทธ๋Ÿฌํ•œ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์ถ”๊ฐ€ ์„ค๋ช…

์•„๋‹ˆ๋ฉด ์ •๋ง NODE_ENV๋ฅผ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.

์ฝ˜์†” ๊ฒฝ๊ณ ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ๋นŒ๋“œ ๊ฒฝ๊ณ ๊ฐ€ ์ž‘๋™ํ• ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ๋•์…˜์šฉ์œผ๋กœ ์ž˜๋ชป ๊ตฌ์„ฑ๋˜๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ React์˜ ๊ฒฝ์šฐ ์ด _is_ ๋นŒ๋“œ ์‹œ๊ฐ„ ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค.

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

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

React์šฉ ํ”„๋กœ๋•์…˜ ๋ฒˆ๋“ค๋กœ ์˜๋„๋˜์—ˆ์ง€๋งŒ ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š๊ณ  ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์€ ๋นŒ๋“œ ์˜ค๋ฅ˜์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

CDN์—์„œ ๋ฏธ๋ฆฌ ํŒจํ‚ค์ง•๋œ ๋ฒ„์ „์˜ React๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ง€์›๋˜๋Š” ๊ตฌ์„ฑ ์ด์ง€๋งŒ ํ•ด๋‹น ์›Œํฌํ”Œ๋กœ์—๋Š” ๋นŒ๋“œ ๋‹จ๊ณ„๊ฐ€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋นŒ๋“œ์—๋งŒ ์ดˆ์ ์„ ๋งž์ถ˜ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์€ CDN ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์†”์งํžˆ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๋Š๋ผ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” React CDN ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ฐœ๋ฐœ์ž ๊ฒฝ๊ณ ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ฐฌ์„ฑ๊ณผ ๋ฐ˜๋Œ€ ๋ชจ๋‘๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@taion ๋นŒ๋“œ ์ „์šฉ ์†”๋ฃจ์…˜์„ ์ง€์›ํ•˜๋Š” ์‚ฌ๋žŒ์œผ๋กœ์„œ ์ด๊ฒƒ์ด ๋‹ค๋ฃจ์–ด์•ผ ํ•  ์ค‘์š”ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”?

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

๊ฑฐ๊ธฐ์— ์žˆ๋Š” ๋ฌธ์„œ์—๋Š” ํ”„๋กœ๋•์…˜์— .min.js ๋ฒˆ๋“ค์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๊ฝค ๋ถ„๋ช…ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ ๋™์˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ CDN์˜ dev ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ๊ทน์ ์ธ dev ๊ฒฝ๊ณ ๋กœ ์˜ˆ๋ฐฉํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋‹น์‹ ์˜ ์ž…์žฅ์— ๋Œ€ํ•œ ๊ณต์ •ํ•œ ์š”์•ฝ์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์ œ๊ฐ€ ์•ฝ๊ฐ„์˜ ๋‰˜์•™์Šค๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

CDN+dev ๊ตฌ์„ฑ์€ ์‚ฌ์šฉ์ž๊ฐ€ React์˜ ์ถ•์†Œ๋˜์ง€ ์•Š์€ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์—์„œ ๋” ๋ช…๋ฐฑํ•˜๊ฒŒ ์ž˜๋ชป๋œ ๊ตฌ์„ฑ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ถ•์†Œ๋œ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ง€์‹์˜ ๋ถ€๋‹ด์ด ๋” ์ ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์‹คํŒจํ•˜๋Š” ๊ฒƒ์ด ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

webpack ๋˜๋Š” Browserify์—์„œ ์ถ•์†Œ๋ฅผ ์‹คํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๋•์…˜ ์ค€๋น„๊ฐ€ ๋œ ๊ฒƒ _์ƒ๊ฐ_ ํ•˜๋Š” ๊ตฌ์„ฑ์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” NODE_ENV ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. CDN ๋ฒˆ๋“ค์„ ํ†ตํ•ด ์ด๋ฅผ ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Chrome Developer Tools ์˜ React ํƒญ์€ ์šฐ๋ฆฌ๊ฐ€ DEV Mode ์— ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๊ธฐ์— ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ํŽ˜์ด์ง€์— DOM ์š”์†Œ๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์„ ๋ก€๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์€ ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

http://symfony.com/blog/new-in-symfony-2-8-redesign-web-debug-toolbar

๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ ์ด๊ฒƒ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผœ์ ธ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์–ธ๊ธ‰ํ•˜๋ ค๋ฉด:

  • 0์ด ์•„๋‹Œ ์ˆ˜์˜ React ์‚ฌ์ดํŠธ๊ฐ€ ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ๋•์…˜์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์ด ์ˆซ์ž๋ฅผ ์ค„์ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค
  • ์šฐ๋ฆฌ๋Š” React ๊ฐœ๋ฐœ์ž๋“ค์„ ๊ท€์ฐฎ๊ฒŒ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค
  • ์šฐ๋ฆฌ๋Š” React๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ๋ฏธ๋ฃจ๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • React๋กœ ๊ตฌ์ถ•๋œ ์‚ฌ์ดํŠธ์˜ ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ cyptic ๊ฐœ๋ฐœ์ž ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์™ธ๋ถ€ DOM ์š”์†Œ์˜ ์กด์žฌ๋กœ ์ธํ•ด ์‚ฌ์ดํŠธ๋ฅผ ์ค‘๋‹จํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ ์ ˆํ•œ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ๊ฐœ๋ฐœ ๋ชจ๋“œ์˜ React๊ฐ€ console.warn ๋˜๋Š” console.info ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ๋ชจ๋“œ์— ์žˆ์Œ์„ ์•Œ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ํ”„๋กœ๋•์…˜์—์„œ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ง€์นจ์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ „๊ฐœ.

๋ฌผ๋ก , ์ด๊ฒƒ์ด ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์‚ฌ๋กœ์žก์„ ์ˆ˜๋Š” ์—†์ง€๋งŒ _๊ดœ์ฐฎ์€ ์‹œ์ž‘์ž…๋‹ˆ๋‹ค_. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‹ค์ˆ˜๋กœ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์œผ๋กœ ๋ฐฐ์†ก๋˜๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜๋ฅผ ์ค„์ด๊ณ  ํ–ฅํ›„ ๊ฐœ์„ ์„ ์œ„ํ•ด ๋ฌธ์„ ๋‹ซ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ ์ ˆํ•œ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ๊ฐœ๋ฐœ ๋ชจ๋“œ์˜ React๊ฐ€ console.warn ๋˜๋Š” console.info๋ฅผ ํ†ตํ•ด ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ์— ๋Œ€ํ•ด ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ง€์นจ๊ณผ ํ•จ๊ป˜ ๊ฐœ๋ฐœ ๋ชจ๋“œ์— ์žˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ์ค‘์ผ ๋•Œ ๊ฐœ๋ฐœ ๋ชจ๋“œ์— ์žˆ๋Š” ๊ฒƒ์ด ์ž˜๋ชป๋œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์–ด๋–ค ํœด๋ฆฌ์Šคํ‹ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์•„๋ฌด๋„ ์ฝ˜์†”์„ ์ฝ์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ถฉ๋Œ ๋ณด๊ณ  ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ก๋˜๋„๋ก ์‹œ๊ฐ„ ์ œํ•œ์„ ๋˜์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ์ค‘์ผ ๋•Œ ๊ฐœ๋ฐœ ๋ชจ๋“œ์— ์žˆ๋Š” ๊ฒƒ์ด ์ž˜๋ชป๋œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์–ด๋–ค ํœด๋ฆฌ์Šคํ‹ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ˜„์žฌ React DevTools ๊ณต์ง€์™€ ์œ ์‚ฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
screen shot 2017-01-17 at 14 03 04

ํ˜„์žฌ ๊ฐœ๋ฐœ ๋ชจ๋“œ์— ์žˆ์œผ๋ฉฐ ํ”„๋กœ๋•์…˜ ์‚ฌ์ดํŠธ์—์„œ๋Š” ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•จ์„ ์•Œ๋ ค์ฃผ๋Š” ์ •๋ณด ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ (์ด๋ก ์ ์œผ๋กœ) ๋” ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ตฌ๋ณ„์ด ์žˆ์œผ๋ฉฐ ํ”„๋กœ๋•์…˜ ์‚ฌ์šฉ์„ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์กฐ์น˜๋ฅผ ์ทจํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์‹ํ•˜๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๋งํ–ˆ๋“ฏ์ด ๊ฑฐ์˜ ์•„๋ฌด๋„ ์‹ค์ œ ํ”„๋กœ๋•์…˜์—์„œ ์ฝ˜์†” ๊ฒฝ๊ณ ๋ฅผ ๋ณด์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์‹œ์ ๊นŒ์ง€๋Š” ์•ฝ๊ฐ„ ๋Šฆ์Šต๋‹ˆ๋‹ค.

์ •์ง€๋œ ๋ ˆ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๊ฒŒ ํ•ด์„œ ๋ฏธ์•ˆํ•˜์ง€๋งŒ ์ฝ˜์†” ๊ฒฝ๊ณ ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ: https://code.gov.

์ •์ง€๋œ ๋ ˆ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๊ฒŒ ํ•ด์„œ ๋ฏธ์•ˆํ•˜์ง€๋งŒ ์ฝ˜์†” ๊ฒฝ๊ณ ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ: https://code.gov.

๋‹จ์ผ ๋ฐ˜๋Œ€ ์‚ฌ๋ก€๋Š” ๊ทธ๊ฒƒ์ด ์˜ค๋ฅ˜๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ์ง€๋งŒ ์–ด๋–ค ์ ‘๊ทผ ๋ฐฉ์‹๋„ ๊ทธ๋ ‡๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๊ณ ๋Š” ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฝ˜์†” ๊ฒฝ๊ณ ๊ฐ€ ์ธ์ง€๋„๋ฅผ ๋†’์ด๊ณ  ์‹ค์ˆ˜๋กœ ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์•„์•ผ ํ•  ๋•Œ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๋‹จ๊ณ„์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์™„๋ฒฝํ•œ ๊ฒƒ์€ ์„ ์˜ ์ ์ด๋‹ค.

@jakearchibald

์˜ˆ, ํ•˜์ง€๋งŒ code.gov์˜ ๋นŒ๋“œ ๋„๊ตฌ๊ฐ€ ์—ฌ๊ธฐ์—์„œ ํ›„ํฌ์™€ ํ•จ๊ป˜ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด ์ตœ์†Œํ•œ ์ด๋ฅผ ์œ„ํ•ด ๋นŒ๋“œ ํƒ€์ž„ ํ›„ํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” React์˜ ์ปจํ…์ŠคํŠธ์—์„œ ๊ด€์ฐฐํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ฒฐ๊ตญ ์›นํŒฉ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์›นํŒฉ์ด ๋นŒ๋“œ ๊ฒฝ๊ณ ๋ฅผ ๋‚ด๋ณด๋‚ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์ˆ˜์ •์€ webpack์ด process.NODE_ENV ๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ ์ ˆํ•œ ํ”„๋กœ๋•์…˜ ๊ตฌ์„ฑ ์—†์ด ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๋ฉด ํ•ด๋‹น ์›นํŒฉ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋นŒ๋“œ์— ์‹คํŒจํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

DevTools "์œ„๋ฐ˜"์— ๋Œ€ํ•œ @addyosmani ์˜ ์ด์ „ ์š”์ ์— ์‹ ์†ํ•˜๊ฒŒ ๋Œ€์‘ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Chrome DevTools์—์„œ ํŠน์ • ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ๋” ๊ฐ•๋ ฅํ•œ ํ‘œ์‹œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ”„๋กœํ† ํƒ€์ž… ์„ ๋งŒ๋“ค๊ณ  ์žˆ์ง€๋งŒ ์ด ์ž‘์—…์€ ์•„์ง ์ดˆ๊ธฐ ๋‹จ๊ณ„์ด๋ฉฐ ์ €๋Š” @jakearchibald ๊ฐ€ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ๋™์˜ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค( console.warn ๋ณด๋‹ค ๋” ๋ฌด์„ญ๋”๋ผ๋„). ์ถฉ๋ถ„ํžˆ ์ข‹์€ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

NODE_ENV == 'development' ๋˜๋Š” ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด localhost / 127.0.0.1 ์ธ ๊ฒฝ์šฐ์—๋งŒ React๋ฅผ ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ๋กœ ๊ธฐ๋ณธ ์„ค์ •ํ•˜๊ณ  ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ์ผœ๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ๋™์ž‘์„ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ •๋ง๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๊ฐ•์ œ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•ญ์ƒ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ญ์ƒ ์ƒ๋‹นํžˆ ๋ณต์žกํ•œ ์กฐ๊ฑด๋ถ€(๋…ธ๋“œ์—์„œ ์‹คํŒจํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—)๋กœ ํ•ด๋‹น ๋ถ„๊ธฐ๋ฅผ ๊ณ„์† ๊ณต๊ฒฉํ•˜๋Š” ๊ฒƒ์€ ์ด์ƒ์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

BTW, ์›นํŒฉ 2์˜ -p ("์ƒ์‚ฐ" ๋ชจ๋“œ, ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์ถ•์†Œ๋„ ๊ฐ€๋Šฅ)์€ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด NODE_ENV ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. https://webpack.js.org/guides/production-build /#๋…ธ๋“œ - ํ™˜๊ฒฝ ๋ณ€์ˆ˜.

์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋งค์šฐ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ด๋ฉฐ webpack์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ด ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„์— ์ด๊ฒƒ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

webpack 2์˜ BTW, -p(๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์ถ•์†Œ๋„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” "ํ”„๋กœ๋•์…˜" ๋ชจ๋“œ)๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด NODE_ENV๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค: https://webpack.js.org/guides/production-build/#node -environment-variable.

๋„ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Webpack core์˜ @TheLarkInn ์ด ํ™•์‹คํžˆ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ -p ๋Š” Webpack ์ปค๋ฎค๋‹ˆํ‹ฐ atm์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” ํ˜„์žฌ console.log ๊ฒฝ๊ณ ๊ฐ€ ์žˆ๋Š” ํ˜„์žฌ ์ƒํƒœ์™€ ์œ ์‚ฌํ•œ ์†”๋ฃจ์…˜์ด ์˜ตํŠธ์ธ๋œ ๊ฒฝ์šฐ React ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹ค์ œ ๋ณ€ํ™”๊ฐ€ ์—†์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ '๋น ๋ฅธ' ๋ฐฐ์†ก์— ๋Œ€ํ•ด ๋” ๋‚˜์€ ๋ณ€ํ™”๋ฅผ ์ฃผ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Webpack์—์„œ DEV ๋ฐ PROD ํ™˜๊ฒฝ์„ ์‰ฝ๊ฒŒ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ (-p๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Œ)๋„ https://github.com/webpack/webpack/issues/3216์—์„œ ์•ฝ๊ฐ„์˜ ๊ณ ํ†ต์„ ์ฃผ์—ˆ๋‹ค๋Š” ์ ์„ ์–ธ๊ธ‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ฌ๋ฐ”๋ฅธ ์ˆ˜์ •์€ webpack์ด process.NODE_ENV๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ ์ ˆํ•œ ํ”„๋กœ๋•์…˜ ๊ตฌ์„ฑ ์—†์ด ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๋ฉด ํ•ด๋‹น ์›นํŒฉ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋นŒ๋“œ์— ์‹คํŒจํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ์ถ”๊ตฌํ•˜๋Š” ๊ฒƒ์„ ์ง€์ง€ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์—์„œ Webpack์— ๋Œ€ํ•œ ํš๊ธฐ์ ์ธ ๋ณ€ํ™”๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๋ช‡ ๊ฐ€์ง€ ์ง€๋Šฅํ˜• ๊ฒฝํ—˜(localhost, DevTools ์—ด๊ธฐ ๋“ฑ)์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œ์‹œ๋˜๋Š” ๋ช…ํ™•ํ•œ ์˜ค๋ฒ„๋ ˆ์ด ๋ฉ”์‹œ์ง€ _only_์™€ ๊ด€๋ จ๋œ ๋Ÿฐํƒ€์ž„ ์†”๋ฃจ์…˜์ด ์šฐ๋ฆฌ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๋‹ค๋ฃฐ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, Webpack process.NODE_ENV ํ•ญ๋ชฉ์œผ๋กœ ๊ณ„์† ๋Œ์•„ ๊ฐ€๋ฉด์„œ @sokra ๋˜๋Š” @TheLarkInn ์ด ์ด์— ๋Œ€ํ•œ ์˜๊ฒฌ์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ดํ•ด๋Š” ๋‹น์‹ ๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค -p ๋Š” ์›นํŒฉ์˜ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹Œ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š” ์‚ฌ์‹ค์ƒ์˜ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์œ ๋ช…ํ•œ ํŒจํ‚ค์ง€๋„ -p ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
https://github.com/ReactTraining/react-router/blob/5e69b23a369b7dbcb9afc6cdca9bf2dcf07ad432/package.json#L23
https://github.com/react-bootstrap/react-bootstrap/blob/61be58cfdda5e428d8fb11d55bf743661bb3f0b1/tools/dist/build.js#L10

webpack์—์„œ Uglify ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ง์ ‘ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋“œ๋ฌธ ์ผ์ด๋ฏ€๋กœ -p ๊ฐ€ ์—†์œผ๋ฉด ์‚ฌ๋žŒ๋“ค์€ ์ถ•์†Œ๋˜์ง€ ์•Š์€ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉฐ ์ด ๊ฒฝ์šฐ ๋” ํฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๋ช‡ ๊ฐ€์ง€ ์ง€๋Šฅํ˜• ๊ฒฝํ—˜(localhost, DevTools ์—ด๊ธฐ ๋“ฑ)์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œ์‹œ๋˜๋Š” ๋ช…ํ™•ํ•œ ์˜ค๋ฒ„๋ ˆ์ด ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ์†”๋ฃจ์…˜์ด ์šฐ๋ฆฌ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๋‹ค๋ฃฐ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ผ์–ด๋‚  _only_ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‹ค์ œ๋กœ ํ‰๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์ด๊ฒƒ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๊ฒฉ์ถ”๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๋‚๋‹ˆ๋‹ค("ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ DOM์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค").

๊ฐœ๋ฐœํ•˜๋Š” ๋™์•ˆ ์ง€์†์ ์œผ๋กœ DOM์—์„œ ์˜๊ตฌ์ ์ธ ๋ฉ”์‹œ์ง€์™€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์— ๋Œ€์ฒ˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์šฉ๋‚ฉ๋  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์— ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์€ DevMode๊ฐ€ ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌ๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ‘œ์‹œ๋˜๋Š” ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค(๊ฒฝํ—˜์  ๋ฐฉ๋ฒ•์„ ์ž…๋ ฅํ•˜์„ธ์š”!). ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ž„์˜์˜ ์ˆ˜์˜ ๊ฒ€์‚ฌ ๋ฐ ์ฝ˜์†” ๋ฉ”์‹œ์ง€๋ฅผ ๋„๊ตฌ, CI ๋ฐ ๋ธŒ๋ผ์šฐ์ € ํ™•์žฅ์— ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ•„์‚ฌ์ ์ธ ์ตœํ›„์˜ ๋น„์ƒ ์•ˆ์ „ ์žฅ์น˜๋กœ์„œ ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ฐฐ๋„ˆ๊ฐ€ ์ ์ ˆํ•˜๊ณ  ์ ์ ˆํ•œ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

DevMode๊ฐ€ ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌ๋œ ๊ฒฝ์šฐ์—๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(ํœด๋ฆฌ์Šคํ‹ฑ ์ž…๋ ฅ!)

๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋Š” ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ ˆ๋Œ€ ๋ณผ ์ˆ˜ ์—†์œผ๋ฉฐ (์•„๋งˆ๋„ ์‹ค์ˆ˜๋กœ) ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌํ•˜๊ณ  ๊ฐ‘์ž๊ธฐ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ด ์ƒˆ HTML์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

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

๊ทธ๋Ÿฌ๋‚˜ ํ•„์‚ฌ์ ์ธ ์ตœํ›„์˜ ๋น„์ƒ ์•ˆ์ „ ์žฅ์น˜๋กœ์„œ ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ฐฐ๋„ˆ๊ฐ€ ์ ์ ˆํ•˜๊ณ  ์ ์ ˆํ•œ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ์†”๋ฃจ์…˜์˜ ๋ฌธ์ œ๋Š” ๋„ˆ๋ฌด ์ด์ƒ์ ์ด๋ฉฐ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ๋‹ค๋ฅธ ํšŒ์‚ฌ์—๋Š” ์ตœ๊ณ ์˜ ๋ฐฐํฌ ์ •์ฑ…์ด๋‚˜ ์ตœ๊ณ ์˜ QA(์žˆ๋Š” ๊ฒฝ์šฐ)๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ํ˜„์‹ค์— ์ง‘์ค‘ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์˜ˆ, ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํšŒ์‚ฌ์™€ ์ •๋ถ€๋Š” ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค์™€ ์ •์ฑ… ๋“ฑ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์‹ค์€ ์ด๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ํšŒ์‚ฌ๋Š” ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ—ˆ์ˆ ํ•˜๊ณ  QA๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ œ๊ฐ€ ๊ฐœ์ธ์ ์œผ๋กœ ๊ฒฝํ—˜ํ•œ ๋‘ ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฒซ์งธ , ์ •๋ถ€์—์„œ ๊ทผ๋ฌดํ•˜๋Š” ๋™์•ˆ ์ง€์‚ฌ ๋ฐ ๋ถ€์„œ์— ๋”ฐ๋ผ 3-6๊ฐœ์›”๋งˆ๋‹ค ๋‹จ์ผ ๋ฐฐํฌ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฐํฌ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์€ ๊ฒƒ์„ ๋กค์—…ํ•˜๊ณ  ์ „์ฒด ๋ฐฐํฌ์˜ ์ผ๋ถ€๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๋กค๋ฐฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” OWF๋ผ๊ณ  ํ•˜๋Š” ์ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์ต์ˆ™ํ•˜์ง€ ์•Š์œผ์‹œ๊ฒ ์ง€๋งŒ iframe์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์—ฌ๋Ÿฌ ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ํ‘œ์‹œํ•œ๋‹ค๋Š” ์ ์—์„œ iSocial๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ์— ์ˆ˜๋™ ๊ตฌ์„ฑ ๋‹จ๊ณ„๊ฐ€ ์žˆ์–ด ์˜๋„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋Œ€์‹  ์ผ๋ถ€ iframe์— 404 ๋ฐ 500 ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

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

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

์ œ ์š”์ ์€: ๊ฐœ๋ฐœ์ž๊ฐ€ ๋„ฃ์ง€ ์•Š์€ ์ž„์˜์˜ ์š”์†Œ๋ฅผ DOM์— ์‚ฝ์ž…ํ•  ๋•Œ ์„ธ์‹ฌํ•œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์ผ๋ถ€ ์‹œ๋‚˜๋ฆฌ์˜ค ์—์„œ๋งŒ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒฝ์šฐ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ๊ทธ๊ฒƒ์„ ๋ณผ ๋•Œ ์‹ ์†ํ•˜๊ฒŒ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ ๋‹ค์‹œ ๊ท€์ฐฎ๊ฒŒ ํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@KrisSiegel

์•„์ง ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์ด ์ด๋ก ์ ์ธ ์ƒˆ ๋ฒ„์ „์˜ React๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌํ•˜๋ฉด ๋†€๋ผ์›€์„ ๋Š๋ผ๊ฒŒ ๋  ๊ฒƒ์ด๋ฉฐ ๋‹น์‹œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์ž๋„ ์ด๋ฅผ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

DevTools๊ฐ€ ์—ด๋ ค ์žˆ๋Š” ๋™์•ˆ์—๋งŒ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค๋ฉด(์ฆ‰, ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ํ”„๋กœ๋•์…˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์€) ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์ƒ๊ฐ์ด ๋‹ค๋ฅธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. React๋Š” ํ˜„์žฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํ˜„์žฌ console.log ์ „๋žต์˜ ํšจ๊ณผ์ ์ธ ํ™•์žฅ์ž…๋‹ˆ๋‹ค.

DevTools๊ฐ€ ์—ด๋ ค ์žˆ๋Š” ๋™์•ˆ์—๋งŒ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค๋ฉด(์ฆ‰, ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ํ”„๋กœ๋•์…˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์€) ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์ƒ๊ฐ์ด ๋‹ค๋ฅธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. React๋Š” ํ˜„์žฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํ˜„์žฌ console.log ์ „๋žต์˜ ํšจ๊ณผ์ ์ธ ํ™•์žฅ์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋„๊ตฌ๊ฐ€ ์—ด๋ ค ์žˆ์œผ๋ฉด ์•„๋งˆ๋„ console.log ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋  ๊ฒƒ์ด๋ฏ€๋กœ DOM ๋ณ€๊ฒฝ์€ ๊ด€๋ฆฌํ•˜๊ธฐ์— ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ๊ณผ ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. React ์ฝ˜์†” ๋ฉ”์‹œ์ง€๋ฅผ ํ•ญ์ƒ ๋” ํฌ๊ฒŒ/๋” ๋ฉ‹์ง€๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ASCII React ๋กœ๊ณ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ฑฐ๊ธฐ์— ๋“ค์–ด๊ฐˆ ๊ฒฝ์šฐ์ฃผ์˜๋ฅผ ๋Œ ๋ฌด์–ธ๊ฐ€.

๊ถ๊ทน์ ์œผ๋กœ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ Stackoverflow์—์„œ ๊ฒฝ๊ณ ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฌผ์–ด๋ณด๋ฉด ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ฒฝ๊ณ ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ  ์‚ฌ๋žŒ๋“ค์€ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹จ์ˆœํžˆ ๋น„ํ™œ์„ฑํ™”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋นŒ๋“œ ๋„๊ตฌ๋Š” ์ˆ˜์—†์ด ๋งŽ๊ณ  ๊ณผ๊ฑฐ์— ๋‚ด๊ฐ€ ์ด์•ผ๊ธฐํ•œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๊ฒƒ๋“ค์ด ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฑฐ๋‚˜ ์–ด๋ ต๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค(Babel 6์˜ ๋ฆด๋ฆฌ์Šค๋Š” "์žฌ๋ฏธ์žˆ๋Š”" ์‹œ๊ฐ„์ด์—ˆ์Šต๋‹ˆ๋‹ค). ๋‹น์‹ ์€ ๋‹จ์ˆœํžˆ ๊ทธ๊ฒƒ๋“ค์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค๊ณผ ๋งˆ์ฃผ์น˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ ์–ด๋„ ๋‚ด ๊ฒฝํ—˜์€ ยฏ\_(ใƒ„)_/ยฏ

ํœด, ๋“œ๋””์–ด ์‹ค์˜ ๋ฐ”๋‹ฅ๊นŒ์ง€ ๋ถ™์—ˆ๋‹ค. ๊ดœ์ฐฎ์•„. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์กฐ๊ธˆ ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐํ–ˆ๋‹ค.

Webpack์€ React๊ฐ€ DEV๋ฅผ PROD๋กœ ๋ฐฐ์†กํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ๋” ์‰ฝ๊ฒŒ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” NODE_ENV๋ฅผ ๊ฐ•์ œ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” Webpack์˜ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ Webpack 3์—์„œ ์ด์™€ ๊ฐ™์€ ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์‹คํ˜„ ๊ฐ€๋Šฅํ•œ์ง€์— ๋Œ€ํ•ด Sean๊ณผ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. React + Webpack ์Šคํƒ์„ ์ดˆ๋ณด์ž์™€ ์„ฑ๋Šฅ ์นœํ™”์ ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๋‘ ์ง„์˜ ๋ชจ๋‘ ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ง€๊ธˆ๊นŒ์ง€ ๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์กŒ์ง€๋งŒ ์•„์ง 100% ํŒ๋งค๋˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค.

  1. ๋”ฐ๋ผ์„œ ๋ˆ„๊ตฌ๋‚˜ webpack์„ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ENV๊ฐ€ ์ „๋‹ฌ๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›นํŒฉ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด env ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค๋Š” ์œ ์šฉํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ƒ๋‹นํ•œ ์ดํƒˆ ์ง€์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์ด prod ๋˜๋Š” dev env๋ฅผ ์œ„ํ•ด ๊ธ€์„ ์“ฐ์ง€ ์•Š๊ฑฐ๋‚˜ env๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์ง€๋„ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์–ป๊ธฐ ์œ„ํ•ด webpack/webpack์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ์ง๊ฐ์€ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ด๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๊ณ  ๋‚ด๊ฐ€ ๋™์˜ํ•˜๋“  ๊ทธ๋ ‡์ง€ ์•Š๋“  ์šฐ๋ฆฌ๋Š” ํ‘ธ์‹œ๋ฐฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  1. <something in-between 1 and 3 I haven't figured out yet>

  2. webpacky ์†”๋ฃจ์…˜์€ ์ปดํŒŒ์ผ๋Ÿฌ ์ˆ˜๋ช… ์ฃผ๊ธฐ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋…๋ฆฝ ์‹คํ–‰ํ˜• ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“ค๊ณ  ์ฝ”๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ  ์žˆ๋Š”์ง€ ๋˜๋Š” ENV๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์นœ์ˆ™ํ•œ ๊ฒฝ๊ณ  ๋˜๋Š” ์„ ํƒํ•œ ์˜ค๋ฅ˜๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ ์‘๋‹ต์ด "ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๋Š” ๊ทธ ์ผ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋“ฑ์„ ๊ฒฐ์ฝ” ์•Œ์ง€ ๋ชปํ•  ๊ฒƒ"์ด๋ผ๊ณ  ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ CRA, ๋”ฐ๋ผ์„œ ์ง€๊ธˆ ์ด ๋ฌธ์ œ.

์•„๋ž˜์™€ ๊ฐ™์ด React(๋˜๋Š” ํ•„์š”ํ•œ ๋ชจ๋“  fw)์˜ package.json์„ ํ™•์ธํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฆฌ์กธ๋ฒ„ ํŒจํ„ด์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"webpack": {
  "plugin": "ReactEnviornmentPlugin"
}

์‚ฌ์šฉ์ž๊ฐ€ ์•Œ๊ฑฐ๋‚˜ ์‹ ๊ฒฝ ์“ธ ํ•„์š” ์—†์ด ์ž๋™์œผ๋กœ ์‚ฌ์šฉ์ž ์ปดํŒŒ์ผ๋Ÿฌ ๊ตฌ์„ฑ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ๋ฒˆ ์ •๋ง ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐ์„ ํ•ฉ๋‹ˆ๋‹ค.

@TheLarkInn webpack 2์—์„œ -p ์˜ ํ˜„์žฌ ๋™์ž‘์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์‹คํŒจ ์‚ฌ๋ก€๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์Šค์Šค๋กœ UglifyJsPlugin DefinePlugin ๊ฒƒ์„ ์žŠ์–ด๋ฒ„๋ฆฐ ๊ฒฝ์šฐ์ด์ง€๋งŒ, ๊ทธ๋Ÿด ๊ฐ€๋Šฅ์„ฑ์€ ํ›จ์”ฌ ๋‚ฎ์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

@taion ์˜ˆ/์•„๋‹ˆ์˜ค

-p ๋Š” ํ”„๋กœ๋•์…˜ "์ฒ˜๋ฆฌ"๋งŒ ์ฝ”๋“œ์— ์ ์šฉํ•˜์ง€๋งŒ NODE_ENV ์— ๋Œ€ํ•ด ์–ด๋– ํ•œ ๊ฐ€์ •๋„ ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ด์— ๋Œ€ํ•œ ์ง€์‹๋„ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์‚ฌ๋žŒ๋“ค์ด DefinePlugin() ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๋•์…˜ ENV์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋Š” _์ถ”์ธก_ ๋˜๋Š” _๋ฌต์‹œ_์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด "_ํ•ฉ๋ฆฌ์ ์ธ_" ์˜์—ญ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ํŒ€์ด ๊ดœ์ฐฎ์€์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ํ•œ ๊ฐ€์ง€ ์˜์—ญ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@TheLarkInn ๋‚˜๋Š” ์ด๊ฒƒ์ด v2์—์„œ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค: https://webpack.js.org/guides/production-build/#node -environment-variable

์•„ ๋งž๋‹ค ์ œ๊ฐ€ ์ž˜๋ชป์•Œ๊ณ ์žˆ์Šต๋‹ˆ๋‹ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ๋žŒ๋“ค์ด ์ตœ์ ํ™”ํ•˜๋Š” ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ๋ณด๋‹ค ์„ธ๋ถ„ํ™”๋œ ์ œ์–ด๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ( @addyosmani๊ฐ€ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ)

์ •๋ง ํ”ํ•œ ์ผ์ธ๊ฐ€์š”? webpack์„ ์‹œ์ž‘ํ•  ๋•Œ -p ๋Š” ๋ถ„๋ช…ํžˆ ๊ฐ€์•ผ ํ•  ๊ธธ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ถ”๊ฐ€ ์กฐ์ •์„ ์ ์šฉํ•  ์ถฉ๋ถ„ํ•œ ์ด์œ ๊ฐ€ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋„ -p ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด React(๋˜๋Š” ํ•„์š”ํ•œ ๋ชจ๋“  fw)์˜ package.json์„ ํ™•์ธํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฆฌ์กธ๋ฒ„ ํŒจํ„ด์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"์›นํŒฉ": {
"ํ”Œ๋Ÿฌ๊ทธ์ธ": "ReactEnvironmentPlugin"
}
์‚ฌ์šฉ์ž๊ฐ€ ์•Œ๊ฑฐ๋‚˜ ์‹ ๊ฒฝ ์“ธ ํ•„์š” ์—†์ด ์ž๋™์œผ๋กœ ์‚ฌ์šฉ์ž ์ปดํŒŒ์ผ๋Ÿฌ ๊ตฌ์„ฑ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

@TheLarkInn ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฝ๊ณ  ์žˆ๋‹ค๋ฉด ๋ฆฌ์กธ๋ฒ„ ํŒจํ„ด์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ ค๋ฉด ์•ฑ์˜ package.json์ด ์ˆ˜๋™์œผ๋กœ ReactEnvironmentPlugin ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋‚ด๊ฐ€ ์ œ์•ˆ์„ ์ž˜๋ชป ์ดํ•ดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? :)

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

๋ฐ˜์‘์„ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค js ๋ชจ๋“ˆ ์„ค๋ช… ํ•„๋“œ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ๋Š” webpack ํ•„๋“œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹  ๋ง์ด ๋งž์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋งค์šฐ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์œผ๋ฉฐ ์‹ค์ œ๋กœ ์ œ๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์•„์ด๋””์–ด๋„ ์•„๋‹™๋‹ˆ๋‹ค.

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

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ์ด์•ผ๊ธฐํ–ˆ๊ณ  ํ•ฉ๋ฆฌ์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ React ๊ฒฝ๊ณ ์— ๋Œ€ํ•ด "๊ฒฝ๊ณ  ์ƒ์ž"๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์„ ์˜ค๋žซ๋™์•ˆ ๊ณ ๋ คํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์—์„œ ๋ฐ๋ชจ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(PR: https://github.com/facebook/react/pull/7360). ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ํ‘œ์‹œ๋˜์ง€๋งŒ ๊ฐœ๋ฐœ ์ค‘์—๋Š” ๋งค์šฐ ์ผ๋ฐ˜์ ์ด๋ฉฐ(ํ•ญ์ƒ ์ˆ˜์ •ํ•ด์•ผ ํ•จ) ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ 5๋ถ„ ์ด์ƒ์„ ์†Œ๋น„ํ•œ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ๋Œ€ํ™” ์ƒ์ž๋ฅผ ๋ณด๊ณ  ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

(์ฐธ๊ณ ๋กœ ์šฐ๋ฆฌ๋Š” ํŽ˜์ด์Šค๋ถ์—์„œ ์˜ค๋žซ๋™์•ˆ ๋น„์Šทํ•œ ๊ฒฝ๊ณ  ์ƒ์ž๋ฅผ ๊ฐœ๋ฐœ ์ค‘์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— React๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์˜๋„์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.)

๊ทธ ์ œ์•ˆ์„ ๋ณด๋‹ˆ ์ •๋ง ๊ธฐ์ฉ๋‹ˆ๋‹ค @gaearon! ๋‚ด๊ฐ€ ๊ฟˆ๊พธ๋˜ ๋ชจ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค ;)

์ฐธ๊ณ ๋กœ: ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งํฌ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด Google์— ๋ฌธ์˜ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ์ƒ์ž์— ์ง์ ‘ ๋งํฌ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ค, ์ข‹์€ ์ง€์ ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@gaearon ๋‚˜๋Š” ๊ทธ ์†”๋ฃจ์…˜์ด ๋งค์šฐ ๋ถˆ์พŒํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์—๋„ ๊ฒฝ๊ณ ๊ฐ€ DOM์„ ์นจ๋ฒ”ํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค . ์ด๋Š” ์ผ๋ฐ˜ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ „ํ˜€ ๋ชฉ์ ์ด ์—†์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋Š” ์ด์œ  ๋•Œ๋ฌธ์— ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๋ฏ€๋กœ ๋ฐœ๋ช…ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

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

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ๊ณ ์— ๋Œ€ํ•ด ์ด๊ฒƒ์ด ์‚ฌ์‹ค์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ React ๊ฒฝ๊ณ ๋Š” ํŠนํžˆ ์ฝ”๋“œ์˜ ๋ฒ„๊ทธ๋ฅผ ์ง€์ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ๋‹จ์ˆœํ•œ ์ œ์•ˆ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋Œ€ํ™” ์ƒ์ž๋Š” ํ•ด์ œํ•˜๊ธฐ ์‰ฝ๊ณ  ๊ฐœ๋ณ„ ๊ฒฝ๊ณ ๋Š” ์ผ์‹œ ์ค‘์ง€ํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ(์ž ์‹œ ๋™์•ˆ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ) ์ˆ˜์ • ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋น„๊ต๋ฅผ ์œ„ํ•ด Facebook ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๋Œ€ํ™” ์ƒ์ž๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

screen shot 2017-01-24 at 17 55 47

์ˆ˜์ฒœ ๋ช…์˜ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์—†๊ณ  ๋•๋ถ„์— ์ƒ์‚ฐ์„ฑ์ด ๋” ๋†’๊ธฐ ๋•Œ๋ฌธ์— ํ•ฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ๊ฐ’์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ํ•˜์ž๋ฉด, ์˜คํ”ˆ ์†Œ์Šค ๋ฒ„์ „์€ ๋œ ์™ธ์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

screen shot 2017-01-24 at 17 57 14

์Šคํƒ€์ผ ์กฐ์ •์— ๋Œ€ํ•œ ์ œ์•ˆ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด https://github.com/facebook/react/pull/7360์— ์ž์œ ๋กญ๊ฒŒ ์˜๊ฒฌ์„ ๋ณด๋‚ด์ฃผ์‹ญ์‹œ์˜ค.

Dan์ด ๋งํ•œ ๊ฒƒ์— ๋ง๋ถ™์—ฌ, ์ €๋Š” ์ตœ๊ทผ์— ์ถ”๊ฐ€๋œ ์˜ค๋ฅ˜ ๋กœ๊ฑฐ ํ๋ฆ„์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด #7360 ์œ„์— ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํ˜„์žฌ ์กฐ๊ธˆ ๋œ ๋ฐฉํ•ด๊ฐ€ ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์Šคํƒ€์ผ์˜ ํ† ์ŠคํŠธ ์•Œ๋ฆผ์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ”ผ๋“œ๋ฐฑ์„ ์œ„ํ•ด ์Šคํฌ๋ฆฐ์ƒท ๋ฐ/๋˜๋Š” Plnkr์„ ๊ณง ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ ์—๋Š” "์ถ•์†Œ๋œ ๊ฐœ๋ฐœ ์ฝ”๋“œ" ๊ฒฝ๊ณ ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๋งŽ์€ ๊ฒƒ๋“ค์ด ์•„์ฃผ ๊น”๋”ํ•˜๊ฒŒ ํ•ด๊ฒฐ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์™œ ๊ทธ๋Ÿฐ ์šฉ๋„๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

@gaearon

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ๊ณ ์— ๋Œ€ํ•ด ์ด๊ฒƒ์ด ์‚ฌ์‹ค์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ React ๊ฒฝ๊ณ ๋Š” ํŠนํžˆ ์ฝ”๋“œ์˜ ๋ฒ„๊ทธ๋ฅผ ์ง€์ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ๋‹จ์ˆœํ•œ ์ œ์•ˆ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ๋˜๋Š” ์˜ˆ์™ธ IMO์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์™œ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์˜ˆ์™ธ๋Š” ์ˆ˜์ •์„ ๊ฐ•์š”ํ•˜์ง€๋งŒ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๊ณ ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ˆ˜์ฒœ ๋ช…์˜ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์—†๊ณ  ๋•๋ถ„์— ์ƒ์‚ฐ์„ฑ์ด ๋” ๋†’๊ธฐ ๋•Œ๋ฌธ์— ํ•ฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ๊ฐ’์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด์ „ ์‹œ์ ์—์„œ ์ด๊ฒƒ์„ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ๊ทธ ์—”์ง€๋‹ˆ์–ด๋“ค์€ ์˜คํ”ˆ ์†Œ์Šค ๋ฒ„์ „์„ ์‚ฌ์šฉํ•  90%์˜ ์‚ฌ๋žŒ๋“ค๋ณด๋‹ค ๋” ๋‚˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ๊ฐ’์˜ ๋ฐ˜๋Œ€๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋„๊ตฌ์— ๊ฒฝ๊ณ ๊ฐ€ ์žˆ๋Š” ๋ฐ์—๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์„ ์žฌ๋ฐœ๋ช…ํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™”๋˜๊ณ  ๋‹ค์‹œ๋Š” ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ React๊ฐ€ IMO๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.



์–ด์จŒ๋“ , ๋‚˜๋Š” ์ด๋ฏธ ๋‘ ๋ฒˆ ๋งํ–ˆ๋˜ ๋‚˜์˜ ์ฃผ์žฅ์„ ๋ฐ˜๋ณตํ•˜๊ณ  ์žˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ง„ํ–‰ํ•˜์‹ค ์˜ˆ์ •์ด๋ผ๋ฉด ๋ถ€๋‹ด ์—†์ด ์ง„ํ–‰ํ•˜์„ธ์š”. ๋‚ด ์ƒ๊ฐ์— ๊ทธ๊ฒƒ์€ ์ข‹์€ ์‚ฌ์—…์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฑด๋ฐฐ๋ฅผ ํ•˜๊ณ  ์‹ถ์—ˆ์„ ๋•Œ ์ด ์งง์€ ์ผํ™”๋ฅผ ๋‚จ๊น๋‹ˆ๋‹ค...


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

์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ React ๊ฒฝ๊ณ ์— ๋Œ€ํ•ด "๊ฒฝ๊ณ  ์ƒ์ž"๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์„ ์˜ค๋žซ๋™์•ˆ ๊ณ ๋ คํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋ฐ๋ชจ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(PR: #7360). ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ํ‘œ์‹œ๋˜์ง€๋งŒ ๊ฐœ๋ฐœ ์ค‘์—๋Š” ๋งค์šฐ ์ผ๋ฐ˜์ ์ด๋ฉฐ(ํ•ญ์ƒ ์ˆ˜์ •ํ•ด์•ผ ํ•จ) ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ 5๋ถ„ ์ด์ƒ์„ ์†Œ๋น„ํ•œ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ๋Œ€ํ™” ์ƒ์ž๋ฅผ ๋ณด๊ณ  ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

#7360 @gaearon ์ •๋ง ์ข‹์•„ํ•ด์š”. ์ƒˆ๋กœ์šด ๊ฒฝ๊ณ  ์ƒ์ž์—์„œ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด PROD๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•  ํ•„์š”์„ฑ์„ ๊ฐ•์กฐํ•˜๋Š” ์ง€์›์„ ๋“ฃ๊ฒŒ ๋˜์–ด ๊ธฐ์˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฉ‹์ง€๊ณ  ๋น„์ฅฌ์–ผ์ž…๋‹ˆ๋‹ค.

Dan์ด ๋งํ•œ ๊ฒƒ์— ๋ง๋ถ™์—ฌ, ์ €๋Š” ์ตœ๊ทผ์— ์ถ”๊ฐ€๋œ ์˜ค๋ฅ˜ ๋กœ๊ฑฐ ํ๋ฆ„์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด #7360 ์œ„์— ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํ˜„์žฌ ์กฐ๊ธˆ ๋œ ๋ฐฉํ•ด๊ฐ€ ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์Šคํƒ€์ผ์˜ ํ† ์ŠคํŠธ ์•Œ๋ฆผ์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ”ผ๋“œ๋ฐฑ์„ ์œ„ํ•ด ์Šคํฌ๋ฆฐ์ƒท ๋ฐ/๋˜๋Š” Plnkr์„ ๊ณง ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@bvaughn ๋” ๋งŽ์€ ๋ฐ˜๋ณต์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค :)

๊ฒฝ๊ณ  ์ƒ์ž ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋„ˆ๋ฌด ๊ฑฐ์Šฌ๋ฆฐ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: VueJS)๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • ๋˜๋Š” ๋Š๋ฆฐ ๊ฒฝ๋กœ๋ฅผ ๊ถŒ์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ/๋ฐ˜๋ณต ์›Œํฌํ”Œ๋กœ ์ค‘์— ์ด๋ฏธ DOM ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

screen shot 2017-01-24 at 10 57 11 am

๋‚ด ๊ฒฝํ—˜์— ๋”ฐ๋ฅด๋ฉด ์ด๋Ÿฌํ•œ ๋ฉ”์‹œ์ง€๋Š” ์•ฝ๊ฐ„์˜ ๋ถˆํŽธ์„ ๊ฒช์ง€๋งŒ ์ฝ˜์†”์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ ์–ด๋„ ๋‹น์‹ ์ด prod์— ๋ฐฐํฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ dev ๋ชจ๋“œ์— ๋” ์ค‘์ ์„ ๋‘๊ณ  ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ "๋” ๋น ๋ฅธ ๋ชจ๋“œ"๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋” ๋งŽ์€ ์‚ฌ์ดํŠธ๋กœ ์ด์–ด์งˆ ๊ฒƒ์ด๋ผ๋Š” Dan์˜ ๋ง์ด ์˜ณ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

์˜ค๋ฅ˜ ๋˜๋Š” ์˜ˆ์™ธ IMO์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์™œ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์˜ˆ์™ธ๋Š” ์ˆ˜์ •์„ ๊ฐ•์ œํ•˜์ง€๋งŒ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๊ณ ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

๊ฒฝ๊ณ  ์ƒ์ž ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋„ˆ๋ฌด ๊ฑฐ์Šฌ๋ฆฐ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: VueJS)๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • ๋˜๋Š” ๋Š๋ฆฐ ๊ฒฝ๋กœ๋ฅผ ๊ถŒ์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ/๋ฐ˜๋ณต ์›Œํฌํ”Œ๋กœ ์ค‘์— ์ด๋ฏธ DOM ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฐ์ƒท 2017-01-24 at 10 57 11 am

Vue ์ž์ฒด์—์„œ ์˜จ ๊ฒƒ์ด ํ™•์‹คํ•ฉ๋‹ˆ๊นŒ? webpack-hot-middleware ์˜ ์˜ค๋ฅ˜ ์˜ค๋ฒ„๋ ˆ์ด์™€ ํ•จ๊ป˜ ํ‘œ์‹œ๋˜๋Š” webpack ๋นŒ๋“œ ์˜ค๋ฅ˜์™€ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ฒ”์šฉ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹Œ ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐœ๋ฐœ ์‹œ๊ฐ„ ๋นŒ๋“œ ๋„๊ตฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋‚˜๋Š” ๊ฒฝ๊ณ  ์˜ค๋ฒ„๋ ˆ์ด์— ์ฐฌ์„ฑํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€, ์™œ ๊ฑฐ๊ธฐ์— ์žˆ๋Š”์ง€, ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ๋Œ ๋•Œ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๊ณ  ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์„ค๋ช… ํ…์ŠคํŠธ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์กฐ๊ธˆ ๊ธธ๋‹ค๋ฉด expando ๋’ค์— - ๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ์— ์ข‹์€ ์žฅ์†Œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ์žˆ๋Š” 15.2.0๊ณผ ๊ฐ™์€ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋‘๋ ต์Šต๋‹ˆ๋‹ค. ์‚ฌ์†Œํ•œ ์ถฉ๋Œ๊ณผ ๊ฐ‘์ž๊ธฐ DOM ๋…ธ๋“œ์— ์ „๋‹ฌ๋˜๋Š” props์— ๋Œ€ํ•ด ๋ง ๊ทธ๋Œ€๋กœ 100๋ฒˆ์˜ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ๊ฐ€์ƒ๊ฐ ๊ฒฝ๊ณ ๊ฐ€ ๊ทธ๋Ÿฐ ์นจ์ž…์ ์ธ ๊ณต๊ฐ„์— ์†ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ๊ฐ€์ƒ๊ฐ ๊ฒฝ๊ณ ๊ฐ€ ๊ทธ๋Ÿฐ ์นจ์ž…์ ์ธ ๊ณต๊ฐ„์— ์†ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ด์ „์— ๋งค์šฐ ๋ช…ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋…ธ๋ž€์ƒ‰ ์ƒ์ž ๊ฒฝ๊ณ (#7360)์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋Š” _๋ชจ๋“ _ ๊ฒฝ๊ณ (์ง€์› ์ค‘๋‹จ ๋˜๋Š” ๊ธฐํƒ€)๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ํŒ€์ด _ํŠนํžˆ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ํŠน์ • ๊ฒฝ๊ณ ๊ฐ€ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ์•„๋งˆ๋„ ์ฝ˜์†”์— ๋‚จ์•„ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ ์–ด๋„ 1~2์ฃผ ์ „์— ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด Tom๊ณผ ๋‚ด๊ฐ€ ๋‚˜๋ˆˆ ๋Œ€ํ™”์—์„œ ๋ฐœ์ทŒํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

15.2์˜ prop ๊ฒฝ๊ณ ๋„ IMO์˜ ์‹ค์ˆ˜์˜€์œผ๋ฉฐ ์ผ๋ฐ˜์ ์ธ MO๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋งˆ์ด๋„ˆ ๋ฒ„์ „์œผ๋กœ ๊ฒฝ๊ณ  ์ˆ˜์ค€์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ํŒ€์ด ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฃผ๋œ ์ด์œ ๋Š” ํ…Œ์ŠคํŠธ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— JS ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋จผ์ € React ํŒ€( @sebmarkbage , @gaearon , @tomocchino ๋ฐ ๊ธฐํƒ€)์—๊ฒŒ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์ด๋ฒˆ ๋ถ„๊ธฐ BlinkOn ๋ฐ ๊ธฐํƒ€ ๋™๊ธฐํ™”์—์„œ ์„ฑ๋Šฅ ๋ฐ ๋ชจ๋ฐ”์ผ์— ๋Œ€ํ•ด ๊ณต๊ฐœ์ ์œผ๋กœ ์ด์•ผ๊ธฐํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ํ™•์ธ

https://github.com/facebook/react/pull/7360 ์˜ @aweary ์— ๋”ฐ๋ฅด๋ฉด ์ด ํŠน์ • ๋ฌธ์ œ์— ๋Œ€ํ•œ Yellow Box ์†”๋ฃจ์…˜์€ React์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ V16 ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋ณด๋ฅ˜๋˜์—ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/facebook/fbjs/pull/165 ๋Š” Fiber์—์„œ ๊ตฌํ˜„๋˜๊ณ  ๊ตฌํ˜„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ›„ํฌ๋ฅผ ๋…ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ ์ข‹์€ ๊ณต๊ฐœ API๋„ ์ œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์†๊ฐ€๋ฝ์„ ์ง€ํ‚ฌ๊ฑฐ์•ผ ๐Ÿคž

์ด ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ๋งŒ์—ฐํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

๋‚ด ์ฑ…์ƒ์— ์žˆ๋Š” ์ƒ๋‹น์ˆ˜์˜ ํ”„๋กœ๋•์…˜ ์•ฑ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹DEV ๋ชจ๋“œ๋ฅผ ํ”„๋กœ๋•์…˜์œผ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋นŒ๋“œ์—์„œ When deploying React apps to production ๋””๋ฒ„๊ทธ ๋ฌธ์ž์—ด์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://cdnjs.cloudflare.com/ajax/libs/react/15.3.1/react.js (tombraider.com)
https://shared.reliclink.com/dlls/vendor-f3e016f6037eb107ffc0.live-shared.min.js (dawnofwar.com)
https://d1xx3pvec9nqb7.cloudfront.net/media/js/thread.af65c1a02d15.js(thread.com )
http://www.sothebys.com/etc/designs/redesigns/sothebys/redesignlibs.min.js (sothebys.com)

๋‚˜๋Š” ์—ฌ์ „ํžˆ ์œ„์˜ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ฝ˜์†”์— DEV ๋ชจ๋“œ ๊ฒฝ๊ณ ๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด pre-Yellow Box ์ด๋™์ด ์•ฝ๊ฐ„์˜ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฌํ•ด๋ฅผ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ถฉ๋Œ ๋ณด๊ณ ๊ฐ€ ์ด๋ฅผ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋„๋ก ์ฝ˜์†” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ž๋Š” Sebastian์˜ ์ œ์•ˆ๋„ ๊ณ ๋ คํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.

๋ฐ”๋Š˜์„ ์—ฌ๊ธฐ๋กœ ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๋˜ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋” ๋‚˜์€ ์˜นํ˜ธ? ์ €๋Š” DEV ๋ชจ๋“œ๋ฅผ ํ”„๋กœ๋•์…˜์— ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ๋“ค์„ ๊ณ„์† ์˜นํ˜ธ ํ•  ๊ฒƒ์„ ์•ฝ์†ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ V16 ์ดํ›„์— ๊ณต์‹ ์†”๋ฃจ์…˜์„ ์ถœ์‹œํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. :)

๋‹จ๊ธฐ์ ์œผ๋กœ๋Š” create-react-app ๊ฐ€ ์ƒˆ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ข‹์€ ์œ„์น˜์— ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์„ค์น˜ ๋ฌธ์„œ ๊ฐœ์„  ์‚ฌํ•ญ

๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด Installing React ์ œ๋ชฉ ์•„๋ž˜์— ๋ช…ํ™•ํ•˜๊ณ  ๋ˆˆ์— ๋„๋Š” ์„ค๋ช…์„ ํฌํ•จํ•˜์—ฌ https://facebook.github.io/react/docs/installation.html ์— ๋Œ€ํ•œ ์ง€์›์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ƒ์‚ฐ?

์‚ฌ์šฉ์ž๋กœ์„œ ์ €๋Š” https://facebook.github.io/react/docs/installation.html#development -and-production-versions๋ฅผ ์–ธ๋œป ๋ณด๊ธฐ์— ์ฝ์„ ๋งŒํ•œ ํฐ ๋™๊ธฐ๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ƒ๊ฐ?

์šฐ๋ฆฌ ํŒ€์ด ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฃผ๋œ ์ด์œ ๋Š” ํ…Œ์ŠคํŠธ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— JS ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค. ํ”„๋กœ๋•์…˜ ์›น ์‚ฌ์ดํŠธ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ”„๋กœ๋•์…˜ ์›น ์‚ฌ์ดํŠธ์—์„œ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐœ๋ฐœ ์ค‘์— ๊ฐœ๋ฐœ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ํ”„๋กœ๋•์…˜์—์„œ DEV ๋ชจ๋“œ๋ฅผ ์—ผ๋‘์— ๋‘๋„๋ก ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ƒ๊ธฐ์‹œํ‚ค๋Š” React ์„ค์น˜ ์ œ๋ชฉ ์•„๋ž˜์— ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ€์‹œ์ ์ธ ์„ค๋ช…์„ ํฌํ•จํ•˜์—ฌ https://facebook.github.io/react/docs/installation.html ์— ๋Œ€ํ•œ ์ง€์›์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ™•์‹ ํ•˜๋Š”. PR์„ ๋ณด๋‚ด๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

ํ™•์‹ ํ•˜๋Š”. PR์„ ๋ณด๋‚ด๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

๋ฌด์—‡๋ณด๋‹ค ํ–‰๋ณตํ•ฉ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ๋ฒค์น˜๋งˆํฌ์— ๋Œ€ํ•œ ๋‹จ์–ด๋Š” ์„ฑ๋Šฅ์„ dev ๋ชจ๋“œ์—์„œ ๋ฐ˜์‘๊ณผ ๋น„๊ตํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ๊ต์œกํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

react devtools ํ™•์žฅ์„ ํ™œ์šฉํ•˜์—ฌ dev ๋ชจ๋“œ์—์„œ react๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ์—ด ๋•Œ ์•Œ๋ฆผ์ด๋‚˜ ๋ถ„๋ช…ํ•œ ๊ฒƒ์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•œ๋‹ค! devtools์— ๋Œ€ํ•ด ์ œ์•ˆ๋œ ์•„์ด์ฝ˜ ์„ธํŠธ๋ฅผ ๋ชจ์•˜์Šต๋‹ˆ๋‹ค(facebook/react-devtools/pull/652 ์ฐธ์กฐ).

์šฐ๋ฆฌ๋Š” ๊ฑฐ๊พธ๋กœ ๊ทธ๋ฆฌ๊ณ  ๋ฏธ๋ž˜์— ์•ˆ์ „ํ•œ ๋ฐฉ์‹์œผ๋กœ dev vs prod React๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜์ง€๋งŒ ์›”์š”์ผ ํšŒ์˜ ์˜์ œ์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ํ•ฉ๋ฆฌ์ ์ธ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • React DevTools(์ตœ๋Œ€ 700K ์‚ฌ์šฉ์ž ํฌํ•จ)๋Š” ์ด์ œ ๊ฐœ๋ฐœ ๋นŒ๋“œ์— ๋Œ€ํ•ด ๊ณ ์œ ํ•œ ๋นจ๊ฐ„์ƒ‰ ์•„์ด์ฝ˜์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‚ฌ๋žŒ๋“ค์ด ๋ฒ„์ „ ๊ฐ„์˜ ์ฐจ์ด์ ์„ ์ผ์ฐ ๋ฐฐ์šฐ๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐฉ๋ฌธํ•˜๋Š” ์‚ฌ์ดํŠธ์—์„œ ์ด๋ฅผ ์•Œ์•„์ฐจ๋ฆฌ๊ณ  ์ž‘์—…ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ณด๊ณ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™๋ฃŒ ์••๋ ฅ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ์‚ฌ์ดํŠธ์—์„œ ์ด ๊ธฐ๋Šฅ์„ ์ถœ์‹œํ•œ ์ง€ ๋ฉฐ์น  ๋งŒ์— ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

  • React DevTools์˜ ์•Œ๋ฆผ์€ ๋ชจ๋“  ์ฃผ์š” ๋ฒˆ๋“ค๋Ÿฌ์— ๋Œ€ํ•œ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ง€์นจ์„ ๊ฒŒ์‹œํ•œ ์›น์‚ฌ์ดํŠธ๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์„ค์น˜ ํŽ˜์ด์ง€์—์„œ ๋” ๋ˆˆ์— ๋„๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

  • Create React App์€ ๊ณ„์†ํ•ด์„œ ์ธ๊ธฐ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๋ช…๋ น์œผ๋กœ ์ดˆ๊ธฐ์— ์ด๋Ÿฌํ•œ ๊ตฌ๋ถ„์„ ๊ฐ€๋ฅด์นฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ„ฐ๋ฏธ๋„์—์„œ ๊ฐœ๋ฐœ ๋ชจ๋“œ์— ๋Œ€ํ•œ ์˜๊ตฌ ์•Œ๋ฆผ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  • React 16 ๋ฒ ํƒ€ 1 (๋ฐ ์ถ”๊ฐ€ ๋ฆด๋ฆฌ์Šค)์€ react.development.js ๋ฐ react.production.min.js ๋ฅผ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ์ œ๊ณตํ•˜์—ฌ ๋น„์ถ•์†Œ ๋นŒ๋“œ๋ฅผ ํ”„๋กœ๋•์…˜์—์„œ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ์ ์„ ๋ถ„๋ช…ํžˆ ํ•ฉ๋‹ˆ๋‹ค.

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

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰