JavaRush /Java Blog /Random-KO /์ง€์†์ ์ธ ํ†ตํ•ฉ
Nikita Koliadin
๋ ˆ๋ฒจ 40
ะ”ะฝะตะฟั€

์ง€์†์ ์ธ ํ†ตํ•ฉ

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์•ˆ๋…•ํ•˜์„ธ์š”, ๋™๋ฃŒ ์—ฌ๋Ÿฌ๋ถ„! ์ปดํ“จํ„ฐ๊ฐ€ ์ง€์†์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋„๋ก ๊ฐ•์š”ํ•˜๋Š” ๋ฐ ์ง€์น˜์…จ๋‚˜์š”? ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๊ธ€์€ ๋‹น์‹ ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค! ์ง€์†์ ์ธ ํ†ตํ•ฉ - 1์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ์ง€์†์  ํ†ตํ•ฉ(์ดํ•˜ ๊ฐ„๋‹จํžˆ CI)์— ๊ด€ํ•œ ์ž๋ฃŒ๋ฅผ ๊ฐ„๋‹จํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์ œ์‹œํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ด๋ฉฐ "์ด๊ฒƒ์ด ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?", "์™œ?" ์™€ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์งˆ๋ฌธ์— ๋‹ตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์™œ?" ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์˜ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” ์ตœ์†Œํ•œ Build System: Maven ์— ์ต์ˆ™ํ•˜๊ณ , Git ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  , ํ”„๋กœ์ ํŠธ๋ฅผ GitHub ์— ํ‘ธ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋Š” ์ˆ™๋ จ๋œ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค .

"์ง€์†์  ํ†ตํ•ฉ์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?"

Wiki๊ฐ€ ์ด ์งˆ๋ฌธ์— ๋Œ€ํ•ด ๋ฌด์—‡์„ ๋งํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค . ์ง€์†์ ์ธ ํ†ตํ•ฉ(CI, English Continuous Integration)์€ ํ•˜๋ฃจ์— ์—ฌ๋Ÿฌ ๋ฒˆ ์ž‘์—… ๋ณต์‚ฌ๋ณธ์„ ๊ณตํ†ต์˜ ์ฃผ์š” ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•˜๊ณ  ์ดˆ๊ธฐ์— ํ”„๋กœ์ ํŠธ์˜ ์ž๋™ํ™”๋œ ๋นŒ๋“œ๋ฅผ ์ž์ฃผ ์ˆ˜ํ–‰ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ž ์žฌ์ ์ธ ๊ฒฐํ•จ์„ ๊ฐ์ง€ํ•˜๊ณ  ํ†ตํ•ฉ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์„ญ์ง€ ์•Š๋‚˜์š”? ์ด ์šฉ์–ด๋ฅผ ๊ฐ„๋‹จํ•œ ๋‹จ์–ด๋กœ ์„ค๋ช…ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ง€์†์ ์ธ ํ†ตํ•ฉ์€ ๋ฒ„๊ทธ์™€ ๋น„ํ˜ธํ™˜์„ฑ์„ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ • ์ปดํ“จํ„ฐ์—์„œ ํŠน์ • ๊ตฌ์„ฑ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ข‹์•„์š”, ๋ฌธ์ œ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์•Œ์•„๋ƒˆ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋…ผ๋ฆฌ์ ์ธ ์งˆ๋ฌธ์ด ์ƒ๊น๋‹ˆ๋‹ค.

CI๊ฐ€ ์™œ ํ•„์š”ํ•œ๊ฐ€์š”?

๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋ฅผ ์ž‘์„ฑ ์ค‘์ด๊ณ  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€/๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์œผ๋กœ ์ž‘์„ฑํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๊ดœ์ฐฎ์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๊ธฐ๋Šฅ์˜ ๋ณ€๊ฒฝ์ด ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ๊ณ , ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์€ ์„ธ ๋ฒˆ์งธ ๊ธฐ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋‹ค๊ฐ€ ๋ฒ„๊ทธ๊ฐ€ ์–ด๋”˜๊ฐ€์— ๋น ์ ธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ, ์ด๊ฒƒ์ด ์ž˜๋ชป ์„ค๊ณ„๋œ ํ”„๋กœ์ ํŠธ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ท€ํ•˜๊ฐ€ ์˜ณ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๊ณ  ์ด๋Ÿฌํ•œ ์—ฐ๊ฒฐ์ด ์‹ค์ œ๋กœ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ์ž‘์„ฑํ•˜๊ณ  ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ(์ข…์ข… ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ)๋Š” ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? ์ƒˆ๋กœ ์ž‘์„ฑ๋œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ๊ณ  ๊ธ์ •์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋นจ๋ฆฌ ์•ฝ์†์„ ํ•œ ๋‹ค์Œ ์–ด๋”˜๊ฐ€๋กœ ๋ฐ€๊ณ  ๊ฐ’ ๋น„์‹ผ ์œ„์Šคํ‚ค๋ฅผ ๋งˆ์‹œ๋ฉด์„œ ์ง‘์—์„œ ์‹œ๊ฐ€๋ฅผ ์–ด๋–ป๊ฒŒ ํ”ผ์šธ ๊ฒƒ์ธ์ง€ ์ด๋ฏธ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ ๋‹น์‹ ์˜ ๋™๋ฃŒ๋‚˜ ์ƒ์‚ฌ๋Š” ๋‹น์‹ ์˜ ์ปค๋ฐ‹์œผ๋กœ ์ธํ•ด ์ „์ฒด ๋นŒ๋“œ๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋‹น์‹ ์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์ด๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ–ˆ๋‹ค๊ณ  ๋‹นํ™ฉํ•˜๋ฉด์„œ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ข…์ข… ์ „์ฒด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€์†์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•  ์‹œ๊ฐ„์ด ์—†์œผ๋ฉฐ ์ „์ฒด ์–ด์…ˆ๋ธ”๋ฆฌ๊ฐ€ ์•„๋‹Œ ๋ณ€๊ฒฝํ•œ ์ฝ”๋“œ ๋ถ€๋ถ„๋งŒ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ CI๊ฐ€ ์šฐ๋ฆฌ๋ฅผ ๋„์™€์ฃผ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค์— ํ‘ธ์‹œํ•  ๋•Œ๋งˆ๋‹ค CI๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋นŒ๋“œํ•˜๊ณ  ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๊ณ  ํ”„๋กœ์ ํŠธ๊ฐ€ ๋นŒ๋“œ๋œ ๊ฒฝ์šฐ์—๋งŒ ๋นŒ๋“œ๊ฐ€ ํ†ต๊ณผ ์ƒํƒœ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค . ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค์‹œ ๋Œ์•„์™€์„œ ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ "์™œ ์ด๊ฒƒ์ด๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€๊ฐ€? " ๋ผ๋Š” ์งˆ๋ฌธ์„ ๋˜์ ธ์•ผ ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌํ˜„์„ ์‚ดํŽด๋ณด์„ธ์š”. ์˜ˆ์ œ ์ด๋ฏธ ๋งํ–ˆ๋“ฏ์ด ์ด ๊ธ€์€ Maven๊ณผ Git์— ์ต์ˆ™ํ•œ ์‚ฌ๋žŒ๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ CI ๋“ฑ์˜ ์„ค์ • ์™ธ์— ์ œ๊ฐ€ ํ•˜๋Š” ์ผ์ด ๋ฌด์—‡์ธ์ง€, ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ์•Œ์•„์ฃผ์…จ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.
  1. ๋จผ์ € ๊ฐ„๋‹จํ•œ Maven ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  "Hello World!"๋ฅผ ์ธ์‡„ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๊ฐ„๋‹จํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ด ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

    ๊ฒฐ๊ณผ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

    ์ง€์†์ ์ธ ํ†ตํ•ฉ - 2

    ๋ชจ๋“  ์†Œ์Šค๋Š” ๋‚ด GitHub์— ์žˆ์Šต๋‹ˆ๋‹ค. Main์— ๋ฌด์—‡์„ ์ž‘์„ฑํ•˜๊ณ  ์–ด๋–ค ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์„์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  2. ์šฐ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ GitHub์— ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค.

  3. ์ด์ œ ์žฌ๋ฏธ์žˆ๋Š” ๋ถ€๋ถ„์ด ๋‚˜์˜ต๋‹ˆ๋‹ค. CI ์ค‘์—์„œ ๊ฐ€์šฉ์„ฑ๊ณผ ์•ˆ์ •์„ฑ ๋•Œ๋ฌธ์— Travis CI๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. Travis๋Š” GitHub๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.

    Travis CI ํ™ˆํŽ˜์ด์ง€ ์— ์ ‘์†ํ•˜์—ฌ GitHub๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ์„ ํ•ด์ฃผ์„ธ์š”. ํ”„๋กœํ•„์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

    ์ง€์†์ ์ธ ํ†ตํ•ฉ - 3

    ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค ๋ชจ๋“  ๊ฒƒ์ด ์กฐ๋ฆฝ ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์ง€๋งŒ ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ์กฐ๋ฆฝํ•˜๋Š๋ƒ์ž…๋‹ˆ๋‹ค.

  4. ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ๋ž‘ํ•˜๋Š” IDEA๋กœ ๋Œ์•„๊ฐ€์„œ .travis.yml ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    ์ด ํŒŒ์ผ์€ Travis ๋นŒ๋“œ ๊ตฌ์„ฑ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์„ค์ •์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

    ์ผ๋ฐ˜์ ์ธ Travis ๊ตฌ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    # https://docs.travis-ci.com/user/languages/java/
    language: java
    jdk: oraclejdk9
    
    # Improve Build Speed https://dzone.com/articles/travis-ci-tutorial-java-projects
    cache:
      directories:
      - $HOME/.m2
    
    # Notifications https://docs.travis-ci.com/user/notifications/
    notifications:
      email:
        recipients:
          - qThegamEp@gmail.com
        on_success: always # default: change
        on_failure: always # default: always

    ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ๋งํฌ์™€ ํ•จ๊ป˜ ์„ค๋ช…์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

  5. ๋‹ค์‹œ GitHub๋กœ ํ‘ธ์‹œํ•˜๊ณ  Travis ์›น์‚ฌ์ดํŠธ๋ฅผ ์—ด๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  ๋นŒ๋“œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์„ฑ๊ณต์ ์ธ ๋นŒ๋“œ์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

    ์ง€์†์ ์ธ ํ†ตํ•ฉ - 4 ์ง€์†์ ์ธ ํ†ตํ•ฉ - 5

    ๋˜ํ•œ ์‚ฌ์ดํŠธ์—์„œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์กฐ๋ฆฝ๋˜์—ˆ๋‹ค๋Š” ๋ฐฐ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ฅผ README.md์— ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ง€์†์ ์ธ ํ†ตํ•ฉ - 6
์œ ์šฉํ•œ ๋งํฌ: ๋ณธ๋ฌธ ๋‚ด์šฉ์— ์˜ค๋ฅ˜ ๋ฐ ๋ˆ„๋ฝ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION