๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“‚ Project/์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค

[์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค] ์šฐํ…Œ์ฝ” ํ”„๋ฆฌ์ฝ”์Šค 6๊ธฐ 2์ฃผ์ฐจ ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์…˜ ํšŒ๊ณ 

by Dev. Ella 2023. 11. 1.
๊ฐœ์ธ์ ์œผ๋กœ๋Š” ๋ฏธ์…˜ ์ˆ˜ํ–‰์„ ํ†ตํ•ด ์„ฑ์žฅํ•œ ๊ณผ์ •์„ ๊ธฐ๋กํ•˜๊ณ ,
๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ๋Š” ์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š” ๋งˆ์Œ์ž…๋‹ˆ๋‹ค :)

 

๐Ÿ› ๏ธ 2์ฃผ ์ฐจ ๊ฒฐ๊ณผ๋ฌผ

2์ฃผ ์ฐจ ๋ฏธ์…˜ : ์ž๋™์ฐจ ๊ฒฝ์ฃผ PR

๊ฒŒ์ž„ ์‹คํ–‰ ํ™”๋ฉด๊ณผ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ํ™”๋ฉด

 

 

๐Ÿ“ฎ 2์ฃผ ์ฐจ ๋ฉ”์ผ ๋‚ด์šฉ

1๏ธโƒฃ ์ง€๋‚œ 1์ฃผ ์ฐจ ๋ฏธ์…˜์— ์ด์–ด..

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

 

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

 

2๏ธโƒฃ 2์ฃผ ์ฐจ ๋ฏธ์…˜์˜ ๋ชฉํ‘œ

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

 

 

๐ŸŒณ ์ง€๋‚œ 1์ฃผ ์ฐจ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ

์•„๋ž˜๋Š” 1์ฃผ ์ฐจ ๋ฏธ์…˜ ๋งˆ๊ฐ ํ›„, ๋ชจ๋“  ํ”„๋ฆฌ์ฝ”์Šค ์ฐธ์—ฌ ์ธ์›์—๊ฒŒ ๋ฐœ์†ก๋œ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ์ด๋‹ค. ์—„์ฒญ๋‚˜๊ฒŒ ์ง€ํ‚ค๊ธฐ ์–ด๋ ค์šด ๊ฒƒ๋“ค์ด๋ผ๊ธฐ๋ณด๋‹ค '๊ธฐ๋ณธ์„ ์ง€ํ‚ค์ž'๋ผ๋Š” ๋‚ด์šฉ์ด๋‹ค. ๊ฑฐ์˜ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ Git์— ๋Œ€ํ•ด ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ•์กฐํ–ˆ๋‹ค.

1. ์š”๊ตฌ์‚ฌํ•ญ์„ ์ •ํ™•ํžˆ ์ค€์ˆ˜ํ•œ๋‹ค
2. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์˜๋ฏธ ์žˆ๊ฒŒ ์ž‘์„ฑํ•œ๋‹ค
3. git์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•  ์ž์›์— ๋Œ€ํ•ด์„œ๋„ ๊ณ ๋ คํ•œ๋‹ค
4. Pull Request๋ฅผ ๋ณด๋‚ด๊ธฐ ์ „ ๋ธŒ๋žœ์น˜๋ฅผ ํ™•์ธํ•œ๋‹ค
5. PR์„ ํ•œ ๋ฒˆ ์ž‘์„ฑํ–ˆ๋‹ค๋ฉด ๋‹ซ์ง€ ๋ง๊ณ  ์ถ”๊ฐ€ ์ปค๋ฐ‹์„ ํ•œ๋‹ค
6. ์ด๋ฆ„์„ ํ†ตํ•ด ์˜๋„๋ฅผ ๋“œ๋Ÿฌ๋‚ธ๋‹ค
7. ์ถ•์•ฝํ•˜์ง€ ์•Š๋Š”๋‹ค
8. ๊ณต๋ฐฑ๋„ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜์ด๋‹ค
9. ๊ณต๋ฐฑ ๋ผ์ธ์„ ์˜๋ฏธ ์žˆ๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค
10. space์™€ tab์„ ํ˜ผ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค
11. ์˜๋ฏธ ์—†๋Š” ์ฃผ์„์„ ๋‹ฌ์ง€ ์•Š๋Š”๋‹ค
12. linter์™€ Code Formatter์˜ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•œ๋‹ค
13. EOL(End Of Line)
14. ๋ถˆํ•„์š”ํ•œ console.log๋ฅผ ๋‚จ๊ธฐ์ง€ ์•Š๋Š”๋‹ค
15. JavaScript์—์„œ ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์ ๊ทน ํ™œ์šฉํ•œ๋‹ค

 

 

 

๐Ÿคš ๋ฏธ์…˜์— ์•ž์„œ,

1๏ธโƒฃ ๊ธฐ๋Šฅ ๋ชฉ๋ก ๋งŒ๋“ค๊ธฐ

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

 

2๏ธโƒฃ ์ œ์ถœ ์ „ ํ…Œ์ŠคํŠธ ํ•„์ˆ˜

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

 

๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ œ์ถœ ๊ฐ€๋Šฅ ๊ธฐ๊ฐ„์—๋Š” ๋ฏธ๋ฆฌ PR์„ ์˜ฌ๋ฆฌ๊ณ  ์ง€์›ํ•˜๊ธฐ ํ”Œ๋žซํผ์˜ ์˜ˆ์ œ ํ…Œ์ŠคํŠธ๊นŒ์ง€ ๋ฏธ๋ฆฌ ๋Œ๋ ค๋ณด์•˜๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋งˆ๊ฐ์ด ๋ช‡ ์‹œ๊ฐ„ ๋‚จ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ถ”์ธก์ด ์–ด๋ ค์šด ์—๋Ÿฌ์™€ ๊ธฐ์•ฝ ์—†์ด ์‹ธ์›Œ์•ผ ํ•˜๋‹ˆ ๋ฏธ๋ฆฌ๋ฏธ๋ฆฌ ํ™•์ธํ•˜์ž.

 

3๏ธโƒฃ Node ๋ฒ„์ „ ํ™•์ธ ํ•„์ˆ˜

ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€ ์„ค์น˜๋ฅผ ์œ„ํ•ด Node.js ๋ฒ„์ „ 18.17.1 ์ด์ƒ์ด ํ•„์š”ํ•˜๋‹ค. ๋ณธ์ธ ๋กœ์ปฌ์˜ Node ๋ฒ„์ „์ด ๋ช‡์ธ์ง€ ๊ผญ ํ™•์ธ ํ›„ ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜์ž. ์ฐธ๊ณ ๋กœ Node ๋ฒ„์ „ ํ™•์ธ์€ 'node --version'์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์—…๋ฐ์ดํŠธ๋Š” Node.js ๊ณต์‹ ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜๊ฑฐ๋‚˜, ์•„๋ž˜์™€ ๊ฐ™์ด 'nvm install'๋กœ ํŠน์ • Node ๋ฒ„์ „์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Node ๋ฒ„์ „ ์„ค์ • ํ™”๋ฉด

 

 

๐ŸŽ๏ธ ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ

1๏ธโƒฃ ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๊ฒŒ์ž„ ์„ค๋ช…

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

 

