๋‚˜์˜ ๋‹ค์ง,๊ธฐ๋ก,์ผ์ƒ/์šฐ๋ฆฌFISA2๊ธฐ_์„ฑ์žฅ๊ธฐ๋ก

์šฐ๋ฆฌ fisa 2๊ธฐ 'ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๊ฐœ๋ฐœ' 3์ฃผ์ฐจ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2023. 12. 10. 15:50

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

 
ใ…‹ใ…‹ใ…‹ ์ด์ œ๋Š” ์ด ์—๋Ÿฌ๋ฅผ ๋ณด๋ฉด ํ•ด๊ฒฐ ๋Œ€์ฑ…์ด ์žˆ๊ฒ ์ง€๋งŒ, ์•„์ง๋„ ์šธ๋ ๊ฑฐ๋ฆฐ๋‹ค ใ…‹ใ…‹
 
์•„๋ฌดํŠผ ์ด ๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ ์ž˜๋ชป ์„ค์ •ํ•œ ํŒŒ์ผ ์ด๋ฆ„ ๋•Œ๋ฌธ์— ์ƒ๊ธด ๋ฌธ์ œ์˜€๋‹ค. ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ ๋˜๋Š” ํŠน์ˆ˜๋ฌธ์ž '/'๊ฐ€ ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.
์ด๋Š” vitest๋ฅผ ํ• ๋•Œ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„๊ฐ€๋Š”๋ฐ ๋ฐฉํ•ด๋ฅผ ์ค€๋‹ค.
 
์•„๋ฌดํŠผ ์•Œ์•˜๊ณ  ํ•ด๊ฒฐํ–ˆ์œผ๋ฉด ๋˜์—ˆ๋‹ค. ์†”์งํžˆ ์œˆ๋„์šฐ๋กœ ๋„ˆ๋ฌด ๋„˜์–ด๊ฐ€๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ์ด๋ฏธ ๋งฅ๋ถ์— ๋น ์ ธ๋“ค์—ˆ๊ณ , ๋˜ ์˜ค๊ธฐ๊ฐ€ ์ƒ๊ฒผ๋‹ค ใ…‹ใ…‹ใ…‹
์•ž์œผ๋กœ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•ด๊ฒฐํ•ด์„œ ์กฐ๊ธˆ ๋” ๋งฅ๋ถ์˜ ์œ ์ €๋กœ์„œ ์„ฑ์žฅํ•ด์•ผ๊ฒ ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌดํ„ฑ๋Œ€๊ณ  ํ•˜๋Š” ๊ฑด ๋ฏธ๋ จํ•œ ์ง“์ด๋‹ˆ ๋” ๋Œ€์ฑ…์„ ์„ธ์šฐ๊ณ  ์œˆ๋„์šฐ๋„ ๋‹ค๋ฃจ๋ฉด์„œ ๋งฅ๋ถ์„ ๋‹ค๋ค„์•ผ๊ฒ ๋‹ค. 
 
 
์ด ๋ฒˆ์ฃผ ๊ฐ‘์ž‘์Šค๋Ÿฝ๊ฒŒ ๋ธ”๋กœ๊ทธ ๊ด€๋ จํ•ด์„œ ์†Œ์‹์ด ์žˆ์—ˆ๋‹ค~!


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

