์ ์ ๋ ์ฃผ๋ชฉ์ ๋ฐ๊ณ ์๋ ์ ์ ๋ถ์์ ๊ดํ ์๋ง์ ์๋ฃ๋ฅผ ๋ณด๊ณ ์ด ๊ธ์ ์ฐ๊ฒ ๋์์ต๋๋ค. ์ฒซ์งธ๋ก, ์ด
์ด๋ฌํ ๋ฆฌ๋ทฐ๋ฅผ ์ฝ์ผ๋ฉด ๋ง๋ฒ์ ๋น์ฝ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์๋ค๋ ๋๋์ ๋ฐ๊ฒ ๋ฉ๋๋ค. ๋ฒํผ์ ๋๋ฅด๋ฉด ์ฌ๊ธฐ์ ๊ฒฐํจ ๋ชฉ๋ก์ด ๋์์ ๋ํ๋ฉ๋๋ค. ๋ถ์๊ธฐ๊ฐ ํฅ์๋จ์ ๋ฐ๋ผ ์๋์ผ๋ก ๋ ๋ง์ ๋ฒ๊ทธ๊ฐ ๋ฐ๊ฒฌ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ, ์ด๋ฌํ ๋ก๋ด์ด ์ค์บํ๋ ์ ํ์ ์ฐ๋ฆฌ ์ธก์ ๋ ธ๋ ฅ ์์ด๋ ์ ์ ๋ ์ข์์ง ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋ง๋ฒ์ ๋น์ฝ์ ์์ต๋๋ค. ์ ๋ "์ฌ๊ธฐ์ ์ฐ๋ฆฌ ๋ก๋ด์ด ์ฐพ์ ์ ์๋ ๊ฒ๋ค์ด ์์ต๋๋ค"์ ๊ฐ์ ๊ฒ์๋ฌผ์์ ์ผ๋ฐ์ ์ผ๋ก ์ด์ผ๊ธฐ๋์ง ์๋ ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์ถ์ต๋๋ค. ์ฆ, ๋ถ์๊ธฐ๊ฐ ํ ์ ์๋ ๊ฒ์ด ๋ฌด์์ธ์ง, ์ํํธ์จ์ด ์ ๊ณต ํ๋ก์ธ์ค์์ ๋ถ์๊ธฐ๊ฐ ์ค์ ์ญํ ๊ณผ ์์น๋ ๋ฌด์์ธ์ง, ์ด๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? .
๋์นซ(์ถ์ฒ:
์ ์ ๋ถ์๊ธฐ๊ฐ ์ ๋ ํ ์ ์๋ ์ผ
์ค์ฉ์ ์ธ ๊ด์ ์์ ์์ค ์ฝ๋ ๋ถ์์ด๋ ๋ฌด์์ ๋๊น? ์ฐ๋ฆฌ๋ ์ผ๋ถ ์์ค ์ฝ๋๋ฅผ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ์ผ๋ก ์ ๊ณตํ๋ฉฐ ์งง์ ์๊ฐ(ํ ์คํธ๋ฅผ ์คํํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์งง์)์ ์์คํ ์ ๋ํ ์ผ๋ถ ์ ๋ณด๋ฅผ ์ป์ต๋๋ค. ๊ทผ๋ณธ์ ์ด๊ณ ์ํ์ ์ผ๋ก ๊ทน๋ณตํ ์ ์๋ ํ๊ณ๋ ์ฐ๋ฆฌ๊ฐ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์๋นํ ์ข์ ์ข ๋ฅ์ ์ ๋ณด๋ง์ ์ป์ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ ์ ๋ถ์์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์ ๊ฐ์ฅ ์ ๋ช
ํ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์ ์ ์ ๋ถ์๊ธฐ์ ๊ธฐ๋ฅ์๋ ๊ทน๋ณตํ ์ ์๋ ํ๊ณ๊ฐ ์์ต๋๋ค. ์ ์ ๋ถ์๊ธฐ๋ ์๋ฅผ ๋ค์ด null ๊ฐ์ ํ์ฉํ๋ ์ธ์ด์์ "๋ ํฌ์ธํฐ ์์ธ"์ ๋ฐ์์ด๋ ๋ชจ๋ ๊ฒฝ์ฐ์ " ๋์ ์ ํ ์ธ์ด์์๋ ์์ฑ์ ์ฐพ์ ์ ์์ต๋๋ค." ๊ฐ์ฅ ๋ฐ์ ๋ ์ ์ ๋ถ์๊ธฐ๊ฐ ํ ์ ์๋ ์ผ์ ํน์ํ ์ฌ๋ก๋ฅผ ๊ฐ์กฐํ๋ ๊ฒ๋ฟ์ ๋๋ค. ์์ค ์ฝ๋์์ ๋ฐ์ํ ์ ์๋ ๋ชจ๋ ๋ฌธ์ ์ค์์ ๊ทธ ์๋ ๊ณผ์ฅ ์์ด ๊ทน์์์ ๋ถ๊ณผํฉ๋๋ค.
์ ์ ๋ถ์์ ๋ฒ๊ทธ๋ฅผ ์ฐพ๋ ๊ฒ์ด ์๋๋๋ค
์์์ ๊ฒฐ๋ก ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ ์ ๋ถ์์ ํ๋ก๊ทธ๋จ์ ๊ฒฐํจ ์๋ฅผ ์ค์ด๋ ์๋จ์ด ์๋๋๋ค. ๋๋ ๊ฐํ ๋งํ๊ณ ์ถ์ต๋๋ค: ํ๋ก์ ํธ์ ์ฒ์์ผ๋ก ์ ์ฉํ๋ฉด ์ฝ๋์์ "ํฅ๋ฏธ๋ก์ด" ์์น๋ฅผ ์ฐพ์ ์ ์์ง๋ง ๋๋ถ๋ถ ํ๋ก๊ทธ๋จ ํ์ง์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒฐํจ์ ์ฐพ์ง ๋ชปํ ๊ฒ์ ๋๋ค.
๋ถ์๊ธฐ๊ฐ ์๋์ผ๋ก ๋ฐ๊ฒฌํ ๊ฒฐํจ์ ์๋ ์ธ์์ ์ด์ง๋ง ์ด๋ฌํ ์๋ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค ์ธํธ๋ฅผ ์ค์บํ์ฌ ๋ฐ๊ฒฌ๋์๋ค๋ ์ฌ์ค์ ์์ง ๋ง์์ผ ํฉ๋๋ค. ๋์ผํ ์์น์ ๋ฐ๋ผ ๋ค์์ ๊ณ์ ์ ๋ํด ์ฌ๋ฌ ๊ฐ์ง ๊ฐ๋จํ ๋น๋ฐ๋ฒํธ๋ฅผ ์๋ํ ๊ธฐํ๊ฐ ์๋ ํด์ปค๋ ๊ฒฐ๊ตญ ๊ฐ๋จํ ๋น๋ฐ๋ฒํธ๊ฐ ์๋ ๊ณ์ ์ ์ฐพ์๋ ๋๋ค.
์ด๋ ์ ์ ๋ถ์์ ์ฌ์ฉํ๋ฉด ์ ๋๋ค๋ ๋ป์ธ๊ฐ์? ๋น์ฐํ ์๋์ง! ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ์ ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ธํ์ฌ ํด๋น ๋น๋ฐ๋ฒํธ๊ฐ "๊ฐ๋จํ" ๋น๋ฐ๋ฒํธ ์ค์ง ๋ชฉ๋ก์ ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ ๊ฒ๊ณผ ๋๊ฐ์ ์ด์ ์ ๋๋ค.
์ ์ ๋ถ์์ ๋ฒ๊ทธ๋ฅผ ์ฐพ๋ ๊ฒ ์ด์์ ๋๋ค.
์ค์ ๋ก ๋ถ์์ ํตํด ์ค์ง์ ์ผ๋ก ํด๊ฒฐ๋๋ ๋ฌธ์ ๋ ํจ์ฌ ๋ ๊ด๋ฒ์ํฉ๋๋ค. ๊ฒฐ๊ตญ, ์ผ๋ฐ์ ์ผ๋ก ์ ์ ๋ถ์์ ์์ค ์ฝ๋๊ฐ ์ถ์๋๊ธฐ ์ ์ ์ํ๋๋ ๋ชจ๋ ๊ฒ์ฆ์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- ๊ฐ์ฅ ๋์ ์๋ฏธ์์ ์ฝ๋ฉ ์คํ์ผ์ ํ์ธํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์์ ํ์ธ, ๋น/์ถ๊ฐ ๊ดํธ ์ฌ์ฉ ์ฐพ๊ธฐ, ์ค ์/๋ฉ์๋์ ์ํ์ ๋ณต์ก์ฑ๊ณผ ๊ฐ์ ์ธก์ ํญ๋ชฉ์ ๋ํ ์๊ณ๊ฐ ์ค์ ๋ฑ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง ๊ด๋ฆฌ์ฑ์ ์ ์ฌ์ ์ผ๋ก ๋ฐฉํดํ๋ ๋ชจ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค. Java์์ ์ด๋ฌํ ๋๊ตฌ๋ Python์ Checkstyle - flake8์ ๋๋ค. ์ด ํด๋์ค์ ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ์ ์ผ๋ก "๋ฆฐํฐ"๋ผ๊ณ ํฉ๋๋ค.
- ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ง ๋ถ์ํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. JSON, YAML, XML, .properties์ ๊ฐ์ ๋ฆฌ์์ค ํ์ผ์ ์๋์ผ๋ก ์ ํจ์ฑ์ ๊ฒ์ฌํ ์ ์์ต๋๋ค. ๊ฒฐ๊ตญ, ํ
์คํธ ์คํ์ด๋ ์คํ ์๊ฐ๋ณด๋ค ์๋ Pull Request ๊ฒ์ฆ์ ์ด๊ธฐ ๋จ๊ณ์์ ํ์ด๋ง๋์ง ์์ ์ผ๋ถ ์ธ์ฉ๋ฌธ์ผ๋ก ์ธํด JSON ๊ตฌ์กฐ๊ฐ ์์๋์์์ ์์๋ด๋ ๊ฒ์ด ๋ ๋ซ์ต๋๊น? ์ ์ ํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
YAML๋ฆฐํธ ,JSONLint . - ์ปดํ์ผ(๋๋ ๋์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ตฌ๋ฌธ ๋ถ์)๋ ์ ์ ๋ถ์์ ํ ์ ํ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ปดํ์ผ๋ฌ๋ ์์ค ์ฝ๋ ํ์ง ๋ฌธ์ ๋ฅผ ๋ํ๋ด๋ ๊ฒฝ๊ณ ๋ฅผ ์์ฑํ ์ ์์ผ๋ฏ๋ก ๋ฌด์ํด์๋ ์ ๋ฉ๋๋ค.
- ๋๋๋ก ์ปดํ์ผ์ ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ๊ฒ ์ด์์
๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ ํ์์ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ
Ascii์์ฌ , HTML/PDF๋ก ๋ณํํ๋ ์๊ฐ AsciiDoctor ํธ๋ค๋ฌ(Maven ํ๋ฌ๊ทธ์ธ )๋ ์๋ฅผ ๋ค์ด ๊นจ์ง ๋ด๋ถ ๋งํฌ์ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๋ฌธ์ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋ Pull Request๋ฅผ ์๋ฝํ์ง ์๋ ์ข์ ์ด์ ์ ๋๋ค. - ๋ง์ถค๋ฒ ๊ฒ์ฌ๋ ์ ์ ๋ถ์์ ํ ์ ํ์
๋๋ค. ๊ณต์ต์ฌ์
์ฃผ๋ฌธ ๋ฌธ์๋ฟ๋ง ์๋๋ผ C/C++, Java ๋ฐ Python์ ํฌํจํ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ๋ก๊ทธ๋จ ์์ค ์ฝ๋(์ฃผ์ ๋ฐ ๋ฆฌํฐ๋ด)์์๋ ์ฒ ์๋ฅผ ๊ฒ์ฌํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ ๋ฌธ์์ ์ฒ ์ ์ค๋ฅ๋ ๊ฒฐํจ์ ๋๋ค! - ๊ตฌ์ฑ ํ
์คํธ(๊ทธ ๋ด์ฉ์ ๋ํด - ์ฐธ์กฐ)
์ด ะธ์ด ๋ณด๊ณ ์)๋ pytest์ ๊ฐ์ ๋จ์ ํ ์คํธ ๋ฐํ์์์ ์คํ๋๊ธฐ๋ ํ์ง๋ง ์ค์ ๋ก๋ ์คํ ์ค์ ์์ค ์ฝ๋๋ฅผ ์คํํ์ง ์๊ธฐ ๋๋ฌธ์ ์ผ์ข ์ ์ ์ ๋ถ์์ด๊ธฐ๋ ํฉ๋๋ค.
๋ณด์๋ค์ํผ, ์ด ๋ชฉ๋ก์์ ๋ฒ๊ทธ๋ฅผ ๊ฒ์ํ๋ ๊ฒ์ ๊ฐ์ฅ ๋ ์ค์ํ ์ญํ ์ ํ๋ฉฐ, ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ๋ฌด๋ฃ ์คํ ์์ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค์ ์ค ํ๋ก์ ํธ์ ์ด๋ค ์ ํ์ ์ ์ ๋ถ์์ ์ฌ์ฉํด์ผ ํฉ๋๊น? ๋ฌผ๋ก , ๋ง์์๋ก ์ข์ต๋๋ค! ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์ด๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ๋ ๊ฒ์ ๋๋ค. ์ด์ ๋ํด์๋ ๋์ค์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๋ค๋จ๊ณ ํํฐ๋ก์์ ์ ๋ฌ ํ์ดํ๋ผ์ธ๊ณผ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ธ ์ ์ ๋ถ์
์ง์์ ์ธ ํตํฉ์ ๋ํ ๊ณ ์ ์ ์ธ ๋น์ ๋ ์์ค ์ฝ๋ ๋ณ๊ฒฝ๋ถํฐ ์ ๋ฌ, ํ๋ก๋์ ๊น์ง ๋ณ๊ฒฝ ์ฌํญ์ด ํ๋ฅด๋ ํ์ดํ๋ผ์ธ์ ๋๋ค. ์ด ํ์ดํ๋ผ์ธ์ ํ์ค ๋จ๊ณ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ ์ ๋ถ์
- ํธ์ง
- ๋จ์ ํ ์คํธ
- ํตํฉ ํ ์คํธ
- UI ํ ์คํธ
- ์๋ ํ์ธ
ํ์ดํ๋ผ์ธ์ N๋ฒ์งธ ๋จ๊ณ์์ ๊ฑฐ๋ถ๋ ๋ณ๊ฒฝ ์ฌํญ์ N+1 ๋จ๊ณ๋ก ์ ์ก๋์ง ์์ต๋๋ค.
์ ์ ํํ ์ด๋ฐ ์์ด๊ณ ๊ทธ๋ ์ง ์์ ์ด์ ๋ ๋ฌด์์ ๋๊น? ํ์ดํ๋ผ์ธ์ ํ ์คํธ ๋ถ๋ถ์์ ํ ์คํฐ๋ ์ ์๋ ค์ง ํ ์คํธ ํผ๋ผ๋ฏธ๋๋ฅผ ์ธ์ํ๊ฒ ๋ฉ๋๋ค.
ํ
์คํธ ํผ๋ผ๋ฏธ๋. ์์ฒ:
์ด ํผ๋ผ๋ฏธ๋์ ๋งจ ์๋์๋ ์์ฑํ๊ธฐ ์ฝ๊ณ ์คํ ์๋๊ฐ ๋น ๋ฅด๋ฉฐ ์คํจํ ๊ฐ๋ฅ์ฑ์ด ์๋ ํ ์คํธ๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ ๋ง์ ์ฝ๋๊ฐ ์์ด์ผ ํ๋ฉฐ ๋ ๋ง์ ์ฝ๋๋ฅผ ํฌํจํ๊ณ ๋จผ์ ์คํ๋์ด์ผ ํฉ๋๋ค. ํผ๋ผ๋ฏธ๋์ ๊ผญ๋๊ธฐ์๋ ๊ทธ ๋ฐ๋๊ฐ ์ฑ๋ฆฝํ๋ฏ๋ก ํตํฉ ๋ฐ UI ํ ์คํธ ํ์๋ฅผ ํ์ํ ์ต์ํ์ผ๋ก ์ค์ฌ์ผ ํฉ๋๋ค. ์ด ์ฒด์ธ์ ์๋ ์ฌ๋์ ๊ฐ์ฅ ๋น์ธ๊ณ ๋๋ฆฌ๊ณ ์ ๋ขฐํ ์ ์๋ ๋ฆฌ์์ค์ด๋ฏ๋ก ๋งจ ๋์ ์์ผ๋ฉฐ ์ด์ ๋จ๊ณ์์ ๊ฒฐํจ์ด ๋ฐ๊ฒฌ๋์ง ์์ ๊ฒฝ์ฐ์๋ง ์์ ์ ์ํํฉ๋๋ค. ํ์ง๋ง ํ ์คํธ์ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์๋ ๋ถ๋ถ์์๋ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ๋ ๋ฐ์๋ ๋์ผํ ์์น์ด ์ฌ์ฉ๋ฉ๋๋ค!
๋๋ ๋ค๋จ๊ณ ๋ฌผ ์ฌ๊ณผ ์์คํ ์ ํํ๋ก ๋น์ ๋ฅผ ์ ์ํ๊ณ ์ถ์ต๋๋ค. ๋๋ฌ์ด ๋ฌผ(๊ฒฐํจ์ด ์๋ ๋ณํ)์ด ์ ๋ ฅ์ผ๋ก ๊ณต๊ธ๋๊ณ , ์ถ๋ ฅ์์๋ ์์น ์๋ ์ค์ผ ๋ฌผ์ง์ด ๋ชจ๋ ์ ๊ฑฐ๋ ๊นจ๋ํ ๋ฌผ์ ๋ฐ์์ผ ํฉ๋๋ค.
๋ค๋จ๊ณ ํํฐ. ์์ฒ:
์์๋ค์ํผ, ์ฒญ์ ํํฐ๋ ์ดํ์ ๊ฐ ๋จ๊ณ์์ ์ ์ ๋ ๋ฏธ์ธํ ์ค์ผ ๋ฌผ์ง์ ๊ฑธ๋ฌ๋ผ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋์์, ๋ ๊ฑฐ์น ์ ํ ๋จ๊ณ๋ ๋ ๋์ ์ฒ๋ฆฌ๋๊ณผ ๋ ๋ฎ์ ๋น์ฉ์ ์ ๊ณตํฉ๋๋ค. ์ฐ๋ฆฌ์ ๋น์ ์์ ์ด๊ฒ์ ์ ๋ ฅ ํ์ง ๊ฒ์ดํธ๊ฐ ๋ ๋น ๋ฅด๊ณ , ์์ํ๋ ๋ฐ ๋ ์ ์ ๋ ธ๋ ฅ์ด ํ์ํ๋ฉฐ, ์๋ ์ ๋ ์๋ฐํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๊ฒ์ด ๊ฒ์ดํธ๊ฐ ๊ตฌ์ถ๋๋ ์์์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ง๊ธ ์ดํดํ๊ณ ์๋ฏ์ด ๊ฐ์ฅ ์ฌ๊ฐํ ๊ฒฐํจ๋ง ์ ๊ฑฐํ ์ ์๋ ์ ์ ๋ถ์์ ์ญํ ์ ํํฐ ์บ์ค์ผ์ด๋์ ์์ ๋ถ๋ถ์ ์๋ "๋จธ๋" ๊ทธ๋ฆฌ๋์ ์ญํ ์ ๋๋ค.
"๋จธ๋ ํํฐ"๊ฐ ๋ฌผ์ ๋ง์ค ์ ์๊ฒ ๋ง๋ค์ง ์๋ ๊ฒ์ฒ๋ผ ์ ์ ๋ถ์ ์์ฒด๋ก๋ ์ต์ข ์ ํ์ ํ์ง์ด ํฅ์๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ดํ๋ผ์ธ์ ๋ค๋ฅธ ์์์ ํจ๊ป ๊ทธ ์ค์์ฑ์ ๋ถ๋ช ํฉ๋๋ค. ๋ค๋จ๊ณ ํํฐ์์ ์ถ๋ ฅ ๋จ๊ณ๋ ์ ์ฌ์ ์ผ๋ก ์ ๋ ฅ ๋จ๊ณ๊ฐ ์ํํ๋ ๋ชจ๋ ๊ฒ์ ์บก์ฒํ ์ ์์ง๋ง ์ ๋ ฅ ๋จ๊ณ ์์ด ๋ฏธ์ธ ์ ์ ๋จ๊ณ๋ง์ผ๋ก ์ํํ๋ ค๋ ์๋๋ก ์ธํด ์ด๋ค ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์ง๋ ๋ถ๋ช ํฉ๋๋ค.
"๋จธ๋ ํธ๋ฉ"์ ๋ชฉ์ ์ ํ์ ์บ์ค์ผ์ด๋์์ ์ฌ๊ฐํ ๊ฒฐํจ์ด ๋ฐ๊ฒฌ๋๋ ๊ฒ์ ์ํํ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ต์ํ ์ฝ๋ ๊ฒํ ๋ฅผ ์ํํ๋ ์ฌ๋์ ํ์์ด ์๋ชป๋ ์ฝ๋์ ํ๋ฆฝ๋ ์ฝ๋ฉ ํ์ค ์๋ฐ(์: ์ถ๊ฐ ๊ดํธ ๋๋ ๋๋ฌด ๊น๊ฒ ์ค์ฒฉ๋ ๋ถ๊ธฐ)์ผ๋ก ์ธํด ์ฃผ์๊ฐ ์ฐ๋งํด์ ธ์๋ ์ ๋ฉ๋๋ค. NPE์ ๊ฐ์ ๋ฒ๊ทธ๋ ๋จ์ ํ ์คํธ๋ก ์ก์์ผ ํ์ง๋ง, ํ ์คํธ ์ ์๋ ๋ถ์๊ธฐ๊ฐ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ผ๊ณ ์ฐ๋ฆฌ์๊ฒ ์๋ ค์ฃผ๋ฉด ์์ ์๋๊ฐ ํฌ๊ฒ ๋นจ๋ผ์ง๋๋ค.
์ด์ ์ ์ ๋ถ์์ ๊ฐ๋ ์ฌ์ฉํ๋ฉด ์ ํ ํ์ง์ด ํฅ์๋์ง ์์ผ๋ฉฐ, ์ด ๊ฒฐํจ์ด ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ํํฐ๋งํ๊ธฐ ์ํด ์ง์์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๊ฐ ๋ถ๋ช ํด์ก์ต๋๋ค. ์ ์ ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ์ ํ์ง์ด ํฅ์๋๋์ง ์ฌ๋ถ์ ๋ํ ์ง๋ฌธ์ "๋๋ฌ์ด ์ฐ๋ชป์์ ๊ฐ์ ธ์จ ๋ฌผ์ ์์ฟ ๋ฆฌ์ ํต๊ณผ์ํค๋ฉด ์์ ํ์ง์ด ํฅ์๋ฉ๋๊น?"๋ผ๊ณ ๋ฌป๋ ๊ฒ๊ณผ ๋๋ต ๋์ผํฉ๋๋ค.
๋ ๊ฑฐ์ ํ๋ก์ ํธ๋ก ๊ตฌํ
์ค์ํ ์ค์ ์ง๋ฌธ: "ํ์ง ๊ฒ์ดํธ"๋ก์ ์ง์์ ์ธ ํตํฉ ํ๋ก์ธ์ค์ ์ ์ ๋ถ์์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ์๋ ํ ์คํธ์ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒ์ด ๋ถ๋ช ํฉ๋๋ค. ์ผ๋ จ์ ํ ์คํธ๊ฐ ์์ผ๋ฉฐ ๊ทธ ์ค ํ๋๋ผ๋ ์คํจํ๋ฉด ์ด์ ๋ธ๋ฆฌ๊ฐ ํ์ง ๊ฒ์ดํธ๋ฅผ ํต๊ณผํ์ง ๋ชปํ๋ค๊ณ ๋ฏฟ์ ์ถฉ๋ถํ ์ด์ ๊ฐ ๋ฉ๋๋ค. ์ ์ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ๋์ผํ ๋ฐฉ์์ผ๋ก ๊ฒ์ดํธ๋ฅผ ์ค์นํ๋ ค๋ ์๋๊ฐ ์คํจํฉ๋๋ค. ๋ ๊ฑฐ์ ์ฝ๋์ ๋ถ์ ๊ฒฝ๊ณ ๊ฐ ๋๋ฌด ๋ง์์ ์์ ํ ๋ฌด์ํ๊ณ ์ถ์ง ์์ง๋ง ์ ํ ๋ฐฐ์ก์ ์ค๋จํ๋ ๊ฒ๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ถ์๊ธฐ ๊ฒฝ๊ณ ๊ฐ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฒ์ ์ฌ์ฉํ ๋ ๋ถ์๊ธฐ๋ ๋ชจ๋ ํ๋ก์ ํธ์์ ์๋ง์ ๊ฒฝ๊ณ ๋ฅผ ์์ฑํ๋ฉฐ, ๊ทธ ์ค ๋๋ถ๋ถ์ ์ ํ์ ์ฌ๋ฐ๋ฅธ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋ ์ฃผ์์ ํ ๋ฒ์ ์์ ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ฉฐ ๋ง์ ์์ ์ด ํ์ํ์ง๋ ์์ต๋๋ค. ๊ฒฐ๊ตญ, ์ฐ๋ฆฌ๋ ์ ์ ๋ถ์์ ๋์ ํ๊ธฐ ์ ์๋ ์ฐ๋ฆฌ ์ ํ์ด ์ ์ฒด์ ์ผ๋ก ์๋ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค!
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ง์ ๊ฒฝ์ฐ ์ ์ ๋ถ์์ ๊ฐ๋ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์ ํ๋๊ฑฐ๋ ๋ถ์๊ธฐ ๋ณด๊ณ ์๊ฐ ์ด์ ๋ธ๋ฆฌ ์ค์ ๊ฐ๋จํ ๋ฐํ๋๋ ์ ๋ณด ๋ชจ๋์์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๋ถ์์ด ์๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค. ์๋ํ๋ฉด ์ด๋ฏธ ๋ง์ ๊ฒฝ๊ณ ๊ฐ ์๋ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ๋ (์๋ฌด๋ฆฌ ์ฌ๊ฐํ๋๋ผ๋) ๋ ๋ค๋ฅธ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋์ ๋์ง ์๊ฒ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ์ง ๊ฒ์ดํธ๋ฅผ ๋์ ํ๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ด ์๋ ค์ ธ ์์ต๋๋ค.
- ์ด ๊ฒฝ๊ณ ์ ๋๋ ๊ฒฝ๊ณ ์๋ฅผ ์ฝ๋ ์ค ์๋ก ๋๋ ๊ฐ์ ๋ํ ์ ํ์ ์ค์ ํฉ๋๋ค. ์ด๋ฌํ ๊ฒ์ดํธ๋ ์ ํ์ ์ด๊ณผํ์ง ์๋ ํ ์๋ก์ด ๊ฒฐํจ์ด ์๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ๋กญ๊ฒ ํต๊ณผํ๋๋ก ํ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด๋ ์ ๋๋ก ์๋ํ์ง ์์ต๋๋ค.
- ํน์ ์๊ฐ์ ์ฝ๋์ ๋ชจ๋ ์ค๋๋ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ๋๋ก ์์ ํ๊ณ ์๋ก์ด ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ ๋ ๋น๋๋ฅผ ๊ฑฐ๋ถํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ PVS-studio ๋ฐ Codacy์ ๊ฐ์ ์ผ๋ถ ์จ๋ผ์ธ ๋ฆฌ์์ค์์ ์ ๊ณต๋ฉ๋๋ค. Codacy์ ๋ํ ๋ด ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด PVS-studio์์ ์ผํ ๊ธฐํ๊ฐ ์์์ต๋๋ค. Codacy์ ์ฃผ์ ๋ฌธ์ ๋ "์ค๋๋" ์ค๋ฅ์ "์๋ก์ด" ์ค๋ฅ๊ฐ ๋ฌด์์ธ์ง ๊ฒฐ์ ํ๋ ๊ฒ์ด ํญ์ ์๋ํ์ง ์๋ ๋ค์ ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ํนํ ํ์ผ์ด ๋ง์ด ์์ ๋๊ฑฐ๋ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ์๋ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ๋ด ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด Codacy๋ ํ ์์ฒญ์ ์๋ก์ด ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ๋ ๋์์ ํน์ PR ์ฝ๋์ ๋ณ๊ฒฝ๊ณผ ๊ด๋ จ๋์ง ์์ ๊ฒฝ๊ณ ๋ก ์ธํด ํ ์์ฒญ์ ์ ๋ฌํ์ง ์์ ์ ์์ต๋๋ค.
- ์ ์๊ฐ์๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ํด๊ฒฐ์ฑ
์ ์ฑ
์ ์ค๋ช
๋ ๊ฒ์
๋๋ค.
์ฐ์ ๋ฐฐ๋ฌ "๋์นซ ๋ฐฉ์". ๊ธฐ๋ณธ ์์ด๋์ด๋ ์ ์ ๋ถ์ ๊ฒฝ๊ณ ์๋ ๊ฐ ๋ฆด๋ฆฌ์ค์ ์์ฑ์ด๋ฉฐ ์ด ๊ฒฝ๊ณ ์๋ฅผ ๋๋ฆฌ์ง ์๋ ๋ณ๊ฒฝ๋ง ํ์ฉ๋๋ค๋ ๊ฒ์ ๋๋ค.
๋์นซ ํ ์ฅ์น
๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค.
- ์ด๊ธฐ ๋จ๊ณ์์๋ ๋ถ์๊ธฐ๊ฐ ๋ฐ๊ฒฌํ ์ฝ๋์ ๊ฒฝ๊ณ ์ ๊ณต๊ฐ์ ๋ํ ๊ธฐ๋ก์ด ๋ฉํ๋ฐ์ดํฐ์ ์์ฑ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ ์คํธ๋ฆผ์ ๋น๋ํ ๋ ์ ์ฅ์ ๊ด๋ฆฌ์๋ "๋ฆด๋ฆฌ์ค 7.0.2"๋ฟ๋ง ์๋๋ผ "7.0.2๊ฐ์ ์ฒดํฌ์คํ์ผ ๊ฒฝ๊ณ ๊ฐ ํฌํจ๋ ๋ฆด๋ฆฌ์ค 100500"๋ฅผ ์์ฑํฉ๋๋ค. Artifactory์ ๊ฐ์ ๊ณ ๊ธ ์ ์ฅ์ ๊ด๋ฆฌ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฆด๋ฆฌ์ค์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ ์ฅํ ์ ์์ต๋๋ค.
- ์ด์ ๊ฐ ๋์ด์ค๊ธฐ ์์ฒญ์ ๋น๋ ์ ๊ฒฐ๊ณผ ๊ฒฝ๊ณ ์๋ฅผ ํ์ฌ ๋ฆด๋ฆฌ์ค์์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ๊ณ ์์ ๋น๊ตํฉ๋๋ค. PR๋ก ์ธํด ์ด ์ซ์๊ฐ ์ฆ๊ฐํ๋ฉด ์ฝ๋๋ ์ ์ ๋ถ์์ ์ํ ํ์ง ๊ฒ์ดํธ๋ฅผ ํต๊ณผํ์ง ๋ชปํฉ๋๋ค. ๊ฒฝ๊ณ ์๊ฐ ๊ฐ์ํ๊ฑฐ๋ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด ํต๊ณผํฉ๋๋ค.
- ๋ค์ ๋ฆด๋ฆฌ์ค์์๋ ๋ค์ ๊ณ์ฐ๋ ๊ฒฝ๊ณ ์๊ฐ ๋ฆด๋ฆฌ์ค ๋ฉํ๋ฐ์ดํฐ์ ๋ค์ ๊ธฐ๋ก๋ฉ๋๋ค.
๊ทธ๋์ ์กฐ๊ธ์ฉ์ด์ง๋ง ๊พธ์คํ๊ฒ(๋์นซ์ด ์๋ํ ๋์ฒ๋ผ) ๊ฒฝ๊ณ ํ์๊ฐ XNUMX์ด ๋๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ๋ฌผ๋ก ์๋ก์ด ๊ฒฝ๊ณ ๋ฅผ ๋์ ํ๊ณ ๋ค๋ฅธ ์ฌ๋์ ๊ฒฝ๊ณ ๋ฅผ ์์ ํจ์ผ๋ก์จ ์์คํ ์ ์์ผ ์ ์์ต๋๋ค. ์ฅ๊ฑฐ๋ฆฌ์ ๊ฑธ์ณ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ ์์ ์ธ ํ์์ ๋๋ค. ๊ฒฝ๊ณ ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ณ์ ์ผ๋ก ์์ ๋์ง ์๊ณ ํน์ ์ ํ์ ๊ทธ๋ฃน์์ ํ ๋ฒ์ ์์ ๋๋ฉฐ ์ฝ๊ฒ ์ ๊ฑฐ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ๊ณ ๋ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ ๊ฑฐ๋ฉ๋๋ค.
์ด ๊ทธ๋ํ๋ XNUMX๊ฐ์ ๋์ ์ด๋ฌํ "๋์นซ"์ ์๋ํ ๋์ ๋ฐ์ํ Checkstyle ๊ฒฝ๊ณ ์ ์ด ํ์๋ฅผ ๋ณด์ฌ์ค๋๋ค.
์ ๋ ์ด ๋ฐฉ๋ฒ์ ์์ ๋ ๋ฒ์ ์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ ๋ชจ๋๊ณผ ๋ถ์ ๋๊ตฌ๋ณ๋ก ๊ฒฝ๊ณ ๋ฅผ ๋ณ๋๋ก ๊ณ์ฐํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๋น๋ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
celesta-sql:
checkstyle: 434
spotbugs: 45
celesta-core:
checkstyle: 206
spotbugs: 13
celesta-maven-plugin:
checkstyle: 19
spotbugs: 0
celesta-unit:
checkstyle: 0
spotbugs: 0
๋ชจ๋ ๊ณ ๊ธ CI ์์คํ
์์ ํ๋ฌ๊ทธ์ธ ๋ฐ ํ์ฌ ๋๊ตฌ์ ์์กดํ์ง ์๊ณ ๋ชจ๋ ์ ์ ๋ถ์ ๋๊ตฌ์ ๋ํด ๋์นซ์ ๊ตฌํํ ์ ์์ต๋๋ค. ๊ฐ ๋ถ์๊ธฐ๋ ๋ถ์ํ๊ธฐ ์ฌ์ด ๊ฐ๋จํ ํ
์คํธ ๋๋ XML ํ์์ผ๋ก ์์ฒด ๋ณด๊ณ ์๋ฅผ ์์ฑํฉ๋๋ค. ๋จ์ ๊ฒ์ CI ์คํฌ๋ฆฝํธ์ ํ์ํ ๋ก์ง์ ์์ฑํ๋ ๊ฒ๋ฟ์
๋๋ค. Jenkins ๋ฐ Artifactory๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํ ์์ค ํ๋ก์ ํธ์์ ์ด๊ฒ์ด ์ด๋ป๊ฒ ๊ตฌํ๋๋์ง ํ์ธํ ์ ์์ต๋๋ค. countWarnings()
Checkstyle ๋ฐ Spotbugs๊ฐ ์์ฑํ ํ์ผ์ xml ํ๊ทธ๋ฅผ ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ผ๋ก ๊ณ์ฐํฉ๋๋ค. compareWarningMaps()
๋์ผํ ๋์นซ์ ๊ตฌํํ์ฌ ์นดํ
๊ณ ๋ฆฌ์ ๊ฒฝ๊ณ ์๊ฐ ์ฆ๊ฐํ๋ฉด ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
aspell์ ์ฌ์ฉํ์ฌ ์ฃผ์, ํ
์คํธ ๋ฆฌํฐ๋ด ๋ฐ ๋ฌธ์์ ์ฒ ์๋ฅผ ๋ถ์ํ๊ธฐ ์ํด "๋์นซ"์ ํฅ๋ฏธ๋ก์ด ๊ตฌํ์ด ๊ฐ๋ฅํฉ๋๋ค. ์์๋ค์ํผ ๋ง์ถค๋ฒ ๊ฒ์ฌ๋ฅผ ํ ๋ ํ์ค ์ฌ์ ์ ์๋ ค์ง์ง ์์ ๋ชจ๋ ๋จ์ด๊ฐ ํ๋ฆฐ ๊ฒ์ ์๋๋ฉฐ ์ฌ์ฉ์ ์ฌ์ ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ ์์ค ์ฝ๋์ ์ฌ์ฉ์ ์ ์ ์ฌ์ ๋ถ๋ถ์ ๋ง๋ค๋ฉด ์ฒ ์ ํ์ง ๊ฒ์ดํธ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ณต์ํ๋ ์ ์์ต๋๋ค: ํ์ค ๋ฐ ์ฌ์ฉ์ ์ ์ ์ฌ์ ์ ์ฌ์ฉํ์ฌ aspell์ ์คํ
๋ถ์๊ธฐ ๋ฒ์ ์์ ์ ์ค์์ฑ์ ๋ํด
๊ฒฐ๋ก ์ ์ผ๋ก ์ฃผ๋ชฉํด์ผ ํ ์ ์ ๋๋ฆฌ๋ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ๋ถ์์ ์ด๋ป๊ฒ ๊ตฌํํ๋ ๋ถ์๊ธฐ ๋ฒ์ ์ ๊ณ ์ ํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ถ์๊ธฐ๊ฐ ์๋ฐ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋๋๋ก ํ์ฉํ๋ฉด ๋ค์ ๋์ด์ค๊ธฐ ์์ฒญ์ ์กฐํฉํ ๋ ์ฝ๋ ๋ณ๊ฒฝ๊ณผ ๊ด๋ จ์ด ์์ง๋ง ์ ๋ถ์๊ธฐ๊ฐ ๋จ์ํ ๋ ๋ง์ ๊ฒฐํจ์ ์ฐพ์ ์ ์๋ค๋ ์ฌ์ค๊ณผ ๊ด๋ จ๋ ์๋ก์ด ๊ฒฐํจ์ด "ํ์ "๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋์ด์ค๊ธฐ ์์ฒญ์ ์๋ฝํ๋ ํ๋ก์ธ์ค๊ฐ ์ค๋จ๋ฉ๋๋ค. ๋ถ์๊ธฐ ์ ๊ทธ๋ ์ด๋๋ ์์์ ์ธ ์กฐ์น์ฌ์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ ์ด์ ๋ธ๋ฆฌ ๊ตฌ์ฑ ์์ ๋ฒ์ ์ ๊ฒฌ๊ณ ํ ๊ณ ์ ์ ์ผ๋ฐ์ ์ผ๋ก ํ์ํ ์๊ตฌ ์ฌํญ์ด๋ฉฐ ๋ณ๋์ ๋ ผ์ ์ฃผ์ ์ ๋๋ค.
์กฐ์ฌ ๊ฒฐ๊ณผ
- ์ ์ ๋ถ์์ ๋ฒ๊ทธ๋ฅผ ์ฐพ์์ฃผ์ง ์์ผ๋ฉฐ ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฐ๊ณผ๋ก ์ ํ ํ์ง์ ํฅ์์ํค์ง ์์ต๋๋ค. ํ์ง์ ๋ํ ๊ธ์ ์ ์ธ ํจ๊ณผ๋ ๋ฐฐ์ก ๊ณผ์ ์์ ์ง์์ ์ผ๋ก ์ฌ์ฉํด์ผ๋ง ์ป์ ์ ์์ต๋๋ค.
- ๋ฒ๊ทธ๋ฅผ ์ฐพ๋ ๊ฒ์ ๋ถ์์ ์ฃผ์ ์์ ์ด ์๋๋ฉฐ ์ ์ฉํ ๊ธฐ๋ฅ์ ๋๋ถ๋ถ์ ์คํ ์์ค ๋๊ตฌ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋ ๊ฑฐ์ ์ฝ๋์ ๋ํ "๋์นซ"์ ์ฌ์ฉํ์ฌ ์ ๋ฌ ํ์ดํ๋ผ์ธ์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์ ์ ์ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง ๊ฒ์ดํธ๋ฅผ ๊ตฌํํฉ๋๋ค.
์ฐธ์กฐ
์ฐ์ ๋ฐฐ๋ฌ A. Kudryavtsev: ํ๋ก๊ทธ๋จ ๋ถ์: ์์ ์ด ํ๋ฅญํ ํ๋ก๊ทธ๋๋จธ์ธ์ง ์ดํดํ๋ ๋ฐฉ๋ฒ ๋ค์ํ ์ฝ๋ ๋ถ์ ๋ฐฉ๋ฒ์ ๋ํด ๋ณด๊ณ ํฉ๋๋ค(์ ์ ๋ถ์๋ฟ๋ง ์๋๋ผ!)
์ถ์ฒ : habr.com