2๏ธโƒฃ ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๊ฒŒ์ž„ ์˜ˆ์‹œ

๊ฒฝ์ฃผํ•  ์ž๋™์ฐจ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.(์ด๋ฆ„์€ ์‰ผํ‘œ(,) ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„)
pobi,woni,jun
์‹œ๋„ํ•  ํšŸ์ˆ˜๋Š” ๋ช‡ ํšŒ์ธ๊ฐ€์š”?
5

์‹คํ–‰ ๊ฒฐ๊ณผ
pobi : -
woni :
jun : -

pobi : --
woni : -
jun : --

... ์ƒ๋žต

pobi : -----
woni : ----
jun : -----

์ตœ์ข… ์šฐ์Šน์ž : pobi, jun

 

์ด๋ฒˆ ๋ฏธ์…˜์€ ์ง€๋‚œ 1์ฃผ ์ฐจ์— ๋น„ํ•ด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ƒ๊ฐ๋ณด๋‹ค ๊ผผ๊ผผํ•˜๊ฒŒ ํ–ˆ์–ด์•ผ ํ–ˆ๋‹ค. ์š”๊ตฌ ์‚ฌํ•ญ๋“ค์„ ์ฝ์–ด๋ณด๋ฉด ์ƒ๊ฐ๋ณด๋‹ค ์• ๋งคํ•œ ์กฐ๊ฑด๋“ค์ด ์žˆ์–ด์„œ ์‚ฌ์šฉ์ž์˜ ๋‹ค์–‘ํ•œ ์ธํ’‹๊นŒ์ง€ ์˜ˆ์ƒํ•˜๊ณ  ์ œํ•œ์„ ๊ฑธ์–ด๋‘์–ด์•ผ ํ–ˆ๋‹ค.

 

์ผ๋‹จ ์•„๋ž˜ ์š”๊ตฌ์‚ฌํ•ญ๋“ค์„ ์•„์ฃผ ๊ผผ๊ผผํ•˜๊ฒŒ ์”น์–ด๋จน๋“ฏ ์ฝ์–ด๋ณด์ž. (์ค‘์š”)

 

3๏ธโƒฃ ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ

โœ… ์ฃผ์–ด์ง„ ํšŸ์ˆ˜ ๋™์•ˆ n๋Œ€์˜ ์ž๋™์ฐจ๋Š” ์ „์ง„ ๋˜๋Š” ๋ฉˆ์ถœ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘‰ ์—ฌ๊ธฐ์„œ n๋Œ€๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€? ๋ฌดํ•œ์œผ๋กœ ๋Š˜๋ฆด ๊ฒƒ์ธ๊ฐ€, ์•„๋‹ˆ๋ฉด ์ž์ฒด์ ์œผ๋กœ ์ˆ˜๋ฅผ ์ œํ•œํ•  ๊ฒƒ์ธ๊ฐ€? ์Šค์Šค๋กœ ํŒ๋‹จํ•ด ๋ณผ ๋ฌธ์ œ๋‹ค. ๋ฌดํ•œ๋Œ€๋กœ ๋Š˜๋ฆฌ๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€์ง€ ์•Š์„๊นŒ? ์•„๋‹ˆ๋ฉด ๊ตณ์ด ๊ทธ๋Ÿฐ ์กฐ๊ฑด์€ ์—†์œผ๋‹ˆ ๊ฑธ์–ด๋‘์ง€ ์•Š์•„๋„ ๋ ๊นŒ?


โœ… ๊ฐ ์ž๋™์ฐจ์— ์ด๋ฆ„์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ „์ง„ํ•˜๋Š” ์ž๋™์ฐจ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ์ž๋™์ฐจ ์ด๋ฆ„์„ ๊ฐ™์ด ์ถœ๋ ฅํ•œ๋‹ค.

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


โœ… ์ž๋™์ฐจ ์ด๋ฆ„์€ ์‰ผํ‘œ(,)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉฐ ์ด๋ฆ„์€ 5์ž ์ดํ•˜๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

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


โœ… ์‚ฌ์šฉ์ž๋Š” ๋ช‡ ๋ฒˆ์˜ ์ด๋™์„ ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

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


โœ… ์ „์ง„ํ•˜๋Š” ์กฐ๊ฑด์€ 0์—์„œ 9 ์‚ฌ์ด์—์„œ ๋ฌด์ž‘์œ„ ๊ฐ’์„ ๊ตฌํ•œ ํ›„, ๋ฌด์ž‘์œ„ ๊ฐ’์ด 4 ์ด์ƒ์ผ ๊ฒฝ์šฐ์ด๋‹ค.

๐Ÿ‘‰ ์ž๋™์ฐจ๋“ค์ด ์ „์ง„ํ•˜๋Š” ์กฐ๊ฑด์€ (์ž๋™์ฐจ๋„ ์‚ฌ์šฉ์ž๋„ ์•„๋‹Œ, ์ปดํ“จํ„ฐ == ๋žœ๋ค API๊ฐ€) 0๊ณผ 9 ์‚ฌ์ด์˜ ๋ฌด์ž‘์œ„ ์ˆซ์ž๋ฅผ ๊ตฌํ•ด์ฃผ๋ฉด, ๊ทธ ๊ฐ’์— ๋”ฐ๋ผ ์ „์ง„ํ• ์ง€ ๋ง์ง€ ์ •ํ•ด์ง€๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋žœ๋ค ์ƒ์„ฑ๊ธฐ๊ฐ€ pobi์—๊ฒŒ 3์„, woni์—๊ฒŒ 4๋ฅผ, jun์—๊ฒŒ 9๋ฅผ ์ค€๋‹ค๋ฉด? woni์™€ jun๋งŒ ์ „์ง„ํ•  ์ˆ˜ ์žˆ๋‹ค ( == ํ•˜์ดํ”ˆ ํ•˜๋‚˜๋ฅผ ์ฐ์„ ์ˆ˜ ์žˆ๋‹ค) 


โœ… ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๊ฒŒ์ž„์„ ์™„๋ฃŒํ•œ ํ›„ ๋ˆ„๊ฐ€ ์šฐ์Šนํ–ˆ๋Š”์ง€๋ฅผ ์•Œ๋ ค์ค€๋‹ค. ์šฐ์Šน์ž๋Š” ํ•œ ๋ช… ์ด์ƒ์ผ ์ˆ˜ ์žˆ๋‹ค.

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


โœ… ์šฐ์Šน์ž๊ฐ€ ์—ฌ๋Ÿฌ ๋ช…์ผ ๊ฒฝ์šฐ ์‰ผํ‘œ(,)๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ๋ถ„ํ•œ๋‹ค.

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


โœ… ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ throw๋ฌธ์„ ์‚ฌ์šฉํ•ด "[ERROR]"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ง€๋Š” ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ํ›„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•œ๋‹ค.

