λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ§‘πŸ»‍πŸ’» Develop/DevOps

사내 툴 ν”„λ‘œμ νŠΈμ— CI λ„μž…ν•˜κΈ°

by dev-jaesoon 2022. 9. 10.

좜처:  https://pnghut.com/png/c3TiGwsLkJ/devops-business-process-software-development-deployment-technical-support-kms-technology-vietnam-transparent-png

μ‹œμž‘ν•˜κΈ° 전에

λ„μž…ν•˜κ²Œ 된 계기

    ν˜„μž¬ λ‚˜λŠ” 뢀동산 정보λ₯Ό κ²Œμ‹œ μ›Ή μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜λŠ” λΆ€μ„œμ—μ„œ κ·Όλ¬΄ν•˜κ³  μžˆλ‹€. κ³Όκ±°λΆ€ν„° ν˜„μž¬κΉŒμ§€ μ§‘μ λœ μˆ˜μ—†μ΄ λ§Žμ€ 뢀동산 정보λ₯Ό κ²Œμ‹œν•˜κ³  있기 λ•Œλ¬Έμ—, 뢀동산 νšŒμ‚¬λ‚˜ 건물 관리 νšŒμ‚¬ λ“±μœΌλ‘œλΆ€ν„° 정보 μˆ˜μ • μš”μ²­μ΄ λ‹€μ–‘ν•˜κ²Œ λ“€μ–΄μ˜¨λ‹€. μ΄λŸ¬ν•œ 정보 μˆ˜μ • μš”μ²­λ“€μ€ 고객 λŒ€μ‘ λΆ€μ„œμ—μ„œ μ‚¬μš©ν•˜λŠ” 사내 νˆ΄μ— μ ‘μˆ˜λ˜λŠ”λ°, 이 사내 툴 ν”„λ‘œμ νŠΈλ₯Ό μš΄μ˜ν•˜κ³  μœ μ§€ λ³΄μˆ˜ν•˜λŠ” 것도 λ‹Ήμ—°νžˆ λ‚΄κ°€ μ†Œμ†λœ λΆ€μ„œμ—μ„œ λ‹΄λ‹Ήν•˜κ³  μžˆλ‹€.

    일뢀 μ†Œμˆ˜ μœ μ €λ§Œ μ‚¬μš©ν•˜λŠ” 사내 툴이기 λ•Œλ¬Έμ—, κΈ°λŠ₯ μΆ”κ°€λ‚˜ μ†ŒμŠ€ μ½”λ“œ 변경도 자주 μ—†λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— ν”„λ‘œμ νŠΈμ— Linter Check λ‚˜ Unit test, μžλ™ 배포 등은 μ „ν˜€ λ„μž…λ˜μ–΄ μžˆμ§€ μ•Šμ•˜λ‹€. ν•˜μ§€λ§Œ, μž₯기적인 개발 μƒμ‚°μ„±μ˜ ν–₯상을 μœ„ν•΄ CI/CD λ„μž…μ΄ ν•„μš”ν–ˆκ³ , μš°μ„ μ μœΌλ‘œ CIλ₯Ό μ „λ‹΄ν•˜μ—¬ λ„μž…ν•˜κ²Œ λ˜μ—ˆλ‹€.

 

κ·Έλž˜μ„œ CI κ°€ 뭐지?

    Google 검색창을 μ—΄κ³ , CI/CDλž€ ν‚€μ›Œλ“œλ‘œ 검색을 해보면 정말 λ‹€μ–‘ν•œ κ²°κ³Όκ°€ λ‚˜μ˜¨λ‹€. Jenkins, Docker, Github, μ• μžμΌ λ“±λ“±... κ·Έ μ€‘μ—μ„œλ„ CI λŠ”

Continuous integration
(지속적인 톡합)

 