์ด๋ฒˆ์— '์šฐ์ˆ˜ ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ์ž'๋กœ ๋ฝ‘ํ˜€ ์Šคํƒ€๋ฒ…์Šค ๊ธฐํ”„ํ‹ฐ์ฝ˜์„ ๋ฐ›๊ฒŒ ๋˜์—ˆ๋‹ค ใ…Žใ…Ž
๋‚˜๋Š” ํ‰์†Œ์— ๋ธ”๋กœ๊ทธ ์ž‘์„ฑํ•˜๋Š” ํŽธ์ด๋ผ ๊ทธ๋ƒฅ ์‹ ๊ฒฝ์„ ์•ˆ ์“ฐ๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ๋ฐ›๊ฒŒ ๋˜๋‹ˆ๊นŒ ๊ดœํžˆ ๋ฟŒ๋“ฏํ•˜๋‹ค!
(๊ทธ๋ฆฌ๊ณ  ใ…‹ใ…‹ ๋งŒ์ฒœํ•˜์— ๋‚˜์˜ ๋ธ”๋กœ๊ทธ๊ฐ€ ๊ณต๊ฐœ ๋˜์—ˆ๋‹ค. eslint๋ฅผ ํ™œ์šฉํ•ด์„œ '~~ํ–ˆ๋‹น' ๊ธˆ์ง€, '๋ช…์–ธ ๊ธˆ์ง€' ์„ค์ •ํ•ด์•ผ๊ฒŸ๋‹ค ใ…‹)
 
 

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

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

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

 
์—ฌ๊ธฐ๋Š” mbc๊ทผ์ฒ˜ 'ํƒ•๋ฐ˜'์ด๋ผ๋Š” ์Œ์‹์ ์ด๋‹ค. ๊ฐ•์‚ฌ๋‹˜์˜ ์ถ”์ฒœ์œผ๋กœ ๋™๊ธฐ๋“ค๊ณผ ํ•จ๊ป˜ ๋“ค๋ ธ๋Š”๋ฐ ์ •๋ง ๋ง›์žˆ์—ˆ๋‹ค. ๋˜๊ฒŒ ๊น”๋”ํ–ˆ๋‹ค. ๊น€์น˜์ „ ์—ญ์‹œ ๋ง‰๊ฑธ๋ฆฌ๊ฐ€ ์ƒ๊ฐ๋‚˜๊ฒŒ ํ•˜๋Š” ์Œ์‹์ด์—ˆ๋‹ค (๋ง‰๊ฑธ๋ฆฌ ๋จน๊ณ ์‹ถ๋‹ค ใ… )
 

 
์ˆ˜์—…์„ ๋งˆ์น˜๋ฉด 6์‹œ์ด๋‹ค. ์ด๋•Œ ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ํ•˜๋‹ค๋ณด๋ฉด ์ €๋…์„ ์ƒ๋žตํ•˜๊ณ  ๋‚˜์ค‘์— ๋จน๊ฒŒ ๋˜๋Š”๋ฐ, ๋’ค์— ์žˆ๋Š” ๋ฉ‹์ง„ ๋ˆ„๋‚˜๊ฐ€ ๋จน์œผ๋ฉด์„œ ํ•ด๋ผ๊ณ  ๊น€๋ฐฅ ํ•œ ์ค„์„ ์‚ฌ์ฃผ์…จ๋‹ค ใ… ใ…  ์ •๋ง ๊ฐ๋™์ด์—ˆ๋‹ค. ๋‹ฌ๊ฑ€์€ ์šฐ๋ฆฌ ๋ฐ˜์˜ ์—ฌ์žฅ๊ตฐ๋‹˜์ด ์ฃผ์…จ๋‹ค ใ…‹ใ…‹ใ…‹ ์žฅ๋‚œ์Šค๋Ÿฝ๊ฒŒ ์–˜๊ธฐํ–ˆ๋Š”๋ฐ  ์ด๋ ‡๊ฒŒ ์‹ธ์ฃผ์…จ๋‹ค ใ…  ์€๊ทผ ์„ฌ์„ธํ•˜์‹ ๊ฑฐ ๊ฐ™๋‹ค. ๋‹ค๋“ค ์—ด์‹ฌํžˆํ•˜๊ณ  ์„œ๋กœ ๋•๊ณ ํ•˜๋Š” ๋ชจ์Šต์ด ๋„ˆ๋ฌด ์ธ์ƒ์ ์ด๊ณ  ํ™”์ดํŒ… ๋„˜์นœ๋‹ค. ๋‹ค๋“ค ๋„ˆ๋ฌด ์ข‹์•„์„œ ์˜ค๋žซ๋™์•ˆ  ๊ต๋ฅ˜ํ•˜๊ณ  ์ง€๋ƒˆ์œผ๋ฉด ํ•œ๋‹ค.
 
 
1. ์ด๋ฒˆ ์ฃผ ๋ฐฐ์šด ๊ฒƒ
์ด ๋ฒˆ์ฃผ๋Š” vitest์™€ React์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค. 
ํŠนํžˆ๋‚˜ SPA๊ด€๋ จํ•ด์„œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋ฐฐ์šฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

*์šฐ์„ , vitest๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€ ๋” ํ•˜๊ณ  ๋ธ”๋กœ๊ทธ
์˜ฌ๋ฆฌ๊ฒ ๋‹ค
๋‚ด๊ฐ€ ๋ธ”๋กœ๊ทธ์— ์˜ฌ๋ฆฌ๋Š” ๊ธ€์€ 70ํผ ์ด์ƒ ์ดํ•ด๋„๊ฐ€ ํ™•๋ณด ๋˜์—ˆ์„ ๋•Œ์ด๋‹ค.
 
