์ฐ๋ฆฌ ํ์ฌ TeamCity, ์์ง๋ ์ธํฐ๋ท์ ์ด๋ ค ์๋์?
์ฌ๋ด ๋น๋ ์๋ฒ ์ฃผ์๋ฅผ ์ธ๋ถ๋ง์์ ๊ทธ๋ฅ ์ณ๋ดค๋๋ ๋ก๊ทธ์ธ ํ๋ฉด์ด ๋ฉ์ฉกํ ๋จ๋ ๊ฑธ ๋ณธ ์ ์ด ์์. ๊ฐ๋ฐํ์ "์ฌํ ๊ทผ๋ฌด์๊ฐ ๋น๋ ์ํ๋ฅผ ๋ด์ผ ํด์์"๋ผ๊ณ ํ๊ณ , ๋ณด์ํ์ ๊ทธ ํ๋ฉด์ ๊ทธ๋ฅ ์ง๋์ณค์. JetBrains๊ฐ TeamCity์ ์๊ฒฉ ์ฝ๋ ์คํ ๊ฒฐํจ์ ์ต๊ณ ์ฌ๊ฐ๋๋ก ๊ณต์งํ ๋๋ง๋ค ์ ์ผ ๋จผ์ ๋ ์ค๋ฅด๋ ์ฅ๋ฉด์ด ๋ฑ ๊ทธ๊ฑฐ์. ์ทจ์ฝ์ ์์ฒด๋ณด๋ค, ๊ทธ ์ทจ์ฝ์ ์ด ๋ฟ์ ์ ์๋ ์์น์ ๋น๋ ์๋ฒ๊ฐ ๋์ฌ ์์๋ค๋ ์ฌ์ค์ด ํจ์ฌ ๋ฌด๊ฑฐ์.
- TeamCity On-Premises์์ ์๊ฒฉ ์ฝ๋ ์คํ์ผ๋ก ์ด์ด์ง๋ ์น๋ช ์ ๊ฒฐํจ์ด ๊ณต์ง๋จ. ์ธ์ฆ์ ์ฐํํ๊ฑฐ๋ ๋ฎ์ ๊ถํ์์ ์๋ฒ ๊ถํ๊น์ง ์ฌ๋ผ๊ฐ๋ ๊ณ์ด์ CI ์๋ฒ ํน์ฑ์ ๊ณง๋ฐ๋ก ์ต์ ์ ๊ฒฐ๊ณผ๋ก ์ด์ด์ง
- ๋น๋ ์๋ฒ๋ ์์ค์ฝ๋·์๋ช ํค·๋ฐฐํฌ ์๊ฒฉ์ฆ๋ช ·ํด๋ผ์ฐ๋ ํ ํฐ์ด ํ๊ณณ์ ๋ชจ์ธ ์์ฐ์ด๋ผ, ํ ๋๊ฐ ๋ซ๋ฆฌ๋ฉด ๋ฆด๋ฆฌ์ค ์ฐ์ถ๋ฌผ ์ ์ฒด๋ฅผ ์ ๋ขฐํ ์ ์๊ฒ ๋จ
- ํจ์น ์ ์ฉ์ด 1์์, ์ธํฐ๋ท ๋ ธ์ถ ์ฐจ๋จ์ด 2์์, ๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ ๋นํ๋ค๋ ๊ฐ์ ํ์ ๊ณ์ ·ํ ํฐ·ํ๋ฌ๊ทธ์ธ·๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋์ง๋ ๊ฒ 3์์์
์ TeamCity๋ง ์ ๋ ์์ฃผ ํ์ ์ด ๋๋
TeamCity ๊ณ์ด ๊ฒฐํจ์ด ๋ฐ๋ณต์ ์ผ๋ก ํฌ๊ฒ ๋ค๋ค์ง๋ ์ด์ ๋ ์ ํ์ด ํน๋ณํ ํ์ ํด์๊ฐ ์๋. ๊ณต๊ฒฉ์ ์ ์ฅ์์ ํฌ์ ๋๋น ํ์์จ์ด ์๋์ ์ด๊ธฐ ๋๋ฌธ์.
- ๋น๋ ์์ด์ ํธ์ ์์ ๋ช ๋ น์ ์คํ์ํฌ ์ ์๋ ๊ตฌ์กฐ๊ฐ ์ ์ ๊ธฐ๋ฅ์. ์ฆ ๊ด๋ฆฌ์ ๊ถํ ํ๋ = ์๊ฒฉ ์ฝ๋ ์คํ์ด ์ฌ์ค์ ๋์์ด์
- ์๋ฒ ์์ SSH ํค, ์ํฐํฉํธ ์ ์ฅ์ ์๊ฒฉ์ฆ๋ช , ์ฝ๋ ์๋ช ์ธ์ฆ์, ํด๋ผ์ฐ๋ ๋ฐฐํฌ ํ ํฐ์ด ํ๋ฌธ์ ๊ฐ๊น๊ฒ ์ถ์ ๋ผ ์์
- ์ฐ์ถ๋ฌผ์ด ๊ทธ๋๋ก ๊ณ ๊ฐ·๋ด๋ถ ์ฌ์ฉ์์๊ฒ ๋ฐฐํฌ๋๋ฏ๋ก ๊ณต๊ธ๋ง ๊ณต๊ฒฉ์ ์ถ๋ฐ์ ์ผ๋ก ์ฐ๊ธฐ ์ข์. 2023๋ CVE-2023-42793 ์ฌํ์์ ๊ตญ๊ฐ ๋ฐฐํ ๊ทธ๋ฃน๋ค์ด TeamCity๋ฅผ ๋๋์ผ๋ก ๋ ธ๋ ธ๋ ์ด์ ๊ฐ ์ ํํ ์ด๊ฒ์ด์์
- ์ฌ๋ด ๋๊ตฌ๋ผ๋ ์ด์ ๋ก ํจ์น ์ฃผ๊ธฐ๊ฐ ๋๋ฆฌ๊ณ , ๋ค์ดํ์ ๋ถ๋ด ๋๋ฌธ์ ์ ๊ทธ๋ ์ด๋๊ฐ ๊ณ์ ๋ฐ๋ฆผ
๊ณต๊ฒฉ ํ๋ฆ ์์ฒด๋ ๊ฐ๋ ์ ์ผ๋ก ๋จ์ํจ. ์ธ์ฆ ๊ฒ์ฌ๋ฅผ ๊ฑด๋๋ธ ์ ์๋ ๊ฒฝ๋ก๋ก ๊ด๋ฆฌ์๊ธ API์ ์ ๊ทผ → ๊ด๋ฆฌ ํ ํฐ์ด๋ ๊ณ์ ์ ์์ฑ → ๋น๋ ์ค์ ์ด๋ ํ๋ฌ๊ทธ์ธ ์ ๋ก๋ ๊ธฐ๋ฅ์ ์ด์ฉํด ์๋ฒ์์ ์ฝ๋๋ฅผ ์คํ. ์์ธํ ์์ฒญ ํํ๋ ํ์ด๋ก๋๋ฅผ ์ฌ๊ธฐ์ ๋ค๋ฃฐ ์ด์ ๋ ์๊ณ , ๋ฐฉ์ด์๊ฐ ๊ธฐ์ตํ ๊ฑด "์ธ์ฆ ์ฐํ ํ๋๊ฐ ๊ณง๋ฐ๋ก ์๋ฒ ์ ธ๊น์ง ์ด์ด์ง๋ ์งง์ ์ฌ์ฌ"์ด๋ผ๋ ์ ์.
์ค๋ ์์ ๋๋ด์ผ ํ ๊ฒ
- ๋ฒ์ ํ์ธ๋ถํฐ. ๊ด๋ฆฌ์ ํ๋ฉด ํ๋จ์ด๋
/app/rest/server์๋ต์์ ํ์ฌ ๋ฒ์ ์ ํ์ธํ๊ณ , JetBrains๊ฐ ๊ณต์งํ ์์ ๋ฒ์ ๊ณผ ๋์กฐํจ. Cloud ์ฌ์ฉ์๋ ๋์ฒด๋ก ์๋ ๋ฐ์๋์ง๋ง On-Premises๋ ์ ์ ์ผ๋ก ์ด์์ ๋ชซ์ - ํจ์น๋ฅผ ๋ฏธ๋ฃฐ ์๋ฐ์ ์๋ค๋ฉด ๋ ธ์ถ๋ถํฐ ๋์. ์ธํฐ๋ท์์ ์ง์ ์ ๊ทผ ๊ฐ๋ฅํ TeamCity๋ ์ฆ์ VPN์ด๋ ๋ฆฌ๋ฒ์ค ํ๋ก์ ๋ค๋ก ๋ฃ๊ณ , ์ต์ํ ๊ด๋ฆฌ ๊ฒฝ๋ก์ REST API๋ ์ฌ๋ด ๋์ญ·ํน์ IP๋ก๋ง ํ์ฉํจ
- ํจ์น ํ์๋ ์์ฌ ๊ธ์ง. ์ธ์ฆ ์ฐํํ ๊ฒฐํจ์ ํจ์น ์ด์ ์ ๋ง๋ค์ด์ง ํ ํฐ·๊ณ์ ์ด ๊ทธ๋๋ก ์ด์๋จ์. ํจ์น๋ ๋ฌธ์ ์ ๊ธ ๋ฟ, ์ด๋ฏธ ๋ค์ด์ ์์ ์๋์ ๋ด๋ณด๋ด์ง ์์
์นจํด ํ์ ์ ๋์ง๋ ์์
๊ณต์ง ์์ ์ด์ ์ต์ ๋ช ์ฃผ์น๋ฅผ ๋์์ผ๋ก ์ก๊ณ ์๋ ์์๋ก ๋ด. ๊ฐ์ธ์ ์ผ๋ก๋ ๋ก๊ทธ๋ฅผ ๋จผ์ ๋ณด๋ ๊ฒ๋ณด๋ค "๊ณต๊ฒฉ์๊ฐ ๋จ๊ธธ ์๋ฐ์ ์๋ ์ํ ๋ณํ"๋ถํฐ ํ๋ ์ชฝ์ ์ถ์ฒํจ. ๋ก๊ทธ๋ ์ง์์ง ์ ์์ง๋ง ๋ง๋ค์ด๋ ๊ณ์ ์ ์ง์ฐ๊ธฐ ์๊น์์ ๋จ๊ฒจ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์.
- ์ฌ์ฉ์·ํ ํฐ ๋ชฉ๋ก: ๋ฏ์ ๊ด๋ฆฌ์ ๊ณ์ , ์ต๊ทผ์ ์์ฑ๋ ์ก์ธ์ค ํ ํฐ, ๊ฐ์๊ธฐ System Administrator ์ญํ ์ด ๋ถ์ ์๋น์ค ๊ณ์
- ํ๋ฌ๊ทธ์ธ ๋๋ ํฐ๋ฆฌ: ์ค์น ๊ธฐ๋ก์ ์๋ ํ๋ฌ๊ทธ์ธ ํ์ผ, ์ต๊ทผ ๋ณ๊ฒฝ๋ ํ์์คํฌํ. ํ๋ฌ๊ทธ์ธ ์ ๋ก๋๋ ์ ์ ๊ธฐ๋ฅ์ด๋ผ ์๋ฆผ์ด ์ ์ ๋ธ
- ๋น๋ ์ค์ ๋ณ๊ฒฝ ์ด๋ ฅ: ์ปค๋ฐ๊ณผ ๋ฌด๊ดํ๊ฒ ์์ ๋ ๋น๋ ์คํ , ์๋ก ์ถ๊ฐ๋ ์ปค๋งจ๋๋ผ์ธ ์คํ , ์ฌ๋ผ์ง ๊ฐ์ฌ ํญ๋ชฉ
- ์๋ฒ ๋ก๊ทธ:
teamcity-server.log,teamcity-auth.log์์ ์ธ์ฆ ์คํจ ์์ด ๊ด๋ฆฌ API๊ฐ ํธ์ถ๋ ํ์ , ๋น์ ์์ ์ผ๋ก ์งง์ ์ธ์ - OS ๋ ๋ฒจ: TeamCity ์คํ ๊ณ์ ์ด ๋ง๋ ์์ฝ ์์ ·์๋น์ค·ํฌ๋ก , ์ธ๋ถ๋ก ํฅํ๋ ์์ ์ฐ๊ฒฐ
์ด๋ฏธ ๋ซ๋ ธ๋ค๊ณ ๊ฐ์ ํ๊ณ ์์ง์ผ ๋
๋น๋ ์๋ฒ ์นจํด๋ "์๋ฒ ํ ๋ ๋ณต๊ตฌ"๋ก ๋๋์ง ์์. ์ ๋ขฐ์ ๋ฟ๋ฆฌ๊ฐ ์ค์ผ๋ ์ํฉ์ด๋ผ ์ ๋ฆฌ ๋ฒ์๊ฐ ๋์.
- ์๋ฒ์ ์ ์ฅ๋ผ ์๋ ๋ชจ๋ ์๊ฒฉ์ฆ๋ช ํ์ : SSH ํค, ๋ ์ง์คํธ๋ฆฌ·์ํฐํฉํธ ์ ์ฅ์ ๋น๋ฐ๋ฒํธ, ํด๋ผ์ฐ๋ ์ก์ธ์ค ํค, VCS ํ ํฐ
- ์ฝ๋ ์๋ช ํค๊ฐ ์๋ฒ์ ์์๋ค๋ฉด ํค ํ๊ธฐ์ ์ฌ๋ฐ๊ธ๊น์ง ๊ฒํ . ์ฌ๊ธฐ์ ์๊น์ํ๋ฉด ๋์ค์ ํจ์ฌ ํฌ๊ฒ ๋ฌผ๋ฆผ
- ์์ฌ ๊ธฐ๊ฐ์ ์์ฑ๋ ์ํฐํฉํธ๋ ์ฌ๋น๋ ํ ํด์ ๋น๊ต. ์์ค์ ์ฐ์ถ๋ฌผ์ด ์ผ์นํ๋์ง ํ์ธํ๋ ๊ฒ ์ ์ผํ๊ฒ ํ์คํ ๋ฐฉ๋ฒ์
- ์ฌ๊ณ ์ดํ ๊ตฌ์กฐ ๊ฐ์ : ๋น๋ ์์ด์ ํธ์ ์๋ฒ ๋ถ๋ฆฌ, ์์ด์ ํธ์ ์ต์ ๊ถํ ๋ถ์ฌ, ๋ฐฐํฌ์ฉ ์๊ฒฉ์ฆ๋ช ์ CI ์์ ๋์ง ๋ง๊ณ ๋จ๊ธฐ ํ ํฐ์ผ๋ก ๋ฐ๊ธ
๋ค์ ๋ฒ์ ์ํ ์ค๋น
์์งํ ๋งํ๋ฉด TeamCity๋ Jenkins๋ GitLab Runner๋ , CI ๊ณ์ด ์ ํ์ ์์ผ๋ก๋ ๋น์ทํ ๊ฒฐํจ์ด ๊ณ์ ๋์ฌ ๊ฒ ๊ฐ์. ๊ธฐ๋ฅ ์์ฒด๊ฐ "์๊ฒฉ์์ ๋ช ๋ น์ ์คํํ๋ ๊ฒ"์ด๋ค ๋ณด๋ ์ธ์ฆ ํ ๊ฒน๋ง ๋ฌด๋์ ธ๋ ๊ฒฐ๊ณผ๊ฐ ๋๊ฐ์ด ์ฌ๊ฐํด์ง๊ธฐ ๋๋ฌธ์. ๊ทธ๋์ ๊ฐ๋ณ CVE๋ฅผ ์ซ๋ ๊ฒ๋ณด๋ค ๋น๋ ์ธํ๋ผ๋ฅผ '์ธํฐ๋ท์ ์๋ ์์ฐ'์ผ๋ก ๋ง๋ค์ด ๋๋ ๊ฒ์ด ํจ์ฌ ํจ์จ์ด ์ข์. ๋ ธ์ถ๋ ๊ด๋ฆฌ ์ธํฐํ์ด์ค ๋ชฉ๋ก์ ๋ถ๊ธฐ๋ง๋ค ํ ๋ฒ์ฉ ์ค์ค๋ก ์ ๊ฒํ๋ ์ต๊ด, ๊ทธ๊ฑฐ ํ๋๋ก ์ด๋ฐ ๊ณต์ง๊ฐ ๋ฐ ๋๋ง๋ค ๊ฒช๋ ์ฌ์ฅ ๋จ๋ฆผ์ด ํ ์ค์ด๋ฆ.
์ค๋ ํด๊ทผ ์ ์ ๋ฑ ๋ ๊ฐ์ง๋ง ํด๋ณด์์. ์ฌ๋ด TeamCity ๋ฒ์ ํ์ธํ๊ธฐ, ๊ทธ๋ฆฌ๊ณ ์ธ๋ถ๋ง์์ ๊ทธ ์ฃผ์๋ฅผ ํ ๋ฒ ์ด์ด๋ณด๊ธฐ. ๋ ๋ฒ์งธ์์ ๋ก๊ทธ์ธ ํ๋ฉด์ด ๋ณด์ธ๋ค๋ฉด ๊ทธ๊ฒ ์ง๊ธ ๊ฐ์ฅ ๊ธํ ์ผ์ด ๋ง์ต๋๋ค. ํน์ ์ ๊ฒํ๋ค๊ฐ ์ ๋งคํ ๋ถ๋ถ ์๊ธฐ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์, ๊ฐ์ด ์ ๋ฆฌํด๋ด์.
# ๋๊ธ