λΌλŠ” 뜻이라고 ν•œλ‹€. λŒ€λΆ€λΆ„μ˜ μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ€ μ—¬λŸ¬ μ‚¬λžŒμ΄ λͺ¨μ—¬ νŒ€ λ‹¨μœ„λ‘œ ν˜‘μ—…μ„ ν•˜κΈ° λ•Œλ¬Έμ—, 각자 λ‹΄λ‹Ή 뢀뢄을 λ‚˜λˆ„μ–΄ μ†ŒμŠ€ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜κ³  κ°œλ°œν•œλ‹€. λ˜ν•œ, 졜근 개발 방법둠이 Waterfall μ—μ„œ Agile Methodology 둜 λ³€ν™”ν•˜λ©΄μ„œ, μ΄λŸ¬ν•œ μ†ŒμŠ€ μ½”λ“œμ˜ μˆ˜μ •μ€ λΉˆλ²ˆν•˜κ³  자주 μΌμ–΄λ‚˜κ²Œ λœλ‹€. μ΄λ ‡κ²Œ μ—¬λŸ¬ μ‚¬λžŒμ˜ 손을 톡해 μˆ˜μ •λœ μ†ŒμŠ€ μ½”λ“œλ“€μ„ μ •κΈ°μ μœΌλ‘œ ν†΅ν•©ν•˜λŠ” 것을 CI 라고 ν•œλ‹€.

 

μ™œ CI κ°€ ν•„μš”ν•˜κ°€?

    개발 λ˜λŠ” ν˜‘μ—…μ„ μ‘°κΈˆμ΄λΌλ„ ν•΄λ³Έ 개발자라면 Git 같은 ν˜•μƒ 관리 μ‹œμŠ€ν…œ (SCM, Source Code Management) 을 μ‚¬μš©ν•΄ λ³Έ κ²½ν—˜μ΄ μžˆμ„ 것이닀. 그리고 μ΄λŸ¬ν•œ ν˜•μƒ 관리 μ‹œμŠ€ν…œμ„ 잘 μ‚¬μš©ν•œλ‹€λ©΄, μ—¬λŸ¬ μ‚¬λžŒμ΄ μˆ˜μ •ν•œ μ†ŒμŠ€ μ½”λ“œλ₯Ό 병합(Merge) ν•˜κ³ , ν…ŒμŠ€νŠΈ(Test) 와 배포(Deploy) 도 어렡지 μ•Šκ²Œ 진행할 수 μžˆμ„ 것 이닀.

    ν•˜μ§€λ§Œ ν”„λ‘œμ νŠΈ 규λͺ¨κ°€ 컀지고 μ‹œμŠ€ν…œ ꡬ쑰가 λ³΅μž‘ν•΄μ§€λ‹€ 보면, μ˜ˆμƒμΉ˜ λͺ»ν•œ κ³³μ—μ„œ μž₯μ• κ°€ λ°œμƒν•˜κ²Œ 되고, 이λ₯Ό μˆ˜μ •ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬λ²ˆμ˜ μˆ˜μ •μ„ κΈ‰ν•˜κ²Œ ν•˜λ‹€ 보면, 수 없이 λ§Žμ€ Conflict 와 "λ‚΄ λ‘œμ»¬μ—μ„œλŠ” 잘 λ˜λŠ”λ°...?" 와 같은 상황에 λ§ˆμ£Όν•˜κ²Œ 될 것이닀. 이런 상황이 점차 반볡되면, μ†ŒμŠ€ μ½”λ“œμ˜ ν’ˆμ§ˆ 관리가 μ œλŒ€λ‘œ λ˜μ§€ μ•Šμ•„ 개발 생산성이 ν˜„μ €ν•˜κ²Œ μ €ν•˜λœλ‹€.

    그리고, μ–΄μ°Œμ €μ°Œ ν…ŒμŠ€νŠΈλ₯Ό μ™„λ£Œν•΄ LIVE μ„œλ²„μ— μ„œλΉ„μŠ€λ₯Ό λ°°ν¬ν•˜μ—¬ μš΄μ˜ν•˜κ²Œ λ˜λ”λΌλ„ λΉˆλ²ˆν•˜κ²Œ μž₯μ• κ°€ λ°œμƒν•  수 μžˆλ‹€. 이럴 λ•Œ ν”„λ‘œμ νŠΈμ— CIλ₯Ό λ„μž…ν•œλ‹€λ©΄, μƒˆλ‘­κ²Œ Commit 된 μ½”λ“œμ— λŒ€ν•œ ν’ˆμ§ˆ 관리와 ν…ŒμŠ€νŠΈλ₯Ό 손쉽고 κ°„νŽΈν•˜κ²Œ μˆ˜ν–‰ν•  수 μžˆλ‹€.

 