SPA(Single Page Application) : ์ตœ์ดˆ ์š”์ฒญ์‹œ ์„œ๋ฒ„์—์„œ ์ฒซ ํŽ˜์ด์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ดํ›„, ๋ผ์šฐํŒ…์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜๋ฏธํ•œ๋‹ค.
 
SPA์˜ ์žฅ๋‹จ์ 
 
์žฅ์ :
1. ํŽ˜์ด์ง€ ๋กœ๋”ฉ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
 - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ตœ์ดˆ ์š”์ฒญ์— ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ชจ๋“  ์žฌ๋ฃŒ(html, css, js)๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ ๋žœ๋”๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ…Œ์ดํ„ฐ๋ฅผ ๋งค๋ฒˆ ๊ฐ€์ ธ์˜ฌ ํ•„์š”๊ฐ€ ์—†์–ด ํŽ˜์ด์ง€ ์ด๋™ ๊ฐ„์— ๋”œ๋ ˆ์ด๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค.
 
2. ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์šฐ์ˆ˜ํ•˜๋‹ค.
 - ๋น ๋ฅธ ๋กœ๋”ฉ์†๋„๋Š” ์‚ฌ์šฉ์žใ… ๊ฒฝํ—˜์„ ์ฆ๋Œ€์‹œํ‚ค๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ์— ๋จธ๋ฌด๋Š” ๋ฐ ์žˆ์–ด ๋กœ๋”ฉ์œผ๋กœ ์ธํ•œ ํ”ผ๋กœ๋„๋„ ์ ์„ ๊ฒƒ์ด๋‹ค.
 
๋‹จ์ :
1. ์ตœ์ดˆ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.
 - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ตœ์ดˆ๋กœ ์„œ๋ฒ„์— ์š”์ฒญํ•  ๋•Œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Œ€์ ์œผ๋กœ ์ตœ์ดˆ ์š”์ฒญ์—์„œ ์†๋„๊ฐ€ MPA์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆฌ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์Šค๋งˆํŠธํฐ ์•ฑ์„ ์ž‘๋™ํ•  ๋•Œ ์ตœ์ดˆ ๋กœ๋”ฉ์‹œ๊ฐ„์„ ๊ธฐ๊บผ์ด ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๋ผ๋ฉด ์ด๋Š” ํฐ ๋ฌธ์ œ๊ฐ€ ์•ˆ ๋œ๋‹ค.
 
2. SEO์— ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
--------------------------------------------
--------------------------------------------
--------------------------------------------
 
์ปค์Šคํ…€ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

  1. JS ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” HTML ํŒŒ์ผ or JS ํŒŒ์ผ ์ƒ์„ฑ
  2. ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ์˜๋ฏธ์žˆ๋Š” ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋  HTML Element, CSS, JS ์ฝ”๋“œ ์ž‘์„ฑ
  3. ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋“ค์„ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ทธ๋ฃนํ™”์‹œ์ผœ์ค„ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฌธ๋ฒ• ์‚ฌ์šฉ
  4. ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ(or ์ปดํฌ๋„ŒํŠธ๋ฅผ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก export)

์ปดํฌ๋„ŒํŠธ ๋„ค์ด๋ฐ ๊ทœ์น™

  1. ์ผ๋ฐ˜์ ์œผ๋กœ ์ปคํฌ๋„ŒํŠธ๋Š” ๋Œ€๋ฌธ์ž๋กœ  ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

 
React : SPA ๋ฐฉ์‹์œผ๋กœ UI๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. React์—์„œ๋Š” ์ž์‹ ๋“ค์˜ ๊ธฐ์ˆ ์„ Framework(๋ฐ€ํŠธํ‚ท)๊ฐ€ ์•„๋‹Œ, Library(์žฌ๋ฃŒ)๋ผ๊ณ  ๋ช…์‹œํ•˜๊ณ  ์žˆ๋‹ค. 
 