๐Ÿ‘‰ ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’ (์ž๋™์ฐจ ์ด๋ฆ„, ์‹œ๋„ ํšŸ์ˆ˜)๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€ํ•ด 1) throw๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ  (2) ๊ผญ [ERROR]๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋ฉฐ (3) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ฆ‰์‹œ ์ข…๋ฃŒ๋˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. ์ด ํ•œ ๋ฌธ์žฅ์— ๋ฌด๋ ค ์„ธ ๊ฐ€์ง€ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋‹ด๊ฒจ ์žˆ์œผ๋‹ˆ ์œ ์˜ํ•˜์ž.

 

 

๐Ÿšจ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ - ์‹คํ–‰ ํ™˜๊ฒฝ

โœ… Node.js 18.17.1 ๋ฒ„์ „์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ‘‰ Node ๋ฒ„์ „ ์ฒดํฌ ํ•„์ˆ˜๋‹ค. ์ž‘์—…ํ•  ๋•Œ ํ™•์ธํ–ˆ๋”๋ผ๋„ ์ œ์ถœํ•˜๊ธฐ ์ง์ „์— ๋‹ค์‹œ ํ•œ๋ฒˆ ํ•ด๋‹น ๋ฒ„์ „์—์„œ ์ž˜ ๋Œ์•„๊ฐ€๋Š”์ง€ ํ™•์ธํ•˜์ž.

 

โœ… ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์˜ ์‹œ์ž‘์ ์€ App.js์˜ play ๋ฉ”์„œ๋“œ๋‹ค.

๐Ÿ‘‰ App.js๋กœ ๊ฒŒ์ž„์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋˜ ์ง€๋‚œ 1์ฃผ ์ฐจ์™€๋Š” ๋‹ฌ๋ฆฌ, ์ด๋ฒˆ 2์ฃผ ์ฐจ๋Š” App ํด๋ž˜์Šค๊ฐ€ index.js์— import ๋˜์–ด node ํ™˜๊ฒฝ์—์„œ index.js๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋งค ๋ฏธ์…˜๋งˆ๋‹ค ์‹คํ–‰ ํ™˜๊ฒฝ์ด๋‚˜ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์™„์ „ํžˆ ๋˜‘๊ฐ™์ง€ ์•Š์„ ํ…Œ๋‹ˆ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋ผ๋„ ๋‹ค์‹œ ์ฝ์–ด๋ณด๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ๋‹ค.

 