CI 의 λ„μž…

무엇을 λ„μž…ν•  것인가?

    CI 의 지속적인 톡합을 μ‹€ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ°˜λ“œμ‹œ ν•„μš”ν•œ κΈ°λŠ₯이 크게 2가지가 μžˆλ‹€. 

  • Code Inspection (μ†ŒμŠ€μ½”λ“œλ₯Ό λΆ„μ„ν•˜μ—¬, 개발 ν‘œμ€€μ— μœ„λ°°λ˜μ—ˆκ±°λ‚˜ 잘λͺ» μž‘μ„±λœ 뢀뢄을 μˆ˜μ •)
  • Testing (Unit Test, E2E Test, Integration Test λ“±λ“±...)

    κ·Έλ¦¬κ³ , 이 2κ°€μ§€λŠ” λͺ¨λ‘ μžλ™μœΌλ‘œ κ²€μ‚¬λ˜κ³  μ‹€ν–‰λ˜μ–΄μ•Ό ν•œλ‹€. 각 μ–Έμ–΄ λ˜λŠ” μ‹œμŠ€ν…œμ— 따라 정말 λ‹€μ–‘ν•œ Tool 이 μ‘΄μž¬ν•˜μ§€λ§Œ, μ΅œμ‹ μ˜ 쒋은 κΈ°λŠ₯을 가진 Tool 을 무쑰건 λ„μž…ν•˜κΈ°λŠ” 것 λ³΄λ‹€λŠ” 각 ν”„λ‘œμ νŠΈμ˜ νŠΉμ„±μ— μ•Œλ§žκ²Œ λ„μž…ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€κ³  μƒκ°ν–ˆλ‹€. κ·Έλž˜μ„œ λ‚˜λŠ” λ¨Όμ € 사내 툴 ν”„λ‘œμ νŠΈμ˜ tech stack 을 μ‘°μ‚¬ν–ˆλ‹€.

λ„μž…ν•  CI Tools 을 κ²°μ •

    사내 νˆ΄μ€ 크게 Laravel Mix 둜 κ΅¬μ„±λ˜μ–΄ μžˆμ—ˆκ³ , 상세 tech stack 은 μ•„λž˜μ™€ κ°™μ•˜λ‹€.

  • Front End
    • JavaScript
    • Node.js : v8.17.0
    • Vue.js : v2.5.17
  • Back End
    • PHP : v7.2.34
    • Composer : v1.7.1
    • Laravel : v5.5.42

    κ·Έ 외에 기타 νŠΉμ΄ν•œ 사항듀은 μ—†μ—ˆμ§€λ§Œ 각각 언어별 λ˜λŠ” ν”„λ ˆμž„μ›Œν¬ 별 버전듀이 κ½€ μ˜€λž˜λ˜μ—ˆκΈ° λ•Œλ¬Έμ—, λ„μž… μ „ 쑰사λ₯Ό μ§„ν–‰ν•˜λ©΄μ„œλ„ μ˜μ‘΄μ„± 문제 λ•Œλ¬Έμ— κ½€λ‚˜ κ³¨μΉ˜μ•„ν”Œ 것 κ°™λ‹€λŠ” 생각을 많이 ν–ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μš°μ„  μ•„λž˜μ™€ 같은 μˆœμ„œλ‘œ λ„μž…μ„ μ§„ν–‰ν•˜κΈ°λ‘œ κ²°μ •ν–ˆλ‹€.

  1. Code Inspection 을 μœ„ν•œ 언어별 Linter
  2. 각 언어별 Unit Test 
  3. Github Actions λ₯Ό ν†΅ν•œ Linter, Unit Test

λŒ“κΈ€