React๋Š” Virtual DOM(๊ฐ€์ƒ ๋”)์„ ํ™œ์šฉํ•œ๋‹ค. ์‹ค์ œ DOM์ด ์•„๋‹Œ ๊ฐ€์ƒ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ณ„๋„์˜ DOM ๊ฐœ๋…์„ ํ™œ์šฉํ•˜์—ฌ ์ด์ „ UI์˜ ์ƒํƒœ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋ณด๊ด€ํ•ด๋‘์—ˆ๋‹ค๊ฐ€, ์ƒˆ๋กญ๊ฒŒ ๋ณ€๊ฒฝ๋  ํŠน์ •ํ•œ UI ์ผ๋ถ€์™€ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ์ด ์žˆ๋Š” ๊ณณ๋งŒ ๋ถ€๋ถ„์ ์œผ๋กœ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ์— ๋”ฐ๋ผ ์—…๋ฐ์ดํŠธ ์ฒ˜๋ฆฌ ๋น„์šฉ์ด ์ค„์–ด๋“œ๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค.
 
-> ์›๋ž˜ react ์—†์ด๋„ SPA ๋ฐฉ์‹์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ React๋กœ ์ข€ ๋” ํšจ์œจ์ ์ด๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜๋‹ค๋ฅธ ํšจ์œจ์ ์ธ ๋ฐฉ์‹ ์—ญ์‹œ ์กด์žฌํ•œ๋‹ค.
 
JSX : JSX๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ™•์žฅ ๋ฌธ๋ฒ•์ด๋‹ค. XML๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ฒผ์œผ๋ฉฐ, ์ด๋Ÿฐ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๊ธฐ์ „์— ์ฝ”๋“œ๊ฐ€ ๋ฒˆ๋“ค๋ง๋˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ”๋ฒจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
 
์ฆ‰, JS์ฝ”๋“œ ๋‚ด์—์„œ HTML ์ฝ”๋“œ๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํŽธ์˜์„ฑ ์ œ๊ณต ๋ฌธ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์— HTML in JS๋ผ๊ณ ๋„ ํ•œ๋‹ค.
 
์ด๊ฒƒ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๊ธฐ์กด์˜ ๋ฐฉ์‹์—์„œ ํ›จ์”ฌ ๊ฐ„ํŽธํ•˜๊ณ  ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
 
useState

const { useState } = React;

 
๋ฆฌ์•กํŠธ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์œ ์šฉํ•œ ํ•จ์ˆ˜์ด๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•ด์„œ ์ตœ์ดˆ ๊ฐ’์„ ๋“ฑ๋ก ํ›„, ์—…๋ฐ์ดํŠธ ๊ฐ’์„ ๋„ฃ์–ด ์ตœ์ดˆ๊ฐ’์„ ๋ณ€ํ˜•์„ ์ค€๋‹ค.

const Counter = () => {
console.log('rendered');

// [์ƒํƒœ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” '๋ณ€์ˆ˜', ์ƒํƒœ ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋Š” 'ํ•จ์ˆ˜'] = useState('์ดˆ๊ธฐ๊ฐ’');
const [count, setCount] = useState(0);
// ์ดˆ๊ธฐ๊ฐ’ 0์ด count์— ํ• ๋‹น๋จ
 
const clickHandler = () => {
// count += 1;
setCount(count + 1); // setCount()๋ฅผ ํ†ตํ•ด count์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ
// state๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด react๋Š” ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๊ณ , ์ƒˆ๋กญ๊ฒŒ ๋ Œ๋”๋ง์‹œํ‚ด
}
 
return (
<div>
<p>You clicked {count} times</p>
<button onClick={clickHandler}>Click me!!</button>
</div>
);
}

์ด๋ ‡๊ฒŒ ํด๋ฆญ์‹œ ์ด๋ฒคํŠธ๊ฐ€  ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.
 
--------------------------------------------
--------------------------------------------
--------------------------------------------
 
<์ถ”๊ฐ€์ ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•>
๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น
 

const {imgUrl, name, price} = props;

 
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์ธ๋ฐ props๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ ๊ฐ์ฒด ์•ˆ์— ์žˆ๋Š” ํ‚ค๊ฐ’์„ ์ €๋ ‡๊ฒŒ ๋นผ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ €๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ตณ์ด props.imgUrl ํ•  ํ•„์š” ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 
 
์ด๋ฅผ ํ™œ์šฉํ•ด์„œ props ์ž๋ฆฌ์— ๋ฐ”๋กœ {} ์•ˆ์— ์žˆ๋Š” ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์ฒ˜์Œ ์ด์šฉํ•˜๋ฉด ํ—ท๊ฐˆ๋ฆด ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋‚˜์ค‘์—๋Š” ๋‹น์—ฐํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
 
 
2. ์ด๋ฒˆ ์ฃผ์— ๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค์™€ ๊ทน๋ณต
 
