์ค๋๋ ๋๋ถ๋ถ์ ์ํํธ์จ์ด ์ ํ์ ํ์ผ๋ก ๊ฐ๋ฐ๋ฉ๋๋ค. ์ฑ๊ณต์ ์ธ ํ ๊ฐ๋ฐ์ ์กฐ๊ฑด์ ๊ฐ๋จํ ๋ค์ด์ด๊ทธ๋จ ํํ๋ก ํํ๋ ์ ์์ต๋๋ค.
์ฝ๋๋ฅผ ์์ฑํ ํ์๋ ๋ค์ ์ฌํญ์ ํ์ธํด์ผ ํฉ๋๋ค.
- ะ ะฐะฑะพัะฐะตั.
- ๋๋ฃ๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ํฌํจํ์ฌ ์ด๋ค ๊ฒ๋ ๊นจ์ง์ง ์์ต๋๋ค.
๋ ๊ฐ์ง ์กฐ๊ฑด์ด ๋ชจ๋ ์ถฉ์กฑ๋๋ฉด ์ฑ๊ณต์ ๊ธธ๋ก ๋ค์ด์๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ์กฐ๊ฑด์ ์ฝ๊ฒ ํ์ธํ๊ณ ์์ต์ฑ ์๋ ๊ฒฝ๋ก์์ ๋ฒ์ด๋์ง ์๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ์ง์์ ํตํฉ(Continuous Integration)์ ์๊ฐํด๋์ต๋๋ค.
CI๋ ์ฝ๋๋ฅผ ๊ฐ๋ฅํ ํ ์์ฃผ ์ ์ฒด ์ ํ ์ฝ๋์ ํตํฉํ๋ ์ํฌํ๋ก์ฐ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋จ์ํ ํตํฉํ๋ ๊ฒ์ด ์๋๋ผ ๋ชจ๋ ๊ฒ์ด ์ ๋๋ก ์๋ํ๋์ง ์ง์์ ์ผ๋ก ํ์ธํฉ๋๋ค. ๋ง์ด, ์์ฃผ ํ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์๋ํ์ ๋ํด ์๊ฐํด ๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ์๋์ผ๋ก ํ์ธํ ์ ์์ง๋ง ๊ทธ๋ ๊ฒ ํด์๋ ์ ๋ฉ๋๋ค. ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์น์ ํ๋ ์ฌ๋๋ค. ํ๋ก๊ทธ๋๋จธ์ ํ ์๊ฐ ์์ ์ ์๋ฒ์ ํ ์๊ฐ ์์ ๋ณด๋ค ๋น์๋๋ค.
- ์ฌ๋๋ค์ ์ค์๋ฅผ ํ๋ค. ๋ฐ๋ผ์ ์๋ชป๋ ๋ธ๋์น์์ ํ ์คํธ๊ฐ ์คํ๋๊ฑฐ๋ ํ ์คํฐ๋ฅผ ์ํด ์๋ชป๋ ์ปค๋ฐ์ด ์ปดํ์ผ๋๋ ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์ฌ๋๋ค์ ๊ฒ์ผ๋ฅด๋ค. ๊ฐ๋ ์์ ์ ๋ง์น๋ฉด "ํ์ธํ ๊ฒ์ด ๋ฌด์์ ๋๊น? "๋ผ๋ ์๊ฐ์ด ๋ญ๋๋ค. ๋๋ ๋ ์ค์ ์ผ์ต๋๋ค - ๋ชจ๋ ๊ฒ์ด ์๋ํฉ๋๋ค! ์ฌ๋ฌ๋ถ ์ค์๋ ๊ฐ๋ ๊ทธ๋ฐ ์๊ฐ์ ํ์๋ ๋ถ๋ค์ด ๊ณ์๋ฆฌ๋ผ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ํญ์ ํ์ธํด์ผ ํฉ๋๋ค.
Nikolai Nesterov๋ Avito ๋ชจ๋ฐ์ผ ๊ฐ๋ฐ ํ์์ ์ง์์ ์ธ ํตํฉ์ด ์ด๋ป๊ฒ ๊ตฌํ ๋ฐ ๊ฐ๋ฐ๋์๋์ง, ์ด๋ป๊ฒ ํ๋ฃจ์ 0์์ 450๊ฐ์ ๋น๋๋ก ์ด๋ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๋น๋ ๊ธฐ๊ณ๊ฐ ํ๋ฃจ 200์๊ฐ ๋์ ์กฐ๋ฆฝ๋์๋์ง์ ๋ํด ๋งํฉ๋๋ค.
์ด ์ด์ผ๊ธฐ๋ Android ๋ช ๋ น์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง ๋๋ถ๋ถ์ ์ ๊ทผ ๋ฐฉ์์ iOS์๋ ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
์๋ ์์ ์ ํ ์ฌ๋์ด Avito Android ํ์์ ์ผํ์ต๋๋ค. ์ ์์ ๋ฐ๋ฅด๋ฉด ๊ทธ๋ ์ง์์ ์ธ ํตํฉ์์ ์๋ฌด๊ฒ๋ ํ์ํ์ง ์์์ต๋๋ค. ํตํฉํ ์ฌ๋์ด ์์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฑ์ฅํ๊ณ ์ ์ ๋ ๋ง์ ์๋ก์ด ์์ ์ด ๋ฑ์ฅํ์ผ๋ฉฐ ๊ทธ์ ๋ฐ๋ผ ํ๋ ์ฑ์ฅํ์ต๋๋ค. ์ด๋ ์์ ์์๋ ์ฝ๋ ํตํฉ ํ๋ก์ธ์ค๋ฅผ ๋ณด๋ค ๊ณต์์ ์ผ๋ก ํ๋ฆฝํด์ผ ํ ๋์ ๋๋ค. Git flow๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
Git ํ๋ฆ์ ๊ฐ๋
์ ์ ์๋ ค์ ธ ์์ต๋๋ค. ํ๋ก์ ํธ์๋ ํ๋์ ๊ณตํต ๊ฐ๋ฐ ๋ถ๊ธฐ๊ฐ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํด ๊ฐ๋ฐ์๋ ๋ณ๋์ ๋ถ๊ธฐ๋ฅผ ์๋ผ์ ์ปค๋ฐํ๊ณ ํธ์ํ ๋ค์ ์ฝ๋๋ฅผ ๊ฐ๋ฐ ๋ถ๊ธฐ์ ๋ณํฉํ๋ ค๋ ๊ฒฝ์ฐ ํ ์์ฒญ. ์ง์์ ๊ณต์ ํ๊ณ ์ ๊ทผ ๋ฐฉ์์ ๋ํด ๋
ผ์ํ๊ธฐ ์ํด ์ฝ๋ ๊ฒํ ๋ฅผ ๋์
ํ์ต๋๋ค. ์ฆ, ๋๋ฃ๊ฐ ์๋ก์ ์ฝ๋๋ฅผ ํ์ธํ๊ณ ํ์ธํด์ผ ํฉ๋๋ค.
์ํ
๋์ผ๋ก ์ฝ๋๋ฅผ ๋ณด๋ ๊ฒ์ ๋ฉ์ง์ง๋ง ์ถฉ๋ถํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์๋ ๊ฒ์ฌ๊ฐ ๋์ ๋์์ต๋๋ค.
- ์ฐ์ , ํ์ธํด๋ณด๊ฒ ์ต๋๋ค ๋ฐฉ์ฃผ ์กฐ๋ฆฝ.
- ๋ง์ Junit ํ ์คํธ.
- ์ฐ๋ฆฌ๋ ์ฝ๋ ์ ์ฉ ๋ฒ์๋ฅผ ๊ณ ๋ คํฉ๋๋ค, ํ ์คํธ๋ฅผ ์คํ ์ค์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ฌํ ๊ฒ์ฌ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๊ธฐ ์ํด Avito์ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋ต์ ์ผ๋ก ํํํ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ์๊ฐ ๋ ธํธ๋ถ์ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ์ปค๋ฐ ํํฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋จ์ํ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ฒ์ฌ๋ฅผ ์คํํ์ฌ ๋ฐ๋ก ์ฌ๊ธฐ์์ ํตํฉ ๊ฒ์ฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ์๋ ์ฝ๋๋ฅผ ํธ์ํ ํ ํ ์์ฒญ์ ์ฝ๋๋ค. ์ฝ๋๊ฐ ๊ฐ๋ฐ ๋ธ๋์น์ ํฌํจ๋๋ ค๋ฉด ์ฝ๋ ๊ฒํ ๋ฅผ ๊ฑฐ์ณ ํ์ํ ์์ ํ์ธ์ ์์งํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์์ ํ์ธ ๋ฐ ๋น๋๋ฅผ ํ์ฑํํ ์ ์์ต๋๋ค. ๋ชจ๋ ๋น๋๊ฐ ์ฑ๊ณตํ ๋๊น์ง ํ ์์ฒญ์ ๋ณํฉํ ์ ์์ต๋๋ค.
- ๋์ด์ค๊ธฐ ์์ฒญ์ด ๋ณํฉ๋๊ณ ์ฝ๋๊ฐ ๊ฐ๋ฐ์ ํฌํจ๋ ํ์๋ ํธ๋ฆฌํ ์๊ฐ(์: ๋ชจ๋ ์๋ฒ๊ฐ ๋น์ด ์๋ ๋ฐค)์ ์ ํํ๊ณ ์ํ๋ ๋งํผ ๊ฒ์ฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
๋ ธํธ๋ถ์์ ์ค์บ์ ์คํํ๋ ๊ฒ์ ์ข์ํ๋ ์ฌ๋์ ์๋ฌด๋ ์์์ต๋๋ค. ๊ฐ๋ฐ์๊ฐ ๊ธฐ๋ฅ์ ์๋ฃํ๋ฉด ์ ์ํ๊ฒ ํด๋น ๊ธฐ๋ฅ์ ํธ์ํ๊ณ ๋์ด์ค๊ธฐ ์์ฒญ์ ์ด๊ณ ์ถ์ดํฉ๋๋ค. ์ด ์๊ฐ ๋ช ๊ฐ์ง ๊ธด ๊ฒ์ฌ๊ฐ ์์๋๋ฉด ์ด๋ ๋งค์ฐ ์ฆ๊ฒ์ง ์์ ๋ฟ๋ง ์๋๋ผ ๊ฐ๋ฐ ์๋๋ ๋๋ ค์ง๋๋ค. ๋ ธํธ๋ถ์ด ๋ฌด์ธ๊ฐ๋ฅผ ๊ฒ์ฌํ๋ ๋์์๋ ์ ์์ ์ผ๋ก ์์ ํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ฐค์ ๊ฒ์ฌ๋ฅผ ์คํํ๋ ๊ฒ์ ์ ๋ง ์ข์ํ์ต๋๋ค. ์๊ฐ๊ณผ ์๋ฒ๊ฐ ๋ง๊ณ ๋์๋ค๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ถํํ๊ฒ๋ ๊ธฐ๋ฅ ์ฝ๋๊ฐ ๊ฐ๋ฐ๋๋ฉด ๊ฐ๋ฐ์๋ CI์์ ๋ฐ๊ฒฌํ ์ค๋ฅ๋ฅผ ์์ ํ๋ ค๋ ๋๊ธฐ๊ฐ ํจ์ฌ ์ค์ด๋ญ๋๋ค. ์์นจ ๋ณด๊ณ ์์์ ๋ฐ๊ฒฌ๋ ๋ชจ๋ ์ค๋ฅ๋ฅผ ์ดํด๋ณด๋ฉด์ ์ธ์ ๊ฐ๋ ์์ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ์ฃผ๊ธฐ์ ์ผ๋ก ๋ค์์ต๋๋ค. ์ด์ Jira์ ์ ๊ฐ ์์ํ๊ณ ์ถ์ ๋ฉ์ง ์ ์์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ฒ์ฌ๊ฐ ํ ์์ฒญ์ ์ฐจ๋จํ๋ฉด ๋๊ธฐ๊ฐ ์ถฉ๋ถํ ๊ฒ์ ๋๋ค. ๋น๋๊ฐ ๋ น์์ผ๋ก ๋ฐ๋ ๋๊น์ง ์ฝ๋๊ฐ ๊ฐ๋ฐ๋์ง ์์ ์์ ์ด ์๋ฃ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ค์ ์ ๋ต์ ์ ํํ์ต๋๋ค. ๋ฐค์ ์ต๋ํ ๋ง์ ๊ฒ์ฌ ์ธํธ๋ฅผ ์คํํ๊ณ ๊ทธ ์ค ๊ฐ์ฅ ์ค์ํ ๊ฒ์ฌ์ ๊ฐ์ฅ ์ค์ํ๊ฒ๋ ๋์ด์ค๊ธฐ ์์ฒญ์์ ๊ฐ์ฅ ๋น ๋ฅธ ๊ฒ์ฌ๋ฅผ ์์ํฉ๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ ๊ฑฐ๊ธฐ์ ๋ฉ์ถ์ง ์๊ณ ๋์์ ์ผ๊ฐ ๋ชจ๋์์ ํ ์์ฒญ ํ์ธ์ผ๋ก ์ ํํ ์ ์๋๋ก ํ์ธ ์๋๋ฅผ ์ต์ ํํฉ๋๋ค.
๋น์์๋ ๋ชจ๋ ๋น๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์๋ฃ๋์์ผ๋ฏ๋ก ARK ๋น๋, Junit ํ ์คํธ ๋ฐ ์ฝ๋ ์ ์ฉ ๋ฒ์ ๊ณ์ฐ์ ๋์ด์ค๊ธฐ ์์ฒญ์ ๋ํ ์ฐจ๋จ ์ฅ์น๋ก ํฌํจ์์ผฐ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ผ๊ณ , ์๊ฐํด๋ณด๊ณ , ํ์ํ์ง ์๋ค๊ณ ์๊ฐํ์ฌ ์ฝ๋ ์ ์ฉ์ ํฌ๊ธฐํ์ต๋๋ค.
๊ธฐ๋ณธ CI๋ฅผ ์์ ํ ๊ตฌ์ถํ๋ ๋ฐ ์ดํ์ด ๊ฑธ๋ ธ์ต๋๋ค. (์ดํ ์์ ์๊ฐ์ ๋๋ต์ ์ธ ๊ฒ์ด๋ฉฐ ๊ท๋ชจ์ ๋ฐ๋ผ ํ์ํฉ๋๋ค.)
๊ทธ ํ ์ฐ๋ฆฌ๋ ๋ ๊น์ด ์๊ฐํ๊ธฐ ์์ํ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ธํ๊ณ ์์ต๋๊น? ๋์ด์ค๊ธฐ ์์ฒญ์ ๋ฐ๋ผ ๋น๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์คํํ๊ณ ์๋์?
ํ ์์ฒญ์ด ์ด๋ฆฐ ๋ธ๋์น์ ๋ง์ง๋ง ์ปค๋ฐ์์ ๋น๋๋ฅผ ์์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ์ปค๋ฐ ํ ์คํธ๋ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋๊ฐ ์๋ํ๋ค๋ ๊ฒ๋ง ๋ณด์ฌ์ค ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค์ ๊ทธ๊ฐ ์๋ฌด๊ฒ๋ ๋ถ์์ง ์์๋ค๋ ๊ฒ์ ์ฆ๋ช ํ์ง ์์ต๋๋ค. ์ค์ ๋ก ๊ธฐ๋ฅ์ด ๋ณํฉ๋ ํ ๊ฐ๋ฐ ๋ธ๋์น์ ์ํ๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค.
์ด๋ฅผ ์ํด ์ฐ๋ฆฌ๋ ๊ฐ๋จํ bash ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ต๋๋ค. premerge.sh:
#!/usr/bin/env bash
set -e
git fetch origin develop
git merge origin/develop
์ฌ๊ธฐ์์๋ ๊ฐ๋ฐ์ ๋ชจ๋ ์ต์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ๋จํ ๊ฐ์ ธ์์ ํ์ฌ ๋ถ๊ธฐ์ ๋ณํฉํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ ๋น๋์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ก premerge.sh ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๊ณ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์ ํํ๊ฒ ํ์ธํ๊ธฐ ์์ํ์ต๋๋ค. ์์ฑ.
๋ฌธ์ ๋ฅผ ํ์งํํ๊ณ , ํด๊ฒฐ์ฑ ์ ์ฐพ๊ณ , ์ด ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ ๋ฐ XNUMX์ผ์ด ๊ฑธ๋ ธ์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฐ๋ฐ๋๊ณ ์ ์ ๋ ๋ง์ ์์ ์ด ๋ํ๋๊ณ ํ์ด ์ฑ์ฅํ์ผ๋ฉฐ premerge.sh๊ฐ ๋๋๋ก ์ฐ๋ฆฌ๋ฅผ ์ค๋ง์ํค๊ธฐ ์์ํ์ต๋๋ค. ๊ฐ๋ฐ์ ์ถฉ๋ํ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ด ๋น๋๊ฐ ์ค๋จ๋์์ต๋๋ค.
์ด๊ฒ์ด ์ด๋ป๊ฒ ์ผ์ด๋๋์ง์ ๋ํ ์:
๋ ๋ช
์ ๊ฐ๋ฐ์๊ฐ ๋์์ ๊ธฐ๋ฅ A์ B์ ๋ํ ์์
์ ์์ํฉ๋๋ค. ๊ธฐ๋ฅ A์ ๊ฐ๋ฐ์๋ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋์ง ์๋ ๊ธฐ๋ฅ์ ๋ฐ๊ฒฌํฉ๋๋ค. answer()
๊ทธ๋ฆฌ๊ณ ํ๋ฅญํ ๋ณด์ด์ค์นด์ฐํธ์ฒ๋ผ ๊ทธ๊ฒ์ ์ ๊ฑฐํฉ๋๋ค. ๋์์ ๊ธฐ๋ฅ B์ ๊ฐ๋ฐ์๋ ์์ ์ ๋ถ๊ธฐ์์ ์ด ํจ์์ ๋ํ ์๋ก์ด ํธ์ถ์ ์ถ๊ฐํฉ๋๋ค.
๊ฐ๋ฐ์๋ ์์ ์ ์๋ฃํ๋ ๋์์ ๋์ด์ค๊ธฐ ์์ฒญ์ ์ฝ๋๋ค. ๋น๋๊ฐ ์์๋๊ณ premerge.sh๋ ์ต์ ๊ฐ๋ฐ ์ํ์ ๊ด๋ จ๋ ๋ ํ ์์ฒญ์ ๋ชจ๋ ํ์ธํฉ๋๋ค. ๋ชจ๋ ํ์ธ์ ๋ น์์ ๋๋ค. ๊ทธ ํ, ๊ธฐ๋ฅ A์ ํ ์์ฒญ์ด ๋ณํฉ๋๊ณ , ๊ธฐ๋ฅ B์ ํ ์์ฒญ์ด ๋ณํฉ๋ฉ๋๋ค... ๋ถ! ๊ฐ๋ฐ ์ฝ๋์ ์กด์ฌํ์ง ์๋ ํจ์์ ๋ํ ํธ์ถ์ด ํฌํจ๋์ด ์์ผ๋ฏ๋ก ๊ฐ๋ฐ ์ค๋จ์ด ๋ฐ์ํฉ๋๋ค.
๋ฐ์ ํ์ง ์์ ๋, ์ง์ญ ์ฌํด. ํ ์ ์ฒด๊ฐ ์๋ฌด๊ฒ๋ ์์งํ์ฌ ํ
์คํธ๋ฅผ ์ํด ์ ์ถํ ์ ์์ต๋๋ค.
๋ถ์, ๋คํธ์ํฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ ์ธํ๋ผ ์์ ์ ๊ฐ์ฅ ์์ฃผ ์ํํ๊ฒ ๋์์ต๋๋ค. ์ฆ, ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๋ ํจ์์ ํด๋์ค๋ฅผ ์์ฑํ ์ฌ๋์ ๋ฐ๋ก ๋์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋๋ ๋น์ทํ ์ํฉ์ ์์ฃผ ์ง๋ฉดํ๊ฒ ๋์๋ค. ํ๋์ ์ด ์ฌ์ง์ ๊ฑธ์ด๋๊ธฐ๋ ํ๋๋ฐ์.
์ด๊ฒ์ด ์ฐ๋ฆฌ์๊ฒ ์ ํฉํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์ด๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ต์
์ ํ์ํ๊ธฐ ์์ํ์ต๋๋ค.
๊ฐ๋ฐ์ ์ค๋จํ์ง ์๋ ๋ฐฉ๋ฒ
์ฒซ ๋ฒ์งธ ์ต์ : ๊ฐ๋ฐ์ ์ ๋ฐ์ดํธํ ๋ ๋ชจ๋ ํ ๋ฆฌํ์คํธ๋ฅผ ๋ค์ ๋น๋ํ์ธ์. ์ด ์์์ ๊ธฐ๋ฅ A๊ฐ ํฌํจ๋ ํ ์์ฒญ์ด ๊ฐ๋ฐ์ ์ฒ์ ํฌํจ๋๋ ๊ฒฝ์ฐ ๊ธฐ๋ฅ B์ ํ ์์ฒญ์ด ๋ค์ ๋น๋๋๊ณ ๊ทธ์ ๋ฐ๋ผ ์ปดํ์ผ ์ค๋ฅ๋ก ์ธํด ๊ฒ์ฌ๊ฐ ์คํจํฉ๋๋ค.
์ด ์์ ์ ์์๋๋ ์๊ฐ์ ์ดํดํ๋ ค๋ฉด ๋ ๊ฐ์ PR์ด ์๋ ์๋ฅผ ๊ณ ๋ คํด ๋ณด์ธ์. ๋ ๋ฒ์ PR(๋ ๋ฒ์ ๋น๋, ๋ ๋ฒ์ ๊ฒ์ฌ ์คํ)์ ์ฝ๋๋ค. ์ฒซ ๋ฒ์งธ PR์ด ๊ฐ๋ฐ๋ก ๋ณํฉ๋ ํ ๋ ๋ฒ์งธ PR์ ๋ค์ ๋น๋ํด์ผ ํฉ๋๋ค. ์ ์ฒด์ ์ผ๋ก 2๊ฐ์ PR์๋ 1๋ฒ์ ํ์ธ ์คํ(3 + XNUMX = XNUMX)์ด ํ์ํฉ๋๋ค.
์์น์ ์ผ๋ก๋ ๊ด์ฐฎ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ํต๊ณ๋ฅผ ๋ณด๋ ์ ํฌ ํ์ ์ผ๋ฐ์ ์ธ ์ํฉ์ ๊ณต๊ฐ PR์ด 10๊ฐ์๊ณ , ํ์ธ ํ์๋ ์งํ ์ํฉ์ ํฉ์ด 10 + 9 +... + 1 = 55์์ต๋๋ค. ์ฆ, 10๊ฐ๋ฅผ ์๋ฝํ๋ ๊ฒ์ ๋๋ค. PR์ 55๋ฒ ์ฌ๊ตฌ์ถํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋ชจ๋ ๊ฒ์ฌ๊ฐ ์ฒ์์ผ๋ก ํต๊ณผํ๊ณ ์์ญ ๊ฐ๊ฐ ์ฒ๋ฆฌ๋๋ ๋์ ์๋ฌด๋ ์ถ๊ฐ ๋์ด์ค๊ธฐ ์์ฒญ์ ์ด์ง ์๋ ์ด์์ ์ธ ์ํฉ์ ๋๋ค.
์์ ์ด "๋ณํฉ" ๋ฒํผ์ ๊ฐ์ฅ ๋จผ์ ํด๋ฆญํด์ผ ํ๋ ๊ฐ๋ฐ์๋ผ๊ณ ์์ํด ๋ณด์ธ์. ์ด์์ด ์ด ์์ ์ ์ํํ๋ฉด ๋ชจ๋ ๋น๋๊ฐ ๋ค์ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค... ์๋์, ์๋ํ์ง ์์ต๋๋ค. , ๊ฐ๋ฐ ์๋๊ฐ ์ฌ๊ฐํ๊ฒ ๋๋ ค์ง ๊ฒ์ ๋๋ค.
๋ ๋ฒ์งธ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ: ์ฝ๋ ๊ฒํ ํ ํ ์์ฒญ์ ์์งํฉ๋๋ค. ์ฆ, ๋์ด์ค๊ธฐ ์์ฒญ์ ์ด๊ณ ๋๋ฃ๋ก๋ถํฐ ํ์ํ ์น์ธ ์๋ฅผ ์์งํ๊ณ ํ์ํ ์ฌํญ์ ์์ ํ ๋ค์ ๋น๋๋ฅผ ์์ํฉ๋๋ค. ์ฑ๊ณตํ๋ฉด ํ ์์ฒญ์ด ๊ฐ๋ฐ์ ๋ณํฉ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ถ๊ฐ ์ฌ์์์ ์์ง๋ง ํผ๋๋ฐฑ ์๋๊ฐ ํฌ๊ฒ ๋๋ ค์ง๋๋ค. ๊ฐ๋ฐ์๋ก์ ์ ๋ ๋์ด์ค๊ธฐ ์์ฒญ์ ์ด๋ฉด ์ฆ์ ๊ทธ๊ฒ์ด ์๋ํ๋์ง ํ์ธํ๊ณ ์ถ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ ์คํธ๊ฐ ์คํจํ๋ฉด ์ ์ํ๊ฒ ์์ ํด์ผ ํฉ๋๋ค. ๋น๋๊ฐ ์ง์ฐ๋๋ ๊ฒฝ์ฐ ํผ๋๋ฐฑ์ด ๋๋ ค์ง๊ณ ์ ์ฒด ๊ฐ๋ฐ์ด ๋๋ ค์ง๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ์๊ฒ๋ ์ ํฉํ์ง ์์์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ธ ๋ฒ์งธ ์ต์ ๋ง ๋จ์์ต๋๋ค. ์์ ๊ฑฐ. ์ฐ๋ฆฌ์ ๋ชจ๋ ์ฝ๋์ ์์ค๋ Bitbucket ์๋ฒ์ ์ ์ฅ์์ ์ ์ฅ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ Bitbucket์ฉ ํ๋ฌ๊ทธ์ธ์ ๊ฐ๋ฐํด์ผ ํ์ต๋๋ค.
์ด ํ๋ฌ๊ทธ์ธ์ ํ ์์ฒญ ๋ณํฉ ๋ฉ์ปค๋์ฆ์ ์ฌ์ ์ํฉ๋๋ค. ์์์ ํ์ค์
๋๋ค. PR์ด ์ด๋ฆฌ๊ณ ๋ชจ๋ ์ด์
๋ธ๋ฆฌ๊ฐ ์์๋๊ณ ์ฝ๋ ๊ฒํ ๊ฐ ์๋ฃ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฝ๋ ๊ฒํ ๊ฐ ์๋ฃ๋๊ณ ๊ฐ๋ฐ์๊ฐ "๋ณํฉ"์ ํด๋ฆญํ๊ธฐ๋ก ๊ฒฐ์ ํ ํ ํ๋ฌ๊ทธ์ธ์ ๊ฒ์ฌ๊ฐ ์คํ๋ ๊ฐ๋ฐ ์ํ๋ฅผ ํ์ธํฉ๋๋ค. ๋น๋ ํ์ ๊ฐ๋ฐ์ด ์
๋ฐ์ดํธ๋ ๊ฒฝ์ฐ ํ๋ฌ๊ทธ์ธ์ ์ด๋ฌํ ํ ์์ฒญ์ด ๋ฉ์ธ ๋ธ๋์น์ ๋ณํฉ๋๋ ๊ฒ์ ํ์ฉํ์ง ์์ต๋๋ค. ๋น๊ต์ ์ต๊ทผ์ ๊ฐ๋ฐ๋ ๋น๋๋ฅผ ๋ค์ ์์ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๋ณ๊ฒฝ ์ฌํญ์ด ์ถฉ๋ํ๋ ์์์๋ ์ปดํ์ผ ์ค๋ฅ๋ก ์ธํด ์ด๋ฌํ ๋น๋๊ฐ ์คํจํฉ๋๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ฅ B์ ๊ฐ๋ฐ์๋ ์ฝ๋๋ฅผ ์์ ํ๊ณ ๊ฒ์ฌ๋ฅผ ๋ค์ ์์ํด์ผ ํ๋ฉฐ ๊ทธ๋ฌ๋ฉด ํ๋ฌ๊ทธ์ธ์ด ์๋์ผ๋ก ๋์ด์ค๊ธฐ ์์ฒญ์ ์ ์ฉํฉ๋๋ค.
์ด ํ๋ฌ๊ทธ์ธ์ ๊ตฌํํ๊ธฐ ์ ์๋ ๋์ด์ค๊ธฐ ์์ฒญ๋น ํ๊ท 2,7ํ์ ๊ฒํ ๊ฐ ์คํ๋์์ต๋๋ค. ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ฉด 3,6๊ฐ์ ์ถ์๊ฐ ์์์ต๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ์ ํฉํ์ต๋๋ค.
์ด ํ๋ฌ๊ทธ์ธ์๋ ๋จ์ ์ด ์๋ค๋ ์ ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋น๋๋ฅผ ํ ๋ฒ๋ง ๋ค์ ์์ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ฆ, ์์ถฉ๋๋ ๋ณํ๊ฐ ์ ๊ฐ๋ ์ ์๋ ์์ ์ฐฝ์ด ์ฌ์ ํ ์กด์ฌํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ด ๊ฐ๋ฅ์ฑ์ ๋ฎ์ผ๋ฉฐ, ์ฐ๋ฆฌ๋ ์์ ํ์์ ์คํจ ๊ฐ๋ฅ์ฑ์ ์ ์ถฉํ์ต๋๋ค. XNUMX๋ ๋์ ๋ฑ ํ ๋ฒ๋ง ๋ฐ์ฌ๋์ผ๋ ์๋ง๋ ํ๋ ์ผ์ ์๋์์ ๊ฒ์ ๋๋ค.
Bitbucket ํ๋ฌ๊ทธ์ธ์ ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ ์์ฑํ๋ ๋ฐ XNUMX์ฃผ๊ฐ ๊ฑธ๋ ธ์ต๋๋ค.
์๋ก์ด ์ํ
๊ทธ๋ฌ๋ ๋์ ์ฐ๋ฆฌ ํ์ ๊ณ์ํด์ ์ฑ์ฅํ์ต๋๋ค. ์๋ก์ด ๊ฒ์ฌ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ค์๋ฅผ ์๋ฐฉํ ์ ์๋ค๋ฉด ์ ์ค์๋ฅผ ์ ์ง๋ฅด๋๊ฐ?๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ๋ฐ๋ก ๊ทธ๋ค์ด ๊ตฌํํ ์ด์ ์ ๋๋ค. ์ ์ ์ฝ๋ ๋ถ์. ์ฐ๋ฆฌ๋ Android SDK์ ํฌํจ๋ Lint๋ถํฐ ์์ํ์ต๋๋ค. ํ์ง๋ง ๋น์ ๊ทธ๋ Kotlin ์ฝ๋๋ก ์์ ํ๋ ๋ฐฉ๋ฒ์ ์ ํ ๋ชฐ๋๊ณ ์ด๋ฏธ ์ ํ๋ฆฌ์ผ์ด์ ์ 75%๊ฐ Kotlin์ผ๋ก ์์ฑ๋์ด ์์์ต๋๋ค. ๊ทธ๋์ ๋ด์ฅ๋ ๊ฒ๋ค์ด Lint์ ์ถ๊ฐ๋์์ต๋๋ค. Android ์คํ๋์ค๋ฅผ ํ์ธํฉ๋๋ค.
์ด๋ฅผ ์ํด ์ฐ๋ฆฌ๋ ๋ง์ ๋ณํ ์์ ์ ์ํํด์ผ ํ์ต๋๋ค. Android Studio๋ฅผ ๊ฐ์ ธ์ Docker์ ํจํค์งํ๊ณ ๊ฐ์ ๋ชจ๋ํฐ๊ฐ ์๋ CI์์ ์คํํ์ฌ ์ค์ ๋ ธํธ๋ถ์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ์๊ฐํ๋๋ก ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ํจ๊ณผ๊ฐ ์์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ธ์ ๋ง์ด ์ฐ๊ธฐ ์์ํ ๊ฒ๋ ์ด ์๊ธฐ์์ต๋๋ค. ๊ณ์ธก ํ ์คํธ ๊ทธ๋ฆฌ๊ณ ๊ตฌํ ์คํฌ๋ฆฐ์ท ํ ์คํธ. ๋ณ๋์ ์์ ๋ทฐ์ ๋ํ ์ฐธ์กฐ ์คํฌ๋ฆฐ์ท์ ์์ฑํ๋ ๊ฒฝ์ฐ์ด๋ฉฐ, ํ ์คํธ๋ ํด๋น ๋ทฐ์์ ์คํฌ๋ฆฐ์ท์ ์ฐ์ด ํ์ค๊ณผ ํฝ์ ๋จ์๋ก ์ง์ ๋น๊ตํ๋ ๊ฒ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ถ์ผ์น๊ฐ ์๋ ๊ฒฝ์ฐ ๋ ์ด์์์ด ์ด๋๊ฐ ์๋ชป๋์๊ฑฐ๋ ์คํ์ผ์ ๋ฌธ์ ๊ฐ ์์์ ์๋ฏธํฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ณ์ธก ํ ์คํธ์ ์คํฌ๋ฆฐ์ท ํ ์คํธ๋ ์๋ฎฌ๋ ์ดํฐ ๋๋ ์ค์ ์ฅ์น์ ๊ฐ์ ์ฅ์น์์ ์คํ๋์ด์ผ ํฉ๋๋ค. ํ ์คํธ๊ฐ ๋ง๊ณ ์์ฃผ ์คํ๋๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ํ ์ ์ฒด๊ฐ ํ์ํฉ๋๋ค. ์์ ์ ๋์ฅ์ ์์ํ๋ ๊ฒ์ ๋๋ฌด ๋ ธ๋ ์ง์ฝ์ ์ด๋ฏ๋ก ๊ธฐ์ฑ ์ต์ ์ธ Firebase Test Lab์ ์ฐพ์์ต๋๋ค.
Firebase ํ ์คํธ ๋ฉ
Firebase๋ Google ์ ํ์ด๊ธฐ ๋๋ฌธ์ ์ ํ๋์์ต๋๋ค. ์ฆ, ์ ๋ขฐํ ์ ์๊ณ ๊ฒฐ์ฝ ์ฃฝ์ง ์์์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ๊ฐ๊ฒฉ์ ํฉ๋ฆฌ์ ์ ๋๋ค. ์ค์ ์ฅ์น๋ฅผ ์๋ํ๋ฉด ์๊ฐ๋น 5๋ฌ๋ฌ, ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์๋ํ๋ฉด ์๊ฐ๋น 1$์ ๋๋ค.
CI์ Firebase Test Lab์ ๊ตฌํํ๋ ๋ฐ ์ฝ XNUMX์ฃผ๊ฐ ๊ฑธ๋ ธ์ต๋๋ค.
ํ์ง๋ง ํ์ ๊ณ์ํด์ ์ฑ์ฅํ๊ณ , ๋ถํํ๊ฒ๋ Firebase๋ ์ฐ๋ฆฌ๋ฅผ ์ค๋ง์ํค๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ ๋น์์๋ SLA๊ฐ ์์์ต๋๋ค. ๋๋๋ก Firebase๋ ํ์ํ ์์ ์ฅ์น๊ฐ ํ ์คํธ์ ์ฌ์ฉ ๊ฐ๋ฅํด์ง ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ ํ๊ณ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋๋ก ์ฆ์ ์คํ์ ์์ํ์ง ์์์ต๋๋ค. ์ค์ ์์ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐ๋ ์ต๋ XNUMX๋ถ์ด ๊ฑธ๋ ธ๋๋ฐ, ์ด๋ ๋งค์ฐ ๊ธด ์๊ฐ์ ๋๋ค. ๋ชจ๋ PR์ ๋ํด ๊ณ์ธก ํ ์คํธ๊ฐ ์คํ๋์๊ณ , ์ง์ฐ์ผ๋ก ์ธํด ๊ฐ๋ฐ ์๋๊ฐ ์ ๋ง ๋๋ ค์ก์ผ๋ฉฐ, ์๋ณ ์ฒญ๊ตฌ์์๋ ์ด๊ณ๊ฐ ํฌํจ๋์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ์ด ์ถฉ๋ถํ ์ฑ์ฅํ๊ธฐ ๋๋ฌธ์ Firebase๋ฅผ ํฌ๊ธฐํ๊ณ ์ฌ๋ด์์ ์ผํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๋์ปค + ํ์ด์ฌ + ๋ฐฐ์ฌ
์ฐ๋ฆฌ๋ Docker๋ฅผ ๊ฐ์ ธ์ ๊ทธ ์์ ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ Python์ผ๋ก ๊ฐ๋จํ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ต๋๋ค. ์ด ํ๋ก๊ทธ๋จ์ ์ ์ ํ ์๊ฐ์ ํ์ํ ๋ฒ์ ์ ํ์ํ ์์ ์๋ฎฌ๋ ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ํ์ํ ๋ ์ค์งํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌผ๋ก ๋ ๊ฐ์ bash ์คํฌ๋ฆฝํธ๋ ์์ต๋๋ค. ๊ทธ๊ฒ๋ค์ด ์๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ด๋์ ์์๊น์?
์์ฒด ํ ์คํธ ํ๊ฒฝ์ ๋ง๋๋ ๋ฐ XNUMX์ฃผ๊ฐ ๊ฑธ๋ ธ์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ชจ๋ ๋์ด์ค๊ธฐ ์์ฒญ์ ๋ํด ๊ด๋ฒ์ํ ๋ณํฉ ์ฐจ๋จ ๊ฒ์ฌ ๋ชฉ๋ก์ด ์์์ต๋๋ค.
- ARK ์กฐ๋ฆฝ;
- Junit ํ ์คํธ;
- ๋ฆฐํธ;
- Android ์คํ๋์ค ํ์ธ;
- ๊ณ์ธก ํ ์คํธ
- ์คํฌ๋ฆฐ์ท ํ ์คํธ.
์ด๋ก ์ธํด ๋ฐ์ํ ์ ์๋ ๋ง์ ๊ณ ์ฅ์ ๋ฐฉ์งํ ์ ์์์ต๋๋ค. ๊ธฐ์ ์ ์ผ๋ก๋ ๋ชจ๋ ๊ฒ์ด ์๋ํ์ง๋ง ๊ฐ๋ฐ์๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ด ๋๋ฌด ๊ธธ๋ค๊ณ ๋ถํํ์ต๋๋ค.
์ผ๋ง๋ ๊ธด๊ฐ์? ์ฐ๋ฆฌ๋ Bitbucket๊ณผ TeamCity์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ ์์คํ ์ ์ ๋ก๋ํ๊ณ ๋ค์๊ณผ ๊ฐ์ ์ฌ์ค์ ๊นจ๋ฌ์์ต๋๋ค. ํ๊ท ๋๊ธฐ ์๊ฐ 45๋ถ. ์ฆ, ๊ฐ๋ฐ์๊ฐ ํ ๋ฆฌํ์คํธ๋ฅผ ์ด ๋ ๋น๋ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ๋๊น์ง ํ๊ท 45๋ถ์ ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ ์๊ฐ์๋ ์ด๊ฒ์ด ๋ง์๋ฐ ๊ทธ๋ ๊ฒ ์ผํ ์๋ ์์ต๋๋ค.
๋ฌผ๋ก ์ฐ๋ฆฌ๋ ๋ชจ๋ ๋น๋ ์๋๋ฅผ ๋์ด๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์๋๋ฅผ ๋์ด์
๋น๋๊ฐ ์ข ์ข ๋๊ธฐ์ด์ ์๋ ๊ฒ์ ๋ณด๊ณ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๋จผ์ ํ๋ ์ผ์ ํ๋์จ์ด๋ฅผ ๋ ๊ตฌ์ ํ์ต๋๋ค โ ๊ด๋ฒ์ํ ๊ฐ๋ฐ์ด ๊ฐ์ฅ ๊ฐ๋จํฉ๋๋ค. ๋น๋ ๋๊ธฐ์ด์ด ์ค์ง๋์์ง๋ง ์ผ๋ถ ๊ฒ์ฌ ์์ฒด๊ฐ ๋งค์ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ ธ๊ธฐ ๋๋ฌธ์ ๋๊ธฐ ์๊ฐ์ด ์ฝ๊ฐ๋ง ์ค์์ต๋๋ค.
์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฌ๋ ์ํ ์ ๊ฑฐ
์ฐ๋ฆฌ์ ์ง์์ ์ธ ํตํฉ์ ์ด๋ฌํ ์ ํ์ ์ค๋ฅ์ ๋ฌธ์ ๋ฅผ ํฌ์ฐฉํ ์ ์์ต๋๋ค.
- ์ ํ ๊ฑฐ์ผ. CI๋ ๋ณ๊ฒฝ ์ฌํญ ์ถฉ๋๋ก ์ธํด ๋ฌด์ธ๊ฐ๊ฐ ๋น๋๋์ง ์์ ๋ ์ปดํ์ผ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ ์ ์์ต๋๋ค. ์ด๋ฏธ ๋งํ๋ฏ์ด ์๋ฌด๋ ์๋ฌด๊ฒ๋ ์กฐ๋ฆฝํ ์ ์๊ณ ๊ฐ๋ฐ์ด ์ค๋จ๋๋ฉฐ ๋ชจ๋๊ฐ ๊ธด์ฅํ๊ฒ ๋ฉ๋๋ค.
- ํ๋์ ๋ฒ๊ทธ. ์๋ฅผ ๋ค์ด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋น๋๋์์ง๋ง ๋ฒํผ์ ๋๋ฅด๋ฉด ์ถฉ๋์ด ๋ฐ์ํ๊ฑฐ๋ ๋ฒํผ์ด ์ ํ ๋๋ฅด์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋ฒ๊ทธ๊ฐ ์ฌ์ฉ์์๊ฒ ์ํฅ์ ๋ฏธ์น ์ ์์ผ๋ฏ๋ก ์ด๋ ์ข์ง ์์ต๋๋ค.
- ๋ ์ด์์์ ๋ฒ๊ทธ. ์๋ฅผ ๋ค์ด, ๋ฒํผ์ ํด๋ฆญํ์ง๋ง ์ผ์ชฝ์ผ๋ก 10ํฝ์ ์ด๋ํ์ต๋๋ค.
- ๊ธฐ์ ๋ถ์ฑ ์ฆ๊ฐ.
์ด ๋ชฉ๋ก์ ์ดํด๋ณธ ํ ์ฐ๋ฆฌ๋ ์ฒ์ ๋ ๊ฐ์ง ์ฌํญ๋ง์ด ์ค์ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ฌํ ๋ฌธ์ ๋ฅผ ๋จผ์ ํ์ ํ๊ณ ์ถ์ต๋๋ค. ๋ ์ด์์์ ๋ฒ๊ทธ๋ ๋์์ธ ๊ฒํ ๋จ๊ณ์์ ๋ฐ๊ฒฌ๋๋ฉฐ ์ดํ ์ฝ๊ฒ ์์ ํ ์ ์์ต๋๋ค. ๊ธฐ์ ๋ถ์ฑ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด ๋ณ๋์ ํ๋ก์ธ์ค์ ๊ณํ์ด ํ์ํ๋ฏ๋ก ํ ๋ฆฌํ์คํธ์์๋ ํ ์คํธํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์ด ๋ถ๋ฅ๋ฅผ ๋ฐํ์ผ๋ก ์ ์ฒด ์ ๊ฒ ๋ชฉ๋ก์ ๊ฐํธํ์ต๋๋ค. ์ง์์ง ๋ฆฐํธ ํ๋ก์ ํธ์ ์ผ๋ง๋ ๋ง์ ๋ฌธ์ ๊ฐ ์์๋์ง์ ๋ํ ๋ณด๊ณ ์๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ถ์๋ฅผ ํ๋ฃป๋ฐค ์ฌ์ด์ ์ฐ๊ธฐํ์ต๋๋ค. ๊ธฐ์ ๋ถ์ฑ์๋ ๋ณ๋๋ก ์์ ํ๊ธฐ๋ก ํฉ์ํ๊ณ , Android Studio ๊ฒ์ฌ๊ฐ ์์ ํ ์ค๋จ๋์์ต๋๋ค.. ๊ฒ์ฌ๋ฅผ ์คํํ๊ธฐ ์ํ Docker์ Android Studio๋ ํฅ๋ฏธ๋กญ๊ฒ ๋ค๋ฆฌ์ง๋ง ์ง์์ ๋ง์ ๋ฌธ์ ๋ฅผ ์ผ์ผํต๋๋ค. Android Studio ๋ฒ์ ์ ์ ๋ฐ์ดํธํ๋ฉด ์ดํดํ ์ ์๋ ๋ฒ๊ทธ๋ก ์ธํด ์ด๋ ค์์ ๊ฒช๊ฒ ๋ฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ทธ๋ค์ง ์์ ์ ์ด์ง ์๊ณ ์คํ(false positive)์ด ๋ฐ์ํ์ฌ ์คํฌ๋ฆฐ์ท ํ ์คํธ๋ฅผ ์ง์ํ๋ ๊ฒ๋ ์ด๋ ค์ ์ต๋๋ค. ์คํฌ๋ฆฐ์ท ํ ์คํธ๊ฐ ์ฒดํฌ๋ฆฌ์คํธ์์ ์ ๊ฑฐ๋์์ต๋๋ค..
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ต๋๋ค.
- ARK ์กฐ๋ฆฝ;
- Junit ํ ์คํธ;
- ๊ณ์ธก ํ ์คํธ.
Gradle ์๊ฒฉ ์บ์
๋ฌด๊ฑฐ์ด ์ ๊ฒ ์์ด ๋ชจ๋ ๊ฒ์ด ์ข์์ก์ต๋๋ค. ํ์ง๋ง ์๋ฒฝํจ์๋ ํ๊ณ๊ฐ ์์ต๋๋ค!
์ฐ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฏธ ์ฝ 150๊ฐ์ Gradle ๋ชจ๋๋ก ๋ถํ ๋์์ต๋๋ค. Gradle ์๊ฒฉ ์บ์๋ ์ผ๋ฐ์ ์ผ๋ก ์ด ๊ฒฝ์ฐ์ ์ ์๋ํ๋ฏ๋ก ์ฐ๋ฆฌ๋ ์ด๋ฅผ ์๋ํด ๋ณด๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
Gradle ์๊ฒฉ ์บ์๋ ๊ฐ๋ณ ๋ชจ๋์ ๊ฐ๋ณ ์์ ์ ๋ํ ๋น๋ ์ํฐํฉํธ๋ฅผ ์บ์ํ ์ ์๋ ์๋น์ค์ ๋๋ค. Gradle์ ์ค์ ๋ก ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ๋์ HTTP๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฒฉ ์บ์๋ฅผ ๋๋๋ฆฌ๊ณ ๋๊ตฐ๊ฐ๊ฐ ์ด๋ฏธ ์ด ์์ ์ ์ํํ๋์ง ๋ฌป์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋จ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค.
Gradle์ Docker ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ๋ฏ๋ก Gradle ์๊ฒฉ ์บ์๋ฅผ ์คํํ๋ ๊ฒ์ ์ฝ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด ์ผ์ XNUMX์๊ฐ ๋ง์ ํด๋์ต๋๋ค.
๋น์ ์ด ํด์ผ ํ ์ผ์ Docker๋ฅผ ์คํํ๊ณ ํ๋ก์ ํธ์ ํ ์ค์ ์์ฑํ๋ ๊ฒ๋ฟ์ด์์ต๋๋ค. ํ์ง๋ง ๋น ๋ฅด๊ฒ ์์ํ ์๋ ์์ง๋ง ๋ชจ๋ ๊ฒ์ด ์ ๋๋ก ์๋ํ๋ ค๋ฉด ๊ฝค ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ ๋๋ค.
์๋๋ ์บ์ ๋ฏธ์ค ๊ทธ๋ํ์ ๋๋ค.
์ฒ์์๋ ์บ์ ๋๋ฝ ๋น์จ์ด ์ฝ 65์์ต๋๋ค. 20์ฃผ ํ์๋ ์ด ๊ฐ์ XNUMX%๋ก ๋๋ฆด ์ ์์์ต๋๋ค. Android ์ ํ๋ฆฌ์ผ์ด์
์ด ์์งํ๋ ์์
์๋ Gradle์ด ์บ์๋ฅผ ๋์น ์ด์ํ ์ ์ด์ ์ข
์์ฑ์ด ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
์บ์๋ฅผ ์ฐ๊ฒฐํจ์ผ๋ก์จ ๋น๋ ์๋๊ฐ ํฌ๊ฒ ํฅ์๋์์ต๋๋ค. ํ์ง๋ง ์กฐ๋ฆฝ ์ธ์๋ ๊ณ์ธก ํ ์คํธ๋ ์๋๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฝ๋๋ค. ๋ชจ๋ ํ ์์ฒญ์ ๋ํด ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํ ํ์๋ ์์ ์๋ ์์ต๋๋ค. ์ด๋ฅผ ์์๋ณด๊ธฐ ์ํด ์ํฅ ๋ถ์์ ์ฌ์ฉํฉ๋๋ค.
์ํฅ ๋ถ์
ํ ์์ฒญ ์ git diff๋ฅผ ์์งํ๊ณ ์์ ๋ Gradle ๋ชจ๋์ ์ฐพ์ต๋๋ค.
๋ณ๊ฒฝ๋ ๋ชจ๋๊ณผ ์ด์ ์ข
์๋ ๋ชจ๋ ๋ชจ๋์ ํ์ธํ๋ ๊ณ์ธก ํ
์คํธ๋ง ์คํํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์
๋๋ค. ์ธ์ ํ ๋ชจ๋์ ๋ํด ํ
์คํธ๋ฅผ ์คํํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ผ๋ฉฐ ์๋ฌด ๊ฒ๋ ๊นจ์ง ์ ์์ต๋๋ค.
๊ณ์ธก ํ ์คํธ๋ ์ต์์ ์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋์ ์์นํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ๊ฐ๋จํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ฐ ํ ์คํธ๊ฐ ์ด๋ค ๋ชจ๋์ ์ํ๋์ง ์ดํดํ๊ธฐ ์ํด ๋ฐ์ดํธ์ฝ๋ ๋ถ์๊ณผ ํจ๊ป ๊ฒฝํ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ต๋๋ค.
๊ด๋ จ ๋ชจ๋๋ง ํ ์คํธํ๋๋ก ๊ณ์ธก ํ ์คํธ ์์ ์ ์ ๊ทธ๋ ์ด๋ํ๋ ๋ฐ ์ฝ XNUMX์ฃผ๊ฐ ๊ฑธ๋ ธ์ต๋๋ค.
๊ฒ์ฌ ์๋๋ฅผ ๋์ด๋ ์กฐ์น๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ด๋ฃจ์ด์ก์ต๋๋ค. 45๋ถ์์ ์ฝ 15๋ถ์ผ๋ก ๋์ด๋ฌ์ต๋๋ค. ๋น๋๋ฅผ ์ํด XNUMX๋ถ์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ์ด๋ฏธ ์ ์์ ๋๋ค.
๊ทธ๋ฌ๋ ์ด์ ๊ฐ๋ฐ์๋ค์ ์ด๋ค ๋น๋๊ฐ ์์๋๊ณ ์๋์ง, ๋ก๊ทธ๋ฅผ ๋ณผ ์ ์๋ ์์น, ๋น๋๊ฐ ๋นจ๊ฐ์์ธ ์ด์ , ์ด๋ค ํ ์คํธ๊ฐ ์คํจํ๋์ง ๋ฑ์ ์ดํดํ์ง ๋ชปํ๋ค๊ณ ๋ถํํ๊ธฐ ์์ํ์ต๋๋ค.
ํผ๋๋ฐฑ ๋ฌธ์ ๋ก ์ธํด ๊ฐ๋ฐ ์๋๊ฐ ๋๋ ค์ง๋ฏ๋ก ๊ฐ PR ๋ฐ ๋น๋์ ๋ํด ์ต๋ํ ๋ช
ํํ๊ณ ์์ธํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ค๊ณ ๋
ธ๋ ฅํ์ต๋๋ค. ์ฐ๋ฆฌ๋ PR์ ๋ํ Bitbucket์ ๋๊ธ๋ก ์์ํ์ฌ ์ด๋ค ๋น๋๊ฐ ์คํจํ๋์ง, ๊ทธ ์ด์ ๋ฅผ ํ์ํ๊ณ Slack์ ๋์ ๋ฉ์์ง๋ฅผ ์์ฑํ์ต๋๋ค. ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ํ์ฌ ์คํ ์ค์ธ ๋ชจ๋ ๋น๋ ๋ชฉ๋ก๊ณผ ํด๋น ์ํ(๋๊ธฐ ์ค, ์คํ ์ค, ์ถฉ๋ ๋๋ ์๋ฃ)๊ฐ ํฌํจ๋ ํ์ด์ง์ฉ PR ๋์๋ณด๋๋ฅผ ๋ง๋ค์์ต๋๋ค. ๋น๋๋ฅผ ํด๋ฆญํ๊ณ ํด๋น ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์์ธํ ํผ๋๋ฐฑ์ ๋ฐ๋ ๋ฐ XNUMX์ฃผ๊ฐ ์์๋์์ต๋๋ค.
๊ณํ
์ต๊ทผ ์ญ์ฌ๋ก ๋์ด๊ฐ ๋ณด๊ฒ ์ต๋๋ค. ํผ๋๋ฐฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ํ ์ฐ๋ฆฌ๋ ์๋ก์ด ์์ค์ ๋๋ฌํ์ต๋๋ค. ์์ฒด ์๋ฎฌ๋ ์ดํฐ ํ์ ๊ตฌ์ถํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ํ ์คํธ์ ์๋ฎฌ๋ ์ดํฐ๊ฐ ๋ง์ผ๋ฉด ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ชจ๋ ์๋ฎฌ๋ ์ดํฐ๋ ์ ์ฐํ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ํตํด k8s ํด๋ฌ์คํฐ๋ก ์ด๋๋์์ต๋๋ค.
๊ทธ ์ธ์๋ ๋ค๋ฅธ ๊ณํ์ด ์์ต๋๋ค.
- ๋ณดํ ๋ฐํ (๋ฐ ๊ธฐํ ์ ์ ๋ถ์). ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด ๋ฐฉํฅ์ผ๋ก ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
- PR ์ฐจ๋จ๊ธฐ์์ ๋ชจ๋ ๊ฒ์ ์คํํ์ญ์์ค. ์๋ํฌ์๋ ํ ์คํธ ๋ชจ๋ SDK ๋ฒ์ ์์.
๊ทธ๋์ ์ฐ๋ฆฌ๋ Avito์ ์ง์์ ์ธ ํตํฉ ๊ฐ๋ฐ ์ญ์ฌ๋ฅผ ์ถ์ ํ์ต๋๋ค. ์ด์ ์ ๋ ๊ฒฝํ์ด ํ๋ถํ ๊ด์ ์์ ๋ช ๊ฐ์ง ์กฐ์ธ์ ๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
ะกะพะฒะตัั
๋ฑ ํ ๊ฐ์ง ์กฐ์ธ์ ํ์๋ฉด ์ด๋ ์ต๋๋ค.
์ ์คํฌ๋ฆฝํธ์ ์ฃผ์ํ์ธ์!
Bash๋ ๋งค์ฐ ์ ์ฐํ๊ณ ๊ฐ๋ ฅํ ๋๊ตฌ์ด๋ฉฐ ์คํฌ๋ฆฝํธ ์์ฑ์ด ๋งค์ฐ ํธ๋ฆฌํ๊ณ ๋น ๋ฆ ๋๋ค. ํ์ง๋ง ๋น์ ์ ๊ทธ๊ฒ์ผ๋ก ์ธํด ํจ์ ์ ๋น ์ง ์ ์๊ณ , ๋ถํํ๊ฒ๋ ์ฐ๋ฆฌ๋ ๊ทธ ํจ์ ์ ๋น ์ก์ต๋๋ค.
๋ชจ๋ ๊ฒ์ ๋น๋ ๋จธ์ ์์ ์คํ๋๋ ๊ฐ๋จํ ์คํฌ๋ฆฝํธ๋ก ์์๋์์ต๋๋ค.
#!/usr/bin/env bash
./gradlew assembleDebug
๊ทธ๋ฌ๋ ์์๋ค์ํผ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ชจ๋ ๊ฒ์ด ๋ฐ์ ํ๊ณ ๋ ๋ณต์กํด์ง๋๋ค. ํ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์์ ์คํํ๊ณ ๊ฑฐ๊ธฐ์ ๋ช ๊ฐ์ง ๋งค๊ฐ ๋ณ์๋ฅผ ์ ๋ฌํฉ์๋ค. ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ํ์ฌ ์ด๋ ์์ค์ bash ์ค์ฒฉ์ธ์ง ๊ฒฐ์ ํ๋ ํจ์๋ฅผ ์์ฑํด์ผ ํ์ต๋๋ค. ํ์ํ ๋ฐ์ดํ๋ฅผ ์ฝ์ ํ์ฌ ๋ชจ๋ ๊ฒ์ ์์ํ์ญ์์ค.
๊ทธ๋ฌํ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐ ๋๋ ์ธ๊ฑด๋น๋ฅผ ์์ํ ์ ์์ต๋๋ค. ์ด ํจ์ ์ ๋น ์ง์ง ๋ง๋ผ๊ณ ์กฐ์ธํฉ๋๋ค.
๋ฌด์์ ๊ต์ฒดํ ์ ์์ต๋๊น?
- ๋ชจ๋ ์คํฌ๋ฆฝํ ์ธ์ด. ์ ์ฐ๊ธฐ Python ๋๋ Kotlin ์คํฌ๋ฆฝํธ ์คํฌ๋ฆฝํธ๊ฐ ์๋ ํ๋ก๊ทธ๋๋ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ ํธ๋ฆฌํฉ๋๋ค.
- ๋๋ ๋ชจ๋ ๋น๋ ๋ก์ง์ ๋ค์ ํ์์ผ๋ก ์ค๋ช ํฉ๋๋ค. ์ฌ์ฉ์ ์ ์ Gradle ์์ ๋น์ ์ ํ๋ก์ ํธ๋ฅผ ์ํด.
์ฐ๋ฆฌ๋ ๋ ๋ฒ์งธ ์ต์ ์ ์ ํํ๊ธฐ๋ก ๊ฒฐ์ ํ๊ณ ์ด์ ๋ชจ๋ bash ์คํฌ๋ฆฝํธ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์ญ์ ํ๊ณ ๋ง์ ์ฌ์ฉ์ ์ ์ Gradle ์์ ์ ์์ฑํ๊ณ ์์ต๋๋ค.
ํ #2: ์ธํ๋ผ๋ฅผ ์ฝ๋์ ์ ์ฅํ์ธ์.
Continuous Integration ์ค์ ์ Jenkins๋ TeamCity ๋ฑ์ UI ์ธํฐํ์ด์ค๊ฐ ์๋ ํ๋ก์ ํธ ์ ์ฅ์์ ์ง์ ํ ์คํธ ํ์ผ ํ์์ผ๋ก ์ ์ฅํ๋ฉด ํธ๋ฆฌํฉ๋๋ค. ์ด๋ ๋ฒ์ ๊ฐ๋ฅ์ฑ์ ์ ๊ณตํฉ๋๋ค. ๋ค๋ฅธ ๋ธ๋์น์์ ์ฝ๋๋ฅผ ๋กค๋ฐฑํ๊ฑฐ๋ ๋น๋ํ๋ ๊ฒ์ ์ด๋ ต์ง ์์ต๋๋ค.
์คํฌ๋ฆฝํธ๋ ํ๋ก์ ํธ์ ์ ์ฅํ ์ ์์ต๋๋ค. ํ๊ฒฝ์ ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?
ํ #3: Docker๋ ํ๊ฒฝ์ ๋์์ด ๋ ์ ์์ต๋๋ค.
ํ์คํ Android ๊ฐ๋ฐ์์๊ฒ ๋์์ด ๋ ๊ฒ์ ๋๋ค. ์ํ๊น๊ฒ๋ iOS์๋ ์์ง ๊ทธ๋ฐ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
๋ค์์ jdk ๋ฐ android-sdk๊ฐ ํฌํจ๋ ๊ฐ๋จํ docker ํ์ผ์ ์์ ๋๋ค.
FROM openjdk:8
ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip"
ANDROID_HOME="/usr/local/android-sdk"
ANDROID_VERSION=26
ANDROID_BUILD_TOOLS_VERSION=26.0.2
# Download Android SDK
RUN mkdir "$ANDROID_HOME" .android
&& cd "$ANDROID_HOME"
&& curl -o sdk.zip $SDK_URL
&& unzip sdk.zip
&& rm sdk.zip
&& yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses
# Install Android Build Tool and Libraries
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}"
"platforms;android-${ANDROID_VERSION}"
"platform-tools"
RUN mkdir /application
WORKDIR /application
์ด Docker ํ์ผ์ ์์ฑํ๊ณ (๋น๋ฐ์ ๋งํ๊ฒ ์ต๋๋ค. ์์ฑํ ํ์๋ ์์ง๋ง GitHub์์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ํ์ผ์ ๊ฐ์ ธ์ค๋ฉด ๋ฉ๋๋ค) ์ด๋ฏธ์ง๋ฅผ ์กฐ๋ฆฝํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋ ๊ฐ์ ๋จธ์ ์ด ์์ฑ๋ฉ๋๋ค. Junit ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค.
์ด๊ฒ์ด ํ๋นํ ๋ ๊ฐ์ง ์ฃผ์ ์ด์ ๋ ํ์ฅ์ฑ๊ณผ ๋ฐ๋ณต์ฑ์ ๋๋ค. Docker๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ ๋น๋์ ์ ํํ ๋์ผํ ํ๊ฒฝ์ ๊ฐ๊ฒ ๋ XNUMX๊ฐ์ ๋น๋ ์์ด์ ํธ๋ฅผ ๋น ๋ฅด๊ฒ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ CI ์์ง๋์ด์ ์ถ์ ํจ์ฌ ์ฝ๊ฒ ๋ง๋ญ๋๋ค. android-sdk๋ฅผ docker์ ํธ์ํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ง๋ง ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์กฐ๊ธ ๋ ์ด๋ ต์ต๋๋ค. ์กฐ๊ธ ๋ ์ด์ฌํ ์์ ํด์ผ ํฉ๋๋ค(๋๋ GitHub์์ ์์ฑ๋ ๊ฒ์ ๋ค์ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค).
ํ 4: ๊ฒ์ฌ๋ ๊ฒ์ฌ๋ฅผ ์ํด์๊ฐ ์๋๋ผ ์ฌ๋์ ์ํด ์ํ๋๋ค๋ ์ ์ ์์ง ๋ง์ญ์์ค.
๊ฐ๋ฐ์์๊ฒ๋ ๋น ๋ฅด๊ณ ๊ฐ์ฅ ์ค์ํ ํผ๋๋ฐฑ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ฌด์์ด ๋ฌธ์ ์ธ์ง, ์ด๋ค ํ ์คํธ๊ฐ ์คํจํ๋์ง, ๋น๋ ๋ก๊ทธ๋ ์ด๋์ ๋ณผ ์ ์๋์?
ํ #5: ์ง์์ ํตํฉ์ ๊ฐ๋ฐํ ๋๋ ์ค์ฉ์ ์ด๊ฒ ํ์ธ์.
๋ฐฉ์งํ๋ ค๋ ์ค๋ฅ ์ ํ์ด ๋ฌด์์ธ์ง, ์ผ๋ง๋ ๋ง์ ๋ฆฌ์์ค, ์๊ฐ, ์ปดํจํฐ ์๊ฐ์ ์๋นํ ์ํฅ์ด ์๋์ง ๋ช ํํ๊ฒ ์ดํดํ์ญ์์ค. ์๋ฅผ ๋ค์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฌ๋ ์ ๊ฒ์ ๋ฐค์ ์ฐ๊ธฐ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์ง ์ค์ํ์ง ์์ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ ์ค๋ฅ๋ ์์ ํ ๋ฒ๋ ค์ผ ํฉ๋๋ค.
ํ #6: ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ธ์.
ํ์ฌ ํด๋ผ์ฐ๋ CI๋ฅผ ์ ๊ณตํ๋ ํ์ฌ๋ ๋ง์ต๋๋ค.
์ด๋ ์๊ท๋ชจ ํ์ ์ ํฉํ ์๋ฃจ์
์
๋๋ค. ์๋ฌด๊ฒ๋ ์ง์ํ ํ์๊ฐ ์์ผ๋ฉฐ ์ฝ๊ฐ์ ๋น์ฉ๋ง ์ง๋ถํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๊ณ ๊ณ์ธก ํ
์คํธ๋ฅผ ์คํํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
ํ #7: ๋๊ท๋ชจ ํ์์๋ ๋ด๋ถ ์๋ฃจ์ ์ด ๋ ์์ต์ฑ์ด ๋์ต๋๋ค.
๊ทธ๋ฌ๋ ์กฐ๋ง๊ฐ ํ์ด ์ฑ์ฅํจ์ ๋ฐ๋ผ ์ฌ๋ด ์๋ฃจ์ ์ ์์ต์ฑ์ด ๋์ฑ ๋์์ง ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๊ฒฐ์ ์๋ ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ฒฝ์ ํ์๋ ์์ต ๊ฐ์์ ๋ฒ์น์ด ์์ต๋๋ค. ์ด๋ค ํ๋ก์ ํธ์์๋ ํ์ ๊ฐ์ ์ด ์ ์ ๋ ์ด๋ ค์์ง๊ณ ์ ์ ๋ ๋ง์ ํฌ์๊ฐ ํ์ํฉ๋๋ค.
๊ฒฝ์ ํ์ ์ง์์ ์ธ ํตํฉ์ ํฌํจํ ์ฐ๋ฆฌ ์ถ ์ ์ฒด๋ฅผ ์ค๋ช ํฉ๋๋ค. ์ ๋ ์ง์์ ์ธ ํตํฉ์ ๊ฐ ๊ฐ๋ฐ ๋จ๊ณ์ ๋ํ ์ธ๊ฑด๋น ์ผ์ ์ ์์ฑํ์ต๋๋ค.
๊ฐ์ ์ด ์ ์ ๋ ์ด๋ ค์์ง๊ณ ์์์ด ๋ถ๋ช
ํฉ๋๋ค. ์ด ๊ทธ๋ํ๋ฅผ ๋ณด๋ฉด ํ ๊ท๋ชจ์ ์ฑ์ฅ์ ๋ฐ๋ผ ์ง์์ ์ธ ํตํฉ์ด ๊ฐ๋ฐ๋์ด์ผ ํจ์ ์ ์ ์์ต๋๋ค. ๋ ์ฌ๋์ผ๋ก ๊ตฌ์ฑ๋ ํ์ ๊ฒฝ์ฐ ๋ด๋ถ ์๋ฎฌ๋ ์ดํฐ ํ์ ๊ฐ๋ฐํ๋ ๋ฐ 50์ผ์ ์๋นํ๋ ๊ฒ์ ํ๋ฒํ ์์ด๋์ด์
๋๋ค. ๊ทธ๋ฌ๋ ๋์์ ๋๊ท๋ชจ ํ์ ๊ฒฝ์ฐ ์ง์์ ์ธ ํตํฉ์ ์ ํ ์ํํ์ง ์๋ ๊ฒ๋ ํตํฉ ๋ฌธ์ , ์ปค๋ฎค๋์ผ์ด์
๋ฌธ์ ๋ฑ์ผ๋ก ์ธํด ๋์ ์๊ฐ์
๋๋ค. ์๊ฐ์ด ๋ ๊ฑธ๋ฆด ๊ฒ์
๋๋ค.
์ฐ๋ฆฌ๋ ์ฌ๋์ด ๋น์ธ๊ณ , ์ค์๋ฅผ ํ๊ณ , ๊ฒ์ผ๋ฅด๊ธฐ ๋๋ฌธ์ ์๋ํ๊ฐ ํ์ํ๋ค๋ ์๊ฐ์์ ์์ํ์ต๋๋ค. ํ์ง๋ง ์ฌ๋๋ค์ ์๋ํ๋ ํฉ๋๋ค. ๋ฐ๋ผ์ ์๋ํ์๋ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ชจ๋ ์ ์ฉ๋ฉ๋๋ค.
- ์๋ํ๋ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค. ๋ ธ๋ ์ผ์ ์ ๊ธฐ์ตํ์ญ์์ค.
- ์๋ํ์ ์์ด์ ์ฌ๋๋ค์ ์ค์๋ฅผ ํฉ๋๋ค.
- ๋ชจ๋ ๊ฒ์ด ๊ทธ๋ฐ ์์ผ๋ก ์๋ํ๊ธฐ ๋๋ฌธ์ ๋๋ก๋ ์๋ํํ๋ ๊ฒ์ด ๋งค์ฐ ๊ฒ์ผ๋ฅธ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์ ๋ค๋ฅธ ๊ฒ์ ๊ฐ์ ํด์ผ ํ๋ฉฐ, ์ด ๋ชจ๋ ์ง์์ ์ธ ํตํฉ์ด ํ์ํ๊ฐ์?
ํ์ง๋ง ํต๊ณ๊ฐ ์์ต๋๋ค. ์ด์ ๋ธ๋ฆฌ์ 20%์์ ์ค๋ฅ๊ฐ ๋ฐ๊ฒฌ๋ฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์ ๋๋ก ์์ฑํ์ง ์์๊ธฐ ๋๋ฌธ์ด ์๋๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ค์๋ฅผ ํด๋ ๊ฐ๋ฐ์ ์ด๋ฅด์ง ์๊ณ ์๋ํ๋ ๊ฒ์ฌ๋ฅผ ํตํด ๋ฐ๊ฒฌ๋ ๊ฒ์ด๋ผ๊ณ ํ์ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ ๋ก์ปฌ์์ ๋ฌด์ธ๊ฐ๋ฅผ ์คํํ๊ณ ํ ์คํธํ๋ ๊ฒ๋ณด๋ค ์ฝ๋๋ฅผ ์์ฑํ๊ณ ํฅ๋ฏธ๋ก์ด ๊ฒ์ ์์ฑํ๋ ๋ฐ ๋ ๋ง์ ์๊ฐ์ ํ ์ ํ ์ ์์ต๋๋ค.
์ง์์ ์ธ ํตํฉ์ ์ค์ฒํ์ธ์. ๊ทธ๋ฌ๋ ์ ๋นํ.
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , Nikolai Nesterov๋ ํ๋ฅญํ ๋ณด๊ณ ์๋ฅผ ์ง์ ์ ๊ณตํ ๋ฟ๋ง ์๋๋ผ ํ๋ก๊ทธ๋จ ์์ํ์ ํ์์ด๊ธฐ๋ ํฉ๋๋ค.
์ฑ์ปจํผ๋ฐ์ค ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋น์ ์ ์ํด ์๋ฏธ ์๋ ์ฐ์ค์ ์ค๋นํ๋๋ก ๋์ต๋๋ค. ๋ค์ ํ์ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ๊ณผ ์ ์ฉ์ฑ์ ๋ค์ ์ฃผ์ ์ ๋ฐ๋ผ ํ๊ฐ๋ ์ ์์ต๋๋ค.์ผ์ . ์์ธํ ๋ด์ฉ์ 22์ 23~XNUMX์ผ์ Infospace๋ฅผ ๋ฐฉ๋ฌธํ์ธ์.
์ถ์ฒ : habr.com