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

[์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค] ์šฐํ…Œ์ฝ” ํ”„๋ฆฌ์ฝ”์Šค 6๊ธฐ 4์ฃผ์ฐจ ํฌ๋ฆฌ์Šค๋งˆ์Šค ํ”„๋กœ๋ชจ์…˜ ๋ฏธ์…˜ ํšŒ๊ณ 

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

 

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

4์ฃผ ์ฐจ ๋ฏธ์…˜ : ํฌ๋ฆฌ์Šค๋งˆ์Šค ํ”„๋กœ๋ชจ์…˜ PR

ํ”„๋กœ๋ชจ์…˜ ์‹คํ–‰ ํ™”๋ฉด๊ณผ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ํ™”๋ฉด

 

 

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

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

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

 

2๏ธโƒฃ ํด๋ž˜์Šค(๊ฐ์ฒด) ๋ถ„๋ฆฌํ•˜๋Š” ์—ฐ์Šต

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

 

 

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

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

1. ํ•จ์ˆ˜(๋ฉ”์„œ๋“œ) ๋ผ์ธ์— ๋Œ€ํ•œ ๊ธฐ์ค€
2. ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•œ๋‹ค
3. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI ๋กœ์ง์„ ๋ถ„๋ฆฌํ•œ๋‹ค
4. ๊ฐ์ฒด์˜ ์ƒํƒœ ์ ‘๊ทผ์„ ์ œํ•œํ•œ๋‹ค
5. ๊ฐ์ฒด๋Š” ๊ฐ์ฒด์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค
6. ํ•„๋“œ์˜ ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•œ๋‹ค
7. ์„ฑ๊ณตํ•˜๋Š” ์ผ€์ด์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ผ€์ด์Šค๋„ ํ…Œ์ŠคํŠธํ•œ๋‹ค
8. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ์ฝ”๋“œ๋‹ค
9. ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ๋Š” ๊ตฌํ˜„ ์ฝ”๋“œ์—์„œ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค
10. ๋‹จ์œ„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ค์šด ์ฝ”๋“œ๋ฅผ ๋‹จ์œ„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ

 

 

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

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

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

 

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

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

 

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

 

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

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

 

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

 

4๏ธโƒฃ (์ค‘์š”) ๋ฏธ์…˜ ์ œ์ถœ ๋ฐฉ๋ฒ•

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

 

 

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

1๏ธโƒฃ ํฌ๋ฆฌ์Šค๋งˆ์Šค ํ”„๋กœ๋ชจ์…˜ ๋ฏธ์…˜ ์„ค๋ช…

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

 

4์ฃผ ์ฐจ ๋ฏธ์…˜์„ ๋ฐ›๊ธฐ ์ „, ์ฝ”์ˆ˜ํƒ€(์ฝ”์น˜์™€ ์ˆ˜๋‹ค ํƒ€์ž„)์—์„œ ์ฝ”์น˜๋‹˜์ด ์ด๋ฒˆ ๋ฏธ์…˜์€ 3์ฃผ ์ฐจ๋ณด๋‹ค ํ›จ์”ฌ ์–ด๋ ค์šธ ๊ฒƒ์ด๋ผ๊ณ  ํ•˜์…จ๋Š”๋ฐ, ๋ฉ”์ผ์„ ๋ฐ›์•„๋ณด๋‹ˆ ์ •๋ง '๋œจ์•…'์ด์—ˆ๋‹ค. ์š”๊ตฌ์‚ฌํ•ญ์ด ๊ฝค ๋งŽ์•˜๋‹ค. ๊ทธ๋ž˜๋„ ๊ทธ๋‚˜๋งˆ ๋‚˜์•˜๋˜ ๊ฒƒ(?)์€ ํŠน์ดํ•˜๊ฒŒ ์ด๋ฉ”์ผ ํ˜•์‹์œผ๋กœ ์š”๊ตฌ์‚ฌํ•ญ์„ ์„ค๋ช…ํ•ด ์นœ์ ˆํ•˜๊ฒŒ ๋Š๊ปด์กŒ๋‹ค๋Š” ๊ฒƒ. ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋ง์ด๋‹ค.

 

๋ฏธ์…˜ ์š”๊ตฌ์‚ฌํ•ญ ์„ค๋ช… ์ธํŠธ๋กœ

 

๊ทผ๋ฐ ์–ด์ฐŒ๋ณด๋ฉด ๋”ฑ๋”ฑํ•œ(?) ์š”๊ตฌ์‚ฌํ•ญ๋ณด๋‹ค ์ด๋ ‡๊ฒŒ ๋ฉ”์ผ๋กœ ๋ฐ›์œผ๋‹ˆ๊นŒ ์ง„์งœ ์šฐ์•„ํ•œํ˜•์ œ๋“ค ๊ฐœ๋ฐœํŒ€์˜ ๊ฐœ๋ฐœ์ž๋กœ ์ผํ•˜๋Š” ๋Š๋‚Œ์ด ๋“ค์–ด ์ข‹์•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด์นœ๊น€์— README๋„ ์ด๋ฉ”์ผ ํ˜•์‹์œผ๋กœ ์จ๋ณด์•˜๋‹ค. 2์ฃผ ์ฐจ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ์—์„œ "ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๊ฐ€ ์–ด๋–ค ํ”„๋กœ์ ํŠธ์ธ์ง€, ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๋‹ด๊ณ  ์žˆ๋Š”์ง€" ๊ธฐ์ˆ ํ•˜๋ผ๋Š” ๋ง์ด ๋– ์˜ค๋ฅด๊ธฐ๋„ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ.

 

2์ฃผ ์ฐจ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ ์ผ๋ถ€

 

์ž‘์„ฑํ•œ README ์ผ๋ถ€

 

2๏ธโƒฃ ์ด๋ฒคํŠธ ํ”Œ๋ž˜๋„ˆ ์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ

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

 

์•ˆ๋…•ํ•˜์„ธ์š”! ์šฐํ…Œ์ฝ” ์‹๋‹น 12์›” ์ด๋ฒคํŠธ ํ”Œ๋ž˜๋„ˆ์ž…๋‹ˆ๋‹ค.
12์›” ์ค‘ ์‹๋‹น ์˜ˆ์ƒ ๋ฐฉ๋ฌธ ๋‚ ์งœ๋Š” ์–ธ์ œ์ธ๊ฐ€์š”? (์ˆซ์ž๋งŒ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”!)
3
์ฃผ๋ฌธํ•˜์‹ค ๋ฉ”๋‰ด๋ฅผ ๋ฉ”๋‰ด์™€ ๊ฐœ์ˆ˜๋ฅผ ์•Œ๋ ค ์ฃผ์„ธ์š”. (e.g. ํ•ด์‚ฐ๋ฌผํŒŒ์Šคํƒ€-2,๋ ˆ๋“œ์™€์ธ-1,์ดˆ์ฝ”์ผ€์ดํฌ-1)
ํ‹ฐ๋ณธ์Šคํ…Œ์ดํฌ-1,๋ฐ”๋น„ํ๋ฆฝ-1,์ดˆ์ฝ”์ผ€์ดํฌ-2,์ œ๋กœ์ฝœ๋ผ-1
12์›” 3์ผ์— ์šฐํ…Œ์ฝ” ์‹๋‹น์—์„œ ๋ฐ›์„ ์ด๋ฒคํŠธ ํ˜œํƒ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ!
 
<์ฃผ๋ฌธ ๋ฉ”๋‰ด>
ํ‹ฐ๋ณธ์Šคํ…Œ์ดํฌ 1๊ฐœ
๋ฐ”๋น„ํ๋ฆฝ 1๊ฐœ
์ดˆ์ฝ”์ผ€์ดํฌ 2๊ฐœ
์ œ๋กœ์ฝœ๋ผ 1๊ฐœ
 
<ํ• ์ธ ์ „ ์ด์ฃผ๋ฌธ ๊ธˆ์•ก>
142,000์›
 
<์ฆ์ • ๋ฉ”๋‰ด>
์ƒดํŽ˜์ธ 1๊ฐœ
 
<ํ˜œํƒ ๋‚ด์—ญ>
ํฌ๋ฆฌ์Šค๋งˆ์Šค ๋””๋ฐ์ด ํ• ์ธ: -1,200์›
ํ‰์ผ ํ• ์ธ: -4,046์›
ํŠน๋ณ„ ํ• ์ธ: -1,000์›
์ฆ์ • ์ด๋ฒคํŠธ: -25,000์›
 
<์ดํ˜œํƒ ๊ธˆ์•ก>
-31,246์›
 
<ํ• ์ธ ํ›„ ์˜ˆ์ƒ ๊ฒฐ์ œ ๊ธˆ์•ก>
135,754์›
 
<12์›” ์ด๋ฒคํŠธ ๋ฐฐ์ง€>
์‚ฐํƒ€

 

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

 

์•„๋ž˜๋Š” ํ•„์ž๊ฐ€ ํ•ด์„ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๊ตฌํ˜„ํ•œ ๋ฐฉ์‹์„ ์จ๋ณด๊ฒ ๋‹ค.

 

3๏ธโƒฃ ํฌ๋ฆฌ์Šค๋งˆ์Šค ํ”„๋กœ๋ชจ์…˜ ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ

โœ… ์ด๋ฒคํŠธ ๋ชฉํ‘œ
1. ์ค‘๋ณต๋œ ํ• ์ธ๊ณผ ์ฆ์ •์„ ํ—ˆ์šฉํ•ด์„œ, ๊ณ ๊ฐ๋“ค์ด ํ˜œํƒ์„ ๋งŽ์ด ๋ฐ›๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ
2. ์˜ฌํ•ด 12์›”์— ์ง€๋‚œ 5๋…„ ์ค‘ ์ตœ๊ณ ์˜ ํŒ๋งค ๊ธˆ์•ก์„ ๋‹ฌ์„ฑ
3. 12์›” ์ด๋ฒคํŠธ ์ฐธ์—ฌ ๊ณ ๊ฐ์˜ 5%๊ฐ€ ๋‚ด๋…„ 1์›” ์ƒˆํ•ด ์ด๋ฒคํŠธ์— ์žฌ์ฐธ์—ฌํ•˜๋Š” ๊ฒƒ

 

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

 

โœ… 12์›” ์ด๋ฒคํŠธ ๊ณ„ํš
- ํฌ๋ฆฌ์Šค๋งˆ์Šค ๋””๋ฐ์ด ํ• ์ธ
 - ์ด๋ฒคํŠธ ๊ธฐ๊ฐ„: 2023.12.1 ~ 2023.12.25
 - 1,000์›์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ํฌ๋ฆฌ์Šค๋งˆ์Šค๊ฐ€ ๋‹ค๊ฐ€์˜ฌ์ˆ˜๋ก ๋‚ ๋งˆ๋‹ค ํ• ์ธ ๊ธˆ์•ก์ด 100์›์”ฉ ์ฆ๊ฐ€
 - ์ด์ฃผ๋ฌธ ๊ธˆ์•ก์—์„œ ํ•ด๋‹น ๊ธˆ์•ก๋งŒํผ ํ• ์ธ (e.g. ์‹œ์ž‘์ผ์ธ 12์›” 1์ผ์— 1,000์›, 2์ผ์— 1,100์›, ..., 25์ผ์—” 3,400์› ํ• ์ธ)
- ํ‰์ผ ํ• ์ธ(์ผ์š”์ผ~๋ชฉ์š”์ผ): ํ‰์ผ์—๋Š” ๋””์ €ํŠธ ๋ฉ”๋‰ด๋ฅผ ๋ฉ”๋‰ด 1๊ฐœ๋‹น 2,023์› ํ• ์ธ
- ์ฃผ๋ง ํ• ์ธ(๊ธˆ์š”์ผ, ํ† ์š”์ผ): ์ฃผ๋ง์—๋Š” ๋ฉ”์ธ ๋ฉ”๋‰ด๋ฅผ ๋ฉ”๋‰ด 1๊ฐœ๋‹น 2,023์› ํ• ์ธ
- ํŠน๋ณ„ ํ• ์ธ: ์ด๋ฒคํŠธ ๋‹ฌ๋ ฅ์— ๋ณ„์ด ์žˆ์œผ๋ฉด ์ด์ฃผ๋ฌธ ๊ธˆ์•ก์—์„œ 1,000์› ํ• ์ธ
- ์ฆ์ • ์ด๋ฒคํŠธ: ํ• ์ธ ์ „ ์ด์ฃผ๋ฌธ ๊ธˆ์•ก์ด 12๋งŒ ์› ์ด์ƒ์ผ ๋•Œ, ์ƒดํŽ˜์ธ 1๊ฐœ ์ฆ์ •
- ์ด๋ฒคํŠธ ๊ธฐ๊ฐ„: 'ํฌ๋ฆฌ์Šค๋งˆ์Šค ๋””๋ฐ์ด ํ• ์ธ'์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ๋Š” 2023.12.1 ~ 2023.12.31 ๋™์•ˆ ์ ์šฉ

 

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

 

โœ… ํ˜œํƒ ๊ธˆ์•ก์— ๋”ฐ๋ฅธ 12์›” ์ด๋ฒคํŠธ ๋ฐฐ์ง€ ๋ถ€์—ฌ
- ์ดํ˜œํƒ ๊ธˆ์•ก์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ ๋ฐฐ์ง€๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
- ์ด ๋ฐฐ์ง€๋Š” 2024 ์ƒˆํ•ด ์ด๋ฒคํŠธ์—์„œ ํ™œ์šฉํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
- ๋ฐฐ์ง€์— ๋”ฐ๋ผ ์ƒˆํ•ด ์ด๋ฒคํŠธ ์ฐธ์—ฌ ์‹œ, ๊ฐ๊ฐ ๋‹ค๋ฅธ ์ƒˆํ•ด ์„ ๋ฌผ์„ ์ฆ์ •ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
 - 5์ฒœ ์› ์ด์ƒ: ๋ณ„
 - 1๋งŒ ์› ์ด์ƒ: ํŠธ๋ฆฌ
 - 2๋งŒ ์› ์ด์ƒ: ์‚ฐํƒ€

 

โ†ช๏ธ ์œ„์—์„œ ์ ์šฉ๋œ ์ด๋ฒคํŠธ ํ˜œํƒ ๊ธˆ์•ก์— ๋”ฐ๋ผ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ฐฐ์ง€๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค. ์ด๋•Œ ์ด ํ˜œํƒ ๊ธˆ์•ก์ด 5์ฒœ ์› ์ดํ•˜์ด๊ฑฐ๋‚˜ ์•„์˜ˆ ์—†์„ ๊ฒฝ์šฐ์—๋Š” '์—†์Œ'์ด๋ผ๊ณ  ํ‘œ๊ธฐํ•œ๋‹ค.

 

โœ… ๊ณ ๊ฐ์—๊ฒŒ ์•ˆ๋‚ดํ•  ์ด๋ฒคํŠธ ์ฃผ์˜ ์‚ฌํ•ญ
 - ์ด์ฃผ๋ฌธ ๊ธˆ์•ก 10,000์› ์ด์ƒ๋ถ€ํ„ฐ ์ด๋ฒคํŠธ๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
 - ์Œ๋ฃŒ๋งŒ ์ฃผ๋ฌธ ์‹œ, ์ฃผ๋ฌธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
 - ๋ฉ”๋‰ด๋Š” ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ 20๊ฐœ๊นŒ์ง€๋งŒ ์ฃผ๋ฌธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (e.g. ์‹œ์ €์ƒ๋Ÿฌ๋“œ-1, ํ‹ฐ๋ณธ์Šคํ…Œ์ดํฌ-1, ํฌ๋ฆฌ์Šค๋งˆ์ŠคํŒŒ์Šคํƒ€-1, ์ œ๋กœ์ฝœ๋ผ-3, ์•„์ด์Šคํฌ๋ฆผ-1์˜ ์ด๊ฐœ์ˆ˜๋Š” 7๊ฐœ)

 

โ†ช๏ธ ์œ„ ์š”๊ตฌ์‚ฌํ•ญ์—์„œ ๋ˆˆ์—ฌ๊ฒจ๋ณด์•„์•ผ ํ•  ์ง€์ ์€ '๊ณ ๊ฐ์—๊ฒŒ ์•ˆ๋‚ดํ• ' ์ด๋ฒคํŠธ ์ฃผ์˜์‚ฌํ•ญ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ๋Œ€๋†“๊ณ  ์š”๊ตฌ์‚ฌํ•ญ์ด๋ผ ์“ฐ์—ฌ์žˆ์ง€ ์•Š์ง€๋งŒ ์–ด์จŒ๋“  ํ•ด๋‹น ์ƒํ™ฉ์ผ ๋•Œ ๊ณ ๊ฐ์—๊ฒŒ ์•Œ๋ ค์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

ํ•„์ž๋Š” ์ด ์ฃผ๋ฌธ ๊ธˆ์•ก์ด 10,000 ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ์—๋Š” ์ผ๋‹จ ์ฃผ๋ฌธ์€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ  ์ด๋ฒคํŠธ๋งŒ ์ ์šฉ๋˜์ง€ ์•Š๊ฒŒ ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ์ด๋ฒคํŠธ ํ”Œ๋ž˜๋„ˆ ํ•˜๋‹จ์— ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ง๋ถ™์˜€๋‹ค. '์™œ ์ด๋ฒคํŠธ ์ ์šฉ์ด ์•ˆ ๋์ง€?'๋ผ๋Š” ์‚ฌ์šฉ์ž์˜ ๊ถ๊ธˆ์ฆ์„ ํ’€์–ด์ฃผ๊ณ  ์‹ถ์—ˆ๋‹ค.

 

์ด์ฃผ๋ฌธ๊ธˆ์•ก 10,000์› ๋ฏธ๋งŒ์ผ ๊ฒฝ์šฐ๋Š” ์•ˆ๋‚ด

 

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

 

์Œ๋ฃŒ๋งŒ ์ฃผ๋ฌธํ•  ๊ฒฝ์šฐ, 20๊ฐœ ์ด์ƒ ์ฃผ๋ฌธํ•  ๊ฒฝ์šฐ๋Š” ์—๋Ÿฌ

 

โœ… '12์›” ์ด๋ฒคํŠธ ํ”Œ๋ž˜๋„ˆ' ๊ฐœ๋ฐœ ์š”์ฒญ ์‚ฌํ•ญ
- ๊ณ ๊ฐ๋“ค์ด ์‹๋‹น์— ๋ฐฉ๋ฌธํ•  ๋‚ ์งœ์™€ ๋ฉ”๋‰ด๋ฅผ ๋ฏธ๋ฆฌ ์„ ํƒํ•˜๋ฉด ์ด๋ฒคํŠธ ํ”Œ๋ž˜๋„ˆ๊ฐ€ ์ฃผ๋ฌธ ๋ฉ”๋‰ด, ํ• ์ธ ์ „ ์ด์ฃผ๋ฌธ ๊ธˆ์•ก, ์ฆ์ • ๋ฉ”๋‰ด, ํ˜œํƒ ๋‚ด์—ญ, ์ดํ˜œํƒ ๊ธˆ์•ก, ํ• ์ธ ํ›„ ์˜ˆ์ƒ ๊ฒฐ์ œ ๊ธˆ์•ก, 12์›” ์ด๋ฒคํŠธ ๋ฐฐ์ง€ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ฃผ๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.
- 12์›” ์ค‘ ์‹๋‹น ์˜ˆ์ƒ ๋ฐฉ๋ฌธ ๋‚ ์งœ๋Š” ์–ธ์ œ์ธ๊ฐ€์š”? (์ˆซ์ž๋งŒ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”!)
 - ๋ฐฉ๋ฌธํ•  ๋‚ ์งœ๋Š” 1 ์ด์ƒ 31 ์ดํ•˜์˜ ์ˆซ์ž๋กœ๋งŒ ์ž…๋ ฅ๋ฐ›์•„ ์ฃผ์„ธ์š”.
 - 1 ์ด์ƒ 31 ์ดํ•˜์˜ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ, "[ERROR] ์œ ํšจํ•˜์ง€ ์•Š์€ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."๋ผ๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ ์ฃผ์„ธ์š”.
 - ๋ชจ๋“  ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋Š” "[ERROR]"๋กœ ์‹œ์ž‘ํ•˜๋„๋ก ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”.
- ์ฃผ๋ฌธํ•˜์‹ค ๋ฉ”๋‰ด์™€ ๊ฐœ์ˆ˜๋ฅผ ์•Œ๋ ค ์ฃผ์„ธ์š”. (e.g. ํ•ด์‚ฐ๋ฌผํŒŒ์Šคํƒ€-2,๋ ˆ๋“œ์™€์ธ-1,์ดˆ์ฝ”์ผ€์ดํฌ-1)
 - ๊ณ ๊ฐ์ด ๋ฉ”๋‰ดํŒ์— ์—†๋Š” ๋ฉ”๋‰ด๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ, "[ERROR] ์œ ํšจํ•˜์ง€ ์•Š์€ ์ฃผ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."๋ผ๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ ์ฃผ์„ธ์š”.
 - ๋ฉ”๋‰ด์˜ ๊ฐœ์ˆ˜๋Š” 1 ์ด์ƒ์˜ ์ˆซ์ž๋งŒ ์ž…๋ ฅ๋˜๋„๋ก ํ•ด์ฃผ์„ธ์š”. ์ด์™ธ์˜ ์ž…๋ ฅ๊ฐ’์€ "[ERROR] ์œ ํšจํ•˜์ง€ ์•Š์€ ์ฃผ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."๋ผ๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ ์ฃผ์„ธ์š”.
 - ๋ฉ”๋‰ด ํ˜•์‹์ด ์˜ˆ์‹œ์™€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ, "[ERROR] ์œ ํšจํ•˜์ง€ ์•Š์€ ์ฃผ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."๋ผ๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ ์ฃผ์„ธ์š”.
 - ์ค‘๋ณต ๋ฉ”๋‰ด๋ฅผ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ(e.g. ์‹œ์ €์ƒ๋Ÿฌ๋“œ-1,์‹œ์ €์ƒ๋Ÿฌ๋“œ-1), "[ERROR] ์œ ํšจํ•˜์ง€ ์•Š์€ ์ฃผ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."๋ผ๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ ์ฃผ์„ธ์š”.
 - ๋ชจ๋“  ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋Š” "[ERROR]"๋กœ ์‹œ์ž‘ํ•˜๋„๋ก ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”.
- ์ฃผ๋ฌธ ๋ฉ”๋‰ด์˜ ์ถœ๋ ฅ ์ˆœ์„œ๋Š” ์ž์œ ๋กญ๊ฒŒ ์ถœ๋ ฅํ•ด ์ฃผ์„ธ์š”.
- ์ดํ˜œํƒ ๊ธˆ์•ก์— ๋”ฐ๋ผ ์ด๋ฒคํŠธ ๋ฐฐ์ง€์˜ ์ด๋ฆ„์„ ๋‹ค๋ฅด๊ฒŒ ๋ณด์—ฌ ์ฃผ์„ธ์š”.
- ์ดํ˜œํƒ ๊ธˆ์•ก = ํ• ์ธ ๊ธˆ์•ก์˜ ํ•ฉ๊ณ„ + ์ฆ์ • ๋ฉ”๋‰ด์˜ ๊ฐ€๊ฒฉ
- ํ• ์ธ ํ›„ ์˜ˆ์ƒ ๊ฒฐ์ œ ๊ธˆ์•ก = ํ• ์ธ ์ „ ์ด์ฃผ๋ฌธ ๊ธˆ์•ก - ํ• ์ธ ๊ธˆ์•ก
- ์ฆ์ • ๋ฉ”๋‰ด
 - ์ฆ์ • ์ด๋ฒคํŠธ์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ์ฆ์ • ๋ฉ”๋‰ด "์—†์Œ"์œผ๋กœ ๋ณด์—ฌ ์ฃผ์„ธ์š”.
- ํ˜œํƒ ๋‚ด์—ญ
 - ๊ณ ๊ฐ์—๊ฒŒ ์ ์šฉ๋œ ์ด๋ฒคํŠธ ๋‚ด์—ญ๋งŒ ๋ณด์—ฌ ์ฃผ์„ธ์š”.
 - ์ ์šฉ๋œ ์ด๋ฒคํŠธ๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋‹ค๋ฉด ํ˜œํƒ ๋‚ด์—ญ "์—†์Œ"์œผ๋กœ ๋ณด์—ฌ ์ฃผ์„ธ์š”.
 - ํ˜œํƒ ๋‚ด์—ญ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ด๋ฒคํŠธ๊ฐ€ ์ ์šฉ๋œ ๊ฒฝ์šฐ, ์ถœ๋ ฅ ์ˆœ์„œ๋Š” ์ž์œ ๋กญ๊ฒŒ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”.
- ์ด๋ฒคํŠธ ๋ฐฐ์ง€
 - ์ด๋ฒคํŠธ ๋ฐฐ์ง€๊ฐ€ ๋ถ€์—ฌ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, "์—†์Œ"์œผ๋กœ ๋ณด์—ฌ ์ฃผ์„ธ์š”.

 

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

 

 

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

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

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

 

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

๐Ÿ‘‰ App.js์˜ play() ๋ฉ”์„œ๋“œ๋กœ ์‹œ์ž‘ํ–ˆ๋˜ ์ง€๋‚œ ๋ฏธ์…˜๋“ค๊ณผ๋Š” ๋‹ฌ๋ฆฌ, ์ด๋ฒˆ ๋ฏธ์…˜์€ ๊ฒŒ์ž„์ด ์•„๋‹ˆ๋ฏ€๋กœ run()์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค. ๋งค ๋ฏธ์…˜๋งˆ๋‹ค ์‹คํ–‰ ํ™˜๊ฒฝ์ด๋‚˜ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์™„์ „ํžˆ ๋˜‘๊ฐ™์ง€ ์•Š์„ ํ…Œ๋‹ˆ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋ผ๋„ ๋‹ค์‹œ ์ฝ์–ด๋ณด๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ๋‹ค.

 

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

๐Ÿ‘‰ 1์ฃผ ์ฐจ ๊ณตํ†ต ํ”ผ๋“œ๋ฐฑ์— ๋‚˜์™€ ์žˆ๋“ฏ์ด ์ด์ œ๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ESLint์™€ Prettier๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ณ€๊ฒฝ๋œ package.json ๋‚ด์—ญ์€ ๊ตณ์ด push ํ•˜์ง€ ์•Š์•˜๋‹ค. (ํ˜น์€ ์ „์—ญ ์„ค์ •์„ ํ•ด๋„ ์ข‹๋‹ค.)

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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


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

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

 

โœ… ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)์˜ ๊ธธ์ด๊ฐ€ 15๋ผ์ธ์„ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•˜๋ฉฐ, ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)๊ฐ€ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ์ž˜ํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค.

๐Ÿ‘‰ ์ด ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ์–ด์„œ ๋” ์˜์‹์ ์œผ๋กœ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™๋‹ค. ๋”๋ถˆ์–ด, ์ด๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ESLint ์ƒ์—์„œ ์„ค์ •ํ•˜๋ฉด ์ข‹๋‹ค.

// .eslintrc.cjs
'max-lines-per-function': ['error', { max: 15 }],


โœ… else๋ฅผ ์ง€์–‘ํ•œ๋‹ค. 

๐Ÿ‘‰ if ์กฐ๊ฑด์ ˆ์—์„œ return ํ•˜๋ฉด ๊ตณ์ด else๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๋‹ค๋งŒ, ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์ง€์–‘ํ•œ๋‹ค๊ธฐ๋ณด๋‹ค ๋•Œ๋กœ๋Š” if/else์™€ switch๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๊น”๋”ํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์–ด์„œ ์ด๋Š” ๊ณ ๋ฏผํ•ด ๋ณด๋ผ๊ณ  ํ•œ๋‹ค.

 

โœ… ๋„๋ฉ”์ธ ๋กœ์ง์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ, UI(Console.readLineAsync, Console.print) ๋กœ์ง์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ์ œ์™ธํ•œ๋‹ค.

๐Ÿ‘‰ ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฑด ํ•ต์‹ฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ์™€ UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋กœ์ง์„ ๊ตฌ๋ถ„ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฒˆ ๋ฏธ์…˜์—์„œ๋Š” ์ง€๋‚œ 2,3 ์ฃผ ์ฐจ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์˜ˆ์‹œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์ฃผ์–ด์ง€์ง€ ์•Š์•˜๋‹ค.

 

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

๐Ÿ‘‰ ์ง€๋‚œ ๋ฏธ์…˜๊ณผ ๊ฐ™์ด ์˜ˆ์™ธ ์ƒํ™ฉ์—์„œ๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ํ›„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ข…๋ฃŒ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น ๋ถ€๋ถ„๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž…๋ ฅ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

 

 

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

โœ… ์ œ๊ณต๋˜๋Š” InputView, OutputView ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•œ๋‹ค.

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

 

 

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

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

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

๐Ÿ‘‰ ์ง€๋‚œ ๋ฏธ์…˜๋“ค๊ณผ ๋‹ค๋ฅธ ์ ์€ ์ด๋ฒˆ ๋ฏธ์…˜์—์„œ๋Š” Random API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

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

1๏ธโƒฃ 4์ฃผ ์ฐจ ๊ณ„ํšํ•˜๊ธฐ

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

 

๋…ธ์…˜์— ๊ณ„ํšํ•˜๊ธฐ

 

์‚ฌ์‹ค ๋ฏธ์…˜์ด ๋๋‚œ ์ง€๊ธˆ ๋Œ์•„๋ณด๋ฉด ๊ณ„ํš์˜ 1/3 ์ด์ƒ์€ ์ง€์ผœ์ง€์ง€ ์•Š์•˜์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋ˆˆ์— ๋ณด์ด๊ฒŒ ์ •ํ•ด๋‘๋‹ˆ ๋ญ”๊ฐ€ ๋งˆ์Œ์ด ํŽธ์•ˆํ•ด์ง€๋Š” ๋Š๋‚Œ์ด์—ˆ๋‹ค. ๋ญ”๊ฐ€ ์ง€์น˜๋ ค๊ณ  ํ•  ๋•Œ ์ด ๊ณ„ํš์„ ๋ณด๋ฉด ์–ด์„œ ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ๋™๊ธฐ๋ถ€์—ฌ๊ฐ€ ๋˜๊ธฐ๋„ ํ–ˆ๋‹ค.

 

2๏ธโƒฃ ์„ค๊ณ„์— ์‹œ๊ฐ„๋“ค์ด๊ธฐ

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

 

์ฒดํฌ๋ฆฌ์ŠคํŠธ์— ๋”ฐ๋ผ ๋„๋ฉ”์ธ๋ถ€ํ„ฐ ์„ค๊ณ„

 

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

 

์•„๋ž˜์™€ ๊ฐ™์ด ์ ์–ด ๋‚ด๋ ค๊ฐ€๋‹ˆ ๋ฐฉ๋Œ€ํ•˜๊ฒŒ๋งŒ ๋Š๊ปด์กŒ๋˜ ํ•ต์‹ฌ๋กœ์ง์ด ์กฐ๊ฐ์กฐ๊ฐ์œผ๋กœ ๋ถ™์—ฌ์ง€๋ฉฐ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ํŽธํ•ด์กŒ๋‹ค. 

 

โœ… menu: ๋ฉ”๋‰ด ๋‹จ์ผ๋กœ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ
 - ํ•˜๋‚˜์˜ ๋ฉ”๋‰ด๊ฐ€ ์œ ํšจํ•œ๊ฐ€?
 - ๋ฉ”๋‰ด๊ฐ€ ๋ฉ”๋‰ดํŒ์— ์žˆ๋Š”๊ฐ€?
 - ๊ฐœ์ˆ˜๊ฐ€ ์–‘์˜ ์ •์ˆ˜์ธ๊ฐ€?

โœ… order: ๋ฉ”๋‰ด๋“ค์„ ๋ชจ์•„๋†“๊ณ  ๋ดค์„ ๋•Œ ์•„๋Š” ๊ฒƒ
 - ์ค‘๋ณต์œผ๋กœ ์ž…๋ ฅํ–ˆ๋Š”๊ฐ€?
 - ์Œ๋ฃŒ๋งŒ ์ฃผ๋ฌธํ–ˆ๋Š”๊ฐ€?
 - 20๊ฐœ๋ฅผ ์ดˆ๊ณผํ–ˆ๋Š”๊ฐ€?

 

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

 

3๏ธโƒฃ ์„œ๋น„์Šค ๋ ˆ์ด์–ด์˜ ํด๋ž˜์Šค ๋„ค์ด๋ฐ

์ง€๋‚œ ๋ฏธ์…˜๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ด๋ฒˆ์—๋„ MVC ํŒจํ„ด์— Layered Architecture์„ ์ ์šฉํ–ˆ๊ธฐ์— ์ปจํŠธ๋กค๋Ÿฌ์˜ ์—ญํ•  ๋ถ€๋‹ด์„ ๋œ๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค ๋ ˆ์ด์–ด๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. (์ƒ์„ธ ๊ณผ์ •์€ ์•„๋ž˜์—์„œ ์ถ”๊ฐ€ ์„ค๋ช… ์˜ˆ์ •)

 

์ด ์„œ๋น„์Šค ๋ ˆ์ด์–ด ์ด๋ฆ„์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ์–ด๋–ค ์˜์ƒ์„ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ์„œ๋น„์Šค ๋ ˆ์ด์–ด์˜ ๋„ค์ด๋ฐ์—๋Š” ___Service๋กœ ์ง“๋Š” ๊ฒƒ๋ณด๋‹ค ๋‹ค๋ฅธ ๋„ค์ด๋ฐ์„ ์ถ”์ฒœํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด์œ ๋Š” ์„œ๋น„์Šค ๋ ˆ์ด์–ด๊ฐ€ ์ง„์งœ ์œ ์ € ์„œ๋น„์Šค์ผ ํ™•๋ฅ ์ด ์•„์ฃผ ๋‚ฎ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (์ฐธ๊ณ : Service์— ๋„ˆ๋ฌด ๋งŽ์€ ์ฑ…์ž„ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ• ๊นŒ? + ํด๋ž˜์Šค ๋„ค์ด๋ฐ ๊ณ ๋ฏผ)

 

3์ฃผ์ฐจ์™€ 4์ฃผ์ฐจ ์„œ๋น„์Šค ๋ ˆ์ด์–ด ๋„ค์ด๋ฐ ๋ณ€ํ™”

 

์ด์ „ ๋กœ๋˜ ๋ฏธ์…˜์—์„œ๋Š” ์„œ๋น„์Šค ๋ ˆ์ด์–ด๋ฅผ LottoService๋กœ ์ง“๊ณ , ๋ญ”๊ฐ€ '์„œ๋น„์Šค'๋ผ๋Š” ๋ฐฉ๋Œ€ํ•œ ๊ฐœ๋…์„ ๋‹จ์ˆœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ์ง€์–ด๋ฒ„๋ฆฌ๋Š” ๊ฒŒ ๋งž์„๊นŒ ๋ผ๋Š” ๊ณ ๋ฏผ์ด ์žˆ์—ˆ๋‹ค. ์ด์— 4์ฃผ ์ฐจ์—๋Š” ์„œ๋น„์Šค ๋ ˆ์ด์–ด ํŒŒ์ผ๋ช…์„ 'EventProcessor'๋ผ๊ณ  ์ง€์—ˆ๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š”, ์ฆ‰ ํ”„๋กœ๊ทธ๋žจ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋Š๋‚Œ์„ ์ฃผ๊ณ  ์‹ถ์—ˆ๋‹ค.

 

4๏ธโƒฃ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด์žฅํ•จ์ˆ˜์˜ ์„ธ๊ณ„

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด์žฅํ•จ์ˆ˜์˜ ์„ธ๊ณ„๋Š” ํŒŒ๋ฉด ํŒ”์ˆ˜๋ก ๋‹ค์–‘ํ•˜๋‹ค. ์–ด๋–จ ๋•Œ๋Š” '์ด๋Ÿฐ ๊ฒƒ๊นŒ์ง€ ์žˆ๋‹ค๊ณ ?' ์‹ถ๋‹ค. ํŠนํžˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์ด๋Ÿฐ ์ƒ๊ฐ์„ ๋งŽ์ด ํ•˜๋Š”๋ฐ, ์ด๋ฒˆ ํ”„๋ฆฌ์ฝ”์Šค๋ฅผ ํ†ตํ•ด์„œ๋„ ๋‹ค์–‘ํ•œ ๋‚ด์žฅํ•จ์ˆ˜๋ฅผ ์จ๋ณด์•˜๋‹ค.

 

๊ทธ์ค‘ ์ด๋ฒˆ ๋ฏธ์…˜์—์„œ๋Š” replace()๋ผ๋Š” ๋‚ด์žฅํ•จ์ˆ˜๋ฅผ ์ผ๋Š”๋ฐ, ์ด ๋ฉ”์„œ๋“œ๋Š” ๋ฌธ์ž์—ด ๋‚ด์˜ ํŠน์ • ๋ถ€๋ถ„์„ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด๋กœ ๋Œ€์ฒดํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉ๋œ๋‹ค. (์ฐธ๊ณ : MDN) ๋‘ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋ฐ ํ•˜๋‚˜๋Š” ๋Œ€์ฒด๋  ๋Œ€์ƒ, ๋˜ ํ•˜๋‚˜๋Š” ๋Œ€์ฒดํ•  ๋Œ€์ƒ์ด๋‹ค. ํ•„์ž๋Š” ์ด๋ฒˆ ๋ฏธ์…˜์—์„œ replace()๋ฅผ ์•„๋ž˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ OutputView ํด๋ž˜์Šค์— ์‚ฌ์šฉํ–ˆ๋‹ค.

 

import { EVENT, OUTPUT, SPECIAL_CHARACTERS } from '../common/constants.js';
import { printMessage } from '../common/utils.js';

class OutputView {
  
  static printPreview(date) {
    printMessage(OUTPUT.preview.replace('$date', date));
  }

  static printOrder(menuList) {
    const formattedMenuList = menuList.map(menu => `${menu.getName()} ${menu.getCount()}${EVENT.count}`).join('\n');
    printMessage(OUTPUT.order_menu.replace('$menuList', formattedMenuList));
  }

  // ... ์ƒ๋žต

export default OutputView;

 

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •๊ทœ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•ด ํŠน์ • ๋‹จ์–ด๋ฅผ ๋ชจ๋‘ ๋‹ค๋ฅธ ๋‹จ์–ด๋กœ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ๋‹ค.

 

const text = "Apples are round, and apples are juicy.";
text = text.replace(/apples/gi, "oranges");
// "Oranges are round, and oranges are juicy.

 

 

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

1๏ธโƒฃ ํ•„๋“œ ์ˆ˜ ์ค„์ด๊ธฐ

์ง€๋‚œ 3์ฃผ ์ฐจ ํ”ผ๋“œ๋ฐฑ์—์„œ "ํ•„๋“œ ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๋ผ"๋ผ๋Š” ๋‚ด์šฉ์ด ์žˆ์—ˆ๋˜ ๋งŒํผ, ์ด๋ฒˆ ๋ฏธ์…˜์—์„œ ํ•„๋“œ ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ ์ž ๋…ธ๋ ฅํ–ˆ๋‹ค. ๋”๋ถˆ์–ด, ํ”ผ๋“œ๋ฐฑ์— ์ฒจ๋ถ€๋œ ์•„ํ‹ฐํด์„ ์ฐธ๊ณ ํ•ด getter๋ฅผ ๋‚จ๋ฐœํ•˜์ง€ ์•Š๊ณ  ๊ผญ ํ•„์š”ํ•œ ๊ณณ์— ์“ฐ๊ณ ์ž ํ–ˆ๋‹ค. (์ฐธ๊ณ : getter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ๊ฐ์ฒด์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด์ž)

 

3์ฃผ ์ฐจ ํ”ผ๋“œ๋ฐฑ ์ค‘ ์ผ๋ถ€

 

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

 

๊ทธ๋ž˜์„œ ๊ฐ๊ฐ์˜ ํ• ์ธ์„ ํ•˜๋‚˜์˜ ํ•„๋“œ๋กœ ๋ฌถ๋Š” ๊ฒŒ ์–ด๋–จ๊นŒ ์ƒ๊ฐํ–ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ ํ• ์ธ ์œ ํ˜•์— ๋Œ€ํ•œ ๊ฐ’์„ ์†์„ฑ์œผ๋กœ ๊ฐ€์ง€๋Š” '#discounts'๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด, ๋ชจ๋“  ํ• ์ธ ์œ ํ˜•์„ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์—์„œ ๊ด€๋ฆฌํ–ˆ๋‹ค.

 

  constructor(date, orderDetails) {
    this.#date = date; 
    this.#orderDetails = orderDetails;
    this.#discounts = {
      special: 0,
      weekend: 0,
      weekday: 0,
      christmas: 0,
    };
  }

 

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

 

Discount.js ๋ฆฌํŒฉํ† ๋ง ์ „/ํ›„

 

2๏ธโƒฃ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง

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

 

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

 

// ๋ฆฌํŒฉํ† ๋ง ์ „

import Badge from '../../src/model/Badge.js';
import { OUTPUT } from '../../src/common/constants.js';

describe('Badge', () => {

  test('5000์› ์ด์ƒ์—์„œ ๋ณ„ ๋ฐฐ์ง€ ๋ถ€์—ฌ', () => {
    const badgeInstance = new Badge(5000);
    expect(badgeInstance.assignBadge()).toBe('๋ณ„');
  });

  test('10000์› ์ด์ƒ์—์„œ ํŠธ๋ฆฌ ๋ฐฐ์ง€ ๋ถ€์—ฌ', () => {
    const badgeInstance = new Badge(10000);
    expect(badgeInstance.assignBadge()).toBe('ํŠธ๋ฆฌ');
  });

  test('20000์› ์ด์ƒ์—์„œ ์‚ฐํƒ€ ๋ฐฐ์ง€ ๋ถ€์—ฌ', () => {
    const badgeInstance = new Badge(20000);
    expect(badgeInstance.assignBadge()).toBe('์‚ฐํƒ€');
  });

  test('5000์› ๋ฏธ๋งŒ์ด๋ฉด ๋ฐฐ์ง€ ์—†์Œ', () => {
    const badgeInstance = new Badge(4999);
    expect(badgeInstance.assignBadge()).toBe(OUTPUT.none);
  });
});

 

์•„๋ž˜์™€ ๊ฐ™์ด 'test.each' ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ '์ผ๋ฐ˜ํ™”'ํ–ˆ๋‹ค. BADGES ๋ฐฐ์—ด์€ ํ…Œ์ŠคํŠธํ•  ๋ฐ์ดํ„ฐ(๋ฐฐ์ง€ ์ด๋ฆ„๊ณผ ๊ธˆ์•ก ๊ตฌ๊ฐ„)๋ฅผ ํฌํ•จํ•˜๊ณ , ์ด ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ค. ๋•๋ถ„์— ์„ธ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

// ๋ฆฌํŒฉํ† ๋ง ํ›„

import Badge from '../../src/model/Badge.js';
import { BADGES, OUTPUT } from '../../src/common/constants.js';

describe('Badge ํ…Œ์ŠคํŠธ', () => {
  test.each(BADGES)('์ดํ˜œํƒ ๊ธˆ์•ก ์ตœ์†Œ %d์› ์ด์ƒ์ด๋ฉด %s ๋ฐฐ์ง€ ๋ถ€์—ฌ', ({ badge, amount }) => {
    const badgeInstance = new Badge(amount);
    expect(badgeInstance.assignBadge()).toBe(badge);
  });

  test('์ดํ˜œํƒ ๊ธˆ์•ก 5000์› ๋ฏธ๋งŒ์ด๋ฉด ๋ฐฐ์ง€ ์—†์Œ', () => {
    const badgeInstance = new Badge(4999);
    expect(badgeInstance.assignBadge()).toBe(OUTPUT.none);
  });
});

 

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ํ•˜๋‚˜์ง€๋งŒ, ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„ธ ๊ฐœ๋กœ ์ž˜ ๋‚˜์˜จ๋‹ค. ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ํ™”๋ฉด์— ํŠน์ • ๊ธˆ์•ก์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์•„์„œ ์•„์‰ฝ์ง€๋งŒ..

 

Badge ํด๋ž˜์Šค ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ํ™”๋ฉด

 

3๏ธโƒฃ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ถ€๋‹ด ๋œ๊ธฐ

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

 

class EventPlanner {
  
  /**
   * ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
   * @returns {Promise<void>} - ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” Promise
   */
  async manageEvent() {
    const eventProcessor = await this.#initEventProcessor(); // ์‚ฌ์šฉ์ž input ๋ฐ›๊ณ  ์ค€๋น„
  
    if (eventProcessor) {
      // EventPlanner๊ฐ€ ์ง์ ‘ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ , ๊ณ„์‚ฐ (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)์€ service layer์˜ EventProcessor์— ์œ„์ž„
      // ๊ทธ ๊ฒฐ๊ณผ ๊ฐ’๋งŒ ์‚ฌ์šฉ
      const eventProcessingResult = eventProcessor.process(); 

      // ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
      this.#printResult(eventProcessingResult); 
    } 
  }
  // ... ์ƒ๋žต
}

 

์œ„์™€ ๊ฐ™์ด ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์ธ EventPlanner ํด๋ž˜์Šค ์ƒ๋‹จ์— manageEvent ํ•จ์ˆ˜๋ฅผ ๋‘์–ด ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›์œผ๋ฉด, ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ง์ ‘ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  ์„œ๋น„์Šค ๋ ˆ์ด์–ด์ธ EventProcessor์— ์œ„์ž„ํ•˜๋„๋ก ํ–ˆ๋‹ค. ์„œ๋น„์Šค ๋ ˆ์ด์–ด๊ฐ€ ์—ฐ์‚ฐ์„ ์™„๋ฃŒํ•˜๋ฉด, ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๊ทธ ๊ฐ’๋งŒ ์‚ฌ์šฉํ•ด ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