โœ… package.json์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ  ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(jQuery, Lodash ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ˆœ์ˆ˜ Vanilla JS๋กœ๋งŒ ๊ตฌํ˜„ํ•œ๋‹ค.

๐Ÿ‘‰ ํ•˜์ง€๋งŒ ํ•„์ž๋Š” ์ง€๋‚œ 1์ฃผ ์ฐจ์™€ ๋˜‘๊ฐ™์ด ESLint์™€ Prettier๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋ณ€๊ฒฝ๋œ package.json ๋‚ด์—ญ์€ ๊ตณ์ด push ํ•˜์ง€ ์•Š์•˜๋‹ค.

 

โœ… JavaScript ์ฝ”๋“œ ์ปจ๋ฒค์…˜์„ ์ง€ํ‚ค๋ฉด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค.

๐Ÿ‘‰ Airbnb ์ฝ”๋“œ ์ปจ๋ฒค์…˜์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ณด๊ณ  ๋”ฐ๋ฅด๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋ฒˆ๊ฑฐ๋กœ์› ๊ธฐ์— ESLint์™€ Prettier๋ฅผ ์„ค์ •ํ•ด์„œ ์ปจ๋ฒค์…˜์„ ๋งž์ถ”์—ˆ๋‹ค.

 

โœ… ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ process.exit()๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ‘‰ ๋ณดํ†ต ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•  ๋•Œ Console.Close()๋‚˜ process.exit()๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ๋Š” ํ–ˆ์ง€๋งŒ, ์—ฌ๊ธฐ์„œ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ง€๋‚œ 1์ฃผ ์ฐจ ๋ฏธ์…˜์—์„œ๋Š” ๊ฒŒ์ž„ ์ข…๋ฃŒ ์‹œ '๊ฒŒ์ž„ ์ข…๋ฃŒ' ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ–ˆ์ง€๋งŒ, 2์ฃผ ์ฐจ๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋“ฏ์ด throw๋ฌธ์„ ์‚ฌ์šฉํ•ด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ๊ทธ๋Œ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข…๋ฃŒ๋˜๋„๋ก ํ–ˆ๋‹ค.

 

โœ… ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜๋ฉด ApplicationTest์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•ด์•ผ ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ 0์  ์ฒ˜๋ฆฌํ•œ๋‹ค.

๐Ÿ‘‰ ์ด๋ฒˆ ๋ฏธ์…˜์˜ ApplicationTest๋Š” ์ด 3๊ฐœ์˜ ํ…Œ์ŠคํŠธ์˜€๊ณ , ์ด ์„ธ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ํ†ต๊ณผํ•ด์•ผ ํ•œ๋‹ค.

 

โœ… ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ์—์„œ ๋‹ฌ๋ฆฌ ๋ช…์‹œํ•˜์ง€ ์•Š๋Š” ํ•œ ํŒŒ์ผ, ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ด๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ‘‰ ๋””ํดํŠธ๋กœ ์žˆ๋˜ ํŒŒ์ผ(package.json, package-lock.json ๋“ฑ)๊ณผ ์ฝ”๋“œ, ํด๋”๋Š” ๊ตณ์ด ๊ฑด๋“ค์ง€ ์•Š์•˜๋‹ค. ํ˜น์‹œ๋‚˜ ์ง€์› ํ”Œ๋žซํผ ์˜ˆ์ œ ํ…Œ์ŠคํŠธ์— ํ†ต๊ณผํ•˜์ง€ ๋ชปํ• ๊นŒ ๋ด ๊ต‰์žฅํžˆ ์กฐ์‹ฌ์Šค๋Ÿฌ์› ๋˜ ๊ฒƒ๋„ ์žˆ๋‹ค. ์š”๊ตฌ์‚ฌํ•ญ์„ ์ž˜ ๋“ฃ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์ž!

 

 

๐Ÿšจ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ - ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

โœ… @woowacourse/mission-utils์˜ Random ๋ฐ Console API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

โœ… Random ๊ฐ’ ์ถ”์ถœ์€ Random.pickNumberInRange()๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

โœ… ์‚ฌ์šฉ์ž์˜ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๊ณ  ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Console.readLineAsync, Console.print๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

๐Ÿ‘‰ 1์ฃผ ์ฐจ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ๊ตณ์ด ๋”ฐ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์šฐํ…Œ์ฝ”์—์„œ ์ œ๊ณตํ•˜๋Š” utils๋“ค์„ ์‚ฌ์šฉํ•ด ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ์„ ํ•˜๋ฉด ๋œ๋‹ค.

 

 

โž• 2์ฃผ ์ฐจ๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ ์š”๊ตฌ์‚ฌํ•ญ

โœ… indent(์ธ๋ดํŠธ, ๋“ค์—ฌ ์“ฐ๊ธฐ) depth๋ฅผ 3์ด ๋„˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค. 2๊นŒ์ง€๋งŒ ํ—ˆ์šฉํ•œ๋‹ค. 

๐Ÿ‘‰ ์ด๋ฒˆ๋ถ€ํ„ฐ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ์š”๊ตฌ์‚ฌํ•ญ์ด์ง€๋งŒ, ์‚ฌ์‹ค ํ•จ์ˆ˜ ํ•˜๋‚˜์— 15์ค„ ์ด์ƒ ๋„˜์–ด๊ฐ€๊ณ  depth๊ฐ€ ๋งŽ์•„์ง€๋ฉด ํ•œ ๊ฐ€์ง€ ์ผ์„ ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค. ๋”ฐ๋ผ์„œ indent depth๋ฅผ ์ค„์ด๊ณ ์ž ํ•œ๋‹ค๋ฉด ํ•จ์ˆ˜ ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ๋œ๋‹ค. ๋”๋ถˆ์–ด, ๋งŽ์€ ์ด๋“ค์ด depth์— ๋Œ€ํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์งˆ๋ฌธ์„ ๋‚จ๊ฒผ๋Š”๋ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด while๋ฌธ ์•ˆ์— if๋ฌธ์ด ์žˆ์œผ๋ฉด ๋“ค์—ฌ ์“ฐ๊ธฐ๋Š” 2์ด๋‹ค.


โœ… Jest๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณธ์ธ์ด ์ •๋ฆฌํ•œ ๊ธฐ๋Šฅ ๋ชฉ๋ก์ด ์ •์ƒ ๋™์ž‘ํ•จ์„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ํ™•์ธํ•œ๋‹ค. 

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

 

 

๐Ÿ“š ๋ฏธ์…˜์„ ํ†ตํ•ด ๋ฐฐ์šด ์ 

1๏ธโƒฃ ๊ธฐ๋Šฅ ๋ช…์„ธ์„œ ์ž‘์„ฑ ๋ฐฉ๋ฒ•

์ง€๋‚œ 1์ฃผ ์ฐจ์— ์ด์–ด ์ด๋ฒˆ ์ฃผ์—๋„ ๊ธฐ๋Šฅ ๋ช…์„ธ์— ๊ณต์„ ๋งŽ์ด ๋“ค์˜€๋‹ค. ๋‹จ์ˆœํžˆ ๋ณด๊ธฐ ์ข‹๊ฒŒ ๊พธ๋ฏผ๋‹ค๊ธฐ๋ณด๋‹ค, (ํŠนํžˆ ํ•™์Šตํ•˜๋Š” ๋‹จ๊ณ„์—์„œ๋Š”) ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ผผ๊ผผํžˆ ๋ถ„์„ํ•˜๊ณ  ๋กœ์ง์„ ๊ตฌ์ƒํ•˜๋Š” ์—ฐ์Šต์„ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

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

 

README.md์™€ convention.md

 

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

 

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

 

2๏ธโƒฃ ์ ˆ์ฐจ ์ง€ํ–ฅ vs. ๊ฐ์ฒด ์ง€ํ–ฅ

์ง€๋‚œ 1์ฃผ ์ฐจ์—๋Š” ์ „์ฒด์ ์ธ ํ”Œ๋กœ์šฐ์™€ ํ•จ๊ป˜, ๊ฐ ๋‹จ๊ณ„์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ ๋ฐ ๋ณ€์ˆ˜๊นŒ์ง€ ์•„์ฃผ ์ƒ์„ธํ•˜๊ฒŒ ์ •์˜ํ–ˆ์œผ๋‚˜, ๋ช‡๋ช‡ ์ด์œ ๋กœ ํ˜•์‹์„ ์กฐ๊ธˆ ๋ฐ”๊พธ์—ˆ๋‹ค.


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

 

์ •๋ฆฌํ•˜์ž๋ฉด, ์ด๋ฒˆ์—๋Š” How๋ณด๋‹ค๋Š” ์˜ˆ์™ธ์‚ฌํ•ญ์„ ํฌํ•จํ•ด ํ•ด๋‹น ๊ธฐ๋Šฅ์—์„œ ๊ตฌํ˜„๋˜์–ด์•ผ ํ•˜๋Š” What์„ ์ค‘์‹ฌ์œผ๋กœ ์ ์—ˆ๋‹ค.

 

requirement.md

 

์œ„์™€ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ ์–ด๋ณด์•˜๋‹ค. ํ•˜๋‚˜๋Š” ์ ˆ์ฐจ ์ง€ํ–ฅ์œผ๋กœ How๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ๊ณ , ํ•˜๋‚˜๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์œผ๋กœ ๊ฐ ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ ์–ด์„œ ์ „์ฒด์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ–ˆ๋‹ค.

 

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

 

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

 

3๏ธโƒฃ MVC ํŒจํ„ด์˜ ๋ณธ์งˆ

์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜๋„ ๊ณ ๋ฏผ์ด ๋งŽ์•˜๊ณ , ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ๋„ ํ† ๋ก ์ด ํ™œ๋ฐœํ–ˆ๋‹ค. ๋‹ค๋“ค MVC, MVC ์ด์•ผ๊ธฐํ•˜๋Š”๋ฐ ์ด๊ฑธ ์“ฐ๋ฉด ์ข‹์€ ๊ฑด๊ฐ€? ์— ๋Œ€ํ•œ ๋‚ฉ๋“์ด ๋˜์ง€ ์•Š์•˜๋‚˜ ๋ณด๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜ ๋˜ํ•œ ๋ฌด์ง€์„ฑ์œผ๋กœ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ณด๋‹ค ์Šค์Šค๋กœ ๋‚ฉ๋“ ๊ฐ€๋Šฅํ•œ ์ด์œ ๋ฅผ ์ฐพ๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

์šฐ์„  MVC์˜ ๋ณธ์งˆ๋ถ€ํ„ฐ ์•Œ์•„๋ณด๊ณ ์ž ํ–ˆ๋‹ค. ์ด MVC๋ผ๋Š” ๊ฐœ๋…์ด ์–ด๋–ป๊ฒŒ ๋“ฑ์žฅํ–ˆ๋Š”์ง€๋ฅผ ์•Œ๋ฉด ๊ทธ์— ๋งž๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ๋‹ค. (์ฐธ๊ณ : MVC ์ฐฝ์‹œ์ž๊ฐ€ ๋งํ•˜๋Š”, MVC์˜ ๋ณธ์งˆ) ์•จ๋Ÿฐ ์ผ€์ด๊ฐ€ ์ฐฝ์‹œํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object oriented Programming)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณ ๋ฏผ์—์„œ ์‹œ์ž‘๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

์ข‹์€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ
์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋‚˜๋ˆ„๊ณ  ๋ฌถ์–ด์ค˜์•ผ ํ• ๊นŒ?
์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ถ”์ƒํ™”ํ•ด์•ผ ํ• ๊นŒ?

 

์—ฌ๊ธฐ์— ๋”ํ•ด, ํŠธ๋ผ์ด๋ธŒ๋ผ๋Š” ์‚ฌ๋žŒ์€ (1) ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ (2) ์‹œ๊ฐ์ ์ธ UI, ๊ทธ๋ฆฌ๊ณ  (3) ๋‘˜ ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ๋ถ€๋ถ„์„ ์ฝ”๋“œ ์•ˆ์—์„œ ๋ถ„๋ฆฌํ•˜๊ณ  ์—ญํ•  ๋ถ€์—ฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค๋Š”๋ฐ, ์ด ๋‘ ์‚ฌ๋žŒ์˜ ๋ง์„ ๋“ฃ๊ณ  ๋ณด๋‹ˆ MVC ํŒจํ„ด์ด ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์กฐ๊ธˆ์€ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

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

 