์ด๋ฒˆ ์ฃผ๋Š” ์•„์ง ์ž˜ ๋‹ค๋ฃจ์ง€ ๋ชปํ•˜๋Š” ๋งฅ๋ถ์œผ๋กœ ์ธํ•ด์„œ ํ˜ผ์ข€ ๋‚ฌ๋‹ค. ๋‚˜๋Š” ์• ํ”Œ ์ƒํƒœ๊ณ„์— ๋“ค์–ด์™€์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋งฅ๋ถ์„ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊นŒ์ง€ ๋งฅ๋ถ์œผ๋กœ ๊ฐˆ์ค„ ๋ชฐ๋ž๋‹ค. ใ…‹ใ…‹ ์ด์™• ์‚ฐ๊ฑฐ ๋งฅ๋ถ์œผ๋กœ ํ•œ ๋ฒˆ ํ•ด๋ณด์ž ํ–ˆ๋˜๊ฑฐ์˜€๋Š”๋ฐ ๊ฐ€๋” ํž˜๋“ค ๋•Œ๊ฐ€ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด๋Š” ์–ด๋””๊นŒ์ง€๋‚˜ ๋‚ด๊ฐ€ ์•„์ง ์ž˜ ๋‹ค๋ฃจ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ด๊ณ , ํ˜„์žฌ๊นŒ์ง€ ๋ฌธ์ œ๋ฅผ ๋Œ์ด์ผœ ๋ณด๋ฉด ๊ทธ๋ƒฅ ๋‚ด๊ฐ€ ์ž˜๋ชป ์ž…๋ ฅํ•ด์„œ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๋‹ค. ๊ทธ๋ž˜๋„ ๋๊นŒ์ง€ ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ  ์ˆ˜์—… ๋งˆ์น˜๊ณ  ์ง‘์— ๋Œ์•„์™€ ๋‹ค์‹œ ํ•ด๊ฒฐํ•ด๋ณด๋ฉด์„œ ๊ทน๋ณตํ–ˆ๊ณ  ๋งฅ๋ถ์„ ๋‹ค๋ฃจ๋Š” ๋Šฅ๋ ฅ์ด ์ ์  ํ–ฅ์ƒ๋˜๊ณ  ์žˆ๋‹ค. ํŠนํžˆ๋‚˜ eclipse ๋ถ€๋ถ„์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ๋‚ด๊ฐ€ ๋ฏธ๋ฆฌ ์ ‘ํ•ด์„œ ๊ฒฝํ—˜ ํ•ด๋ด์•ผ๊ฒ ๋‹ค.
 
3. ์•ž์œผ๋กœ ์–ด๋””์— ์ ์šฉ
 
React๋ฅผ ํ™œ์šฉํ•ด์„œ ํ–ฅํ›„ ์Šคํฌ๋กค ๋‚ด๋ฆด ๋•Œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํŽ˜์ด์ง€๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ํ˜•ํƒœ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ณ  ์‹ถ๋‹ค. ๊ธฐ์กด์—๋Š” ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ ์ƒ๊ธธ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ๊ณ ์นจ์ด ๋ฐœ์ƒํ•˜์˜€์ง€๋งŒ, ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ํ˜•ํƒœ๋ฅผ ๋งŒ๋“ค์–ด ์ œ์ž‘ํ•˜๊ณ  ์‹ถ๋‹ค. ๋‹น์žฅ ์šฐ๋ฆฌfisa ํ™ˆํŽ˜์ด์ง€๋งŒ ๋ณด๋”๋ผ๋„ ๊ตฌํ˜„์ด ๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์•„์ง ์™„๋ฒฝํ•˜๊ฒŒ ๋‹ค๋ฃจ์ง€ ๋ชปํ•˜์ง€๋งŒ, ๊พธ์ค€ํžˆ ๊ณต๋ถ€ํ•˜๊ณ  ์ ์šฉํ•˜๋Š” ์—ฐ์Šต์„ ํ†ตํ•ด ๋‚˜์ค‘์˜ ํ”„๋กœ์ ํŠธ์—๋Š” ๊ผญ ์ ์šฉํ•ด๋ณด๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ๋‹ค. 
 
vitest๋Š” ํ–ฅํ›„ ๋‚˜์˜ ์ฝ”๋“œ์˜ ์‹ ๋ขฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์ด๋ฏ€๋กœ ์ด ์—ญ์‹œ๋„ ์•„์ง ์ ์‘์ด ์•ˆ ๋˜์ง€๋งŒ ๊ผผ๊ผผํžˆ ๋‚˜์˜ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธ ํ•˜๋ฉฐ ๋‚˜์˜ ์ฝ”๋“œ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ด๊ณ  ์‹ถ๋‹ค.
 