์œ„์™€ ๊ฐ™์ด ์ปจํŠธ๋กค๋Ÿฌ ์ƒ๋‹จ์— ์—ญํ• ์„ ์ •์˜ํ•˜๋‹ˆ ๊ฐ€๋…์„ฑ๋„ ์ข‹์•„์ง€๊ณ , ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ถ€๋‹ด๋„ ๋œ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

4๏ธโƒฃ JSDoc ์‚ฌ์šฉํ•ด ๋ณด๊ธฐ

JSDoc์ด๋ž€, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ๋“ค์— ์ฃผ์„์„ ๋‹ฌ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋งˆํฌ์—… ์–ธ์–ด๋‹ค. JSDoc์„ ํฌํ•จํ•˜๋Š” ์ฃผ์„์—๋Š” ์ž‘์„ฑํ•œ ์ฝ”๋“œ์˜ API๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์„ค๋ช… ๋ฌธ์„œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. (์ฐธ๊ณ : ์œ„ํ‚ค๋ฐฑ๊ณผ) JSDoc์— ๋Œ€ํ•ด์„œ๋Š” ์ด๋ฒˆ ํ”„๋ฆฌ์ฝ”์Šค๋ฅผ ํ•˜๋ฉด์„œ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

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

 

์ด๋ฒˆ ๋ฏธ์…˜์—์„œ ํ•ต์‹ฌ ํŒŒ์ผ์ด๋ผ๊ณ ๋„ ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค ๋ ˆ์ด์–ด (EventProcessor), ์ปจํŠธ๋กค๋Ÿฌ (EventPlanner)์— ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ–ˆ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ํ•˜๋Š”์ง€, ์–ด๋–ค ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ํƒ€์ž…์˜ ์–ด๋–ค ๊ฐ’์ด ๋ฆฌํ„ด๋˜๋Š”์ง€ ์„ค๋ช…ํ–ˆ๋‹ค.

 

  /**
   * ์ด ํ• ์ธ๋˜์ง€ ์•Š์€ ๊ธˆ์•ก๊ณผ ํ˜œํƒ ๋Œ€์ƒ ์—ฌ๋ถ€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๊ฐ€๊ฒฉ ๊ณ„์‚ฐ
   * @param {number} totalAmountBeforeDiscount - ํ• ์ธ๋˜์ง€ ์•Š์€ ์ด ๊ธˆ์•ก
   * @param {boolean} isEligibleForBenefit - ํ˜œํƒ ๋Œ€์ƒ ์ž๊ฒฉ ์—ฌ๋ถ€
   * @returns {Object} - ๊ฐ€๊ฒฉ ์ •๋ณด
   */
  #calculatePricing(totalAmountBeforeDiscount, isEligibleForBenefit) {
    const pricing = {
      totalAmountBeforeDiscount,
      totalBenefit: EVENT.zero,
      finalPayAmount: totalAmountBeforeDiscount,
    };
  
    if (isEligibleForBenefit) {
      pricing.totalBenefit = this.#calculateTotalBenefit();
      pricing.finalPayAmount = this.#calculateTotalPayAfterDiscount();
    }
  
    return pricing;
  }

 

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

 

ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด

 

์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›๊ฑฐ๋‚˜, ํ˜‘์—…์„ ํ•  ๋•Œ๋Š” ์•ž์œผ๋กœ JSDoc์„ ์‚ฌ์šฉํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๋ฌผ๋ก  ์ž‘์—…ํ•˜๋Š” ๋‚˜์—๊ฒŒ๋„ ๋„์›€์ด ๋˜๊ธฐ๋„ ํ•˜๋‹ˆ๊นŒ.

 

 

๐Ÿค” 4์ฃผ ์ฐจ ์•„์‰ฌ์šด ์ 

1๏ธโƒฃ ํ™•์žฅ์„ฑ์„ ๋” ๊ณ ๋ คํ• ๊ฑธ

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

 

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

 

2๏ธโƒฃ ์ง„์ž‘ ์ผ์ฐ ์ž˜๊ฑธ

4์ฃผ ์ฐจ์˜ ์•„์‰ฌ์›€์ด๋ผ๊ธฐ๋ณด๋‹ค, ์ง€๋‚œ 3์ฃผ๊ฐ„์˜ ์ปจ๋””์…˜ ์กฐ์ ˆ์„ ์ž˜ ๋ชปํ–ˆ๋˜ ๊ฒƒ์ด ์•„์‰ฝ๋‹ค. 3์ฃผ ๋™์•ˆ์€ ์ƒˆ๋ฒฝ 4-5์‹œ์ฏค ๋Šฆ๊ฒŒ ์ž๊ฑฐ๋‚˜ ๋ฐค์„ ์ƒˆ๊ณ , ๋‹ค์Œ๋‚  ์ ์‹ฌ๋•Œ๊ฐ€ ๋‹ค ๋˜์–ด์„œ์•ผ ์ผ์–ด๋‚ฌ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๋˜๋‹ˆ ์ž ์„ ์ž๋„ ์ž” ๊ฒƒ ๊ฐ™์ง€ ์•Š๊ณ , ์˜คํ›„ ๋‚ด๋‚ด ์ง‘์ค‘๋ ฅ์ด ํํŠธ๋Ÿฌ์กŒ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค ๋Šฆ๊ฒŒ ์ผ์–ด๋‚˜๋‹ˆ '๊ธฐ์ƒ์˜ ๋ฟŒ๋“ฏํ•จ'์ด ์—†์—ˆ๋‹ค.

 

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

 

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

 

 

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

1๏ธโƒฃ  4์ฃผ ์ฐจ ๋ฏธ์…˜์„ ๋ฐ›๊ณ 

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

 

2๏ธโƒฃ  4์ฃผ ์ฐจ ๋ฏธ์…˜ ์ˆ˜ํ–‰ ๊ณผ์ •

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

 

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

 

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

 

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

 

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

 

3๏ธโƒฃ ์ž˜ ํ•ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ

์ง€๋‚œ 3์ฃผ ์ฐจ ๋ฏธ์…˜ ์ดํ›„, ๋ฉ˜ํƒˆ ๊ด€๋ฆฌ๋ฅผ ์ž˜ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ํฌ๊ฒŒ ๋“ค์—ˆ๋‹ค. ๋ฏธ์…˜์„ ํ•˜๋˜ ๋‹น์‹œ์—๋Š” ํ•˜๋ฃจํ•˜๋ฃจ ํ’€๋ฆฌ์ง€ ์•Š๋Š” ๋ฌธ์ œ์— ํž˜์ด ๋“ค์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๋ฏธ์…˜์ด ๋‚˜๋ฅผ ํž˜๋“ค๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋‚˜๋ฅผ ๋‘˜๋Ÿฌ์‹ผ ๊ฒƒ๋“ค์ด ํž˜๋“ค๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

 

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

 

 

 

๋Œ“๊ธ€