์ฐธ๊ณ ํ•œ ๊ธ€์—์„œ๋„ ๋งํ•˜๋Š” ๋“ฏ, ์‚ฌ์‹ค ๊ฐ์ฒด์ง€ํ–ฅ์ด๋“  ์ ˆ์ฐจ์ง€ํ–ฅ์ด๋“  MVC ํŒจํ„ด์ด๋“ , ์–ด์จŒ๋“  ๋ชฉ์ ์€ ํ•˜๋‚˜๋‹ค. ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ํŽธํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์ด๋‹ค.

 

4๏ธโƒฃ MVC ํŒจํ„ด ์ ์šฉํ•˜๊ธฐ

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

 

MVC @InterviewBit

 

์šฐ์„  ์ „์ฒด์ ์ธ ๋กœ์ง์€ ์‚ฌ์šฉ์ž ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด  Controller๊ฐ€ ์ค‘์žฌ์ž ์—ญํ• ์„ ํ•˜๊ณ  → View๋กœ ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ๋ฐ›์•„์„œ   Model์„ ์ƒ์„ฑํ•˜์—ฌ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.   ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ Controller๋ผ๋Š” ์ค‘์žฌ์ž๊ฐ€ View๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ต์„ ์ฃผ๋„๋ก ์„ค๊ณ„ํ–ˆ๋‹ค. ์ด ์ค‘ Model(Car.js)์—์„œ๋Š” ๊ฐ ์ž๋™์ฐจ๋“ค์˜ ๋ฐ์ดํ„ฐ (name, position)์„ ์ €์žฅํ–ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ž๋™์ฐจ๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ํ•„๋“œ๋Š” ์ด๋ฆ„์ด๋ผ๋Š” ์†์„ฑ์ด ์žˆ๊ณ , Car๋งŒ์ด ๊ฐ€์ง€๋Š” '๋‹ฌ๋ฆฐ๋‹ค'๋ผ๋Š” ๊ณ ์œ ํ•œ ๋™์ž‘์„ ์ •์˜ํ–ˆ๋‹ค.

 

View๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž๋™์ฐจ ์ด๋ฆ„๊ณผ ์‹œ๋„ ํšŸ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๊ฒ€์‚ฌํ•˜๋Š” inputView์™€, ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” outputView๋กœ ๊ตฌ์„ฑํ–ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ Controller๋Š” ์œ„์˜ Model๊ณผ View ์‚ฌ์ด์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค(๋„๋ฉ”์ธ) ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ปจํŠธ๋กค ํƒ€์›Œ์˜ ์—ญํ• ์„ ํ•˜๊ฒŒ ํ–ˆ๋‹ค.

 

5๏ธโƒฃ TDD์— ๋Œ€ํ•œ ๊ฒฐ๋ก 

