์ํฐํ๋ผ์ด์ฆ Scala ์ฝ๋๋ฒ ์ด์ค๋ ํจ์ํ ์ถ์ํ, JVM ์ํธ ์ด์ฉ์ฑ, ๊ทธ๋ฆฌ๊ณ ์ฅ๊ธฐ์ ์ธ ๋น์ฆ๋์ค ๋ก์ง์ด ๊ต์ฐจํ๋ ์ง์ ์์ ์ ์ ๋ ๋ง์ด ์๋ํ๊ณ ์์ต๋๋ค. Scala์ ํํ๋ ฅ์ด ํ๋ถํ ํ์ ์์คํ ์ ๋ณต์กํ ๋๋ฉ์ธ์ ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์๊ฒ ํด์ฃผ์ง๋ง, ๋์์ ์์คํ ๋์์ ๋๊ท๋ชจ๋ก ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ ๊ฐ์ ์ ์ธ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋์ ํ๊ธฐ๋ ํฉ๋๋ค. ๋๊ท๋ชจ ์กฐ์ง์์ Scala๋ ๊ฑฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉ๋์ง ์๊ณ Java ์๋น์ค, ๋ฐ์ดํฐ ํ๋ซํผ, ๋ ๊ฑฐ์ ๊ตฌ์ฑ ์์์ ๊ณต์กดํ๊ธฐ ๋๋ฌธ์, ๋ก์ปฌ ์ฝ๋์ ๊ฒฐ์ ์ด ๋ถ์ฐ๋ ์คํ ๊ฒฝ๋ก๋ฅผ ํตํด ์ด๋ป๊ฒ ์ ํ๋๋์ง ํ์ ํ๊ธฐ๊ฐ ๋์ฑ ์ด๋ ค์์ง๋๋ค.
๋ฐ๋ผ์ ์ ์ ์ฝ๋ ๋ถ์์ ํ์ง ํฅ์ ์์๊ฐ ์๋ ๊ตฌ์กฐ์ ์๊ตฌ ์ฌํญ์ด ๋์์ต๋๋ค. ๊ธฐ์ ํ๊ฒฝ์์ ๋ถ์์ ์คํ์ผ ์ค์๋ ํ๋ฉด์ ์ธ ๊ฒฐํจ ํ์ง์๋ง ๊ตญํ๋์ง ์์ต๋๋ค. ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๋ ์์ํฌ ๋ฐ ๋ฐํ์ ๊ฐ์ ์ด ์ํธ ์์ฉํ ๋๋ง ๋ํ๋๋ ์จ๊ฒจ์ง ์ ์ด ํ๋ฆ, ์๋ฌต์ ์ธ ์ข ์์ฑ ๋ฐ ์ค๋ฅ ๋ชจ๋๋ฅผ ๋๋ฌ๋ด๋ ๊ฒ์ด ๊ธฐ๋๋ฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋๋ ๋ ๊ด๋ฒ์ํ ์ฐ๋ ค ์ฌํญ๊ณผ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์์ต๋๋ค. ์ํํธ์จ์ด ๊ด๋ฆฌ ๋ณต์ก์ฑ๊ท๋ชจ, ์ง์์ฑ ๋ฐ ์กฐ์ง์ ๊ฒฝ๊ณ๊ฐ ์ฝ๋์ ์งํ ๋ฐฉ์๊ณผ ์ํ ์ถ์ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ ๊ณณ์ ๋๋ค.
์ฝ๋ ๋ณต์ก์ฑ ํ์ํ๊ธฐ
Smart TS XL์ ์ฌ์ฉํ์ฌ Scala ๋ณ๊ฒฝ ์ฌํญ์ด ํ์ ์์คํ ๋ฐ ๊ณต์ ์ํฐํ๋ผ์ด์ฆ ์ํฌ๋ก๋์ ๋ฏธ์น๋ ์ํฅ์ ํ์ ํ์ญ์์ค.
์ง๊ธ ํ์Scala๋ ์ด๋ฌํ ๋งฅ๋ฝ์์ ๋ ํนํ ๊ณผ์ ๋ฅผ ์ ์ํฉ๋๋ค. ๋งคํฌ๋ก, ์์์ ํด์, ๊ณ ์ฐจ ํ์ , ์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ์ ์ปดํ์ผ ํ์ ๋ณด์ฅ๊ณผ ๋ฐํ์ ๋์ ๊ฐ์ ๊ฒฝ๊ณ๋ฅผ ๋ชจํธํ๊ฒ ๋ง๋ญ๋๋ค. ์ด์์ ์ค์ํ ๋ง์ ๊ฒฐํจ์ ์ปดํ์ผ ์ค๋ฅ๋ก ๋ํ๋์ง ์์ผ๋ฉฐ, ํ ์คํธ๋ง์ผ๋ก๋ ์ฝ๊ฒ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ธฐ์ ๋ค์ ์๋ฐ ์ฌํญ์ ํ์ํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ์๋๋ฅผ ์ถ๋ก ํ๊ณ , ์งํ๋ฅผ ์ ํํ๊ณ , ํ๊ณผ ๋ฆด๋ฆฌ์ค ์ฃผ๊ธฐ ์ ๋ฐ์ ๊ฑธ์ณ ๋ฆฌํฉํ ๋ง ์์ ์ ์์ ํํ๊ธฐ ์ํด ์ ์ ๋ถ์ ๋๊ตฌ์ ์ ์ ๋ ์์กดํ๊ณ ์์ต๋๋ค.
ํ๋ํ ํ๋ก๊ทธ๋จ ๋ด์์ ์ด๋ฌํ ์๋ ฅ์ ๋์ฑ ์ฌํ๋ฉ๋๋ค. Scala๋ ์๋น์ค ๋ถํด, ํ๋ซํผ ๋ง์ด๊ทธ๋ ์ด์ ๋๋ ์๋ก์ด ๋ฐ์ดํฐ ๋ฐ ์ด๋ฒคํธ ๋ชจ๋ธ๊ณผ์ ํตํฉ ๋ฑ ์ํคํ ์ฒ ์ ํ์ ๊ฒช๋ ์์คํ ์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ์๋๋ฆฌ์ค์์ ์ ์ ๋ถ์์ ๊ธฐ์กด ๋์์ด ํฅํ ๋ณํ์ ์ด๋ค ์ ์ฝ์ ๊ฐํ๋์ง ์ดํดํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ๊ฐ ๋๋ฉฐ, ๋ ๊ด๋ฒ์ํ ๋ถ์์ ๋ณด์ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ํ๋ํ ๋ค์ ์น์ ์์๋ Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๊ฐ ์ด๋ฌํ ๊ธฐ์ ๋ณ ์๊ตฌ ์ฌํญ์ ์ด๋ป๊ฒ ์ถฉ์กฑํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๋๊ท๋ชจ์ ์ด๊ธฐ์ข ์ฝ๋๋ฒ ์ด์ค์ ์ ์ฉํ ๋ ๊ธฐ๋ฅ์์ ์ฐจ์ด์ ์ด ๋ฌด์์ธ์ง ์ดํด๋ด ๋๋ค.
Scala ์ ์ ์ฝ๋ ๋ถ์์์ ๋ฐ์ํ๋ ๋์ ๊ฐ์์ฑ ๊ฒฉ์ฐจ์ Smart TS XL์ ์ญํ
๊ธฐ์กด์ Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ ๊ตญ์์ ์ธ ๊ฒฐํจ์ ์๋ณํ๊ณ , ์ธ์ด ๊ท์จ์ ๊ฐํํ๋ฉฐ, ์ฒด๊ณ์ ์ธ ๋ฆฌํฉํ ๋ง์ ์ง์ํ๋ ๋ฐ ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ํฐํ๋ผ์ด์ฆ Scala ํ๊ฒฝ์์ ๊ฐ์ฅ ์ค์ํ ์ํ์ ๊ณ ๋ฆฝ๋ ์๋ฐ์์ ๋น๋กฏ๋๋ ๊ฒฝ์ฐ๊ฐ ๋๋ญ ๋๋ค. ์ด๋ฌํ ์ํ์ ๋ชจ๋ ๊ฐ์ ์ํธ ์์ฉ, ์ฌ๋ฌ ์๋น์ค์ ๊ฑธ์น ์คํ ๊ฒฝ๋ก, ๊ทธ๋ฆฌ๊ณ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ ๋ฆฝ์ ์ผ๋ก ์งํํ๋ ์์กด์ฑ ์ฒด์ธ์์ ๋ฐ์ํฉ๋๋ค. ์ด ์น์ ์์๋ ๊ธฐ์กด Scala ์ ์ ๋ถ์์ ํ๊ณ์ ๊ณผ Smart TS XL์ด ๋์ ์ค์ฌ ๋ฐ ์์กด์ฑ ์ค์ฌ ๋ถ์์ ํตํด ์ด๋ฌํ ๊ฒฉ์ฐจ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ์ดํด๋ด ๋๋ค.
์ํฐํ๋ผ์ด์ฆ Scala ์์คํ ์ด ๊ท์น ๊ธฐ๋ฐ ๋ถ์์ ํ๊ณ๋ฅผ ๋ฐ์ด๋๋ ์ด์ ๋ ๋ฌด์์ผ๊น์?
๋๊ท๋ชจ ์กฐ์ง์์ Scala ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋ฆฝ์ ์ธ ์์คํ ์ด๋ผ๊ธฐ๋ณด๋ค๋ ํ๋ซํผ ๊ฐ์ ์กฐ์ ๊ณ์ธต ์ญํ ์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ํ์ผ์ด๋ ๋ชจ๋ ์์ค์์ ๊ตฌ๋ฌธ์ ๋๋ ์๋ฏธ์ ์ ํ์ฑ์ ์ด์ ์ ๋ง์ถ ์ ์ ๋ถ์ ๋๊ตฌ๋ ์ด๋ฌํ ํ์ค์ ์ ๋๋ก ๋ฐ์ํ์ง ๋ชปํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๊ตฌ์กฐ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ณต์ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๋ค์ค ์ ์ฅ์ ์ํคํ ์ฒ
- ํจ์ ํฉ์ฑ์ ์ํด ์ ๋๋๋ ์๋ฌต์ ์คํ ๊ฒฝ๋ก
- JVM, ๋ฉ์์ง ๋ฐ ๋ฐ์ดํฐ ๊ณ์ธต์ ์์ฐ๋ฅด๋ ๋น๋๊ธฐ ์ํฌํ๋ก
- ๋ฆด๋ฆฌ์ค ์ฃผ๊ธฐ๊ฐ ์๋ก ๋ค๋ฅธ ํ ๊ฐ์ ๋ถ๋ถ์ ์์ ๊ถ
์ด๋ฌํ ์กฐ๊ฑด์์ ์ ์ ๊ท์น์ ๋ฐํ์ ์ ๋ก์ง ๊ตฌ์ฑ ๋ฐฉ์์ ๊ณ ๋ คํ์ง ์๊ณ ๋ก์ปฌ์์ ์ ํ์ฑ์ ๊ฒ์ฆํ ์ ์์ต๋๋ค. ๋จ์ผ Scala ๋ชจ๋ ๋ด์์๋ ์์ ํด ๋ณด์ด๋ ๋ณํ์ด๋ผ๋ ๋ถ์ฐ ์คํ ํ๊ฒฝ์ ๋ฐฐํฌ๋๋ฉด ์์ ๋ณด์ฅ, ์ค๋ฅ ์ ํ ๋๋ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
Smart TS XL์ Scala ๋ถ์์ ์์ด ๊ธฐ์กด๊ณผ๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ทจํฉ๋๋ค. ์ฝ๋๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ํ๊ฐํ๋ ๋์ , ๊ฒฝ๊ณ๋ฅผ ๋๋๋๋ ์คํ ๋์์ ์ฌ๊ตฌ์ฑํ์ฌ ๊ธฐ์ ํ์ด Scala ๋ก์ง์ด ์์คํ ์ ์ฒด ํ๋ฆ์ ์ด๋ป๊ฒ ๊ด์ฌํ๋์ง ์ดํดํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
Scala ์ธ์ด ๊ตฌ๋ฌธ์ ๋์ด์๋ ์คํ ์ค์ฌ ๋ถ์
Scala์ ๊ฐ๋ ฅํ ํํ๋ ฅ ๋๋ถ์ ๋ฐ๋ ๋์ ์ถ์ํ๊ฐ ๊ฐ๋ฅํ์ง๋ง, ์ด๋ฌํ ์ถ์ํ๋ ์ข ์ข ์ค์ ์คํ ๊ณผ์ ์ ๋ชจํธํ๊ฒ ๋ง๋ญ๋๋ค. ํจํด ๋งค์นญ, ๋ชจ๋๋ ํฉ์ฑ, ์๋ฌต์ ํด๊ฒฐ ๋ฑ์ ๊ธฐ๋ฅ์ ๋ ผ๋ฆฌ๋ฅผ ๊ฐ๊ฒฐํ ํํ๋ก ์์ถํ์ง๋ง, ์์คํ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ด๋ฌํ ๊ฐ๊ฒฐํ ํํ๋ฅผ ์ดํดํ๊ธฐ ์ด๋ ค์์ง๋๋ค.
Smart TS XL์ ์ธ์ด ๊ธฐ๋ฅ๋ณด๋ค๋ ์คํ ์๋ฏธ๋ก ์ ์ด์ ์ ๋ง์ถค์ผ๋ก์จ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
์ฃผ์ ๋ถ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Scala์ JVM ๊ฒฝ๊ณ๋ฅผ ๋๋๋๋ ๋ฉ์๋ ๊ฐ ์คํ ๊ฒฝ๋ก ์ฌ๊ตฌ์ฑ
- ํจ์ ์ฐ๊ฒฐ์ ์ํด ๋์ ๋ ์๋ฌต์ ์ ์ด ํ๋ฆ์ ๋งคํ
- ๊ณ ์ฐจ ํจ์์ ์ํด ๋์ ๋ ์จ๊ฒจ์ง ์คํ ๋ถ๊ธฐ ์๋ณ
- Scala ๋ก์ง๊ณผ ํ์ ์๋น์ค, ์์ ๋ฐ ๋ฐ์ดํฐ ์ ์ฅ์ ๊ฐ์ ์๊ด๊ด๊ณ
์ด๋ฌํ ์คํ ์ค์ฌ์ ๊ด์ ์ ํตํด ์ํคํ ํธ์ ํ๋ซํผ ์ฑ ์์๋ ์ ์ ๊ท์น ์ค์์๋ง ์์กดํ๋ ๋์ , ๋ถํ, ์ฅ์ ๋ฐ ๋ถ๋ถ ๋ฐฐํฌ ์ํฉ์์ Scala ์ฝ๋๊ฐ ์ค์ ๋ก ์ด๋ป๊ฒ ๋์ํ๋์ง ํ๊ฐํ ์ ์์ต๋๋ค.
Scala, JVM ๋ฐ ํ๋ซํผ ๊ฒฝ๊ณ๋ฅผ ๋๋๋๋ ์์กด์ฑ ๋ถ์
์ํฐํ๋ผ์ด์ฆ Scala ์์คํ ์ ๋๋ฌผ๊ฒ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํฉ๋๋ค. Java ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๊ณต์ ์ธํ๋ผ ์๋น์ค, ๋ฐฐ์น ์ํฌ๋ก๋ ๋ฐ ์ธ๋ถ API์ ์์กดํฉ๋๋ค. ๊ธฐ์กด์ Scala ์ ์ ๋ถ์ ๋๊ตฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ธ์ด ๊ฒฝ๊ณ์์ ๋ฉ์ถ์ด ํ๋ซํผ ๊ฐ ์ข ์์ฑ์ ์๋ฌต์ ์ผ๋ก ๋จ๊ฒจ๋ก๋๋ค.
Smart TS XL์ Scala ์ ์ฉ ๋๊ตฌ๋ฅผ ๋์ด ํ์ฅ๋ ์ข ์์ฑ ๊ฐ์์ฑ์ ์ ๊ณตํฉ๋๋ค.
๋ถ์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ๋ฅผ ํตํด ๋์ ๋๋ ์ ์ด์ ์ข ์์ฑ
- Scala ์๋น์ค์ ๋ ๊ฑฐ์ ๊ตฌ์ฑ ์์ ๊ฐ์ ์จ๊ฒจ์ง ์ฐ๊ฒฐ
- ๋๊ธฐ์ Scala ํ๋ก์ฐ์ ๋น๋๊ธฐ์ ์์ ๊ฐ์ ์คํ ์ข ์์ฑ
- ๊ณต์ ๋๋ฉ์ธ ๊ฐ์ฒด ๋๋ ์ธํฐํ์ด์ค์ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ์ํฅ ์ฌ์ฌ
์ด๋ฌํ ์์ค์ ์์กด์ฑ ์ธ์์ ๋ถ๋ถ์ ์ธ ๋ฆฌํฉํ ๋ง์ด๋ ๋จ๊ณ์ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์๋์น ์๊ฒ ํ์ ์์คํ ์ ๋ถ์์ ํ๊ฒ ๋ง๋ค ์ ์๋ ํ๋ํ ๊ณํ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. Smart TS XL์ ์ด๋ฌํ ๊ด๊ณ๋ฅผ ๋ช ์์ ์ผ๋ก ๋๋ฌ๋์ผ๋ก์จ ์ถ์ธก์ ๊ธฐ๋ฐํ ๋ฆฌํฉํ ๋ง์ด ์๋ ์ํ์ ์ธ์งํ ๋ณ๊ฒฝ ๊ณํ์ ์๋ฆฝํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
๋ฆฌํฉํ ๋ง ๋ฐ ํ๋ํ ์๋๋ฆฌ์ค์์์ ์ํ ์์ธก
์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ ๋ฆฌํฉํ ๋ง์ ์ง์ํ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ๊ท์น ์๋ฐ์ด๋ ํจํด ์ผ์น ์ฌ๋ถ๋ง ์๋ ค์ค๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์์คํ ์์ค์ ๋์์ด๋ ์ค๋ฅ ๋ฐ์ ์์์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ์ค๋ช ํ์ง ๋ชปํฉ๋๋ค.
Smart TS XL์ ํ๋ ์ํ์ ์ค์ฌ์ผ๋ก ๋ฆฌํฉํ ๋ง ๋ถ์์ ์ฌ๊ตฌ์ฑํฉ๋๋ค.
์ด๋ฅผ ํตํด ํ์ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- Scala ๋ฆฌํฉํ ๋ง์ผ๋ก ์ธํด ์ด๋ค ์คํ ๊ฒฝ๋ก๊ฐ ์ํฅ์ ๋ฐ์์ง ์์ธกํด ๋ณด์ธ์.
- ๋น์ฆ๋์ค ํ๋ฆ์ ํฐ ์ํฅ์ ๋ฏธ์น๋ ๋ก์ง์ ์๋ณํฉ๋๋ค.
- ๋ฐฐํฌ ์ ์ ์ ์ฌ์ ์ธ ์ค๋ฅ ์ ํ ๊ฒฝ๋ก๋ฅผ ๊ฐ์งํฉ๋๋ค.
- ํ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ค์ ์คํ ์ข ์์ฑ์ ๋ง์ถฐ ํ๊ฐํฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ Scala ์๋น์ค๊ฐ ๊ท์ ๋์, ์์ต์ ์ค์ํ ์์คํ ๋๋ ์์ ์ ๋ฏผ๊ฐํ ์์คํ ์ ์ผ๋ถ๋ฅผ ๊ตฌ์ฑํ๋ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์ ํนํ ์ค์ํฉ๋๋ค. Smart TS XL์ ๋ฆฌํฉํ ๋ง์ ๊ตญ์์ ์ธ ํ๋์ผ๋ก ์ทจ๊ธํ๋ ๋์ , ์ธก์ ๊ฐ๋ฅํ ์ํฅ์ ๋ฏธ์น๋ ์์คํ ์์ค์ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
์ํฐํ๋ผ์ด์ฆ Scala ์ดํด๊ด๊ณ์๋ฅผ ์ํ ์ ๋ต์ ๊ฐ์น
Smart TS XL์ ๊ฐ์น๋ Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ฅผ ๋์ฒดํ๋ ๋ฐ ์๋ ๊ฒ์ด ์๋๋ผ, ํด๋น ๋๊ตฌ๋ค์ ๋ถ์ ๋ชจ๋ธ์ด ํ๊ณ๋ฅผ ๋์ด์๋ ๋ถ๋ถ์ ๋ณด์ํ๋ ๋ฐ ์์ต๋๋ค.
๊ธฐ์ ์ดํด๊ด๊ณ์๋ค์๊ฒ ์์ด ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฏธ๋ก ํด์๋ฉ๋๋ค.
- ์ด์ ํ์ค์ ๋ง์ถฐ Scala ์ฝ๋๋ฅผ ์ค๊ณํ ์ ์๋ ์ํคํ ์ฒ์ ํต์ฐฐ๋ ฅ
- ๋๊ท๋ชจ ๋ฆฌํฉํ ๋ง ๋ฐ ํ๋ํ ๊ณผ์ ์์ ๋ถํ์ค์ฑ ๊ฐ์
- ์ํธ ์์กด์ ์ธ ์์คํ ์ ๊ฐ๋ฐํ๋ ํ ๊ฐ์ ํ์ ๊ฐ์
- ๊ฑฐ๋ฒ๋์ค์ ์ํ ํ๊ฐ๋ฅผ ์ง์ํ๋ ๊ณต์ ๋ ํ๋ ๋ชจ๋ธ
Smart TS XL์ ๊ธฐ์กด Scala ์ ์ ์ฝ๋ ๋ถ์์ ์คํ ๋ฐ ์ข ์์ฑ ์ธํ ๋ฆฌ์ ์ค๋ฅผ ์ถ๊ฐํ์ฌ ๊ธฐ์ ์ด ๊ท์น ์ค์๋ฅผ ๋์ด ์ง์ ํ ํ๋ ์ดํด๋ก ๋์๊ฐ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ์ด๋ฌํ ๋ณํ๋ Scala๋ฅผ ๋จ์ํ ์ธ์ด ์ ํ์ด ์๋ ๋ณต์กํ๊ณ ๋์์์ด ์งํํ๋ ์ํฐํ๋ผ์ด์ฆ ํ๋ซํผ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํ๋ ์กฐ์ง์ ํ์์ ์ ๋๋ค.
์ํฐํ๋ผ์ด์ฆ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ํ Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ
์ํฐํ๋ผ์ด์ฆ Scala ํ๊ฒฝ์์๋ ํด๊ฒฐํด์ผ ํ ํน์ ์ํ์ ๋ฐ๋ผ ๋ค์ํ ๋ฒ์ฃผ์ ์ ์ ๋ถ์์ด ํ์ํฉ๋๋ค. ์ปดํ์ผ ํ์ ์์ ์ฑ ๊ฐํ๋ถํฐ ์๋งจํฑ ๋ฆฌํฉํ ๋ง, ํ๋ซํผ ์์ค์ ํ์ง ๊ด๋ฆฌ๊น์ง ๋ชจ๋ ์๊ตฌ ์ฌํญ์ ํฌ๊ดํ๋ ๋จ์ผ ๋๊ตฌ๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋๋ถ๋ถ์ ์กฐ์ง์ ๊ธฐ๋ฅ ๋ฒ์๋ณด๋ค๋ ๋ช ํํ๊ฒ ์ ์๋ ๋ถ์ ๋ชฉํ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๊ตฌ๋ฅผ ์ ํํ์ฌ ๊ณ์ธตํ๋ ๋๊ตฌ ์ฒด์ธ์ ๊ตฌ์ถํฉ๋๋ค.
๋ค์ ์ ์ ๊ทธ๋ฃน์ ๊ธฐ์ ์ ๋ฌธ์ ํด๊ฒฐ์ ๊ฐ์ฅ ์ ํฉํ Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ฅผ ๋๋ฆฌ ์ฑํํ ๊ทธ๋ฃน์ ๋๋ค. ์ธ๊ธฐ๋ ๊ฐ๋ฐ์ ํธ์์ฑ๋ณด๋ค๋ ์ฑ์๋, ์ํ๊ณ ์ ํฉ์ฑ ๋ฐ ํ์ฅ์ฑ์ ์ค์ ์ ๋์์ต๋๋ค.
๋ชฉํ๋ณ ์ต๊ณ ์ Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ ์ ์
- ์ปดํ์ผ ์๊ฐ ์์ ์ฑ ๋ฐ ์ธ์ด ์ ํ ์ํ
WartRemover๋ Scala ์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ์ ๋๋ค. - ์๋งจํฑ ๋ฆฌํฉํ ๋ง ๋ฐ ๋๊ท๋ชจ ์ฝ๋ ์งํ
Scalafix, SemanticDB ๊ธฐ๋ฐ ํด - ๋ฒ๊ทธ ํ์ง ๋ฐ ์ฝ๋ ์ค๋ฉ ์๋ณ
ํฌ์์, ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ ๋์ (JVM ํตํฉ ์ปจํ ์คํธ) - ์ค์ ์ง์ค์ ์ฝ๋ ํ์ง ๊ด๋ฆฌ ๋ฐ ๋ณด๊ณ
SonarQube(Scala ๋ถ์ ๋๊ตฌ) - CI/CD ํ์ดํ๋ผ์ธ ํตํฉ ๋ฐ ํผ๋๋ฐฑ ์๋ํ
sbt ๋ค์ดํฐ๋ธ ๋ถ์๊ธฐ, SonarQube ํ์ดํ๋ผ์ธ - JVM ๊ธฐ๋ฐ ์์คํ
์์ ์ธ์ด ๊ฐ ๊ฐ์์ฑ ํ๋ณด
SonarQube, JVM ์ ๋ฐ ๋ถ์ ํ๋ซํผ - ์ฌ๋ฌ ํ์ด ์์ฑํ ์ฝ๋๋ฒ ์ด์ค ์ ๋ฐ์ ๊ฑธ์น ์ ์ฑ
๊ธฐ๋ฐ ๊ฐ์ ์ ์ฉ
์ฌ์ฉ์ ์ง์ ๊ท์น ์ธํธ๋ฅผ ์ฌ์ฉํ๋ SonarQube
์ค์นผ๋ผํฝ์ค
๊ณต์ ์ฌ์ดํธ: ์ค์นผ๋ผํ
Scalafix๋ ๋ณต์กํ ์ฝ๋๋ฒ ์ด์ค์์ ๋๊ท๋ชจ ์ฝ๋ ์งํ๋ฅผ ์ง์ํ๋๋ก ์ค๊ณ๋ Scala ๊ธฐ๋ฐ ์ ์ ๋ถ์ ๋ฐ ์๋งจํฑ ๋ฆฌํฉํ ๋ง ํ๋ ์์ํฌ์ ๋๋ค. ๊ตฌ๋ฌธ ํธ๋ฆฌ์๋ง ์์กดํ๋ ๊ท์น ์์ง๊ณผ ๋ฌ๋ฆฌ, Scalafix๋ ์ปดํ์ผ ์ค์ ์์ฑ๋๋ SemanticDB ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์ ์ฒด Scala ํ๋ก์ ํธ์์ ์ฌ๋ณผ, ํ์ , ๋ฉ์๋ ์ฐธ์กฐ ๋ฐ ์ฌ์ฉ ๊ด๊ณ๋ฅผ ๋ถ์ํฉ๋๋ค. ์ด๋ฌํ ์๋งจํฑ ๊ธฐ๋ฐ ๋๋ถ์ Scala ์์คํ ์ด ์ ๋ฉด์ ์ธ ์ฌ์์ฑ์ด ์๋ ์ฅ๊ธฐ๊ฐ์ ๊ฑธ์ณ ์ ์ง์ ์ผ๋ก ๋ฐ์ ํ๋ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์ ํนํ ์ ์ฉํฉ๋๋ค.
์ค์ ๋ก Scalafix๋ ๊ตฌ์กฐ์ ๋ณํ๊ฐ ์ผ์ด๋๋ ์๊ธฐ์ ๊ฐ์ฅ ๋ง์ด ๋์ ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๋์ ๊ณ๊ธฐ๋ก๋ ํ๋ ์์ํฌ ์ ๊ทธ๋ ์ด๋, ๋ด๋ถ API ์ฌ์ฉ ์ค๋จ, ์ฌ๋ฌ ํ๊ณผ ์ ์ฅ์์ ๊ฑธ์ณ ํจํด์ ํ์คํํด์ผ ํ๋ ํ์์ฑ ๋ฑ์ด ์์ต๋๋ค. Scalafix ๊ท์น์ ์ฝ๋๋ฅผ ๊ฐ์งํ๊ณ ์๋์ผ๋ก ์ฌ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์, ์๋ ์์ ์ด ๋ง์ด ํ์ํ ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ์ ์์ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ํน์ง ๋๋ฌธ์ Scalafix๋ ๊ธฐ์กด์ ๊ฒฐํจ ํ์ง ๋๊ตฌ๋ณด๋ค๋ ์งํ ์ ์ด ๋ฉ์ปค๋์ฆ์ ๋ ๊ฐ๊น์ต๋๋ค.
์ํคํ ์ฒ ๊ด์ ์์ Scalafix๋ ์ฝ๋ ๋ณํ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ ๊ณ์ธต์์๋ง ์๋ํฉ๋๋ค. ๋ฐํ์ ์คํ, ๋ฐฐํฌ ํ ํด๋ก์ง ๋๋ ์ด์ ๋์์ ๋ํ ๊ฐ๋ ์ ์์ต๋๋ค. Scalafix์ ๊ฐ์น๋ Scala ์ฝ๋์ ๋ณ๊ฒฝ ๋ฐฉ์์ ์ ํํ๋ ๋ฐ ์์ผ๋ฉฐ, ๋ฐฐํฌ ํ ์ฝ๋ ๋์ ๋ฐฉ์์ ์ค๋ช ํ๋ ๋ฐ ์๋ ๊ฒ์ด ์๋๋๋ค. Scalafix๋ฅผ ๋์ ํ๋ ๊ธฐ์ ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฐํ์, ์ฑ๋ฅ ๋ฐ ์๋น์ค ๊ฐ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค๋ฅธ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํฉ๋๋ค.
ํต์ฌ ์ญ๋
- ํด์๋ ๊ธฐํธ ๋ฐ ์ ํ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ฏธ ๋ถ์
- API ๋ง์ด๊ทธ๋ ์ด์ ๋ฐ ๋ฆฌํฉํ ๋ง ์บ ํ์ธ์ ์ํ ์๋ํ๋ ์ฝ๋ ์ฌ์์ฑ
- ์กฐ์ง๋ณ ์ ์ฝ ์กฐ๊ฑด์ ์ธ์ฝ๋ฉํ๊ธฐ ์ํ ์ฌ์ฉ์ ์ง์ ๊ท์น ๊ฐ๋ฐ
- ํ์ผ ๊ฐ ๋ฐ ๋ชจ๋ ๊ฐ ์ฐธ์กฐ ์ ํจ์ฑ ๊ฒ์ฌ
- sbt ๋ฐ ํ์ค CI ํ์ดํ๋ผ์ธ๊ณผ์ ๋ค์ดํฐ๋ธ ํตํฉ
๊ฐ๊ฒฉ ๋ชจ๋ธ
- ์คํ ์์ค์ด๋ฉฐ ๋ฌด๋ฃ๋ก ์ด์ฉ ๊ฐ๋ฅํฉ๋๋ค.
- ๋ผ์ด์ ์ค ๋น์ฉ์ด๋ ์ฌ์ฉ๋ ๊ธฐ๋ฐ ๋น์ฉ์ด ์์ต๋๋ค.
- ์ด ์์ ๋น์ฉ์ ๊ท์น ์์ฑ, ์ ์ง ๊ด๋ฆฌ ๋ฐ ๊ฒ์ฆ์ ํ์ํ ์์ง๋์ด๋ง ๋ ธ๋ ฅ์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค.
๊ธฐ์ ์ ๋์ ๊ณ ๋ ค ์ฌํญ
- SemanticDB ์์ฑ์ด ํ์ํ๋ฏ๋ก ์ปดํ์ผ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํฉ๋๋ค.
- ํ๊ณผ ์ ์ฅ์์ ๊ท๋ชจ๊ฐ ์ปค์ง์ ๋ฐ๋ผ ๊ท์น ๊ด๋ฆฌ๊ฐ ํ์์ ์ด ๋ฉ๋๋ค.
- ๊ท์ ํ๊ฒฝ์์๋ ์๋ ์ฝ๋ ์์ ๊ธฐ๋ฅ์ ์ ์คํ๊ฒ ๊ฒํ ํด์ผ ํฉ๋๋ค.
์ ํ ์ฌํญ ๋ฐ ๊ตฌ์กฐ์ ์ ์ฝ
- ๋ฐํ์ ์คํ ๊ฒฝ๋ก ๋๋ ์ฑ๋ฅ ๋์์ ํ์ธํ ์ ์์
- ๋์์ฑ ๋ฌธ์ , ๋ถ์ฐ ์์คํ ์ค๋ฅ ๋๋ ํ๊ฒฝ ์ค์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค.
- ํจ๊ณผ์ฑ์ ๊ท์น์ ์ง๊ณผ ์ ์ง ๊ด๋ฆฌ ๊ท์จ์ ํฌ๊ฒ ์ข์ฐ๋ฉ๋๋ค.
- Scala ๊ฒฝ๊ณ๋ฅผ ๋์ด์ ์ธ์ด ๊ฐ ์์กด์ฑ์ ๋ํ ์ ํ์ ์ธ ์ดํด
์ํฐํ๋ผ์ด์ฆ Scala ์ฝ๋๋ฒ ์ด์ค์์ Scalafix๋ ์๋ฏธ๋ก ์ ๊ฐ์ ๋ฐ ์งํ ๋๊ตฌ๋ก ์ดํดํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. ๋๊ท๋ชจ์ ํตํฉ๋ ๋ณ๊ฒฝ ์์ ์ ๋ ์์ ํ๊ณ ๋ฐ๋ณต ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๋ฐ ํ์ํ์ง๋ง, ๋ถ์ฐ ์คํ, ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋๋ ํ๋ซํผ ์์ค ํตํฉ์์ ๋ฐ์ํ๋ ๊ทผ๋ณธ์ ์ธ ๋์ ์ํ์ ํด๊ฒฐํ์ง๋ ๋ชปํฉ๋๋ค.
์ฌ๋ง๊ท ์ ๊ฑฐ์
๊ณต์ ์ฌ์ดํธ: ์ํธ๋ฆฌ๋จธ
WartRemover๋ ์ปดํ์ผ ํ์ ์ ์ ๋ถ์ ๋๊ตฌ๋ก, ํน์ Scala ๊ตฌ๋ฌธ์ ์ฌ์ฉ์ ๊ธ์งํ์ฌ ์๊ฒฉํ ์ธ์ด ์ฌ์ฉ ์ ์ฝ์ ์ ์ฉํฉ๋๋ค. Scala ์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์๋ํ๋ฏ๋ก ์ปดํ์ผ ์ค์ ์๋ฐ ์ฌํญ์ ๊ฐ์งํ๊ณ ๋น๋๋ฅผ ์ฆ์ ์คํจํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฐ์ ์ ์ฉ ์ค์ฌ ๋ชจ๋ธ์ ์ธ์ด ํํ์ ์ต๋ํ๋ณด๋ค๋ ์์ธก ๊ฐ๋ฅ์ฑ, ๋ฐฉ์ด์ ์ฝ๋ฉ, ์ฅ๊ธฐ์ ์ธ ์ ์ง ๊ด๋ฆฌ์ฑ์ ์ฐ์ ์ํ๋ ๊ธฐ์ ํ๊ฒฝ์ ์ ํฉํฉ๋๋ค.
๋๊ท๋ชจ ์กฐ์ง์์๋ Scala ์ฝ๋ ์์ฑ ๋ฐฉ์์ ํ ๊ฐ ํธ์ฐจ๋ฅผ ์ค์ด๊ธฐ ์ํด WartRemover๋ฅผ ๋์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. null, ๊ฐ๋ณ ์ํ, ์์์ ํ๋ณํ, ์์ ํ์ง ์์ ๋ฆฌํ๋ ์ ๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ์ ๊ธ์งํจ์ผ๋ก์จ ์ํคํ ์ฒ ์๋๋ฅผ ๋น๋ ํ๋ก์ธ์ค์ ์ง์ ๋ฐ์ํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์ ์ด์ง๋ฅ ์ด ๋๊ฑฐ๋ ๊ฒฝํ ์์ค์ด ๋ค์ํ ์ฝ๋๋ฒ ์ด์ค์์ ํนํ ์ ์ฉํ๋ฉฐ, ์ด๋ฌํ ํ๊ฒฝ์์๋ ๋น๊ณต์์ ์ธ ๊ฐ์ด๋๋ผ์ธ์ด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฌด๋์ง๊ธฐ ์ฝ์ต๋๋ค.
WartRemover๋ ์ปดํ์ผ ์์ ์ ์๋ํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ ๋ฌธ์ ๊ฐ ์๋ ํจํด์ด ํ์ ํ๊ฒฝ์ผ๋ก ํ์ฐ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ์ด๋ฌํ ์กฐ๊ธฐ ์ ์ฉ์ ํตํด ๊ธฐ์ ์ ํ ์คํธ๋ ์ปดํ์ผ ํ ๋ถ์์ ํตํด ๋ฐ๊ฒฌํ๊ธฐ ์ด๋ ค์ด ์ ํ์ ๊ฒฐํจ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ WartRemover๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ง๋๋ ์๊ฒฉํ ๊ธฐ์ค์ ์ ์คํ ๋ฐฐํฌ ๊ณํ ์์ด ์ฑ์ํ๊ฑฐ๋ ์ค๋๋ ์์คํ ์ ์ ์ฉํ ๊ฒฝ์ฐ ์์คํ ์ด์์ ํผ๋์ ์ด๋ํ ์๋ ์์ต๋๋ค.
ํต์ฌ ์ญ๋
- Scala ์ธ์ด์์ ํ์ฉ๋์ง ์๋ ๊ตฌ๋ฌธ์ ๋ํ ์ปดํ์ผ ์๊ฐ ๊ฐ์ ์ ์ฉ
- ํ์ฉ ๋ฐ ๊ธ์ง ํจํด์ ์ธ๋ฐํ ๊ตฌ์ฑ
- ์ ์ฑ ์๋ฐ ์ ์ฆ์ ๋น๋ ์คํจ
- ์ปดํ์ผ๋ฌ ๋จ๊ณ ์คํ์ผ๋ก ์ธํ ์ต์ํ์ ๋ฐํ์ ์ค๋ฒํค๋
๊ฐ๊ฒฉ ๋ชจ๋ธ
- ์คํ ์์ค ๋ฐ ๋ฌด๋ฃ ์ฌ์ฉ
- ์์ ์ฉ ๋ผ์ด์ ์ค ๋ฑ๊ธ์ด๋ ์ฌ์ฉ๋ ๊ธฐ๋ฐ ์๊ธ์ด ์์ต๋๋ค.
๊ธฐ์ ์ ๋์ ๊ณ ๋ ค ์ฌํญ
- ๊ด๋ฒ์ํ ๋น๋ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋จ๊ณ์ ํ์ฑํ๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ๊ธฐ์กด ๋ชจ๋์ ๊ฒฝ์ฐ ์ ํ์ ์ต์ ๊ฐ ํ์ํ ์ ์์ต๋๋ค.
- ์์ ๊ณผ ๊ฐ๋ฐ์ ์์ฐ์ฑ์ ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํด์๋ ๊ฐ๋ ฅํ ๊ฑฐ๋ฒ๋์ค๊ฐ ํ์ํ๋ค
์ ํ ์ฌํญ ๋ฐ ๊ตฌ์กฐ์ ์ ์ฝ
- ์ด์ง๋ฒ ์ ์ฉ ๋ชจ๋ธ์ ๋งฅ๋ฝ์ ๋ฏธ๋ฌํจ์ ๊ฑฐ์ ๋ฐ์ํ์ง ๋ชปํฉ๋๋ค.
- ๊ตฌ๋ฌธ ๋ฐ ์ ํ ์์ค ๊ฒ์ฌ ์ธ์๋ ๋ถ์ ๊น์ด๊ฐ ์ ํ์ ์ ๋๋ค.
- ๋ ผ๋ฆฌ์ ๊ฒฐํจ, ์ํคํ ์ฒ ์๋ฐ ๋๋ ๋ฐํ์ ์ํ์ ๊ฐ์งํ์ง ๋ชปํฉ๋๋ค.
- ๋ชจ๋ ๊ฐ ์คํ์ด๋ ์์คํ ์์ค ๋์์ ๋ํ ๊ฐ์์ฑ์ด ์์ต๋๋ค.
์ํฐํ๋ผ์ด์ฆ Scala ํ๊ฒฝ์์ WartRemover๋ ๋ถ์ ์์ง์ด๋ผ๊ธฐ๋ณด๋ค๋ ์๋ฐฉ์ ์ ์ด ๋๊ตฌ๋ก ๊ธฐ๋ฅํฉ๋๋ค. ํ์ ๋ถ๊ฐ๋ฅํ ์ธ์ด ์ ์ฝ ์กฐ๊ฑด์ ๊ฐ์ ํ๋ ๋ฐ ๊ฐ์ฅ ํจ๊ณผ์ ์ด์ง๋ง, ์๋ฏธ๋ก ์ ์ ํ์ฑ, ์ํคํ ์ฒ ๋ฌด๊ฒฐ์ฑ ๋ฐ ์ด์ ์ํ์ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ค๋ฅธ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์์ฃ ์ผ์
๊ณต์ ์ฌ์ดํธ: ์์ฃ ์ผ์
Scapegoat๋ Scala ์ฝ๋๋ฒ ์ด์ค์์ ๋ฒ๊ทธ, ์ฝ๋ ์ค๋ฉ, ์ ์ง๋ณด์์ฑ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐ ์ด์ ์ ๋ง์ถ ์ ์ ๋ถ์ ๋๊ตฌ์ ๋๋ค. ์ปดํ์ผ ํ ์คํ๋๋ฉฐ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ฅผ ๊ฒ์ฌํ์ฌ ๋ ผ๋ฆฌ์ ์ค๋ฅ, ์์ ํ์ง ์์ ๊ตฌ์กฐ ๋๋ ์ฅ๊ธฐ์ ์ธ ์ ์ง๋ณด์ ์ํ๊ณผ ๊ด๋ จ๋ ํจํด์ ํ์งํฉ๋๋ค. ์ํฐํ๋ผ์ด์ฆ Scala ํ๊ฒฝ์์ Scapegoat๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฆฌํฉํ ๋ง์ด๋ ๊ฐ์ ์กฐ์น ๋ฉ์ปค๋์ฆ๋ณด๋ค๋ ๊ฒฐํจ ๋ฐ๊ฒฌ ๊ณ์ธต์ผ๋ก ํ์ฉ๋ฉ๋๋ค.
์ด ๋๊ตฌ๋ ๋๊ท๋ชจ ํ ์ ์ฒด์ ๊ธฐ๋ณธ ์ฝ๋ ์ ๋ฆฌ ์ํ๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฏธ๋ฆฌ ์ ์๋ ๊ฒ์ฌ ํญ๋ชฉ๋ค์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ, ์์ ํ์ง ์์ ๋๋ฑ์ฑ ๊ฒ์ฌ, ๋ถ์ ์ ํ ์์ธ ์ฒ๋ฆฌ, ์ง๋์น๊ฒ ๋ณต์กํ ํํ์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ค์ ๋์์ผ๋ก ํฉ๋๋ค. ์ด๋ฌํ ๊ฒ์ฌ ๊ฒฐ๊ณผ๋ ์ฌ๊ฐ๋๋ณ๋ก ๋ถ๋ฅ๋์ด, ์กฐ์ง์์ ๋จ์ํ ๊ฒฝ๊ณ ์ ์ฆ๊ฐ์ ์ธ ์์ ์ด ํ์ํ ๊ฒฐํจ์ ๊ตฌ๋ถํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฌํ ์ฐ์ ์์ ์ง์ ์ ์ฒ ์ ํ ์ ๋ฆฌ๊ฐ ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ๊ฑฐ๋ ๋ฐ๋์งํ์ง ์์ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์์ ํนํ ์ ์ฉํฉ๋๋ค.
Scapegoat๋ sbt์ ๊ธฐ๋ณธ์ ์ผ๋ก ํตํฉ๋๋ฉฐ HTML ๋ฐ CI ํ์ดํ๋ผ์ธ์ ์ ํฉํ ๊ธฐ๊ณ ํ๋ ๊ฐ๋ฅ ์ถ๋ ฅ ๋ฑ ๋ค์ํ ํ์์ผ๋ก ๋ณด๊ณ ์๋ฅผ ์์ฑํฉ๋๋ค. ๊ธฐ์ ์์๋ ์ด๋ฌํ ๋ณด๊ณ ์๋ฅผ ์๊ฒฉํ ๊ฒฐํจ ๊ฐ์ ์ ์ฉ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ๊ธฐ๋ณด๋ค๋ ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ๊ฒฐํจ ์ถ์ธ๋ฅผ ํ์ ํ๋ ๋ฐ ํ์ฉํฉ๋๋ค. ์ด๋ฌํ ์ฌ์ฉ ํจํด์ Scapegoat๊ฐ ์๊ฒฉํ ๊ฒฐํจ ๊ฐ์ ์ ์ฉ ๋๊ตฌ๋ผ๊ธฐ๋ณด๋ค๋ ์ฝ๋ ํ์ง ๊ด์ฐฐ ๋๊ตฌ๋ก์ ๊ฐ์ ์ ๊ฐ์ง๊ณ ์์์ ๋ณด์ฌ์ค๋๋ค.
์ํคํ ์ฒ ๊ด์ ์์ ๋ณผ ๋, Scapegoat๋ ๊ฐ๋ณ Scala ํ๋ก์ ํธ์ ๊ฒฝ๊ณ ๋ด์์ ์๋ํฉ๋๋ค. ์ ์ฅ์ ๊ฐ ์ข ์์ฑ, ๋ถ์ฐ ์คํ ๋๋ ๋ฐํ์ ๋์์ ๋ํด์๋ ๋ถ์ํ์ง ์์ต๋๋ค. Scapegoat์ ๋ถ์์ ์ ์ ์ด๊ณ ํจํด ๊ธฐ๋ฐ์ด๋ฏ๋ก ์๋ ค์ง ๋ฌธ์ ๋ฅผ ํ์งํ๋ ๋ฐ๋ ํจ๊ณผ์ ์ด์ง๋ง ๊ตฌ์ฑ ์์ ๊ฐ์ ๋ณต์กํ ์ํธ ์์ฉ์์ ๋ฐ์ํ๋ ์๋ก์ด ์ํ์ ์๋ณํ๋ ๋ฐ๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
ํต์ฌ ์ญ๋
- ํํ ๋ฐ์ํ๋ Scala ๋ฒ๊ทธ ๋ฐ ์ฝ๋ ์ค๋ฉ ํ์ง
- ์๊ฒฌ์ ์ฌ๊ฐ๋ ๊ธฐ๋ฐ ๋ถ๋ฅ
- ๊ด๋ฒ์ํ ์ ์ฉ ๋ฒ์๋ฅผ ๊ฐ์ง ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ท์น ์ธํธ
- CI ์นํ์ ์ธ ๋ณด๊ณ ํ์์ ์ง์ํ๋ sbt ํตํฉ
๊ฐ๊ฒฉ ๋ชจ๋ธ
- ์คํ ์์ค ๋ฐ ๋ฌด๋ฃ ์ฌ์ฉ
- ๋ผ์ด์ ์ค ๋น์ฉ์ด๋ ์ฌ์ฉ๋ ๊ธฐ๋ฐ ๋น์ฉ์ด ์์ต๋๋ค.
- ์ํ๊ณ ์ ๊ณต์ ์ฒด๋ฅผ ํตํด ์ ํ์ ์์ ์ ์ง์์ ๋ฐ์ ์ ์์ต๋๋ค.
๊ธฐ์ ์ ๋์ ๊ณ ๋ ค ์ฌํญ
- ์๊ฒฉํ ๋น๋ ๊ฐ์ ์ ์ฉ๋ณด๋ค๋ ์ถ์ธ ๋ถ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
- ๊ณ ๋๋ก ์ถ์ํ๋ ์ฝ๋๋ฒ ์ด์ค์์ ๋ ธ์ด์ฆ๋ฅผ ์ค์ด๊ธฐ ์ํ ์กฐ์ ์ด ํ์ํฉ๋๋ค.
- ์กฐ์ฌ ๊ฒฐ๊ณผ๋ ์ข ์ข ๊ฒฝํ ๋ง์ ์์ง๋์ด์ ๋งฅ๋ฝ์ ๊ฒํ ๊ฐ ํ์ํฉ๋๋ค.
์ ํ ์ฌํญ ๋ฐ ๊ตฌ์กฐ์ ์ ์ฝ
- ์๋ฏธ๋ก ์ ๋๊ตฌ์ ๋นํด ๊ท์น ์งํฉ์ ํ์ฅ์ฑ์ด ์ ํ์ ์ ๋๋ค.
- ํจ์ํ ์ฝ๋ ๋๋ ์ผ๋ฐํ๋ ์ฝ๋์์ ์คํ๋ฅ ์ด ๋ ๋์ต๋๋ค.
- ๋ฐํ์ ์คํ์ด๋ ๋ถ์ฐ ํ๊ฒฝ์ ๋ํ ์ดํด๊ฐ ์ ํ ์์
- ์ํคํ ์ฒ ๋๋ ์ข ์์ฑ ์์ค์ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค.
์ํฐํ๋ผ์ด์ฆ Scala ์ฝ๋๋ฒ ์ด์ค์์ Scapegoat๋ ๋ฐ๋ณต๋๋ ๊ฒฐํจ ํจํด๊ณผ ์ ์ง๋ณด์ ๋ฌธ์ ๋ฅผ ๋๋ฌ๋ด๋ ์ค์ฉ์ ์ธ ๋ฉ์ปค๋์ฆ ์ญํ ์ ํฉ๋๋ค. ๊ทธ ๊ฐ์น๋ ์ฌ์ธต์ ์ธ ์๋ฏธ๋ก ์ ๋๋ ํ์ ๋ถ์๋ณด๋ค๋ ๊ด๋ฒ์ํ ๊ฐ์์ฑ๊ณผ ์กฐ๊ธฐ ๊ฒฝ๊ณ ์ ์์ผ๋ฉฐ, ๋ฐ๋ผ์ ๋ ๋ฆฝ์ ์ธ ์๋ฃจ์ ์ด๋ผ๊ธฐ๋ณด๋ค๋ ๋ ํฐ ์ ์ ๋ถ์ ๋๊ตฌ ์ฒด์ธ์ ๋ณด์ ๊ตฌ์ฑ ์์๋ก ์ฌ์ฉ๋ฉ๋๋ค.
SonarQube(Scala ๋ถ์ ๋๊ตฌ)
๊ณต์ ์ฌ์ดํธ: ์๋ํ๋ธ
SonarQube๋ ๋๊ท๋ชจ ๋ค๊ตญ์ด ์ฝ๋๋ฒ ์ด์ค ์ ๋ฐ์ ๊ฑธ์ณ ์ค์ ์ง์ค์ ๊ฐ์์ฑ์ ์ ๊ณตํ๋๋ก ์ค๊ณ๋ ์ํฐํ๋ผ์ด์ฆ๊ธ ์ ์ ๋ถ์ ๋ฐ ์ฝ๋ ํ์ง ๊ด๋ฆฌ ํ๋ซํผ์ ๋๋ค. Scala ํ๊ฒฝ์์ SonarQube๋ ์ฌ์ธต์ ์ธ ์ธ์ด๋ณ ๋ถ์ ๊ธฐ๋ฅ๋ณด๋ค๋ ์ผ๊ด๋ ํ์ง ์ ์ฑ ์ํ, ๊ธฐ์ ๋ถ์ฑ ์ถ์ธ ์ถ์ , ๊ทธ๋ฆฌ๊ณ ํ๊ณผ ์ ์ฅ์ ์ ๋ฐ์ ๊ฑธ์น ๊ฐ์ฌ ์ค๋น ๋ณด๊ณ ์๋ฅผ ์ ๊ณตํ๋ ๊ธฐ๋ฅ ๋๋ฌธ์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. SonarQube์ Scala ๋ถ์๊ธฐ๋ ๋ ๋ฆฝ์ ์ธ ๋ถ์ ์์ง์ผ๋ก ์๋ํ๋ ๊ฒ์ด ์๋๋ผ ์ด๋ฌํ ๊ด๋ฒ์ํ ๊ด๋ฆฌ ํ๋ ์์ํฌ ๋ด์์ ์๋ํฉ๋๋ค.
๊ธฐ์ ์กฐ์ง์์ SonarQube๋ ์์ง๋์ด๋ง, ์ํ ๊ด๋ฆฌ ๋ฐ ๊ท์ ์ค์์ ๊ต์ฐจ์ ์ ์์นํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. Scala ํ๋ก์ ํธ๋ Java, Kotlin ๋ฐ ๊ธฐํ JVM ์ธ์ด์ ํจ๊ป ๋ถ์๋๋ฏ๋ก ํ๋ซํผ ์ฑ ์์๋ ์ผ๊ด๋ ํ์ง ๊ฒ์ดํธ ๋ฐ ๋ณด๊ณ ํ์ค์ ์ ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ธ์ด ๊ฐ ๊ฐ์์ฑ์ Scala ์๋น์ค๊ฐ Java ๊ธฐ๋ฐ ํ๋ซํผ ๋๋ ๊ณต์ ์ธํ๋ผ ๊ตฌ์ฑ ์์์ ๊ธด๋ฐํ๊ฒ ์ํธ ์์ฉํ๋ ์ด๊ธฐ์ข ํ๊ฒฝ์์ ํนํ ์ ์ฉํฉ๋๋ค.
๊ธฐ๋ฅ์ ์ธ ๊ด์ ์์ SonarQube์ Scala ๋ถ์๊ธฐ๋ ์ฝ๋ ์ค๋ฉ, ๊ธฐ๋ณธ์ ์ธ ๋ฒ๊ทธ ํจํด, ๊ทธ๋ฆฌ๊ณ JVM ์ธ์ด ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๋ฐํํ ์ ์๋ ๋ณด์ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ํ์งํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ๋ถ์ ๊ฒฐ๊ณผ๋ ๋์๋ณด๋์ ์ง๊ณ๋์ด ์ ์ง๋ณด์์ฑ, ์์ ์ฑ, ๋ณด์ ์ธก๋ฉด์ ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ผ ๋ณด์ฌ์ค๋๋ค. SonarQube๋ ์ผ์์ ์ธ ๋ฆฌํฉํ ๋ง ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ฐ ์ฌ์ฉ๋๊ธฐ๋ณด๋ค๋, ํฌํธํด๋ฆฌ์ค ์์ค์ ํ๊ฐ ๋ฐ ๋ฆด๋ฆฌ์ค ์ค๋น ๋ ผ์์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ฃผ๋ก ํ์ฉ๋ฉ๋๋ค.
ํตํฉ์ SonarQube์ ์ฃผ์ ๊ฐ์ ์ค ํ๋์ ๋๋ค. ์ผ๋ฐ์ ์ธ CI/CD ์์คํ , ์์ค ์ ์ด ํ๋ซํผ ๋ฐ ์ํฐํ๋ผ์ด์ฆ ID ๊ณต๊ธ์์ ํตํฉ๋ฉ๋๋ค. Scala ์ค์ฌ ์กฐ์ง์์ ์ด๋ฌํ ํตํฉ์ ๋ชจ๋ ํ์ ์ฌ๋ ์๋ Scala ์ ๋ฌธ ์ง์์ด ํ์ํ์ง ์๋๋ก ๋ถ์ ์ํฌํ๋ก๋ฅผ ํ์คํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ถ์ํ ๊ณ์ธต์ผ๋ก ์ธํด SonarQube๊ฐ ๊ณ ๊ธ Scala ์ธ์ด ๊ธฐ๋ฅ์ ์ฌ์ธต์ ์ผ๋ก ๋ถ์ํ๋ ๋ฐ์๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
ํต์ฌ ์ญ๋
- ๋ค์ํ ์ธ์ด์ ๊ฑธ์ณ ์ค์ ์ง์ค์ ์ฝ๋ ํ์ง ๋์๋ณด๋
- CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉ๋ ํ์ง ๊ฒ์ดํธ
- ๊ธฐ์ ๋ถ์ฑ ๋ฐ ๊ฒฐํจ ์ถ์ธ์ ๋ํ ๊ณผ๊ฑฐ ์ถ์
- Scala ๋ฐ JVM ๊ธฐ๋ฐ ์์คํ ์ ์ํ ํตํฉ ๊ฑฐ๋ฒ๋์ค
- ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด ๋ฐ ๊ฐ์ฌ ์นํ์ ์ธ ๋ณด๊ณ ๊ธฐ๋ฅ
๊ฐ๊ฒฉ ๋ชจ๋ธ
- ๊ธฐ๋ฅ์ด ์ ํ๋ ์ปค๋ฎค๋ํฐ ์๋์ ์ ์ด์ฉํ ์ ์์ต๋๋ค.
- ์์ฉ ๋ฒ์ ์ ๋ถ์๋ ์ฝ๋ ๋ผ์ธ ์์ ๋ฐ๋ผ ๊ฐ๊ฒฉ์ด ์ฑ ์ ๋ฉ๋๋ค.
- ๊ธฐ์ ์ฉ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ ๋์ ๋ฑ๊ธ์ ๊ตฌ๋ ์ด ํ์ํฉ๋๋ค.
๊ธฐ์ ์ ๋์ ๊ณ ๋ ค ์ฌํญ
- ์ ์ฑ ์งํ ๋ฐ ๊ณ ์ ๊ฒฝ์์ง ๋ณด๊ณ ์ ํจ๊ณผ์ ์ ๋๋ค.
- ์ผ๋ฐ์ ์ธ ์งํ์ ์ง๋์น๊ฒ ์น์คํ์ง ์๋๋ก ๋ณด์ ์ด ํ์ํฉ๋๋ค.
- ์ค์นผ๋ผ ๋ค์ดํฐ๋ธ ๋๊ตฌ๋ฅผ ๋ณด์ํ๋ ์ฉ๋๋ก ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
์ ํ ์ฌํญ ๋ฐ ๊ตฌ์กฐ์ ์ ์ฝ
- ๊ณ ๊ธ Scala ๊ตฌ๋ฌธ ๋ฐ ๊ด์ฉ๊ตฌ์ ๋ํ ์ดํด๊ฐ ๋ถ์กฑํฉ๋๋ค.
- Scala ์ ์ฉ ๋ถ์๊ธฐ์ ๋นํด ์๋ฏธ๋ก ์ ๊น์ด๊ฐ ์์ต๋๋ค.
- ๋ฐํ์ ๋์์ด๋ ์คํ ์ข ์์ฑ์ ๋ํ ๊ฐ์์ฑ์ด ์์
- ์ํคํ ์ฒ์ ๋ํ ํต์ฐฐ๋ ฅ๋ณด๋ค๋ ๊ท์ ์ค์ ์ ํธ์ ์ด์ ์ ๋ง์ถฅ๋๋ค.
์ํฐํ๋ผ์ด์ฆ Scala ์ฝ๋๋ฒ ์ด์ค์์ SonarQube๋ ์ฃผ์ ๋ถ์ ์์ง์ด๋ผ๊ธฐ๋ณด๋ค๋ ๊ฑฐ๋ฒ๋์ค ๋ฐ ๊ฐ์์ฑ ๊ณ์ธต ์ญํ ์ ํฉ๋๋ค. ์ผ๊ด์ฑ, ์ถ์ ์ฑ ๋ฐ ์กฐ์ง์ ์ ๋ ฌ์ ์ ๊ณตํ์ง๋ง, ์ฌ์ธต์ ์ธ ์๋ฏธ๋ก ์ ์ดํด๋ ๋ฆฌํฉํ ๋ง ์์ ์ฑ์ด ์๊ตฌ๋๋ ๊ฒฝ์ฐ์๋ Scala ๋ค์ดํฐ๋ธ ๋๊ตฌ๋ฅผ ๋์ฒดํ์ง ์์ต๋๋ค.
Scala ์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ ๋ฐ ํ๋๊ทธ
๊ณต์ ์ฌ์ดํธ: ์ค์นผ๋ผ
Scala ์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ๊ณผ ๋ด์ฅ ์ปดํ์ผ๋ฌ ํ๋๊ทธ๋ Scala ์ํ๊ณ์์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ์ ์ ์ ๋ถ์ ๋๊ตฌ์ ๋๋ค. ์ด๋ฌํ ๋ฉ์ปค๋์ฆ์ ์ธ๋ถ ๋๊ตฌ๋ก ์๋ํ๋ ๊ฒ์ด ์๋๋ผ ์ปดํ์ผ ํ๋ก์ธ์ค์ ์ง์ ๋ด์ฅ๋์ด ์ฝ๋ ๊ฒ์ฆ ๋ฐ ๋ณํ ๋ฐฉ์์ ์ธ๋ถ์ ์ผ๋ก ์ ์ดํ ์ ์๋๋ก ํฉ๋๋ค. ๊ธฐ์ ํ๊ฒฝ์์๋ ๋ชจ๋ Scala ํ๋ก์ ํธ์ ๊ฑธ์ณ ์ต์ํ์ ํ์ง ๋ฐ ์์ ๊ธฐ์ค์ ์ ์ฉํ๊ธฐ ์ํ ๊ธฐ๋ณธ ์ ์ด ์๋จ์ผ๋ก ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
์๊ฒฉํ ๊ฒฝ๊ณ ์ค์ , ์ฌ์ฉ๋์ง ์๋ ์ฝ๋ ๊ฐ์ง, ์ฌ์ฉ ์ค๋จ ๊ฐ์ ์ ์ฉ๊ณผ ๊ฐ์ ์ปดํ์ผ๋ฌ ํ๋๊ทธ๋ฅผ ํตํด ์กฐ์ง์ ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ ์ด๊ธฐ์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ๊ฒฝ๊ณ ๋ฅผ ์ค๋ฅ๋ก ์ ํํจ์ผ๋ก์จ ํ์ ๋ฌธ์ ๊ฐ ์๋ ํจํด์ด ํ๋ก๋์ ๊ฒฐ๊ณผ๋ฌผ์ ํฌํจ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ์ ํน์ ์ปดํ์ผ ๋จ๊ณ์์ ์ฌ์ฉ์ ์ง์ ๋ถ์ ๋๋ ๋ณํ ๋ก์ง์ ํ์ฑํํ์ฌ ์ปดํ์ผ๋ฌ์ ๋ด๋ถ ์ฝ๋ ํํ์ ๋ํ ์ฌ์ธต์ ์ธ ์ ๊ทผ์ ์ ๊ณตํจ์ผ๋ก์จ ์ด๋ฌํ ๊ธฐ๋ฅ์ ํ์ฅํฉ๋๋ค.
์ํฐํ๋ผ์ด์ฆ ์ํคํ ์ฒ ๊ด์ ์์ ์ปดํ์ผ๋ฌ ๊ธฐ๋ฐ ๋ถ์์ ์ถ๊ฐ์ ์ธ ํด๋ง์ด ํ์ํ์ง ์๋ค๋ ์ ์์ ๋งค๋ ฅ์ ์ ๋๋ค. ๊ธฐ์กด ๋น๋ ํ์ดํ๋ผ์ธ๊ณผ ์์ฐ์ค๋ฝ๊ฒ ํตํฉ๋๋ฉฐ, ๋ณ๋์ ์ธํ๋ผ, ๋์๋ณด๋ ๋๋ ๋ณด๊ณ ์์คํ ์ด ํ์ํ์ง ์์ต๋๋ค. ์ด๋ฌํ ๋จ์์ฑ ๋๋ถ์ ์ปดํ์ผ๋ฌ ํ๋๊ทธ์ ํ๋ฌ๊ทธ์ธ์ ํด์ฒด์ธ ํ์ฐ์ ์ต์ํํ๊ณ ์ฌํ์ฑ์ด ์ค์ํ ์๊ฒฉํ ๊ท์ ํ๊ฒฝ์ ํนํ ์ ํฉํฉ๋๋ค.
ํ์ง๋ง ์ด๋ฌํ ์ ์์ค ํตํฉ ๋ฐฉ์์ ์ค์ง์ ์ธ ํ๊ณ๋ฅผ ์ด๋ํฉ๋๋ค. ์ปดํ์ผ๋ฌ ํผ๋๋ฐฑ์ ๋ณธ์ง์ ์ผ๋ก ์ธ๋ถํ๋์ด ์๊ณ ์ง์ญ์ ์ ๋๋ค. ๋ฉ์์ง๋ ์ผ๋ฐ์ ์ผ๋ก ์์ ์์ค์ ์ง๊ณ๋ ์ปจํ ์คํธ ์์ด ํ์ผ๋ณ ๋๋ ์ฌ๋ณผ๋ณ๋ก ์ถ๋ ฅ๋ฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ปดํ์ผ๋ฌ ๊ธฐ๋ฐ ๋ถ์์ ๊ท์น์ ๊ฐ์ ํ๋ ๋ฐ๋ ํจ๊ณผ์ ์ด์ง๋ง, ๋ ๊ด๋ฒ์ํ ์ํคํ ์ฒ ๋๋ ๋์ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ์ค๋ช ํ๋ ๋ฐ๋ ์ ํฉํ์ง ์์ต๋๋ค.
ํต์ฌ ์ญ๋
- ๊ฒฝ๊ณ ๋ฐ ์ค๋ฅ๋ฅผ ํตํด ์๊ฒฉํ ์ปดํ์ผ ๊ท์น์ ์ํํฉ๋๋ค.
- ์ฌ์ฉ๋์ง ์๋ ์ฝ๋, ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ API ๋ฐ ์์ ํ์ง ์์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์งํฉ๋๋ค.
- ํน์ ๊ฒ์ฌ ๋๋ ๋ณํ์ ์ํ ์ฌ์ฉ์ ์ง์ ์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ
- ์คํ ์๊ฐ ์ค๋ฒํค๋๊ฐ ์ ํ ์๊ณ ์ธ๋ถ ๋๊ตฌ์ ๋ํ ์์กด์ฑ๋ ์์ต๋๋ค.
๊ฐ๊ฒฉ ๋ชจ๋ธ
- Scala ํด์ฒด์ธ์ ์ผ๋ถ๋ก ํฌํจ๋์ด ์์ต๋๋ค.
- ๋ผ์ด์ ์ค ๋น์ฉ์ด๋ ๊ตฌ๋ ๋ฃ๊ฐ ์์ต๋๋ค.
- ๋ง์ถคํ ํ๋ฌ๊ทธ์ธ ๊ฐ๋ฐ์ ํ์ํ ์์ง๋์ด๋ง ๋ ธ๋ ฅ
๊ธฐ์ ์ ๋์ ๊ณ ๋ ค ์ฌํญ
- ๋ชจ๋ Scala ํ๋ก์ ํธ์์ ๊ธฐ์ค์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ์ ๋งค์ฐ ์ ํฉํฉ๋๋ค.
- ๊ณ ๊ธ ์ฌ์ฉ์ ์ ์๋ฅผ ์ํด์๋ ์ปดํ์ผ๋ฌ์ ๋ํ ์ฌ๋ ์๋ ์ง์์ด ํ์ํฉ๋๋ค.
- ํผ๋๋ฐฑ์ ๊ฒฝํ์ด ํ๋ถํ ์์ง๋์ด๊ฐ ํด์ํด์ผ ํฉ๋๋ค.
์ ํ ์ฌํญ ๋ฐ ๊ตฌ์กฐ์ ์ ์ฝ
- ๊ทน๋๋ก ๋ฎ์ ์์ค์ ๋จํธ์ ์ธ ๋ถ์ ๊ฒฐ๊ณผ
- ์ง๊ณ ๊ธฐ๋ฅ์ด๋ ์์คํ ์ ์ฒด ๊ฐ์์ฑ์ด ์์ต๋๋ค.
- ๋ชจ๋ ๊ฐ ์คํ์ด๋ ๋ฐํ์ ๋์์ ๋ํด ์ถ๋ก ํ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ์ ์ ํ๋ฌ๊ทธ์ธ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ ์ง ๊ด๋ฆฌ ๋ถ๋ด์ ์ฆ๊ฐ์ํต๋๋ค.
์ํฐํ๋ผ์ด์ฆ Scala ์ฝ๋๋ฒ ์ด์ค์์ ์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ๊ณผ ํ๋๊ทธ๋ ๋ถ์ ๋๊ตฌ๋ผ๊ธฐ๋ณด๋ค๋ ๊ธฐ๋ณธ์ ์ธ ์์ ์ฅ์น ์ญํ ์ ํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ์ด๊ธฐ ๋จ๊ณ์์ ๊ท์น์ ๊ฐ์ ํ๊ณ ์ผ๊ด์ฑ์ ์ ์งํ๋๋ก ๋์์ฃผ์ง๋ง, ์์คํ ์ ๋ฐ์ ์ํ, ์งํ ๋ฐ ์ด์ ๋ณต์ก์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ ๋์ ์์ค์ ๋ถ์์ด ํ์ํฉ๋๋ค.
SemanticDB ํด๋ง ์ํ๊ณ
๊ณต์ ์ฌ์ดํธ: SemanticDB
SemanticDB๋ ๋ ๋ฆฝ์ ์ธ ์ ์ ๋ถ์ ๋๊ตฌ๋ผ๊ธฐ๋ณด๋ค๋ ์๋ฏธ ์ ๋ณด ๊ณ์ธต์ ๋๋ค. ์ปดํ์ผ ๊ณผ์ ์์ Scala ์์ค ์ฝ๋์์ ์ถ์ถํ ์ฌ๋ณผ, ํ์ , ์ฐธ์กฐ์ ๋ํ ๊ตฌ์กฐํ๋ ํํ์ ์ ๊ณตํฉ๋๋ค. ์ํฐํ๋ผ์ด์ฆ Scala ํ๊ฒฝ์์ SemanticDB๋ ๊ณ ๊ธ ์ ์ ๋ถ์ ๋ฐ ๋ฆฌํฉํ ๋ง ๋๊ตฌ๊ฐ ์ฝ๋ ๊ตฌ์กฐ์ ์๋ฏธ๋ฅผ ๋ ๊น์ด ์ดํดํ ์ ์๋๋ก ์ง์ํ๋ ํต์ฌ ๊ธฐ์ ์ ๋๋ค.
SemanticDB๋ ๋ณธ์ง์ ์ผ๋ก ์์ ๊ตฌ๋ฌธ ํธ๋ฆฌ์ ์๋ฏธ๋ก ์ ์ผ๋ก ์๋ฏธ ์๋ ๋ถ์ ์ฌ์ด์ ๊ฐ๊ทน์ ๋ฉ์์ค๋๋ค. ์์ ํ ํด์๋ ์ฌ๋ณผ ์ ๋ณด๋ฅผ ์บก์ฒํจ์ผ๋ก์จ, ์ฌ๋ฌ ๋ชจ๋๋ก ๊ตฌ์ฑ๋ ์์คํ ์์ ๋ฉ์๋๊ฐ ์ค์ ๋ก ์ด๋์์ ํธ์ถ๋๋์ง, ๋๋ ํ์ ์ด ์ถ์ํ ๊ณ์ธต์ ๊ฑฐ์ณ ์ด๋ป๊ฒ ์ ํ๋๋์ง์ ๊ฐ์ด ์ ์ ์ผ๋ก๋ ํ์ ํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ๋ถ๊ฐ๋ฅํ ์ง๋ฌธ์ ๋ํ ๋ต์ ๋๊ตฌ๊ฐ ์ฐพ์ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ์๋ฌต์ ํด์๊ณผ ํ์ ์ถ๋ก ์ผ๋ก ์ธํด ์ ์ด ํ๋ฆ์ด ๋ชจํธํด์ง๋ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์์ ํนํ ์ ์ฉํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๊ธฐ์ ์ SemanticDB๋ฅผ ๊ฐ์ ์ ์ผ๋ก ํ์ฉํฉ๋๋ค. Scalafix, IDE ๋ถ์ ๋๊ตฌ, ์์ฒด ๊ฐ๋ฐ ํ๋ซํผ๊ณผ ๊ฐ์ ๋๊ตฌ๋ค์ SemanticDB ์ํฐํฉํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์์ค ๋ถ์์ ์ํํฉ๋๋ค. ํ๋ํ ๋๋ ๋ฆฌํฉํ ๋ง ํ๋ก์ ํธ์์ SemanticDB ๊ธฐ๋ฐ ๋๊ตฌ๋ ์ถ๋ก ๋ ๊ฐ์ ์ด ์๋ ์ค์ ์ฌ์ฉ ํจํด์ ๋ฐ์ํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํจ์ผ๋ก์จ ๋์ฑ ์์ ํ ๋ณํ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ด์์ ์ธ ๊ด์ ์์ SemanticDB๋ฅผ ํ์ฑํํ๋ฉด ๋น๋ ํ๋ก์ธ์ค๊ฐ ๋์ฑ ๋ณต์กํด์ง๋๋ค. ์ปดํ์ผ ์ ์๋งจํฑ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋๋ก ๊ตฌ์ฑํด์ผ ํ๋ฏ๋ก ๋น๋ ์๊ฐ๊ณผ ์ํฐํฉํธ ๊ด๋ฆฌ ์ค๋ฒํค๋๊ฐ ์ฆ๊ฐํฉ๋๋ค. ๋๊ท๋ชจ ์กฐ์ง์์๋ ์ผ๊ด๋ ๊ตฌ์ฑ๊ณผ ํธํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ฌ๋ฌ ํ ๊ฐ์ ํ์ ์ด ํ์์ ์ ๋๋ค.
ํต์ฌ ์ญ๋
- ์ปดํ์ผ ์ค ํ๋ถํ ์๋ฏธ๋ก ์ ๋ฉํ๋ฐ์ดํฐ ์์ฑ
- ํ์ผ ๋ฐ ๋ชจ๋ ์ ๋ฐ์ ๊ฑธ์ณ ์ ํํ ๊ธฐํธ ๋ฐ ์ ํ ํด๊ฒฐ
- ๊ณ ๊ธ ๋ฆฌํฉํ ๋ง ๋ฐ ์ ์ ๋ถ์ ๋๊ตฌ์ ๊ธฐ์ด
- sbt, IDE ๋ฐ ์ฌ์ฉ์ ์ง์ ๋ถ์ ํ์ดํ๋ผ์ธ๊ณผ์ ํธํ์ฑ
๊ฐ๊ฒฉ ๋ชจ๋ธ
- ์คํ ์์ค์ด๋ฉฐ ๋ฌด๋ฃ๋ก ์ด์ฉ ๊ฐ๋ฅํฉ๋๋ค.
- ๋ผ์ด์ผ์ค ๋น์ฉ ์์
- ํ์ ์ค๋น ๊ตฌ์ถ ๋๋ ํตํฉ์ ํ์ํ ์์ง๋์ด๋ง ํฌ์
๊ธฐ์ ์ ๋์ ๊ณ ๋ ค ์ฌํญ
- ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๋๊ตฌ๋ผ๊ธฐ๋ณด๋ค๋ ์ธํ๋ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ฐ์น๋ฅผ ์ฐฝ์ถํ๋ ค๋ฉด ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฑธ์ณ ํ์คํ๊ฐ ํ์ํฉ๋๋ค.
- ์ฝ๋๋ฒ ์ด์ค์ ํฌ๊ธฐ์ ๋ณต์ก์ฑ์ด ์ปค์ง์๋ก ์ด์ ๋ ์ปค์ง๋๋ค.
์ ํ ์ฌํญ ๋ฐ ๊ตฌ์กฐ์ ์ ์ฝ
- ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ๋จ๋ ์ผ๋ก ์คํํ ์ ์์ต๋๋ค.
- ๋ด์ฅ๋ ๋ณด๊ณ , ์๊ฐํ ๋๋ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
- ๋น๋ ๋ณต์ก์ฑ๊ณผ ์ ์ง ๊ด๋ฆฌ ๋ถ๋ด์ ์ฆ๊ฐ์ํต๋๋ค.
- ์คํ ์๊ฐ์ด๋ ๋์์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค.
๊ธฐ์ ์ฉ Scala ์ํ๊ณ์์ SemanticDB๋ ์ง์ ์ ์ธ ์๋ฃจ์ ์ด๋ผ๊ธฐ๋ณด๋ค๋ ์๋ฏธ ๋ถ์์ ์ํ ํต์ฌ์ ์ธ ์กฐ๋ ฅ์ ์ญํ ์ ํฉ๋๋ค. SemanticDB์ ๊ฐ์น๋ ๋ ๋ฆฝ์ ์ธ ๊ฒฐ๊ณผ๋ฌผ๋ณด๋ค๋ ๋ถ์์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์์์ ์์ผ๋ฉฐ, ๋ณด๋ค ํฌ๊ด์ ์ธ ๋ถ์ ์ ๋ต์ ํตํฉ๋ ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ ๋๋ค.
์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋์ ์๋๋ฆฌ์ค (JVM ํตํฉ ์๋๋ฆฌ์ค)
๊ณต์ ์ฌ์ดํธ: ๊ฒฝํฅ์ด์๋ ์ค๋ฅ
Error Prone์ ์๋ Java ์ปดํ์ผ๋ฌ๋ฅผ ํ์ฅํ์ฌ Java์์ ํํ ๋ฐ์ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ๋ฅผ ํ์งํ๊ธฐ ์ํด ๊ฐ๋ฐ๋ ์ ์ ๋ถ์ ๋๊ตฌ์ ๋๋ค. ์ํฐํ๋ผ์ด์ฆ Scala ํ๊ฒฝ์์๋ Scala ์ ์ฉ ๋ถ์ ๋๊ตฌ๊ฐ ์๋, Scala์ Java๊ฐ ๊ณต์กดํ๋ ํผํฉ ์ธ์ด ์์คํ ์์ JVM ์์ค์ ์ ํ์ฑ ๊ฒ์ฌ ๋๊ตฌ๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ํนํ Scala ์๋น์ค๊ฐ ๊ณต์ Java ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌ๊ฒ ์์กดํ๊ฑฐ๋ JVM ์ ์ฒด ๋น๋ ํ์ดํ๋ผ์ธ์ ์ฐธ์ฌํ๋ ์กฐ์ง์์ ๊ทธ ์ค์์ฑ์ด ๋๋๋ฌ์ง๋๋ค.
์ํคํ ์ฒ ๊ด์ ์์ ๋ณผ ๋, Error Prone์ Scala ์ ์ฉ ๋๊ตฌ์๋ ๋ค๋ฅธ ์ถ์ํ ๊ณ์ธต์์ ์๋ํฉ๋๋ค. Java ๋ฐ์ดํธ์ฝ๋์ ์ปดํ์ผ๋ฌ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ์ฌ JVM ์์ค์์ ์ ํ์ฑ, ์์ ์ฑ ๋๋ ์ ์ง๋ณด์์ฑ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ๊ฒ์ผ๋ก ์๋ ค์ง ํจํด์ ์๋ณํฉ๋๋ค. Scala ์ฝ๋๊ฐ ๋ง์ ์ฝ๋๋ฒ ์ด์ค์์๋ ์ผ๋ฐ์ ์ผ๋ก Scala ์์ค ์ฝ๋ ์์ฒด๋ณด๋ค๋ Scala ์๋น์ค๋ฅผ ์ง์ํ๋ Java ๊ตฌ์ฑ ์์๋ฅผ ๋์์ผ๋ก ๊ฐ์ ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
๊ธฐ์ ๋ค์ ๊ณต์ Java ์ธํ๋ผ๋ก ์ธํด ๋ฐ์ํ๋ ์์คํ ์ ์ํ์ ์ค์ด๊ธฐ ์ํด Error Prone์ ๋์ ํฉ๋๋ค. Scala ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ณตํต Java ์ ํธ๋ฆฌํฐ, ํ๋ ์์ํฌ ๋๋ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต์ ์์กดํ๋ ํ๋ซํผ์์ JVM ์์ค์ ๊ฒฐํจ์ ์ฌ๋ฌ ์๋น์ค์ ๊ฑธ์ณ ํ์ฐ๋ ์ ์์ต๋๋ค. Error Prone์ ์ด๋ฌํ ๊ฒฐํจ์ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ์ฌ Scala ๊ธฐ๋ฐ ์ํฌ๋ก๋์ ์ํฅ์ ๋ฏธ์น๋ ํ๋ก๋์ ์ฅ์ ๋ก ๋ฐ์ ํ๊ธฐ ์ ์ ํด๊ฒฐํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
ํตํฉ์ ์ด๋ฏธ ํตํฉ๋ JVM ๋น๋ ํด์ ์ฌ์ฉํ๋ ์กฐ์ง์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ ๋๋ค. Error Prone์ Java ์ปดํ์ผ๋ฌ ๋ฐ Maven, Gradle๊ณผ ๊ฐ์ ๋น๋ ์์คํ ๊ณผ ํตํฉ๋๋ฏ๋ก ๋ค์ํ ์ธ์ด ํ๊ฒฝ์์ ์ค์ ์ง์ค์์ผ๋ก ๊ท์น์ ์ ์ฉํ๋ ๋ฐ ์ ํฉํฉ๋๋ค. ๊ทธ๋ฌ๋ Scala๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฒ ์ด์ค์ Scala ๊ตฌ๋ฌธ์ด ๋ง์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ์๋ ์ ์ฉ์ด ์ ํ์ ์ ๋๋ค.
ํต์ฌ ์ญ๋
- ์ผ๋ฐ์ ์ธ JVM ์์ค ๋ฒ๊ทธ ํจํด ํ์ง
- ์กฐ๊ธฐ ํผ๋๋ฐฑ์ ํฌํจํ ์ปดํ์ผ๋ฌ ํตํฉ ๋ถ์
- ์ ํ์ฑ๊ณผ ์์ ๋ฌธ์ ์ ๋ํ ๊ฐ๋ ฅํ ์ง์ค
- Scala ์์คํ ์์ ์ฌ์ฉํ๋ ๊ณต์ Java ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํจ๊ณผ์ ์ ๋๋ค.
๊ฐ๊ฒฉ ๋ชจ๋ธ
- ์คํ ์์ค์ด๋ฉฐ ๋ฌด๋ฃ๋ก ์ด์ฉ ๊ฐ๋ฅํฉ๋๋ค.
- ๋ผ์ด์ ์ค ๋น์ฉ์ด๋ ๊ตฌ๋ ๋ฃ๊ฐ ์์ต๋๋ค.
- ํตํฉ ๋ฐ ๊ตฌ์ฑ๊ณผ ๊ด๋ จ๋ ์ด์ ๋น์ฉ
๊ธฐ์ ์ ๋์ ๊ณ ๋ ค ์ฌํญ
- Scala์ Java๊ฐ ํผํฉ๋ ํ๊ฒฝ์์ ๊ฐ์ฅ ์ ์ฉํฉ๋๋ค.
- JVM ์ ๋ฐ์ ๋น๋ ํ์ค๊ณผ์ ์ผ์น๊ฐ ํ์ํฉ๋๋ค.
- Scala ๋ค์ดํฐ๋ธ ๋๊ตฌ๋ฅผ ๋์ฒดํ๋ ๊ฒ์ด ์๋๋ผ ๋ณด์ํ๋ ์ญํ ์ ํฉ๋๋ค.
์ ํ ์ฌํญ ๋ฐ ๊ตฌ์กฐ์ ์ ์ฝ
- ์ค์นผ๋ผ ์ธ์ด ๊ตฌ์กฐ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ดํด๊ฐ ์ ํ ์์ต๋๋ค.
- ๊ธฐ๋ฅ์ ์ถ์ํ ๋๋ ์๋ฌต์ ๋์์ ๋ถ์ํ ์ ์์ต๋๋ค.
- ์์ Scala ์ฝ๋๋ฒ ์ด์ค์์๋ ํ์ฉ๋๊ฐ ์ ํ์ ์ ๋๋ค.
- ๋ถ์ฐ ์คํ ๋๋ ๋ฐํ์ ๋์์ ๋ํ ๊ฐ์์ฑ์ด ์์
์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์ Error Prone์ Scala ๋ถ์ ์๋ฃจ์ ์ด๋ผ๊ธฐ๋ณด๋ค๋ JVM ์์ ๋ง ์ญํ ์ ํฉ๋๋ค. Error Prone์ ๊ฐ์น๋ Scala ์์คํ ์ด ์์กดํ๋ ๊ณตํต Java ๊ธฐ๋ฐ์ ๋ณดํธํ์ฌ ์กฐ์ง์ด ์ธ์ด ๊ฐ ์ถฉ๋ ์ํ์ ์ค์ด๋ ๋ฐ ์์ผ๋ฉฐ, ์ฌ์ธต์ ์ธ Scala ๊ด๋ จ ๋์ ๋ถ์์๋ ์ถ๊ฐ์ ์ธ ๋๊ตฌ๊ฐ ํ์ํ๋ค๋ ์ ์ ์ธ์งํด์ผ ํฉ๋๋ค.
Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ ๋น๊ต ๊ฐ์
๋ค์ ๋น๊ตํ๋ ์์์ ๋ ผ์ํ Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ค ๊ฐ์ ์ค์ง์ ์ธ ์ฐจ์ด์ ์ ์ ๋ฆฌํ ๊ฒ์ ๋๋ค. ์ด ํ๋ ๋๊ตฌ๋ค์ ์ธ์ง๋ ํ์ง ์์๋ฅผ ๋งค๊ธฐ๊ธฐ๋ณด๋ค๋ ๋ค์๊ณผ ๊ฐ์ ์ ์ ์ค์ ์ ๋๊ณ ์์ต๋๋ค. ๋ถ์ ๋ฒ์, ์ํ ๋ชจ๋ธ, ๊ธฐ์ ์ ํฉ์ฑ ๋ฐ ๊ตฌ์กฐ์ ์ ์ฝ์ด๋ฌํ ๊ด์ ์ Scala๊ฐ ๋ ๋ฆฝ์ ์ธ ์ฝ๋๋ฒ ์ด์ค๊ฐ ์๋, ๋ ํฌ๊ณ ์ค๋ ์ง์๋๋ ํ๋ซํผ ์ํ๊ณ์ ์ผ๋ถ์ธ ํ๊ฒฝ์์ ์ํคํ ์ฒ ์์ฌ ๊ฒฐ์ ์ ์ง์ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.
๊ฐ ๋๊ตฌ๋ ๊ณ ์ ํ ๋ถ์ ์์ญ์ ์ฐจ์งํฉ๋๋ค. ์ค๋ณต๋๋ ๋ถ๋ถ๋ ์์ง๋ง, ์ ์ฉ ๋ฒ์์ ์ฐจ์ด๋ ์ฐ์ฐ์ ์ธ ๊ฒ์ด ์๋๋ผ ๊ตฌ์กฐ์ ์ธ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๊ฒฝ๊ณ๋ฅผ ์ดํดํ๋ ๊ฒ์ ํ, ์ ์ฅ์ ๋ฐ ํ๋ํ ๋จ๊ณ๋ฅผ ์์ฐ๋ฅด๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ํด์ฒด์ธ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
| ์๋จ | ์ฃผ์ ๋ถ์ ์ด์ | ์คํ ๋จ๊ณ | ๊ธฐ์ ์ ๊ฐ์ | ๊ฐ๊ฒฉ ๋ชจ๋ธ | ์ฃผ์ ์ ํ ์ฌํญ |
|---|---|---|---|---|---|
| ์ค์นผ๋ผํฝ์ค | ์๋ฏธ๋ก ์ ๋ฆฌํฉํ ๋ง ๋ฐ ๊ท์น ๊ธฐ๋ฐ ๊ฐ์ ์ ์ฉ | SemanticDB๋ฅผ ์ฌ์ฉํ ์ปดํ์ผ ์๊ฐ | ์์ ํ ๋๊ท๋ชจ ๋ฆฌํฉํ ๋ง, API ๋ง์ด๊ทธ๋ ์ด์ , ๋ชจ๋ ๊ฐ ์๋ฏธ๋ก ์ ์ผ๊ด์ฑ ์ ์ง | ์คํ ์์ค | ์คํ ์๊ฐ์ด๋ ํ๋ ๋ถ์ ๊ธฐ๋ฅ ์์, ๊ท์น ์ ์ง ๊ด๋ฆฌ ์ค๋ฒํค๋ ์์ |
| ์ฌ๋ง๊ท ์ ๊ฑฐ์ | ์ธ์ด ์ ํ ๋ฐ ์์ ์กฐ์น ์ํ | ์ปดํ์ผ ํ์(์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ) | ๊ฐ๋ ฅํ ์๋ฐฉ์ ํต์ ๋ ํ์ ๋ถ๊ฐ๋ฅํ ์ธ์ด์ ์ ์ฝ์ ์ํํฉ๋๋ค. | ์คํ ์์ค | ์ด์ง ์ฝ๋ ๊ฐ์ ์ ์ฉ, ์ ํ๋ ๋ถ์ ๊น์ด, ๋ ๊ฑฐ์ ์์คํ ์ ๋ถ์ ํฉ |
| ์์ฃ ์ผ์ | ๋ฒ๊ทธ ํ์ง ๋ฐ ์ฝ๋ ์ค๋ฉ ์๋ณ | ํ์ฒ๋ฆฌ | ๊ด๋ฒ์ํ ๊ฒฐํจ ๊ฐ์์ฑ, ์ฌ๊ฐ๋ ๊ธฐ๋ฐ ๊ฒฐ๊ณผ, CI ์นํ์ ์ธ ๋ณด๊ณ ์ | ์คํ ์์ค | ํจํด ๊ธฐ๋ฐ ๋ถ์, ์ถ์ ์ฝ๋์์ ์คํ๋ฅ ์ฆ๊ฐ, ์ํคํ ์ฒ์ ๋ํ ํต์ฐฐ๋ ฅ ๋ถ์กฑ |
| SonarQube(Scala ๋ถ์ ๋๊ตฌ) | ์ฝ๋ ํ์ง ๊ด๋ฆฌ ๋ฐ ๊ท์ ์ค์ ๋ณด๊ณ | CI/CD ํ์ดํ๋ผ์ธ ๋ถ์ | ๋ค๊ตญ์ด ์ง์, ์ค์ ์ง์ค์ ๋์๋ณด๋, ๊ฐ์ฌ ์ค๋น ์ํ | ์์ (LOC ๊ธฐ๋ฐ) | ์์ Scala ์๋ฏธ๋ก , ์ผ๋ฐ์ ์ธ ๋ฉํธ๋ฆญ, ์คํ ์ ๋ณด ์์ |
| Scala ์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ ๋ฐ ํ๋๊ทธ | ์ ์์ค ์ ํ์ฑ ๋ฐ ๊ฒฝ๊ณ ๊ฐ์ ์ ์ฉ | ์ปดํ์ผ๋ฌ ๋จ๊ณ | ์ต์ํ์ ๊ณต๊ตฌ ์ฌ์ฉ ๊ณต๊ฐ, ์๊ฒฉํ ๊ธฐ์ค ์ค์ | Scala์ ํฌํจ๋์ด ์์ต๋๋ค. | ๋จํธ์ ์ธ ํผ๋๋ฐฑ, ์ง๊ณ ๋ถ์ฌ, ๋์ ์ ๋ฌธ์ฑ ์๊ตฌ ์ฌํญ |
| SemanticDB ํด๋ง ์ํ๊ณ | ์๋ฏธ๋ก ์ ๋ฉํ๋ฐ์ดํฐ ์์ฑ | ์ปดํ์ผ ์๊ฐ ์ํฐํฉํธ | ๊ณ ๊ธ ๋ถ์ ๋ฐ ๋ฆฌํฉํ ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. | ์คํ ์์ค | ๋จ๋ ์ผ๋ก๋ ์คํ ๋ถ๊ฐ๋ฅํ๋ฉฐ, ๊ตฌ์ถ ๋ณต์ก์ฑ์ ์ฆ๊ฐ์ํต๋๋ค. |
| ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋์ (JVM ํตํฉ) | JVM ์์ค์ ์ ํ์ฑ๊ณผ ์์ ์ฑ | ์๋ฐ ์ปดํ์ผ๋ฌ ๋จ๊ณ | ํผํฉ ์ธ์ด ์์คํ ์์ ๊ณต์ ๋๋ Java ๊ธฐ๋ฐ์ ๋ณดํธํฉ๋๋ค. | ์คํ ์์ค | Scala์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ดํด๊ฐ ๋ถ์กฑํ์ฌ ์์ Scala ์ฝ๋๋ฒ ์ด์ค์์๋ ๊ด๋ จ์ฑ์ด ์ ํ์ ์ ๋๋ค. |
๊ทธ ์ธ ์ฃผ๋ชฉํ ๋งํ Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ ๋์
์์์ ๋ ผ์ํ ์ฃผ์ ๋๊ตฌ ์ธ์๋, Scala ๊ธฐ๋ฐ ์์คํ ์ ํน์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์ํ ํ์ ๋ฐ ๊ด๋ จ ๋๊ตฌ๋ค์ด ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ๋์ ๋๊ตฌ๋ค์ ํต์ฌ ๋ถ์ ํ๋ซํผ ์ญํ ์ ํ๊ธฐ๋ณด๋ค๋ ํน์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๊ธฐ์ ํ๊ฒฝ์์๋ ๋๋ถ๋ถ ๊ธฐ์กด ๋๊ตฌ๋ค์ ๋ณด์ํ๋ ํํ๋ก, ์ ๋ฌธ์ ์ธ ๊ธฐ๋ฅ์ด ํ์ํ ๋ ๊ธฐํ์ฃผ์์ ์ผ๋ก ๋์ ๋ฉ๋๋ค.
์๋์ ๋์ด๋ ๋๊ตฌ๋ค์ ์ฃผ์ Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ฅผ ์ง์ ๋์ฒดํ๋ ๊ฒ์ ์๋์ง๋ง, ํฌ๋งท ํ์คํ, ํ ์คํธ ์ค์ฌ ๋ถ์ ๋๋ JVM ์ ์ฒด ๊ฒ์ฌ์ ๊ฐ์ ํน์ ์๋๋ฆฌ์ค์์ ์ ์ฉํ ์ ์์ต๋๋ค.
ํน์ ๋ถ์ผ์์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋์ฒด ๋๊ตฌ
- ์ค์นผ๋ผ์คํ์ผ
์คํ์ผ ๋ฐ ์์ ๊ท์น์ ์ค์ ์ ๋ก๋๋ค. ์ผ๊ด๋ ์ฝ๋ ๋ ์ด์์๊ณผ ๋ช ๋ช ๊ท์น์ ์ ์ฉํ๋ ๋ฐ ์ ์ฉํ์ง๋ง ์๋ฏธ๋ก ์ ๋๋ ๋์ ๋ถ์์ ์ ๊ณตํ์ง ์์ต๋๋ค. - sbt-์ปค๋ฒ๋ฆฌ์ง
์ ์ ๋ถ์์ด ์๋ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ์งํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ํนํ ๋ ๊ฑฐ์ Scala ์์คํ ์์ ํ ์คํธ๋์ง ์์ ๋ก์ง ๊ฒฝ๋ก๋ฅผ ์๋ณํ๊ธฐ ์ํด ์ ์ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. - IntelliJ Scala ํ๋ฌ๊ทธ์ธ ๊ฒ์ฌ
IDE ๊ธฐ๋ฐ ๊ฒ์ฌ๋ ๊ฐ๋ฐ ์ค ๋ฐ์ํ๋ ๋ก์ปฌ ๋ฌธ์ ๋ฅผ ํ์ ํฉ๋๋ค. ๊ฐ๋ฐ์ ํผ๋๋ฐฑ ๋ฃจํ์๋ ํจ๊ณผ์ ์ด์ง๋ง, ์ค์ ์ง์ค์ ๊ด๋ฆฌ ๋๋ CI ๊ฐ์ ์ ์ฉ์๋ ์ ํฉํ์ง ์์ต๋๋ค. - ์ฒดํฌ์คํ์ผ(JVM ์ปจํ
์คํธ)
ํผํฉ ์ธ์ด ํ๊ฒฝ์์ JVM ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฑธ์ณ ์์ ๋ฐ ๊ตฌ์กฐ ๊ท์น์ ์ ์ฉํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. Scala ๊ณ ์ ์ โโ์๋ฏธ๋ก ๊ณผ๋ ๊ด๋ จ์ฑ์ด ์ ํ์ ์ ๋๋ค. - PMD(JVM ์ปจํ
์คํธ)
ํจํด ๊ธฐ๋ฐ ์ ์ ๋ถ์ ๋๊ตฌ๋ก, ์ฃผ๋ก Java๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค. Scala์ Java์ ์ํธ ์ด์ฉ์ฑ์ด ๋์ ๊ฒฝ์ฐ์๋ ๊ฐํน ์ฌ์ฉ๋์ง๋ง, Scala ๊ด๋ จ ๊ธฐ๋ฅ์ ์ ํ์ ์ ๋๋ค. - FindBugs / SpotBugs
JVM ๊ฒฐํจ ํ์ง์ ์ด์ ์ ๋ง์ถ ๋ฐ์ดํธ์ฝ๋ ์์ค ๋ถ์ ๋๊ตฌ์ ๋๋ค. ์์ฑ๋ ์ปดํฌ๋ํธ๋ ๊ณต์ ์ปดํฌ๋ํธ์ ๋ฌธ์ ๋ฅผ ์ฐพ์๋ผ ์ ์์ง๋ง, Scala ์ธ์ด์ ๋ํ ์ธ์์ด ๋ถ์กฑํฉ๋๋ค. - Scalameta ๊ธฐ๋ฐ ๋ง์ถคํ ๋ถ์๊ธฐ
์กฐ์ง๋ณ ๊ฒ์ฌ๋ฅผ ์ํด Scalameta ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ๋ด๋ถ ๋๊ตฌ์ ๋๋ค. ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ๊ฐ๋ฐ ๋ฐ ์ ์ง ๊ด๋ฆฌ ๋น์ฉ์ด ๋ง์ด ๋ค๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ๋งค์ฐ ํฐ ์ฝ๋๋ฒ ์ด์ค์์๋ง ์ฌ์ฉ์ด ์ ๋นํ๋ฉ๋๋ค.
๊ธฐ์ ์ฉ Scala ์ํ๊ณ์์ ์ด๋ฌํ ๋์๋ค์ ์ ๋ต์ ๊ธฐ๋ฐ์ด๋ผ๊ธฐ๋ณด๋ค๋ ์ ์ ์ ๋ณด์กฐ ์๋จ์ผ๋ก ๋ณด๋ ๊ฒ์ด ๊ฐ์ฅ ์ ์ ํฉ๋๋ค. ๊ฐ๋ฐ์ ํธ์์ฑ, ํฌ๋งท ์ผ๊ด์ฑ, JVM ์์ค ๊ฒ์ฌ์ ๊ฐ์ ํน์ ๊ฒฉ์ฐจ๋ฅผ ํด์ํ์ง๋ง, ๋ณต์กํ๊ณ ๋ถ์ฐ๋ Scala ์์คํ ์ ์ ์ฉํ ๋ ์ ์ ๋ถ์์ ์ ๋ฐ์ ์ธ ๋ถ์ ํ๊ณ๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ๋ฐ๊พธ์ง๋ ๋ชปํฉ๋๋ค.
Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ฅผ ๊ฒฐํฉํ ๋์ ์ํคํ ์ฒ์ ์ ์ถฉ์
์ํฐํ๋ผ์ด์ฆ Scala ํ๊ฒฝ์์๋ ๋จ์ผ ์ ์ ๋ถ์ ๋๊ตฌ์ ์์กดํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ญ ๋๋ค. ์คํ๋ ค ์กฐ์ง๋ค์ ๋ค์ํ ๋ถ์ ๋ชฉํ, ์ ์ฉ ๋ชจ๋ธ, ๊ทธ๋ฆฌ๊ณ ์กฐ์ง์ ์ ์ฝ ์กฐ๊ฑด์ ๋ฐ์ํ์ฌ ๊ณ์ธตํ๋ ๋๊ตฌ ์ฒด์ธ์ ๊ตฌ์ถํฉ๋๋ค. ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ๋ถ์ ๋ฒ์๋ฅผ ๋ํ๋ ์ฅ์ ์ด ์์ง๋ง, ๋๊ตฌ ์ ํ ๊ณผ์ ์์ ๊ฐ๊ณผํ๊ธฐ ์ฌ์ด ์ํคํ ์ฒ์ ์ ์ถฉ์ ์ ์ผ๊ธฐํ๊ธฐ๋ ํฉ๋๋ค. ์ด๋ฌํ ์ ์ถฉ์ ์ ๋ถ์ ๊ฒฐ๊ณผ๋ฟ๋ง ์๋๋ผ ๊ฐ๋ฐ์ ํ๋, ํ์ดํ๋ผ์ธ ์์ ์ฑ, ๊ทธ๋ฆฌ๊ณ ์ฅ๊ธฐ์ ์ธ ํ๋ํ ์๋์๋ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
์ฌ๋ฌ Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๊ฐ ๋ณ๋ ฌ๋ก ์๋ํ ๋, ๋ถ์ ๋ชจ๋ธ์ด ์์์น ๋ชปํ ๋ฐฉ์์ผ๋ก ์ํธ ์์ฉํ ์ ์์ต๋๋ค. ์ปดํ์ผ ํ์ ๊ฐ์ ์ ์ฉ, ์๋งจํฑ ๋ฆฌํฉํ ๋ง, ์ปดํ์ผ ํ ๊ฒ์ฌ ๋ฐ ํ๋ซํผ ์์ค ๊ฑฐ๋ฒ๋์ค๋ ๊ฐ๊ฐ ๋ค๋ฅธ ์ ํ์ ๋ฌธ์ ๋ฅผ ๋๋ฌ๋ด์ง๋ง, ์์คํ ๊ตฌ์กฐ์ ๋ํ ํตํฉ๋ ์ดํด๋ฅผ ๊ณต์ ํ์ง๋ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ธฐ์ ์ ๋๊ตฌ ์กฐํฉ์ ํ๊ฐํ ๋ ํ์ง๋๋ ๋ด์ฉ๋ฟ๋ง ์๋๋ผ ์ถ๋ ฅ ๊ฒฐ๊ณผ๊ฐ ์ด๋ป๊ฒ ์ค๋ณต๋๊ฑฐ๋ ์ถฉ๋ํ๋์ง, ๋๋ ์ฌ๊ฐ์ง๋๋ฅผ ๋ง๋๋์ง๊น์ง ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์ญํ ๊ด๊ณ๋ ๋ ๊ด๋ฒ์ํ ๋ฌธ์ ์ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์์ต๋๋ค. ์์กด์ฑ ๊ทธ๋ํ ์ํ ๋ถ์๋ถ๋ถ์ ์ธ ๊ฐ์์ฑ์ผ๋ก ์ธํด ๊ฑด์ถ์ ์์ฌ๊ฒฐ์ ์ด ์๊ณก๋ ์ ์๋ ๊ฒฝ์ฐ.
๋ฒ ์งํ์ ์๊ฒฉ์ฑ ๋ ์กฐ์ง ์ ์๋ ฅ
Scala ์ ์ ๋ถ์ ์คํ์ ๊ฒฐํฉํ ๋ ๊ฐ์ฅ ์ค์ํ ์ ์ถฉ์ ์ค ํ๋๋ ์๊ฒฉํ ๊ท์น ์ ์ฉ๊ณผ ์กฐ์ง์ ์ ์์ฑ ์ฌ์ด์ ๊ท ํ์ ๋๋ค. ์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ์ด๋ WartRemover์ ๊ฐ์ ๋๊ตฌ๋ ์ปดํ์ผ ์์ ์ ๊ท์น์ ์ ์ฉํ์ฌ ์ ์๋ ์ ์ฝ ์กฐ๊ฑด์ ์๋ฐํ๋ ์ฝ๋๊ฐ ํ์ดํ๋ผ์ธ์ ํต๊ณผํ์ง ๋ชปํ๋๋ก ํฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋ธ์ ํน์ ์ ํ์ ๊ฒฐํจ์ ํจ๊ณผ์ ์ผ๋ก ์ ๊ฑฐํ๋ ๋ฐ ๋งค์ฐ ํจ๊ณผ์ ์ด์ง๋ง, ๋ ๊ฑฐ์ ์ฝ๋, ๋ถ๋ถ์ ์ธ ์์ ๊ถ ๋๋ ๋จ๊ณ์ ํ๋ํ๊ฐ ํ์ค์ ์ธ ํ๊ฒฝ์์๋ ์ ์ฐ์ฑ์ ์ ํดํฉ๋๋ค.
๋๊ท๋ชจ ๊ธฐ์ ํ๊ฒฝ์์ Scala ์ฝ๋๋ฒ ์ด์ค๋ ์ฌ๋ฌ ์ธ๋์ ๊ฑธ์น ์ํคํ ์ฒ ์ค๊ณ ์๋๋ฅผ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ผ๋ถ ๋ชจ๋์ ์ต์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ค๊ณ๋ฅผ ๋ฐ์ํ๋ ๋ฐ๋ฉด, ๋ค๋ฅธ ๋ชจ๋์ ์์ ๋ฐ ํ์ ์์คํ ๊ณผ ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ๋ ๊ณผ๊ฑฐ ํจํด์ ๊ทธ๋๋ก ์ ์งํ๊ณ ์์ต๋๋ค. ์ด๋ฌํ ํ๊ฒฝ ์ ์ฒด์ ์๊ฒฉํ ์ปดํ์ผ ํ์ ๊ท์น์ ์ ์ฉํ๋ฉด ์์ฒ ๊ฑด์ ์๋ฐ ์ฌํญ์ด ๋์์ ๋ฐ๊ฒฌ๋์ด ํ์ ์ ๋ฌด ๋ถ๋ด์ ๊ฐ์ค์ํค๊ณ ๊ฐ๋ฐ ์ผ์ ์ ์ฐจ์ง ์์ด ์งํํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ธฐ์ ๋ค์ ์ข ์ข ๊ท์น ์ ์ฉ ๋๊ตฌ๋ฅผ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ๋๋ฐ, ์ด๋ก ์ธํด ๊ท์น์ด ๊ณ ๋ฅด๊ฒ ์ ์ฉ๋์ง ์์ ์ผ๊ด์ฑ์ด ์ ํด๋ฉ๋๋ค.
๋ฐ๋ฉด, Scapegoat๋ SonarQube ๋ถ์๊ธฐ์ฒ๋ผ ์ปดํ์ผ ํ์ ์๋ํ๋ ๋๊ตฌ๋ ๋ณด๋ค ์๋งํ ์ ํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ๋น๋๋ฅผ ์ฆ์ ์ฐจ๋จํ์ง ์๊ณ ๋ฌธ์ ๋ฅผ ๋๋ฌ๋ด๋ฏ๋ก, ํ์ ์ํฉ์ ๋ฐ๋ผ ํด๊ฒฐ ์ฐ์ ์์๋ฅผ ์ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ์ ์ฐ์ฑ์ ์ ์งํ์ง๋ง ๋ชจํธ์ฑ์ ์ผ๊ธฐํ๊ธฐ๋ ํฉ๋๋ค. ๋ฐ๊ฒฌ๋ ๋ฌธ์ ์ ์ด ๋ฌด๊ธฐํ ์ฐ๊ธฐ๋ ์ ์์ผ๋ฉฐ, ์๊ฒฉํ ๊ฐ์ ์กฐ์น๊ฐ ๋ถ์กฑํ๋ฉด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ํคํ ์ฒ ๊ท์จ์ด ์ฝํ๋ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ชจ๋ธ๋ค์ด ๊ณต์กดํ ๋ ๋ง์ฐฐ์ด ๋ฐ์ํฉ๋๋ค. ๊ฐ๋ฐ์๋ค์ ์๊ฒฉํ ๋๊ตฌ๋ฅผ ์ฅ์ ๋ฌผ๋ก, ์ ์ฐํ ๋๊ตฌ๋ฅผ ์ ํ ์ฌํญ์ผ๋ก ์ธ์ํ์ฌ ์ฑํ๋ฅ ์ด ๋ถ๊ท ํํด์ง ์ ์์ต๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ด๋ฌํ ์ฐจ์ด๋ ๊ฑฐ๋ฒ๋์ค๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ค๊ณ ์ฝ๋ ํ์ง์ ์ค์ ์ํ๋ฅผ ํ์ ํ๊ธฐ ์ด๋ ต๊ฒ ํฉ๋๋ค. ์ด๋ฌํ ์ญํ ๊ด๊ณ๋ ์์ ๋ ผ์๋ ๋ฌธ์ ์ ๋ค์ ๋ฐ์ํฉ๋๋ค. ์ํํธ์จ์ด ๊ด๋ฆฌ ๋ณต์ก์ฑ ์ญํ์ผ๊ด์ฑ ์๋ ํต์ ๋ ์์คํ ์ ์ํ์ ์ค์ด๊ธฐ๋ณด๋ค๋ ์คํ๋ ค ์ฆํญ์ํจ๋ค.
์ ํธ ์ค์ฒฉ ๋ฐ ๋ถ์์ ์ก์
๋ ๋ค๋ฅธ ์ํคํ ์ฒ์ ์ ์ถฉ์ ์ ์ฌ๋ฌ ๋ถ์ ๋๊ตฌ์์ ์์ฑ๋๋ ์ ํธ๊ฐ ์ค๋ณต๋๋ ๋ฐ์ ๋ฐ์ํฉ๋๋ค. Scalafix, Scapegoat, SonarQube๋ ๋ชจ๋ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ์ง์ ํ ์ ์์ง๋ง, ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ถ์ ๊ด์ ์์ ์ ๊ทผํฉ๋๋ค. ํ ๋๊ตฌ์์ ์๋ฏธ๋ก ์ ์๋ฐ์ผ๋ก ๋ํ๋๋ ๋ฌธ์ ๊ฐ ๋ค๋ฅธ ๋๊ตฌ์์๋ ์ฝ๋ ์ค๋ฉ๋ก, ๋ ๋ค๋ฅธ ๋๊ตฌ์์๋ ๊ธฐ์ ๋ถ์ฑ๋ก ๋ํ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ค๋ณต ์ ํธ๋ฅผ ์ ์คํ๊ฒ ํด์ํ์ง ์์ผ๋ฉด ์ธ์ง๋ ์ํ์ด ๊ณผ์ฅ๋๊ณ ๊ทผ๋ณธ ์์ธ์ด ๊ฐ๋ ค์ง ์ ์์ต๋๋ค.
์ํฐํ๋ผ์ด์ฆ Scala ํ๊ฒฝ์์๋ ์ถ์ํ ๋ฐ๋๊ฐ ๋์์๋ก ์ด๋ฌํ ๋ ธ์ด์ฆ๊ฐ ์ฆํญ๋ฉ๋๋ค. ํจ์ํ ํฉ์ฑ, ์๋ฌต์ ํด๊ฒฐ, ์ ๋ค๋ฆญ ํ์ ์ ํจํด ๊ธฐ๋ฐ ๋๊ตฌ๊ฐ ์๋๋ฅผ ์๋ชป ํด์ํ ๊ฐ๋ฅ์ฑ์ ๋์ ๋๋ค. ๋๊ตฌ๊ฐ ์ถ๊ฐ๋ ์๋ก ์คํ์ด ๋์ ๋์ด ์์ง๋์ด๋ง ํ์ ์ฃผ์๋ฅผ ์๋ชจํ๊ณ ๋ถ์ ๊ฒฐ๊ณผ์ ๋ํ ์ ๋ขฐ๋๋ฅผ ๋จ์ด๋จ๋ฆฝ๋๋ค. ์ด์ ๋์ํ์ฌ ํ์ ๊ท์น์ ๊ด๋ฒ์ํ๊ฒ ์ต์ ํ ์ ์๋๋ฐ, ์ด๋ ๋๊ตฌ ์ฒด์ธ ์ ์ฒด์ ๊ฐ์น๋ฅผ ์ ํ์ํต๋๋ค.
๋ฌธ์ ๋ ๋จ์ํ ์์ ์ธ ์ธก๋ฉด๋ฟ๋ง ์๋๋ผ, ๋๊ตฌ ๊ฐ์ ๋ถ์ผ์น์ ์์ต๋๋ค. ๊ฐ ๋๊ตฌ๋ ์ํ, ์ ํ์ฑ ๋๋ ์ ์ง๋ณด์์ฑ์ ๋ํ ๊ฐ์ ์ ๋ดํฌํ๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๊ฐ์ ์ด ์๋ก ๋ค๋ฅผ ๊ฒฝ์ฐ, ํตํฉ๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ผ๊ด์ฑ์ด ๋ถ์กฑํด์ง๋๋ค. ๊ฒฐ๊ตญ ์ํคํ ํธ์ ํ๋ซํผ ์ฑ ์์๋ ์ด๋ฌํ ์ฐจ์ด๋ฅผ ์๋์ผ๋ก ์กฐ์ ํด์ผ ํ๋๋ฐ, ์์คํ ๊ณผ ํ ๊ท๋ชจ๊ฐ ์ปค์ง์ ๋ฐ๋ผ ์ด๋ฌํ ๋ฐฉ์์ ํ์ฅ์ฑ์ด ๋จ์ด์ง๋๋ค.
๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋งฅ๋ฝ์ ๋ง์ถ ์ ๊ทํ ์์ด ๋์๋ณด๋์ ์ง๊ณํ ๋ ์ด ๋ฌธ์ ๋ ๋์ฑ ์ฌํ๋ฉ๋๋ค. ์๋ก ๋ค๋ฅธ ๋๊ตฌ์์ ์ถ์ถํ ์งํ๋ ๋น์ทํด ๋ณด์ผ ์ ์์ง๋ง ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ํ์์ ๋ํ๋ผ ์ ์์ต๋๋ค. ๊ณตํต๋ ๋ถ์ ๊ธฐ์ค์ ์ด ์์ผ๋ฉด ์์ฌ ๊ฒฐ์ ๊ถ์๋ ํต์ฐฐ๋ ฅ๋ณด๋ค๋ ๊ฐ์์ฑ์ ์ต์ ํํ๋ ๋ฐ ์ง์คํ๊ฒ ๋ ์ํ์ด ์์ผ๋ฉฐ, ์ด๋ ํํ ๊ด์ฐฐ๋๋ ํ์์ ๋๋ค. ์ ์ ๋ถ์ ์งํ ํด์.
์์คํ ์๋ช ์ฃผ๊ธฐ ์ ๋ฐ์ ๊ฑธ์น ๋จํธ์ ์ธ ๊ฐ์์ฑ
๋ง์ง๋ง์ผ๋ก, ์ฌ๋ฌ Scala ์ ์ ๋ถ์ ๋๊ตฌ๋ฅผ ๊ฒฐํฉํด๋ ์์คํ ์๋ช ์ฃผ๊ธฐ ์ ๋ฐ์ ๊ฑธ์ณ ๋จํธ์ ์ธ ๊ฐ์์ฑ๋ง ์ ๊ณต๋๋ค๋ ๋จ์ ์ด ๋๋ฌ๋ฉ๋๋ค. ๋๋ถ๋ถ์ ๋๊ตฌ๋ ์ปดํ์ผ ์์ , ์ปดํ์ผ ํ, ๋๋ CI ์คํ ์์ ๋ฑ ํน์ ๋จ๊ณ์ ์์ค ์ฝ๋์๋ง ์ด์ ์ ๋ง์ถฅ๋๋ค. ์ค๊ณ ์๋, ์ฝ๋ ์งํ, ๋ฐฐํฌ ํ ํด๋ก์ง, ์ด์ ๋์์ ๊ฑธ์ณ ์ง์์ ์ธ ๊ด์ ์ ์ ๊ณตํ๋ ๋๊ตฌ๋ ์์ต๋๋ค.
๊ธฐ์ ํ๊ฒฝ์์ ์ด๋ฌํ ํํธํ๋ ์ฌ๋ฌ ๋จ๊ณ์ ๊ฑธ์ณ ์ํ์ด ๋์ ๋๊ธฐ ๋๋ฌธ์ ์ค์ํฉ๋๋ค. ์ปดํ์ผ ํ์ ๊ฐ์ ์ ์ฉ ๋ฐ ์๋ฏธ๋ก ์ ๋ฆฌํฉํ ๋ง ๊ฒ์ฌ๋ฅผ ํต๊ณผํ ๋ณ๊ฒฝ ์ฌํญ์ด๋ผ๋ ๋ฐฐํฌ ํ์๋ ์คํ ์์, ๋ฆฌ์์ค ์ฌ์ฉ๋ ๋๋ ์ค๋ฅ ์ ํ ๋ฐฉ์์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์ ์ ๋ถ์ ๋๊ตฌ๋ ์ฌ๋ฌ ๋๊ตฌ๋ฅผ ์กฐํฉํ๋๋ผ๋ ์ด๋ฌํ ์ํฅ์ ๋ชจ๋ธ๋งํ๋ ๋ฐ ํ์ํ ์ปจํ ์คํธ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฉฐ, ํนํ ๋ถ์ฐ ์์คํ ์ด๋ ๋น๋๊ธฐ ์์คํ ์์๋ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์กฐ์ง์ ์์ฌ ํด์ฒด์ธ์ ๋ณดํธ ๋ฒ์๋ฅผ ๊ณผ๋ํ๊ฐํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ํด์ ์ฌ์ฉํ๋ ๊ฒ๋ง์ผ๋ก๋ ์๋ฒฝํ๋ค๋ ์ฐฉ๊ฐ์ ๋ถ๋ฌ์ผ์ผํค์ง๋ง, ํต์ฌ ์คํ ๊ฒฝ๋ก๋ ์ ๋๋ก ๊ฒํ ๋์ง ์์ ์ฑ๋ก ๋จ์ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฉ์ฐจ๋ Scala ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌํฉํ ๋งํ๊ฑฐ๋ ์งํํ๋ ์ํคํ ์ฒ ๋ด์์ ์ฌ๋ฐฐ์นํ๋ ํ๋ํ ํ๋ก์ ํธ์์ ๊ฐ์ฅ ๋๋๋ฌ์ง๊ฒ ๋ํ๋ฉ๋๋ค. ์ ์ฒด์ ์ธ ๊ฐ์์ฑ์ด ํ๋ณด๋์ง ์์ผ๋ฉด ์ ์ ๋ถ์ ๊ฒฐ๊ณผ๋ง์ผ๋ก๋ ๋ถ๋ถ์ ์ธ ๊ฐ์ ๋ง ์ด๋ฃจ์ด์ง๊ณ ์์คํ ์ ์ธ ์ํ์ ๊ฐ๊ณผ๋ ์ ์์ต๋๋ค.
์๊ฒฉํจ๊ณผ ์ค์ฉ์ฑ ์ฌ์ด์ ๊ท ํ์ ์ถ๊ตฌํ๋ ๊ธฐ์ ์๊ฒ๋ ์ด๋ฌํ ์ฅ๋จ์ ์ ์ดํดํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ฝ๋ ํ์ง๊ณผ ์ผ๊ด์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ง๋ง, ์ด๋ฌํ ๋๊ตฌ๋ค์ ํ๊ณ์ ์ํธ ์์ฉ์ ๋๊ตฌ ์ธ๋ถ ์ฌํญ์ด ์๋ ์ํคํ ์ฒ์ ๊ณ ๋ ค ์ฌํญ์ผ๋ก ๋ช ํํ ์ธ์ํ๊ณ ๊ด๋ฆฌํ ๋๋ง ํจ๊ณผ์ ์ ๋๋ค.
๋ถ์ฐ ์ํฐํ๋ผ์ด์ฆ ์์คํ ์์ Scala ์ ์ ์ฝ๋ ๋ถ์์ ํ๊ณ
Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ ์์ค ์ฝ๋ ๊ตฌ์กฐ, ์ธ์ด ์ฌ์ฉ ๋ฐฉ์, ๊ทธ๋ฆฌ๊ณ ํน์ ์ ํ์ ๋ ผ๋ฆฌ์ ๊ฒฐํจ์ ๋ถ์ํ๋ ๋ฐ ๋งค์ฐ ํจ๊ณผ์ ์ ๋๋ค. ์ ํ๋ ์ฝ๋๋ฒ ์ด์ค ๋ด์์๋ ๋ฆฌํฉํ ๋ง, ์ผ๊ด์ฑ ์ ์ง, ๊ทธ๋ฆฌ๊ณ ์ฅ๊ธฐ์ ์ธ ์ ์ง๋ณด์์ฑ์ ์ง์ํ๋ ์๋ฏธ ์๋ ์ ํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ Scala ์์คํ ์ด ๋ถ์ฐ๋ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์ผ๋ก ํ์ฅ๋จ์ ๋ฐ๋ผ, ์ ์ ๋ถ์์ ๊ธฐ๋ฐ์ด ๋๋ ๋ถ์์ ๊ฐ์ ๋ค์ด ์ค์ ์ด์ ํ๊ฒฝ๊ณผ ์ฐจ์ด๋ฅผ ๋ณด์ด๊ธฐ ์์ํฉ๋๋ค.
ํ๋ ์ํฐํ๋ผ์ด์ฆ ์ํคํ ์ฒ์์ Scala ์ปดํฌ๋ํธ๋ ๋๋ฌผ๊ฒ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋ฉ๋๋ค. ๋น๋๊ธฐ ์ํฌํ๋ก์ ์ฐธ์ฌํ๊ณ , ์ด๊ธฐ์ข ์๋น์ค์ ์ํธ ์์ฉํ๋ฉฐ, ์์ค ์ฝ๋ ์์ค์์๋ ๋ณด์ด์ง ์๋ ๋ฐํ์ ์ธํ๋ผ ๊ฒฐ์ ์ ์์กดํฉ๋๋ค. ์ด๋ฌํ ๋งฅ๋ฝ์์ ์ ์ ๋ถ์์ ์ฌ์ ํ โโ์ ์ฉํ์ง๋ง, ๊ทธ ํ๊ณ๋ ์ฐ์ฐ์ ์ธ ๊ฒ์ด ์๋๋ผ ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ ๋ก ๊ท๊ฒฐ๋ฉ๋๋ค. ์ด๋ฌํ ํ๊ณ๊ฐ ์ด๋์์ ๋ฐ์ํ๋์ง ์ดํดํ๋ ๊ฒ์ ๋๊ตฌ์ ์ ์ฉ ๋ฒ์์ ๋ํ ์๋ชป๋ ํ์ ์ ํผํ๊ณ , ์ ์ ๋ถ์์ ์์คํ ์์ค ์ํ ํ๊ฐ์ ์ฌ๋ฌ ์์ ์ค ํ๋๋ก ์ธ์ํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
๋ฐํ์ ๋์ ๋ฐ ์คํ ์์ ๊ด๋ จ ์ฌ๊ฐ์ง๋
๋ถ์ฐ ์์คํ ์์ Scala ์ ์ ์ฝ๋ ๋ถ์์ ๊ฐ์ฅ ์ค์ํ ํ๊ณ ์ค ํ๋๋ ๋ฐํ์ ๋์๊ณผ ์คํ ์์๋ฅผ ์ ํํ๊ฒ ๋ชจ๋ธ๋งํ ์ ์๋ค๋ ์ ์ ๋๋ค. Scala๋ ํจ์ํ ํฉ์ฑ, ์ง์ฐ ์คํ, ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ถ์ฅํ๋๋ฐ, ์ด ๋ชจ๋ ๊ฒ์ด ์ค์ ๋ก์ง ์คํ ์์๋ฅผ ๋ชจํธํ๊ฒ ๋ง๋ญ๋๋ค. ์ ์ ๋ถ์ ๋๊ตฌ๋ ์ ์ธ๋ ์ ์ด ํ๋ฆ์ ๋ถ์ํ์ง๋ง, ์ค์ ์ํฌ๋ก๋ ์กฐ๊ฑด์์ ํด๋น ํ๋ฆ์ด ์ด๋ป๊ฒ ๊ตฌํ๋๋์ง ์ ํํ๊ฒ ์ถ๋ก ํ ์๋ ์์ต๋๋ค.
์ํฐํ๋ผ์ด์ฆ ์์คํ ์์ ์คํ ์์๋ ๋ฉ์์ง ๋ธ๋ก์ปค์ ์๋ฏธ ์ฒด๊ณ, ์ค๋ ๋ ํ ๊ตฌ์ฑ, ์ญ์๋ ฅ ๋ฉ์ปค๋์ฆ๊ณผ ๊ฐ์ ์ธ๋ถ ์์ธ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. Scala ์๋น์ค๋ ์์ค ์ฝ๋ ์์ค์์๋ ๊ฒฐ์ ๋ก ์ ์ผ๋ก ๋ณด์ผ ์ ์์ง๋ง ๋ฐํ์์๋ ๋งค์ฐ ๊ฐ๋ณ์ ์ธ ๋์์ ๋ณด์ผ ์ ์์ต๋๋ค. ์ ์ ๋ถ์์ผ๋ก๋ ํ๋ก๋์ ํ๊ฒฝ์์ ๋ฐ์ํ๋ ์ค๋ ๋ ๊ฒฝํฉ, ์ค์ผ์ค๋ง ์ง์ฐ ๋๋ ๋น๊ฒฐ์ ์ ์ธํฐ๋ฆฌ๋น์ ๊ด์ฐฐํ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฑ๋ฅ ๋ฌธ์ ๋ฐ ํ์ด๋ฐ ๊ด๋ จ ๊ฒฐํจ์ ์ค์ ์ด์ ํ๊ฒฝ์์ ๋ํ๋ ๋๊น์ง ๋ฐ๊ฒฌ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋น๋ฒํฉ๋๋ค.
์ด๋ฌํ ํ๊ณ๋ ์กฐ์ง์ด ์ ์ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์์คํ ์ํ์ ์งํ๋ก ์ฌ์ฉํ๋ ค๊ณ ํ ๋ ํนํ ๋๋๋ฌ์ง๋๋ค. ์์ค ์ฝ๋ ๋ถ์์์ ๋์ถ๋ ์งํ๋ ์์ ์ฑ์ด๋ ๋จ์์ฑ์ ์์ฌํ ์ ์์ง๋ง, ์ค์ ๋ฐํ์ ๋์์ ๋ถํ ์ฆํญ์ด๋ ์กฐ์ ์ค๋ฒํค๋๋ก ์ธํด ์ ํ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ถ์ผ์น๋ ๋๊ฐ ์ด์ ๋ชจ๋ํฐ๋ง ๋ฐ ๋ถ์์ ํตํด์๋ง ๋๋ฌ๋ฉ๋๋ค. ์ํํธ์จ์ด ์ฑ๋ฅ ์งํ ์ถ์ ์ด๋ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ๋ถ์ ๊ณ์ธต์์ ์๋ํฉ๋๋ค.
์ ์ ๊ตฌ์กฐ์ ๋์ ๋์ ์ฌ์ด์ ๊ฐ๊ทน ๋๋ฌธ์ ๋ถ์ฐ Scala ์์คํ ์์๋ ์ ์ ๋ถ์์ ์ ์คํ๊ฒ ํด์ํด์ผ ํฉ๋๋ค. ์ ์ ๋ถ์์ ๋ณต์ก์ฑ์ด ์กด์ฌํ๋ ์์น๋ฅผ ์๋ ค์ค ์๋ ์์ง๋ง, ๊ทธ ๋ณต์ก์ฑ์ด ์คํธ๋ ์ค ์ํฉ์์ ์ด๋ป๊ฒ ๋์ํ๋์ง๋ ์ค๋ช ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ด์ ์ ํผ๋ํ๋ ๊ธฐ์ ์ ์ฝ๋์ ๋ฏธ์ ์ธก๋ฉด๋ง ์ต์ ํํ๊ณ ์คํ์์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ์ง ๋ชปํ๋ ์ํ์ ์ง๋ฉดํ ์ ์์ต๋๋ค.
๋น๋๊ธฐ ํต์ ๋ฐ ์จ๊ฒจ์ง ์ค๋ฅ ์ ํ
๋ถ์ฐํ Scala ์์คํ ์ ํจ์ฒ, ์คํธ๋ฆผ, ๋ฉ์์ง ๊ธฐ๋ฐ ์ฒ๋ฆฌ์ ๊ฐ์ ๋น๋๊ธฐ ํต์ ํจํด์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์ ์ ๋ถ์์ ํตํด ๋น๋๊ธฐ ๊ตฌ์กฐ์ ์กด์ฌ๋ ํ์ ํ ์ ์์ง๋ง, ์๋น์ค๋ค์ด ๋คํธ์ํฌ ๊ฒฝ๊ณ๋ฅผ ๋์ด ์ํธ ์์ฉํ ๋ ์ด๋ฌํ ๋ฉ์ปค๋์ฆ์ ํตํด ์ค๋ฅ๊ฐ ์ด๋ป๊ฒ ์ ํ๋๋์ง๋ ๋ชจ๋ธ๋งํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ์์คํ ๋ณต์๋ ฅ์ ๋ํ ์ฌ๊ฐ์ง๋๊ฐ ๋ฐ์ํฉ๋๋ค.
์ค์ ๋ก ๋ถ์ฐ ์์คํ ์์ ์ค๋ฅ ์ ํ๋ ์ฌ์๋ ๋ก์ง, ํ์์์ ๊ตฌ์ฑ, ํ๋ก ์ฐจ๋จ๊ธฐ ๋ฐ ๋ฉฑ๋ฑ์ฑ ๋ณด์ฅ์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค. ์ด๋ฌํ ๋์์ ์ข ์ข Scala ์์ค ์ฝ๋ ์ธ๋ถ์ ๊ตฌ์ฑ ํ์ผ์ด๋ ์ธํ๋ผ ๊ตฌ์ฑ ์์์ ์ ์๋ฉ๋๋ค. ์ ์ ๋ถ์ ๋๊ตฌ๋ ์ด๋ฌํ ์ปจํ ์คํธ ์ ๋ณด์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ๋ฐํ์์ ๋ฐ์ํ๋ ๋ถ๋ถ ์ค๋ฅ๋ ์ฐ์ ์ฌ์๋๋ฅผ ์๋ฎฌ๋ ์ด์ ํ ์๋ ์์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก, ๊ฐ๋ณ์ ์ผ๋ก๋ ๊ฒฌ๊ณ ํด ๋ณด์ด๋ Scala ์ฝ๋๋ ๋ฐฐํฌ ์ ์ฅ์ ๋ชจ๋๋ฅผ ์ฆํญ์ํค๋ ์์ธ์ด ๋ ์ ์์ต๋๋ค. ์ฌ๋ฌ ์๋น์ค์์ ๋ฐ๋ณต๋๋ ๋จ์ผ ์์ธ ์ฒ๋ฆฌ ํจํด์ ํน์ ์กฐ๊ฑด์์ ์ฌ์๋ ํญ์ฆ์ด๋ ๋ฆฌ์์ค ๊ณ ๊ฐ์ ์ ๋ฐํ ์ ์์ต๋๋ค. ์ ์ ๋ถ์ ๋๊ตฌ๋ ๋ก์ปฌ ์์ธ ์ค์ฉ์ ์๋ณํ ์ ์์ง๋ง, ์ฅ์ ๋ฐ์ ์ ์ด๋ฌํ ํจํด์ด ์๋น์ค ๊ฐ์ ์ด๋ป๊ฒ ์ํธ ์์ฉํ๋์ง๋ ์์ธกํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ญํ ๊ด๊ณ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฅ์ ๋ฐ์ ํ ๋ถ์์ ํตํด ๋ฐํ์ง๋๋ค. ๋ถ์ฐํ ์ฌ๊ณ ๋ณด๊ณ ๊ดํ์ ์ ์ธ ๊ฒ์ฌ๋ฅผ ํตํด์๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์ด๋ฌํ ํ๊ณ๋ ๊ทผ๋ณธ์ ์ธ ์ ์ฝ์ ๋๋ฌ๋ ๋๋ค. ์ ์ ๋ถ์์ ์์ฑ๋ ์ฝ๋์ ๋ด์ฉ๋ง ํ๊ฐํ ๋ฟ, ์์คํ ์ด ์ด๋ป๊ฒ ์คํจํ๋์ง๋ ๋ถ์ํ์ง ์์ต๋๋ค. ๋ถ์ฐํ Scala ํ๊ฒฝ์์๋ ์คํจ๊ฐ ์์๋๋ ์๋ ๋ชจ๋์ด๋ฏ๋ก ์ด๋ฌํ ์ฐจ์ด์ ์ ๋ช ํํ ๊ตฌ๋ถํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ณต์๋ ฅ ํ๊ฐ๋ฅผ ์ํด ์ ์ ๋ถ์์๋ง ์์กดํ๋ ๊ธฐ์ ์ ์ค์ ์ฅ์ ๋ฐ์ ์ ๊ฐ์ฅ ์ค์ํ ์์๋ค์ ๋์น ์ ์์ต๋๋ค.
์์คํ ๊ฐ ๋ฐ์ดํฐ ํ๋ฆ ๋ฐ ์ํ ์ผ๊ด์ฑ ๋ฌธ์
Scala ์ ์ ์ฝ๋ ๋ถ์์ ๋ ๋ค๋ฅธ ๊ตฌ์กฐ์ ํ๊ณ๋ ์์คํ ๊ฒฝ๊ณ๋ฅผ ๋๋๋๋ ๋ฐ์ดํฐ ํ๋ฆ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์์ต๋๋ค. ๋จ์ผ ์ฝ๋๋ฒ ์ด์ค ๋ด์์๋ ๋ณ์ ์ฌ์ฉ ๋ฐ ๋ฉ์๋ ํธ์ถ์ ์ถ์ ํ ์ ์์ง๋ง, ์๋น์ค ๊ฐ์๋ ์ง๋ ฌํ ํ์, ์ ์ก ํ๋กํ ์ฝ, ์ธ๋ถ ์ ์ฅ ์์คํ ๋ฑ ์ ์ ๋ถ์์ผ๋ก๋ ์์ ํ ๊ด์ฐฐํ ์ ์๋ ์์๋ค์ด ๋ฐ์ดํฐ ํ๋ฆ์ ์ข์ฐํฉ๋๋ค.
์ํฐํ๋ผ์ด์ฆ Scala ์์คํ ์ ์ด๋ฒคํธ ์คํธ๋ฆผ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ํ์ ์๋น์๋ฅผ ํฌํจํ๋ ๋ณต์กํ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์ฐธ์ฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ ์ ๋ถ์ ๋๊ตฌ๋ ๋ก์ปฌ ๋ณํ์ ๊ฒ์ฆํ ์ ์์ง๋ง, ์ ๋ณด๊ฐ ํ๋ก์ธ์ค ๊ฒฝ๊ณ๋ฅผ โโ๋ฒ์ด๋ ํ ๋ฐ์ดํฐ์ ์ต์ ์ฑ, ์์ ๋๋ ์ผ๊ด์ฑ์ ๋ํ ๊ฐ์ ์ ๊ฒ์ฆํ ์๋ ์์ต๋๋ค. ์ด๋ฌํ ์์ฑ์ ์์ค ์ฝ๋ ์์ฒด๋ณด๋ค๋ ์ธํ๋ผ ๋์ ๋ฐ ํตํฉ ํจํด์ ๋ฐ๋ผ ํ์ฑ๋๋ ์๋ก์ด ํน์ฑ์ ๋๋ค.
์ด๋ฌํ ๊ฒฉ์ฐจ๋ ํนํ Scala ์๋น์ค๊ฐ ๋ฆฌํฉํ ๋ง๋๊ฑฐ๋ ์งํํ๋ ์ํคํ ์ฒ ๋ด์์ ์ฌ๋ฐฐ์น๋๋ ํ๋ํ ํ๋ก์ ํธ์์ ๋๋๋ฌ์ง๊ฒ ๋ํ๋ฉ๋๋ค. ๋ก์ปฌ ์๋ฏธ๋ก ์ ์ ์งํ๋ ๋ณ๊ฒฝ ์ฌํญ์ด๋ผ๋ ์๋ํฌ์๋ ๋ฐ์ดํฐ ๋์์ ๋ณ๊ฒฝํ์ฌ ๋ฏธ๋ฌํ ๊ฒฐํจ์ ์ ๋ฐํ ์ ์์ต๋๋ค. ์ ์ ๋ถ์์ ์ด๋ฌํ ๋ณํ๋ฅผ ํฌ์ฐฉํ์ง ๋ชปํ๋๋ฐ, ์ด๋ฌํ ๋ณํ๋ ๋ค์๊ณผ ๋ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์์ต๋๋ค. ๋ถ์ฐ ๋ฐ์ดํฐ ๋๊ธฐํ ํจํด ์ธ์ด ์์ค์ ์ ํ์ฑ๋ณด๋ค๋.
๊ธฐ์ ์ ๊ฒฝ์ฐ, ์ด๋ ์ ์ ๋ถ์์ด ๋ฐ์ดํฐ ํ๋ฆ์ ์ค์๊ฐ์ผ๋ก ๊ด์ฐฐํ๋ ์์คํ ์์ค์ ๊ฒ์ฆ ๊ธฐ์ ๋ก ๋ณด์๋์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. Scala ์ ์ ๋ถ์์ ์ฝ๋์ ์๋์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ ๋ฐ ๊ฐ๋ ฅํ ๋๊ตฌ์ด์ง๋ง, ๋ถ์ฐ ํ๊ฒฝ์์ ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ํ์ ํ๋ ๊ฒ์ ๋์ฒดํ ์๋ ์์ต๋๋ค.
์ด๋ฌํ ํ๊ณ๋ฅผ ์ธ์ํ๋ ๊ฒ์ด Scala ์ ์ ์ฝ๋ ๋ถ์์ ๊ฐ์น๋ฅผ ๋จ์ด๋จ๋ฆฌ๋ ๊ฒ์ ์๋๋๋ค. ์คํ๋ ค ๊ทธ ์ญํ ์ ๋ช ํํ ํด์ค๋๋ค. ๋ถ์ฐ ์ํฐํ๋ผ์ด์ฆ ์์คํ ์์ ์ ์ ๋ถ์์ ์ฝ๋ ํ์ง๊ณผ ๊ตฌ์กฐ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ์ง๋ง, ๋ฐํ์ ๋์, ์ค๋ฅ ๋ฐ์ ์์, ์์คํ ๊ฐ ๋ฐ์ดํฐ ํ๋ฆ ๋ฑ์ ๊ณ ๋ คํ๋ ๋ ๋์ ๋ถ์ ํ๋ ์์ํฌ ๋ด์์ ํ์ฉ๋์ด์ผ ํฉ๋๋ค.
ํ๋ํ ํ๋ก๊ทธ๋จ์์ Scala ์ ์ ์ฝ๋ ๋ถ์์ ์์น ์ ์
Scala๋ฅผ ํ์ฉํ๋ ํ๋ํ ํ๋ก๊ทธ๋จ์ ์ธ์ด ์์ฒด์๋ง ์ด์ ์ ๋ง์ถ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ญ ๋๋ค. Scala๋ ์ํคํ ์ฒ ๋ถํด, ํ๋ซํผ ๋ง์ด๊ทธ๋ ์ด์ , ์ด์ ์ฌํธ์ฑ ๋ฑ์ ํฌํจํ๋ ๊ด๋ฒ์ํ ๋ณํ ๊ณํ์ ํตํฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฌํ ๋งฅ๋ฝ์์ ์ ์ ์ฝ๋ ๋ถ์์ ๋ ๋ฆฝ์ ์ธ ํ์ง ์ธก์ ๋๊ตฌ๋ผ๊ธฐ๋ณด๋ค๋ ์ ๋ต์ ๋๊ตฌ ๋ชจ์์ ์ผ๋ถ๊ฐ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ ์ ์ฝ๋ ๋ถ์์ ์ญํ ์ ํ๋ํ ๋ ธ๋ ฅ์ ๋ชฉํ, ์ ์ฝ ์กฐ๊ฑด, ๊ทธ๋ฆฌ๊ณ ์งํ ์์์ ๊ด๋ จํ์ฌ ์ดํด๋์ด์ผ ํฉ๋๋ค.
๊ธฐ์ ํ๋ํ๋ ์ ์ง์ ์ผ๋ก ์งํ๋ฉ๋๋ค. ์์คํ ์ ์ด์์ ์ ์งํ๋ฉด์ ์งํํ๊ณ , ์๋น์ค๋ ์ง์์ ์ผ๋ก ๊ฐ์น๋ฅผ ์ ๊ณตํ๋ ๋์ ํ์ ๋ณํํ๋ฉฐ, ๊ธฐ์ ๋ถ์ฑ๋ ์ ๋ฉด ์ ๊ฑฐ๋ณด๋ค๋ ์ ํ์ ์ผ๋ก ํด๊ฒฐ๋ฉ๋๋ค. Scala ์ ์ ์ฝ๋ ๋ถ์์ ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค์ ๋ํ ๊ตฌ์กฐ์ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํจ์ผ๋ก์จ ์ด๋ฌํ ํ๋ํ ๊ณผ์ ์ ๊ธฐ์ฌํ์ง๋ง, ๊ทธ ํจ๊ณผ๋ ํ๋ํ ๋จ๊ณ์์ ์ฐ๊ณ์ฑ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ถ์ ๊ฒฐ๊ณผ๊ฐ ํ๋ํ ๋จ๊ณ์ ๋ง์ง ์์ผ๋ฉด ๋ถํ์ํ ํผ๋์ด๋ ์๋ชป๋ ๊ธด๊ธ์ฑ์ ์ผ๊ธฐํ ์ ์์ง๋ง, ์ ์ ํ ์ฐ๊ณ๋ ๊ฒฝ์ฐ ์ํ์ ์ค์ด๊ณ ์ ๋ณด์ ๊ธฐ๋ฐํ ๋ณํ๋ฅผ ์ด๋์ด๋ด๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์ ์ง์ ๋ณํ๋ฅผ ์์ ํํ๊ธฐ ์ํ ์ ์ ๋ถ์ ํ์ฉ
์ ์ง์ ํ๋ํ ์ ๋ต์ ์ด์ ์์คํ ์ ๋ถ์์ ํ๊ฒ ๋ง๋ค์ง ์๊ณ ํต์ ๋ ๋ณ๊ฒฝ์ ์ํํ๋ ๋ฅ๋ ฅ์ ๋ฌ๋ ค ์์ต๋๋ค. Scala ํ๊ฒฝ์์ ์ด๋ ์ข ์ข ์๋น์ค๋ฅผ ์ ์ง์ ์ผ๋ก ๋ฆฌํฉํ ๋งํ๊ฑฐ๋, ๊ธฐ๋ฅ์ ์ถ์ถํ๊ฑฐ๋, ๋์์ ์ ์งํ๋ฉด์ ์ธํฐํ์ด์ค๋ฅผ ์กฐ์ ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ ์ ์ฝ๋ ๋ถ์์ ๊ตฌ์กฐ์ ์ข ์์ฑ ๋ฐ ์ ์ฝ ์กฐ๊ฑด ์๋ฐ์ ๋๋ฌ๋ด์ด ์ ์ง์ ์งํ์ ๋ฐฉํดํ ์ ์๋ ์์๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ ์์ ํ ์ญํ ์ ํฉ๋๋ค.
Scalafix์ ๊ฐ์ ๋๊ตฌ์ ์ปดํ์ผ๋ฌ ๊ธฐ๋ฐ ๊ฒ์ฌ๋ ํ์ด ์ฝ๋์ ๋ด์ฌ๋ ๊ฐ์ ์ ํ์ ํ๋ ๋ฐ ๋์์ ์ค๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ๋ชจ๋ ๊ฐ์ ๊ฒฐํฉ๋, ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ API์ ๋ํ ์์กด๋, ๊ทธ๋ฆฌ๊ณ ๋ณํ์ ์ ํญํ๋ ํจํด์ ๋๋ฌ๋ ๋๋ค. ์ด๋ฌํ ์ ๋ณด๋ ํนํ ์ ์ฒด ์ฌ์์ฑ์ด ์๋ ์ ์ง์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ํตํด ํ๋ํ๋ฅผ ์งํํ ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์ ์ง์ ํ๋ํ ์ ๋ต์ ์ ๋ถ์์ ์์ ํ ๋ฆฌํฉํ ๋ง ๊ฒฝ๊ณ๋ฅผ ์๋ณํ๊ณ ๋ณ๊ฒฝ ์ ๊ณผ๋ํ ์ํ์ด ๋ฐ์ํ๋ ์์ญ์ ๊ฐ์กฐํจ์ผ๋ก์จ ์ด๋ฌํ ์ ๋ต์ ์ง์ํฉ๋๋ค.
ํ์ง๋ง ์ ์ ๋ถ์์ ์ ์คํ๊ฒ ๋ฒ์๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค. ๋ชจ๋ ๋ชจ๋์ ์๊ฒฉํ ์ ์ฉ์ ํ๋ฉด ํ์ด ๋ ๊ฑฐ์ ๋ฌธ์ ๋ฅผ ์๊ธฐ์์กฐ๋ก ํด๊ฒฐํด์ผ ํ๋ฏ๋ก ํ๋ํ ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค. ํจ๊ณผ์ ์ธ ํ๋ก๊ทธ๋จ์ ์ข ์ข ๋ถ์์ ์ ํ์ ์ผ๋ก ํ์ฉํ์ฌ ๋จ๊ธฐ์ ์ธ ๋ณ๊ฒฝ์ด ํ์ํ ๊ตฌ์ฑ ์์์ ์ง์คํฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์์ ์ ์ ๋ถ์์ ์ ๋ฐ์ ์ธ ๊ธฐ์ค์ ์ ์ํ๋ ๊ฒ์ดํธํคํผ ์ญํ ์ ํ๊ธฐ๋ณด๋ค๋ ๋ณ๊ฒฝ ์์ ๊ฒฐ์ ์ ๋์์ ์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
๋ ๋ค๋ฅธ ๊ณ ๋ ค ์ฌํญ์ ์กฐ์ง์ ์ค๋น ์ํ์ ๋๋ค. ์ ์ง์ ํ๋ํ๋ Scala ์ ๋ฌธ์ฑ ์์ค์ด ๊ฐ๊ธฐ ๋ค๋ฅธ ์ฌ๋ฌ ํ์ ๊ฑธ์ณ ์งํ๋ฉ๋๋ค. ์ ์ ๋ถ์ ๊ฒฐ๊ณผ๋ ์ด๋ฌํ ํ๋ค์ด ์ดํดํ ์ ์์ด์ผ ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฌด์๋ ์ํ์ด ์์ต๋๋ค. ์ด ๋ถ์ผ์์ ์ฑ๊ณตํ๋ ๊ธฐ์ ๋ค์ ์ ์ ๋ถ์์ ์ ํ์ฑ ์ฌ๋ถ๋ฅผ ์๋์ผ๋ก ํ๋จํ๋ ๋๊ตฌ๊ฐ ์๋๋ผ ๊ธฐ์ ์ ์ ์ฝ ์กฐ๊ฑด์ ๋ ผ์ํ๊ธฐ ์ํ ๊ณตํต ์ธ์ด๋ก ํ์ฉํฉ๋๋ค.
์ ์ ๋ถ์๊ณผ ์ํคํ ์ฒ ๋ถํด์ ์ฐ๊ณ
์ผ๋ฐ์ ์ธ ํ๋ํ ๋ชฉํ ์ค ํ๋๋ ์ํคํ ์ฒ ๋ถํด์ ๋๋ค. ์ด๋ ๋ชจ๋๋ฆฌ์ Scala ์๋น์ค๋ฅผ ๋ ์๊ณ ์์จ์ ์ธ ๊ตฌ์ฑ ์์๋ก ๋ถํ ํ๋ ๊ฒ์ ๋๋ค. ์ ์ ์ฝ๋ ๋ถ์์ ๋ถํด ์์ ์ ๋ณต์กํ๊ฒ ๋ง๋๋ ๋ด๋ถ ๊ฒฝ๊ณ, ๊ณต์ ์ถ์ํ ๋ฐ ์จ๊ฒจ์ง ์ข ์์ฑ์ ๋๋ฌ๋ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์๋ฏธ ๋ถ์ ๋๊ตฌ๋ ๋ชจ๋ ์ ๋ฐ์ ๊ฑธ์ณ ๊ธฐํธ ์ฌ์ฉ์ ์ถ์ ํ์ฌ ์ํคํ ํธ๊ฐ ํจ๊ป ๋ณ๊ฒฝ๋๋ ๊ธฐ๋ฅ ํด๋ฌ์คํฐ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค. ์ด๋ฌํ ํต์ฐฐ๋ ฅ์ ์๋น์ค ๊ฒฝ๊ณ ๋ฐ ์์ ๊ถ์ ๋ํ ์์ฌ ๊ฒฐ์ ์ ์ง์ํฉ๋๋ค. ์ปดํ์ผ ํ ๋๊ตฌ๋ ์ง๋์น๊ฒ ๋ณต์กํ ํด๋์ค๋ ๋ถ๋ฆฌ๊ฐ ์ด๋ ค์ด ๊น๊ฒ ์ค์ฒฉ๋ ๋ก์ง๊ณผ ๊ฐ์ด ์ํคํ ์ฒ ์ํฐ ํจํด๊ณผ ๊ด๋ จ์ด ์๋ ์ฝ๋ ์ค๋ฉ์ ๋๋ฌ๋ ๋๋ค.
์ด๋ฌํ ์ด์ ์๋ ๋ถ๊ตฌํ๊ณ ์ ์ ๋ถ์์ ์ด ๋งฅ๋ฝ์์ ํ๊ณ๋ฅผ ์ง๋๋๋ค. ๊ตฌ์กฐ์ ๊ฒฐํฉ๋๋ฅผ ์ค๋ช ํ ์๋ ์์ง๋ง, ์ ์๋ ๋ถํด ๋ฐฉ์์ด ๋ฐํ์ ์ํธ ์์ฉ ํจํด์ด๋ ๋น์ฆ๋์ค ์ํฌํ๋ก์ ์ผ์นํ๋์ง ์ฌ๋ถ๋ ํ๋จํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ํคํ ์ฒ ์ค๊ณ ์์๋ ์ ์ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ด์ ๋ฐ์ดํฐ ๋ฐ ๋๋ฉ์ธ ์ดํด์ ๊ฒฐํฉํด์ผ ํฉ๋๋ค. ์ ์ ๋ถ์์ ์ฝ๋๊ฐ ์๋ก ์ฝํ ์๋ ๋ถ๋ถ์ ๋ณด์ฌ์ฃผ์ง๋ง, ๊ทธ๋ฌํ ์ฐ๊ฒฐ์ด ์กด์ฌํ๋ ์ด์ ๋ฅผ ์ค๋ช ํ์ง๋ ์์ต๋๋ค.
์ ์ ๋ถ์์ ๋ถํด ์์ ์ ํตํฉํ๋ ๊ธฐ์ ์ ์ข ์ข ์ํฅ ์ค์ฌ ๊ธฐ๋ฒ๊ณผ ํจ๊ป ์ฌ์ฉํฉ๋๋ค. ์ํฅ ๋ถ์ ์ค๋ฌด์ด๋ฌํ ์กฐํฉ์ ํ์ด ์์คํ ๋ฐ ์ดํด๊ด๊ณ์ ์ ๋ฐ์ ๊ฑธ์ณ ๊ตฌ์กฐ์ ๋ณํ์ ํ๊ธ ํจ๊ณผ๋ฅผ ์์ธกํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ ์ ๋ถ์์ ์ฝ๋ ๊ฐ์ ๊ด๊ณ ์ง๋๋ฅผ ์ ๊ณตํ๋ ๋ฐ๋ฉด, ์ํฅ ๋ถ์์ ์ด๋ฌํ ๊ด๊ณ๋ฅผ ๋ณํ์ ๊ฒฐ๊ณผ๋ผ๋ ๊ด์ ์์ ์ค๋ช ํฉ๋๋ค.
ํ๋ซํผ ๋ฐ ๊ธฐ์ ์ ํ ๊ณผ์ ์์์ ์ํ ๊ด๋ฆฌ
Scala ํ๋ํ๋ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์ธํ๋ผ๋ก์ ์ด์ ์ด๋ ์๋ก์ด ๋ฐ์ดํฐ ํ๋ซํผ๊ณผ์ ํตํฉ๊ณผ ๊ฐ์ ํ๋ซํผ ์ ํ๊ณผ ๋์์ ์งํ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฌํ ์๋๋ฆฌ์ค์์ ์ ์ ์ฝ๋ ๋ถ์์ ์ด์ ํ๊ฒฝ์ ๊ธฐ๋ฐํ ๊ฐ์ ๋ค์ ๋๋ฌ๋ด์ด ์ํ์ ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ ์ค๋๋ค. ์ด๋ฌํ ๊ฐ์ ์๋ ์ค๋ ๋ฉ ๋ชจ๋ธ, ๋ฆฌ์์ค ๊ด๋ฆฌ ํจํด ๋๋ ์๋ก์ด ํ๋ซํผ์ผ๋ก ์ํํ๊ฒ ์ ํ๋์ง ์๋ ํตํฉ ๋ฉ์ปค๋์ฆ ๋ฑ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
์ ์ ๋ถ์ ๋๊ตฌ๋ ํ๋ซํผ ์ ํ ์ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ตฌ๋ฌธ์ด๋ ์์ ํ์ง ์์ ํจํด์ ์ฐพ์๋ผ ์ ์์ต๋๋ค. ๋ํ ํ์ด Scala ์ฝ๋๊ฐ ํ๋ซํผ๋ณ ๋์์ ์์กดํ๋ ์์ญ์ ์๋ณํ์ฌ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ ์ ์ ํ ์์ ์ ํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ์ด๋ฌํ ์ฌ์ ๋ถ์์ ํตํด ๋ง์ด๊ทธ๋ ์ด์ ์ผ์ ์ง์ฐ์ ์ด๋ํ๋ ์์์น ๋ชปํ ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ์ค์ผ ์ ์์ต๋๋ค.
ํ์ง๋ง ์ ์ ๋ถ์๋ง์ผ๋ก๋ ํ๋ซํผ ํธํ์ฑ์ ๋จ๋ ์ผ๋ก ๊ฒ์ฆํ ์ ์์ต๋๋ค. ๋ฐฐํฌ ๊ตฌ์ฑ, ๋คํธ์ํฌ ๋์ ๋๋ ์ด์ ์ ์ฝ ์กฐ๊ฑด์ ์๋ฎฌ๋ ์ด์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์ ์ ๋ถ์์ ์ญํ ์ ํ์ ์ ์ธ ๊ฒ์ฆ๋ณด๋ค๋ ์ค๋น ๋จ๊ณ์ ์์ต๋๋ค. ์ ์ ๋ถ์์ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ฉํ๋ ๊ธฐ์ ์ ์ด๋ฅผ ํตํด ๋ถํ์ค์ฑ์ ์ค์ด๊ณ ์ํ๋๊ฐ ๊ฐ์ฅ ๋์ ๋ถ๋ถ์ ํ ์คํธ ๋ฐ ๊ฒ์ฆ ๋ ธ๋ ฅ์ ์ง์คํ ์ ์์ต๋๋ค.
ํ๋ํ ํ๋ก๊ทธ๋จ์์ Scala ์ ์ ์ฝ๋ ๋ถ์์ ํ์ ๋๊ตฌ๋ก ํ์ฉํ ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ ๋๋ค. ๊ตฌ์กฐ, ์ ์ฝ ์กฐ๊ฑด ๋ฐ ์ ์ฌ์ ์ํ์ ๋ช ํํ ํ์ง๋ง, ์ํคํ ์ฒ์ ํ๋จ์ด๋ ์ด์ ๊ฒ์ฆ์ ๋์ฒดํด์๋ ์ ๋ฉ๋๋ค. ๋ถ์์ ํ๋ํ ๋จ๊ณ์ ๋ง์ถฐ ์งํํจ์ผ๋ก์จ ๊ธฐ์ ์ ์ด๋ฌํ ๋๊ตฌ์์ ์ง์์ ์ธ ๊ฐ์น๋ฅผ ์ถ์ถํ๋ ๋์์, ์ ์ด์ ์ ๊ณตํ๋๋ก ์ค๊ณ๋์ง ์์ ์ ํธ์ ๊ณผ๋ํ๊ฒ ์์กดํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์ํ์ด ๋ฐ์ํ๊ธฐ ์ ์ ๊ทธ ํํ๋ฅผ ํ์ ํ๊ธฐ
Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ ๊ธฐ์ ์ํํธ์จ์ด ํ๊ฒฝ์์ ์ค์ํ๊ณ ์ง์์ ์ธ ์ญํ ์ ์ํํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ๋ณต์ก์ฑ์ ๊ตฌ์กฐ๋ฅผ ๋ถ์ฌํ๊ณ , ์จ๊ฒจ์ง ์ค๊ณ ๊ฐ์ ์ ๋๋ฌ๋ด๋ฉฐ, ํ ๊ฐ ์ฝ๋ ํ์ง์ ๋ํ ๋ ผ์๋ฅผ ์ํ ๊ณตํต๋ ์ดํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ ์คํ๊ฒ ํ์ฉํ๋ฉด ๋ฆฌํฉํ ๋ง ๊ณผ์ ์ ๋ถํ์ค์ฑ์ ์ค์ด๊ณ , ์ ์ง์ ์ธ ํ๋ํ๋ฅผ ์ง์ํ๋ฉฐ, ๊ทธ๋ ์ง ์์๋ค๋ฉด ๋ถํฌ๋ช ํ์ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์กฐ์ง์ด ๋ถ์ํ ์ ์๋๋ก ๋์ต๋๋ค. ์ด๋ฌํ ๋๊ตฌ์ ๊ฐ์น๋ ๋ถ๋ช ํ์ง๋ง, ๊ทธ ๊ฐ์น๋ ๋๊ตฌ๊ฐ ์๋ํ๋ ๋ถ์ ๊ณ์ธต์ ์ํด ์ ํ๋๊ธฐ๋ ํฉ๋๋ค.
์ํฐํ๋ผ์ด์ฆ Scala ์์คํ ์์ ๊ฐ์ฅ ์ค๋ํ ์ํ์ ๊ฐ๋ณ์ ์ธ ์ธ์ด ์๋ฐ๋ณด๋ค๋ ๋ชจ๋, ์๋น์ค, ํ๋ซํผ ๋ฐ ์ด์ ํ๊ฒฝ ๊ฐ์ ์ํธ ์์ฉ์์ ๋ฐ์ํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ์ ์ ๋ถ์์ ์ฝ๋์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ฃผ์ง๋ง, ์ค์ ์ํฌ๋ก๋, ์ค๋ฅ ๋ฐ ๋ณ๊ฒฝ ์ํฉ์ ๋ ธ์ถ๋์์ ๋ ํด๋น ๊ตฌ์กฐ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์๋ฒฝํ๊ฒ ์ค๋ช ํ ์๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ์ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์์คํ ์ํ์ ๋ํ ํ์ ์ ์ธ ํ๊ฐ๋ก ๊ฐ์ฃผํ๋ฉด ์ฌ๊ณ ๋ฐ์ ํ์์ผ ๋๋ฌ๋๋ ์ฌ๊ฐ์ง๋๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
์ด ๊ธ ์ ๋ฐ์ ๊ฑธ์น ๋ถ์์์ ์ ์ ์๋ฏ์ด, Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ค์ ํ์ง๋ณด๋ค๋ ์๋์์ ๋ ํฐ ์ฐจ์ด๋ฅผ ๋ณด์ ๋๋ค. ์ด๋ค ๋๊ตฌ๋ ๊ท์จ์ ๊ฐํํ๊ณ , ์ด๋ค ๋๊ตฌ๋ ์งํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ, ๋ ์ด๋ค ๋๊ตฌ๋ ๊ฑฐ๋ฒ๋์ค์ ๊ฐ์์ฑ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ค์ ๊ฒฐํฉํ๋ฉด ๋ถ์ ๋ฒ์๋ ๋์ด์ง์ง๋ง, ๊ท์จ ๊ฐํ, ์ ํธ ์ผ๊ด์ฑ, ๊ทธ๋ฆฌ๊ณ ์กฐ์ง ๋ด ๋์ ์ธก๋ฉด์์ ์์ถฉ ๊ด๊ณ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ฌํ ์์ถฉ ๊ด๊ณ๋ ์ํคํ ์ฒ์ ์ธ ํน์ฑ์ ๊ฐ์ง๋ฏ๋ก, ๋๊ตฌ๊ฐ ๊ฐ๋ฐ์์ ํ๋๊ณผ ์์ฌ ๊ฒฐ์ ์ ์ฅ๊ธฐ์ ์ผ๋ก ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ์ดํดํ๊ณ ์ ์คํ๊ฒ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
๊ธฐ์ ์ ์ ๋ต์ ์ง๋ฌธ์ ์ด๋ค Scala ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๊ฐ ๊ฐ๋ณ์ ์ผ๋ก ๊ฐ์ฅ ์ข์๊ฐ๊ฐ ์๋๋๋ค. ์ ์ ๋ถ์์ด ์์คํ ์ดํด๋ผ๋ ๋ ํญ๋์ ์ ๊ทผ ๋ฐฉ์์ ์ด๋ป๊ฒ ๋ถํฉํ๋๊ฐ๊ฐ ํต์ฌ์ ๋๋ค. ์ ์ ๋ถ์ ๋๊ตฌ๋ ๋ฐํ์ ์ง์ค์ ๋๋ณํ๋ ๋๊ตฌ๋ผ๊ธฐ๋ณด๋ค๋ ๊ตฌ์กฐ์ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ๋ ๋๊ตฌ๋ก ํ์ฉ๋ ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ํ์ ๋ฐํํฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ํ์ฉํ๋ฉด ์กฐ์ง์ ๋ณํ๊ฐ ์ด๋ ค์ธ ๋ถ๋ถ, ๊ฐ์ ์ด ์ทจ์ฝํ ๋ถ๋ถ, ๊ทธ๋ฆฌ๊ณ ํ๋ํ ๋ ธ๋ ฅ์ด ๊ฐ์ฅ ์ง์ฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ ๋ถ๋ถ์ ์์ธกํ ์ ์์ต๋๋ค.
์ค์นผ๋ผ๊ฐ ์ฅ๊ธฐ์ ์ธ ํต์ฌ ์์คํ ์ ๊ณ์ ์ฌ์ฉ๋จ์ ๋ฐ๋ผ ์ ์ ๋ถ์์ด๋ผ๋ ๋ถ์ผ๋ ํ์์ ์ธ ์์๋ก ๋จ์ ๊ฒ์ ๋๋ค. ์ ์ ๋ถ์์ ๊ฐ์ฅ ํฐ ๊ณตํ์ ๊ธฐ์ ์ด ๊ท๋ชจ, ๋ถํฌ ๋ฐ ์๊ฐ์ ๋ฐ๋ผ ์ํ์ด ์ฆํญ๋๊ธฐ ์ ์ ์ํ์ ์ค๊ณฝ์ ์กฐ๊ธฐ์ ํ์ ํ ์ ์๋๋ก ๋๋ ๋ฐ ์์ต๋๋ค.