4. ํ˜„์žฌ๊นŒ์ง€์˜ ํ•™์Šต ํ‰๊ฐ€ ๋ฐ ๋‹ค์Œ ํ•™์Šต์„ ์œ„ํ•œ ๋‹ค์ง/๋ชฉํ‘œ
 
์•„์ง๊นŒ์ง€ ๋‚ด๊ฐ€ ์™„๋ฒฝํžˆ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์—†์ง€๋งŒ, ์‹œ์•„๋ฅผ ๋„“ํ˜€๊ฐ€๋ฉฐ ์–ด๋–ค ๊ฒƒ์„ ๋ฐฐ์šฐ๊ณ  ๊ณต๋ถ€๋ฅผ ํ•ด์•ผํ• ์ง€ ์ „์ฒด์ ์ธ ํ๋ฆ„์€ ์–ด๋–ป๊ฒŒ ๋ ์ง€ ๋ฐฉํ–ฅ์„ ์žก์•„๊ฐ€๊ณ  ์žˆ๋‹ค. ๊พธ์ค€ํžˆ ๋ฐฐ์šด ๊ฒƒ๋“ค์„ ๋ณต์Šตํ•˜๊ณ  ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ธ”๋กœ๊ทธ ์ž‘์„ฑํ•˜์—ฌ ๋ฐฐ์šด ๊ฒƒ์„ ์ •๋ฆฌํ•  ๊ฒƒ์ด๋‹ค. ์ฃผ๋ง์—๋Š” ์ตœ๋Œ€ํ•œ ์ดํ•ด ๋ชปํ–ˆ๋˜ ๊ฒƒ ์œ„์ฃผ๋กœ ํ•˜์—ฌ ๋‹ค์‹œ ๋ณต์Šตํ•ด์„œ ๋‚ด๊ฒƒ์œผ๋กœ ๋งŒ๋“œ๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์งˆ ๊ฒƒ์ด๋‹ค. 
 
์ด์ œ, ์ •์ฒ˜๊ธฐ๋ฅผ ๋”ฐ๊ธฐ ์œ„ํ•œ ํ•„๊ธฐ ์ค€๋น„๋ฅผ ํ•  ์˜ˆ์ •์ด๋‹ค. ์Šคํ„ฐ๋”” ๊ทธ๋ฃน์„ ํ˜•์„ฑํ•ด์„œ ์ง„ํ–‰ํ•  ๊ฒƒ์ด๋‹ค. ํ˜„์žฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ cs๊ณต๋ถ€๋„ ํ•˜๊ณ  ์žˆ๋Š” ์ง€๋ผ ์‹œ๊ฐ„ ๋ถ„๋ฐฐ๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•ด์กŒ๋‹ค. ๋ฒ„์Šคํƒ€๊ณ  ์˜ค๋ฉด์„œ ์ •์ฒ˜๊ธฐ๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ  ์ง‘์— ์˜ค๋ฉด์„œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ 2๊ฐœ๋ฅผ ํ’€ ์˜ˆ์ •์ด๋‹ค. ๊ทธ ์‚ฌ์ด ์ˆ˜์—… ๋๋‚˜๊ณ  6-9๋Š” cs ๊ณต๋ถ€ 30๋ถ„ ๋‚˜๋จธ์ง€ 2์‹œ๊ฐ„์€ ๋ฐฐ์šด ๊ฒƒ์„ ๋ณต์Šตํ•  ์˜ˆ์ •์ด๋‹ค.
 
์ผ๋‹จ ํ•ด๋ณด๊ณ  ์กฐ์ •ํ•  ๊ฒƒ์ด์ง€๋งŒ cs๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ฃผ๋ง์„ ํ™œ์šฉํ•ด์„œ ํ‹ˆํ‹ˆํžˆ ๋ณต์Šตํ•  ์˜ˆ์ •์ด๋‹ค.
 
๋„ˆ๋ฌด ๋ฐ”์ ๊ฑฐ ๊ฐ™๋‹ค ใ…‹ใ…‹ ์ผ๋‹จ ํ•ด๋ณด์ž. ํ•ด๋ณด๊ณ  ์•ˆ ๋˜๋ฉด ๋ฐ”๊พธ๋Š” ๊ฑฐ๋‹ค.