๊ฐ์ธ์ ์ผ๋ก๋ ๋ฏธ์ ์ํ์ ํตํด ์ฑ์ฅํ ๊ณผ์ ์ ๊ธฐ๋กํ๊ณ ,
๋๊ตฐ๊ฐ์๊ฒ๋ ์ด ๊ธ์ด ๋์์ด ๋์์ผ๋ฉด ํ๋ ๋ง์์ ๋๋ค :)
๐ ๏ธ 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 ๋ฒ์ ์ ์ค์นํ ์ ์๋ค.
4๏ธโฃ (์ค์) ๋ฏธ์ ์ ์ถ ๋ฐฉ๋ฒ
์ด๋ฒ ๋ฏธ์ ๋ถํฐ๋ ์๋ก์ด ๋ฏธ์ ์ ์ถ ๋ฐฉ๋ฒ์ด ์ ์ฉ๋์๋ค. ๋น๊ณต๊ฐ ์ ์ฅ์๋ฅผ ์์ฑ ํ, ์ฐํ ์ฝ ๊ณ์ ์ collaborator๋ก ์ด๋ํ๊ณ , ์ง์ ํ๋ซํผ์ PR ์ฃผ์๊ฐ ์๋ ๋น๊ณต๊ฐ ๋ ํฌ ์ฃผ์๋ฅผ ์ฒจ๋ถํ๋ ๊ฒ์ด๋ค. ์ง๋ ๋ฏธ์ ๋ค์ ๋ชจ๋ ์ง๋ ๊ธฐ์๋ค์์๋ ์งํ๋๋ ๋ฏธ์ ์ธ ๋ฐ๋ค๊ฐ ๋ฏธ์ ์งํ ๊ณผ์ ๋ํ ๋๊ตฌ์๊ฒ๋ ๊ณต๊ฐ๊ฐ ๋์ด ์์ด ๋ง์๋ง ๋จน์ผ๋ฉด ์ฝ๋๋ฅผ ๋ฒ ๊ปด์๋ผ๋ ์ ์ถํ ์ ์์์ง๋ง, ์ด๋ฒ ๋ฏธ์ ์ ์ฒ ์ ํ ๋น๊ณต๊ฐ๋ก ์งํ๋์ด ์ง์ง ๋ณธ์ธ์ ์ค๋ ฅ์ ๋ณด๊ณ ์ ํ๋ ๊ฒ ๊ฐ์๋ค.
๐ ๊ธฐ๋ฅ ์๊ตฌ ์ฌํญ
1๏ธโฃ ํฌ๋ฆฌ์ค๋ง์ค ํ๋ก๋ชจ์ ๋ฏธ์ ์ค๋ช
๋ฏธ์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฐํ ์ฝ ํ๋ฆฌ์ฝ์ค ๋ ํฌ์ ์์ผ๋ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋ผ๋ฉฐ, ๊ฐ๋จํ ๋ฏธ์ ์ค๋ช ์ ํ์๋ฉด ๊ณ ๊ฐ๋ค์ด ์๋น์ ๋ฐฉ๋ฌธํ ๋ ์ง์ ๋ฉ๋ด๋ฅผ ๋ฏธ๋ฆฌ ์ ํํ๋ฉด ์ ๋ณด๊ฐ ๋ด๊ธด ์ด๋ฒคํธ ํ๋๋๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ๋ก๋ชจ์ ์ ๊ฐ๋ฐํ๋ ๊ฒ์ด๋ค.
4์ฃผ ์ฐจ ๋ฏธ์ ์ ๋ฐ๊ธฐ ์ , ์ฝ์ํ(์ฝ์น์ ์๋ค ํ์)์์ ์ฝ์น๋์ด ์ด๋ฒ ๋ฏธ์ ์ 3์ฃผ ์ฐจ๋ณด๋ค ํจ์ฌ ์ด๋ ค์ธ ๊ฒ์ด๋ผ๊ณ ํ์ จ๋๋ฐ, ๋ฉ์ผ์ ๋ฐ์๋ณด๋ ์ ๋ง '๋จ์ '์ด์๋ค. ์๊ตฌ์ฌํญ์ด ๊ฝค ๋ง์๋ค. ๊ทธ๋๋ ๊ทธ๋๋ง ๋์๋ ๊ฒ(?)์ ํน์ดํ๊ฒ ์ด๋ฉ์ผ ํ์์ผ๋ก ์๊ตฌ์ฌํญ์ ์ค๋ช ํด ์น์ ํ๊ฒ ๋๊ปด์ก๋ค๋ ๊ฒ. ์๋์ ๊ฐ์ ํ์์ผ๋ก ๋ง์ด๋ค.
๊ทผ๋ฐ ์ด์ฐ๋ณด๋ฉด ๋ฑ๋ฑํ(?) ์๊ตฌ์ฌํญ๋ณด๋ค ์ด๋ ๊ฒ ๋ฉ์ผ๋ก ๋ฐ์ผ๋๊น ์ง์ง ์ฐ์ํํ์ ๋ค ๊ฐ๋ฐํ์ ๊ฐ๋ฐ์๋ก ์ผํ๋ ๋๋์ด ๋ค์ด ์ข์๋ค. ๊ทธ๋์ ๋ด์น๊น์ README๋ ์ด๋ฉ์ผ ํ์์ผ๋ก ์จ๋ณด์๋ค. 2์ฃผ ์ฐจ ๊ณตํต ํผ๋๋ฐฑ์์ "ํด๋น ํ๋ก์ ํธ๊ฐ ์ด๋ค ํ๋ก์ ํธ์ธ์ง, ์ด๋ค ๊ธฐ๋ฅ์ ๋ด๊ณ ์๋์ง" ๊ธฐ์ ํ๋ผ๋ ๋ง์ด ๋ ์ค๋ฅด๊ธฐ๋ ํ๊ธฐ ๋๋ฌธ.
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 ๋ฏธ๋ง์ธ ๊ฒฝ์ฐ์๋ ์ผ๋จ ์ฃผ๋ฌธ์ ๊ฐ๋ฅํ๊ฒ ํ๊ณ ์ด๋ฒคํธ๋ง ์ ์ฉ๋์ง ์๊ฒ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด ์ด๋ฒคํธ ํ๋๋ ํ๋จ์ ์๋ด ๋ฉ์์ง๋ฅผ ๋ง๋ถ์๋ค. '์ ์ด๋ฒคํธ ์ ์ฉ์ด ์ ๋์ง?'๋ผ๋ ์ฌ์ฉ์์ ๊ถ๊ธ์ฆ์ ํ์ด์ฃผ๊ณ ์ถ์๋ค.
๋ฐ๋ฉด์ ์๋ฃ๋ง ์ฃผ๋ฌธํ๊ฑฐ๋ ๋ฉ๋ด๊ฐ 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์ ๋๋ฌด ๋ง์ ์ฑ ์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ๊น? + ํด๋์ค ๋ค์ด๋ฐ ๊ณ ๋ฏผ)
์ด์ ๋ก๋ ๋ฏธ์ ์์๋ ์๋น์ค ๋ ์ด์ด๋ฅผ 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๋ฅผ ์ฌ์ฉํ๋ ๋์ ๊ฐ์ฒด์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด์)
์๋ฅผ ๋ค์ด, ์ฒ์์ 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๋ฅผ ๋จ๋ฐํ์ง ์๊ฒ ๋์๋ค. ํ๋ ์๊ฐ ๋ง์ผ๋ฉด ๊ฐ์ฒด์ ๋ณต์ก๋๋ฅผ ๋์ด๊ณ ๋ฒ๊ทธ ๋ฐ์์ ๊ฐ๋ฅ์ฑ์ ๋์ธ๋ค๋ ๋ง์ ์ค๊ฐํ๋ค. ๋ฆฌํฉํ ๋ง์ ํ๊ณ ๋๋ ํ ์ธ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๊ธฐ๊ฐ ํจ์ฌ ํธํด์ ์ค์ค๋ก ์ฝ๋ฉํ๊ธฐ์๋ ๋ ์ด์ง๋ฌ์ ๋ค.
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);
});
});
ํ ์คํธ ์ฝ๋๋ ํ๋์ง๋ง, ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ์ด ์ธ ๊ฐ๋ก ์ ๋์จ๋ค. ํ ์คํธ ๊ฒฐ๊ณผ ํ๋ฉด์ ํน์ ๊ธ์ก์ด ํ์๋์ง ์์์ ์์ฝ์ง๋ง..
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์ฃผ ์ฐจ๋ถํฐ๋ ์ง์ค์ด ๋์ง ์์ ๋๋ ๋์ค์ฝ๋ ๋ชจ๊ฐ์ฝ ๋ฐฉ์์ ์ง์์๋ค๊ณผ ํจ๊ป ์ด๊ฒจ๋ด๊ณ , ์ต์ํ์ ์๋ฉด ์๊ฐ์ ํ๋ณดํด ๋ค์๋ ์ปจ๋์ ์ ๋ฌด๋ฆฌ๊ฐ ์๋๋ก ํ๋ค. ์ํ ํจํด์ ๋จ์จ์ ๋ฐ๊พธ๋ ๊ฒ์ ์ด๋ ค์ด ์ผ์ด๋ผ ์๊ฐํ์ง๋ง ์ ์คํ ๋ง์ ๋๋ถ์ด์๋์ง ๋ฌด๋ฆฌ ์์ด ์ ์์ ๊นฐ ์ ์์๋ค. ์ด์ฒ๋ผ ์ค์ค๋ก๊ฐ ‘์ ํด๋ผ ์ ์๋ ํ๊ฒฝ’์ ๋ง๋ค๋ฉฐ ์ฑ์ฅํ๋ ๊ฐ๋ฐ์๊ฐ ๋๊ณ ์ ํ๋ค.
๋๊ธ