์ด๋ฒˆ์— ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด์„œ TDD(Test Driven Development)์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด ๋ณด๊ธฐ๋„ ํ–ˆ๋‹ค. ์‚ฌ์‹ค TDD๋Š” ๋ง์€ ๊ฑฐ์ฐฝํ•ด ๋ณด์ด์ง€๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด 'ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ'๋กœ์„œ ์ž‘์€ ๋‹จ์œ„์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ณ , ์ด๋ฅผ ํ†ต๊ณผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์ด๋‹ค. (์ฐธ๊ณ :  TDD ๋ฐฉ๋ฒ•๋ก  (ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ) - ์•Œ๊ธฐ ์‰ฝ๊ฒŒ ์ •๋ฆฌ

 

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

 

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

 

6๏ธโƒฃ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ…Œ์ŠคํŠธ

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ์šฐํ…Œ์ฝ”์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (Console, Random)๋“ค์€ utils ํŒŒ์ผ์— ๋ชจ์•„๋‘๊ณ  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ ธ๋‹ค. ์–ด์ฐจํ”ผ ๋ณด์žฅ๋œ(?) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ๋ฐ ์™œ ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ ค์•ผ ํ• ๊นŒ ์ƒ๊ฐ๋„ ๋“ค์—ˆ๋‹ค. ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ์‚ฌ๋žŒ๋งˆ๋‹ค ์‹œ๊ฐ ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค.

 

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

 

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


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

 

7๏ธโƒฃ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ปค๋ฐ‹์— ๋Œ€ํ•œ ๊ณ ๋ฏผ

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์™€ ์†Œ์Šค์ฝ”๋“œ๋Š” ๋ถ„๋ฆฌํ•ด์„œ ์ปค๋ฐ‹ํ• ์ง€ ๊ณ ๋ฏผ์ด ์žˆ์—ˆ๊ณ , ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋„ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ํ† ๋ก ์ด ์žˆ์—ˆ๋‹ค.

 

# ์†Œ์Šค ์ฝ”๋“œ ์ปค๋ฐ‹
feat: ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ž๋™์ฐจ ์ด๋ฆ„์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
feat: ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์‹œ๋„ ํšŸ์ˆ˜์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

# ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ปค๋ฐ‹
test: ์ž๋™์ฐจ ์ด๋ฆ„๊ณผ ์‹œ๋„ ํšŸ์ˆ˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€

 

๋‚˜๋Š” ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ•˜๋Š” ์‚ฌ๋žŒ์˜ ์ž…์žฅ์„ ๊ณ ๋ คํ•ด ๋ถ„๋ฆฌํ•ด์„œ ์ปค๋ฐ‹ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค. ๋ณด๋Š” ์‚ฌ๋žŒ์˜ ๊ด€์‹ฌ์‚ฌ์— ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด CI/CD  (Continuous Integration/Continuous Delivery) ๋ฐฐํฌ ๋‹จ๊ณ„ ์ค‘, CI ๋‹จ๊ณ„์—์„œ๋Š” ํ…Œ์ŠคํŠธ ์˜ฌ๋ ธ์„ ๋•Œ ํ†ต๊ณผ๋˜๋ฉด ๋ฆฌ๋ทฐํ•˜๋Š” ์‚ฌ๋žŒํ•œํ…Œ๋Š” ๊ด€์‹ฌ์ด ์—†๊ณ  ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๊ด€์‹ฌ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋งŒ์•ฝ CI๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๊ทธ๋•Œ ๋˜์–ด์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ์ปค๋ฐ‹์œผ๋กœ ๊ฐ€์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๋  ๊ฒƒ์ด๋‹ค.

 

์ฆ‰, ๋ณด๋Š” ์‚ฌ๋žŒ์˜ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๊ณ ๋ คํ•ด ์‹œ๊ฐ„์„ ์•„๊ปด์ฃผ๋Š” ์ฐจ์›์œผ๋กœ ์ƒ๊ฐํ–ˆ๋‹ค.

 

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ”ง ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

์ผ๋ฐ˜์ ์ธ ์—๋Ÿฌ๋Š” ๋”ฐ๋กœ ๋‹ค๋ฅธ ๊ธ€๋กœ ๋ฐœํ–‰ํ•˜๊ณ ,
๋ณธ ๋ฏธ์…˜์—์„œ ๋งˆ์ฃผํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐœ๋งŒ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค.

 

1๏ธโƒฃ ์™œ "pobi : -" ์ถœ๋ ฅ์ด ์•ˆ๋˜๋Š”๊ฐ€

์–ด๋Š ์ •๋„ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ณ , Node ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธํ•ด๋ณด๋‹ˆ ์ž˜ ์ž‘๋™๋˜๋Š” ๋“ฏํ–ˆ๋‹ค.

Node ํ™˜๊ฒฝ์—์„œ๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์ž˜ ๋˜๋Š” ๋ชจ์Šต

 

๋ถ„๋ช… Node ํ™˜๊ฒฝ์—์„œ๋Š” "pobi : -" ์ถœ๋ ฅ์ด ์ž˜ ๋˜๋Š”๋ฐ..  ์™œ ์•„๋ž˜์™€ ๊ฐ™์ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ๋Š” string์ด contain ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ธ์ง€ ์ดํ•ด๊ฐ€ ์•ˆ ๋๋‹ค.

 

ํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ๊ฐ€ ์•ˆ๋˜๋Š” ํ™”๋ฉด

 

๋œฏ๊ณ  ๋œฏ์–ด๋ณด๋‹ค๊ฐ€, GPT์—๊ฒŒ๋„ ๋ฌผ์–ด๋ณด๋‹ค๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์€ ํ•ด๋‹ต์„ ์ฐพ์•˜๋‹ค.

๋ฌธ์ œ๋Š” ์—ญ์‹œ ์ฝ”๋“œ์— ์žˆ์—ˆ๋‹ค.

 

moveCarForwardOrStop() {
    this.cars.forEach((car) => {
      const randomNumber = generateRandomNumber();
      if (randomNumber >= NUMBER.MOVE_FORWARD_REQUIREMENT) {
        car.moveForward();
      }
    });
  }

  printForwardCarName() {
    this.cars.forEach((car) => {
      printCar(car.getName(), car.getPosition());
    });
    printMessage(STRING.BLANK_SPACE);
  }

  raceCar(tryNumber) {
    printResult();
    for (let i = 0; i < tryNumber; i += 1) {
      this.moveCarForwardOrStop(generateRandomNumber()); // ๋žœ๋ค ์ƒ์„ฑ๊ธฐ ํ•œ๋ฒˆ ๋” ํ˜ธ์ถœ
      this.printForwardCarName();
    }
  }

 

์ผ๋‹จ ์šฐํ…Œ์ฝ” ์ธก์—์„œ ์ œ๊ณตํ•œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ์ธ ApplicationTest.js ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์•˜๋‹ค. ์—ฌ๊ธฐ์„  generateRandomNumber ํ•จ์ˆ˜ (๋‚ด๊ฐ€ ์ง  ๋žœ๋ค ์ƒ์„ฑ๊ธฐ)๋ฅผ ๋ชจํ‚นํžˆ๋ฉด์„œ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์ œ์–ดํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‚ด๊ฐ€ ์ง  GameController.js ๋‚ด๋ถ€์—์„œ generateRandomNumber ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์ด ์ž˜๋ชป๋˜์—ˆ์œผ๋‹ˆ ํ…Œ์ŠคํŠธํ•  ๋•Œ generateRandomNumber์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด ๋žœ๋ค์ด ์•„๋‹Œ ํ•ญ์ƒ ๋™์ผํ•˜๊ฒŒ ์„ค์ •๋˜์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.

์ฆ‰, ์•„๋ž˜์™€ ๊ฐ™์ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์ด ๋ถ€๋ถ„์ด ํ…Œ์ŠคํŠธ ์‹คํŒจ์˜ ์›์ธ์ด์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.

 

describe('์ž๋™์ฐจ ๊ฒฝ์ฃผ ๊ฒŒ์ž„', () => {
  test('์ „์ง„-์ •์ง€', async () => {
    // given
    const MOVING_FORWARD = 4;
    const STOP = 3;
    const inputs = ['pobi,woni', '1'];
    const outputs = ['pobi : -'];
    const randoms = [MOVING_FORWARD, STOP];
    const logSpy = getLogSpy();

    mockQuestions(inputs);
    mockRandoms([...randoms]); // ์ด ๋ถ€๋ถ„

 

generateRandomNumber ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋ฐฐ์—ด randoms์˜ ๊ฐ’์œผ๋กœ “์ˆœ์ฐจ์ ์œผ๋กœ” ์„ค์ •ํ•˜๋„๋ก ๋ชจํ‚น ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค. ์ด๋•Œ, ๋žœ๋ค ์ƒ์„ฑ ํ•จ์ˆ˜๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ๋˜๋”๋ผ๋„ ํ•ญ์ƒ ๋™์ผํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ๋ฌด์ž‘์œ„์˜ ๊ฐ’์ด ๋ฐ˜ํ™˜๋˜์–ด์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ generateRandomNumber ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด, ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ํ•ญ์ƒ ๋™์ผํ•œ ๊ฐ’์ด ๋ฐ˜ํ™˜๋˜์–ด์„œ pobi์™€ woni์˜ ์ด๋™์„ ๋ฌด์กฐ๊ฑด ๋ฉˆ์ถ”๊ฒŒ ๋˜๊ณ , "pobi : -"์™€ ๊ฐ™์ด position์ด 0์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด์—ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ GameController ์ฝ”๋“œ ๋‚ด์—์„œ generateRandomNumber ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋˜, ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— '์ ํ•ฉํ•œ' ์œ„์น˜์—์„œ ์‹ค์ œ๋กœ ๋‚œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

ํ†ต๊ณผ!!!

 

์•„๋ฌดํŠผ 1์ฃผ ์ฐจ์— ์ด์–ด, ์ด๋ฒˆ ์—๋Ÿฌ๋„ ์ƒˆ๋ฒฝ๊นŒ์ง€ ๋ถ™์žก๊ณ  ์žˆ๋‹ค๊ฐ€ ๋„ˆ๋ฌด ์•ˆ ๋˜๊ฒ ์–ด์„œ ๋‹ค์Œ๋‚  ๋ง‘์€ ์ •์‹ ์œผ๋กœ ์‚ดํŽด๋ณด๋‹ˆ ์ž˜ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์—๋Ÿฌ ํ•ด๊ฒฐ์€ ์–ธ์ œ๋‚˜ ํž˜๋“ค์ง€๋งŒ, ์–ธ์ œ๋‚˜ ํ†ต์พŒํ•ด!

 

2๏ธโƒฃ ๊ทธ๋†ˆ์˜ '์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜'....

์ง€๋‚œ 1์ฃผ ์ฐจ์—๋Š” ์ง€์› ํ”Œ๋žซํผ ์˜ˆ์ œ ํ…Œ์ŠคํŠธ๋„ ํ•œ ๋ฒˆ์— ํ†ต๊ณผ๊ฐ€ ๋˜์—ˆ๋Š”๋ฐ, ์™œ์ธ์ง€ ์ด๋ฒˆ ์ฃผ๋Š” ํ•œ๋ฒˆ์— ํ†ต๊ณผ๋ฅผ ๋ชปํ–ˆ๋‹ค. ๋‹คํ–‰ํžˆ ๋งˆ๊ฐ ์ „ ๋‚ ์— ์ด๋Ÿฐ ์ผ์ด ์ƒ๊ฒผ์œผ๋‹ˆ ๋ง์ •์ด์ง€, ๋งˆ๊ฐ ์‹œ๊ฐ„ ๋‹ค ๋ผ์„œ ์ด๋žฌ์œผ๋ฉด ์ •๋ง ๋ฉ˜๋ถ•์ด์—ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

๋ญ”๋ฐ ๋ญ”๋ฐ ์›์ธ์ด ๋ญ”๋ฐ

 

์—ฌ๋Ÿฌ ์‹œ๋„๋ฅผ ํ•ด๋ณด๋‹ค๊ฐ€, ๋ฌธ๋“ ์งš์ด๋Š” ์›์ธ์ด ์ƒ๊ฐ๋‚ฌ๋‹ค. ๋ฐ”๋กœ '๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ํŒŒ์ผ๋ช…์„ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พผ ๊ฒƒ'์ด๋‹ค. ์ฒ˜์Œ์—” InputView ํด๋ž˜์Šค๋ฅผ ๊ตณ์ด ํด๋ž˜์Šคํ™” ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ด ํŒŒ์ผ๋ช… ๋˜ํ•œ InputView.js์—์„œ inputView.js๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค. ์ด๊ฒŒ ํ™”๊ทผ์ด์—ˆ๋‹ค.

 

์›์ธ์€ git์ด ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. (์ฐธ๊ณ : ํŒŒ์ผ๋ช… ๋Œ€์†Œ๋ฌธ์ž ์ธ์‹์— ๋Œ€ํ•œ ๊ณ ๋ฏผ) ๊ทธ๋ ‡๊ธฐ์— InputView๋ฅผ inputView๋กœ ๋ณ€๊ฒฝํ•ด๋„ ๋ฐ”๋€Œ์–ด ์ปค๋ฐ‹ & ํ‘ธ์‹œ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋”๋ถˆ์–ด, import ๋ฌธ์—์„œ๋Š” InputView๋ผ ์“ฐ์—ฌ์žˆ์–ด๋„ ํŒŒ์ผ๋ช…์€ inputView๋ผ ๊ธฐ์žฌ๋˜์—ˆ๊ธฐ์— ์˜ˆ์ œ ํ…Œ์ŠคํŠธ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ์ผ์–ด๋‚  ์—ฌ์ง€๊ฐ€ ์žˆ๋˜ ๊ฒƒ์ด๋‹ค. 

 

ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์ปค๋ฐ‹ ๋‚ด์—ญ

 

ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์œ„์™€ ๊ฐ™์ด inputView ํŒŒ์ผ์„ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์„œ ์ปค๋ฐ‹ํ–ˆ๋”๋‹ˆ ์ •๋ง ๋‹คํ–‰ํžˆ๋„ ํ†ต๊ณผ๊ฐ€ ๋˜์—ˆ๋‹ค. ์ด ์—๋Ÿฌ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ํ•„์š” ์—†๋Š” ์ปค๋ฐ‹์„ ๊ฝค ํ•ด์„œ ์•„์‰ฝ๋‹ค.. (๋ฌผ๋ก  squash merge๋ฅผ ํ•˜๋ฉด ๋˜์ง€๋งŒ ํ˜น์‹œ ๋ชฐ๋ผ ํ•˜์ง€ ์•Š์•˜๋‹ค)

๊ฒฐ๊ตญ ํ†ต๊ณผ!

 

 

๐Ÿงน ๋ฆฌํŒฉํ† ๋ง

1๏ธโƒฃ ์—๋Ÿฌ๋ฅผ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‚˜๋ˆ„๊ธฐ

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

 

export const getUserInputCarName = async () => {
  const input = await Console.readLineAsync(LOG_MESSAGE.INPUT_CAR_NAME); 
  if (!input) {
    throwError(ERROR_MESSAGE.EMPTY_INPUT); // ์ž…๋ ฅ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ
  }
  if (!isValidCarName(input)) {
    throwError(ERROR_MESSAGE.INVALID_CAR_NAME); // ์ค‘๋ณต ๋˜๋Š” 5์ž ์ดˆ๊ณผํ•œ ๊ฒฝ์šฐ
  }
  return input;
}

export const getUserInputTryCount = async () => {
  const input = await Console.readLineAsync(LOG_MESSAGE.INPUT_TRY_COUNT);
  if (!input) {
    throwError(ERROR_MESSAGE.EMPTY_INPUT); // ์ž…๋ ฅ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ
  }
  if (!isValidTryCount(input)) {
    throwError(ERROR_MESSAGE.INVALID_TRY_COUNT); // 1์ด์ƒ์˜ ์ •์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ
  }
  return input;
}

 

2๏ธโƒฃ distance → position

Car๋ผ๋Š” ์ž๋™์ฐจ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ์ด๋ฆ„๊ณผ ์ด๋™๊ฑฐ๋ฆฌ๋ผ๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ์–ด์•ผ ํ–ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜ ์ด๋ฆ„์„ 'distance'๋ผ๊ณ  ์ง€์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ์ƒ๊ฐํ•ด ๋ณด๋‹ˆ ์ด ๋ณ€์ˆ˜์˜ ์—ญํ• ์€ "์ž๋™์ฐจ๊ฐ€ ์–ด๋””๊นŒ์ง€ ๊ฐ”์–ด?"๋ผ๋Š” ๊ฒƒ์„ ๋ฌผ์–ด๋ณด๊ณ  ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€. ๊ทธ๋Ÿฌ๋‹ˆ Car๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” ๋ˆ„๊ตฐ๊ฐ€์˜ ์ž…์žฅ์„ ๊ณ ๋ คํ•ด์•ผ ํ–ˆ๋‹ค. 

 

distance๋Š” Car์ด ๋ณธ์ธ ์ž์‹ ์ด "์Œ ์ด๋™ ๊ฑฐ๋ฆฌ๊ฐ€ ์ด๋งŒํผ์ด๊ตฐ" ํ•˜๊ณ  ํ˜ผ์ž ์ƒ๊ฐํ•˜๋Š” ๋Š๋‚Œ์ด๊ณ , position์€ "๋‚˜์˜ ์œ„์น˜๋Š” ์—ฌ๊ธฐ์•ผ"๋ผ๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๋Š๋‚Œ์ด ๋“ค์–ด ๋” ์•Œ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

๋‹ค์‹œ ๋งํ•˜๋ฉด, Car ๋ผ๋Š” ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ์ •์˜ํ•จ์— ์žˆ์–ด ์†์„ฑ์€ position๊ณผ ๊ฐ™์€ field๊ฐ€ ๋˜๊ณ  ํ–‰์œ„๋Š” class์˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜๊ฐ€ ๋ ํ…๋ฐ, Car์˜ ์†์„ฑ์„ ํ‘œํ˜„ํ•˜๋Š” ๋ง๋กœ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 'position'์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

// Car.js
class Car {

  #name;
  
  #position = 0;

  // ... ์ƒ๋žต

  getPosition() {
    return this.#position;
  }

  // ... ์ƒ๋žต

 

 

3๏ธโƒฃ ํ•ฉ์น ์ง€ ๋ง์ง€ ๊ณ ๋ฏผ๋˜๋˜ ํ•จ์ˆ˜

์•„๋ž˜์™€ ๊ฐ™์ด ์ž๋™์ฐจ๊ฐ€ ๋žœ๋ค ์ƒ์„ฑ๊ธฐ๊ฐ€ ์ฃผ๋Š” ์ˆซ์ž์— ๋”ฐ๋ผ ์›€์ง์ด๊ฑฐ๋‚˜ ๋ฉˆ์ถ”๋Š” ํ•จ์ˆ˜, ๊ทธ๋ฆฌ๊ณ  ์ „์ง„ํ•˜๋Š” ์ž๋™์ฐจ์˜ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 

// ๋ฆฌํŒฉํ† ๋ง ์ „
moveCarForwardOrStop() {
  this.cars.forEach((car) => {
    const randomNumber = generateRandomNumber();
    if (randomNumber >= GAME_SETTING.MOVE_FORWARD_REQUIREMENT) {
      car.moveForward();
    }
  });
}

printForwardCarName() {
  this.cars.forEach((car) => {
    printCar(car.getName(), car.getPosition());
  });
  printMessage(GAME_SETTING.BLANK_SPACE);
}

 

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

 

// 1์ฐจ ๋ฆฌํŒฉํ† ๋ง
moveCarsAndPrintResults() {
  this.cars.forEach((car) => {
    if (generateRandomNumber(GAME_SETTING.MIN_RANDOM_NUMBER, GAME_SETTING.MAX_RANDOM_NUMBER) >= GAME_SETTING.MOVE_FORWARD_REQUIREMENT) {
      car.moveForward();
    }
    printCar(car.getName(), car.getPosition());
  });
  printMessage(GAME_SETTING.BLANK_SPACE);
}

 

ํ•˜์ง€๋งŒ ๋Œ€๋ฌธ์ž๋กœ ํ‘œํ˜„๋œ ์ƒ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๊ณ  ๊ธด ๋ฐ๋‹ค๊ฐ€, ์กฐ๊ฑด์‹์ด ๊ธธ์–ด์ ธ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์กŒ๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด 2์ฐจ ๋ฆฌํŒฉํ† ๋งํ–ˆ๋‹ค.

 

// 2์ฐจ ๋ฆฌํŒฉํ† ๋ง
moveCarsAndPrintResults() {
  this.cars.forEach((car) => {
    const randomValue = generateRandomNumber(GAME_SETTING.MIN_RANDOM_NUMBER, GAME_SETTING.MAX_RANDOM_NUMBER);

    if (randomValue >= GAME_SETTING.MOVE_FORWARD_REQUIREMENT) {
      car.moveForward();
      printCar(car.getName(), car.getPosition());
    }

  });
  printMessage(GAME_SETTING.BLANK_SPACE);
}

 

์œ„์™€ ๊ฐ™์ด ๋žœ๋ค ์ƒ์„ฑ๊ธฐ๋กœ๋ถ€ํ„ฐ ๋‚˜์˜ค๋Š” ๋žœ๋ค ๊ฐ’์„ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•˜๊ณ , ์ด ๋ณ€์ˆ˜๊ฐ€ ์กฐ๊ฑด์— ์ถฉ์กฑํ•˜๋ฉด ์ด๋™ํ•˜๊ณ  ์ถœ๋ ฅ๋˜๋„๋ก ํ–ˆ๋‹ค.

 

4๏ธโƒฃ ๊ณต๋ฐฑ์„ ์˜๋ฏธ ์žˆ๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ

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

 

 ๋Œ€ํ‘œ์ ์œผ๋กœ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด (1) ๊ธฐ๋‹ค๋ฆฐ ๊ฒƒ (2) ์„ธํŒ…ํ•˜๋Š” ๊ฒƒ (3) ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ. ์„ธ ๊ฐ€์ง€ ๋ชฉ์ ์— ๋”ฐ๋ผ ์ค„๋ฐ”๊ฟˆ์œผ๋กœ ๋ถ„๊ธฐํ–ˆ๋‹ค.

 

// ๋ฆฌํŒฉํ† ๋ง ์ „
async play() {
    await this.setCars();
    const tryCount = await this.handleTryCount();
    this.raceCar(tryCount);
    const winner = this.getWinner();
    printWinner(winner);
  }
  
// ๋ฆฌํŒฉํ† ๋ง ํ›„
  async play() {
    await this.setCars(); // ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ

    const tryCount = await this.handleTryCount(); // ์„ธํŒ…ํ•˜๋Š” ๊ฒƒ
    this.raceCar(tryCount);

    const winner = this.getWinner(); // ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ
    printWinner(winner);
  }

 

ํ™•์‹คํžˆ ์ˆ˜์ • ์ „๋ณด๋‹ค ๊ฐ ์—ญํ• ์ด ๋ถ„๋ฆฌ๋˜์–ด ๋ณด๊ธฐ ์ข‹๋‹ค.

 

์œ„์˜ ์ผ€์ด์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๊ทธ ์™ธ ๋‹ค๋ฅธ ์ฝ”๋“œ์—์„œ๋„ const ๋ผ์ธ๊ณผ ๋ฐ”๋กœ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ ์‚ฌ์ด์— ์˜๋ฏธ ์—†๋Š” ๊ณต๋ฐฑ์ด ์žˆ์ง€๋Š” ์•Š์€์ง€๋„ ์ฒดํฌํ–ˆ๋‹ค. ๋”๋ถˆ์–ด, if์™€ ์—ฌ๋Š” ๊ด„ํ˜ธ '(' ์‚ฌ์ด์˜ ๊ณต๋ฐฑ์ด ์žˆ๋Š”์ง€, single quote๋กœ ์ž˜ ๋˜์–ด ์žˆ๋Š”์ง€, ๋ถˆํ•„์š”ํ•œ ์ฃผ์„์ด ์žˆ์ง€ ์•Š์€์ง€ ๋“ฑ๋“ฑ ์ปจ๋ฒค์…˜์„ ๊ผผ๊ผผํ•˜๊ฒŒ ์ฒดํฌํ–ˆ๋‹ค.

 

์ปจ๋ฒค์…˜์€ ๋ชจ๋‘์˜ ์•ฝ์†์ด์ž ๊ทœ์น™์ด๋‹ˆ ์ง€์ผœ์•ผ ํ•˜๋Š” ๊ฒƒ์ด ๋งž์œผ๋‹ˆ๊นŒ!

 

 

โ˜•๏ธ 2์ฃผ ์ฐจ ์†Œ๊ฐ

1๏ธโƒฃ ๊ฐ™์€ ๋ฌธ์ œ, ๋‹ค๋ฅธ ํ•ด๊ฒฐ

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

 

2๏ธโƒฃ ๋ฆฌ๋ทฐ์—๋Š” WHY๋ฅผ

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

 

3๏ธโƒฃ ์ฝง๋…ธ๋ž˜

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

 

 

 

๋Œ“๊ธ€