[기술면접준비_DevOps] Integration Testing || Unit Testing? CI/CD?

셀레스틴 허·2021년 4월 29일
1
post-thumbnail
post-custom-banner

Testing

모의 면접 때 받은 질문 (follow-up Question)
👤 : Integration Test와 Unit Test의 차이점?

Integration Testing와 Unit Testing의 차이

모듈 하나의 성능을 테스트할 때는 Unit Testing이다. 그러나 모듈들이 다 개발되고 서로 통합되면 Integration Testing이 진행된다. 이 때 Integration Testing은 모듈들이 서로 통합 되고 상호작용할 때 시스템상 발생할 수 있는 문제점들을 말한다.

Unit Testing

  • 작은 양의 코드가 실행되고 제 역할 하는지 확인함
  • 앱 속 하나의 컴포넌트를 확인함
  • module 특화
  • scope가 매우 좁은 편: 하나의 클래스만 확인하는 경우도 있음
  • unit test 밖에 있는 코드에 dependency가 없어야 함 ➡ 관심사 분리!
  • unit testing은 더 상세하게 나눠져있지 않음
  • 각자의 unit들의 testing의 집중하지 서로 상호작용할 때의 문제점까지 짚지 않음
  • White Box Testing Type에 포함되어 있음

Integration Testing

  • 각자의 모듈들이 서로 통합했을 때의 testing ➡ 통합 됐을 때 어떤 문제들이 발생하는지
  • 앱 전체의 testing
  • interface 특화
  • integration testing은 DB, 하드웨어 등 외부 시스템을 의존, 참조
  • unit test 다음, 그리고 system test 전에 하는 테스트
  • integration testing은 top-down, bottom-up 등 다양한 type들로 나눠짐
  • Black Box, White Box Testing에 포함되어 있음

System Testing?
전체 build가 비즈니스 요구, 사양에 맞는지 확인하는 testing. System error들을 짚는데 도움이 된다

CI/CD

CI/CD란?

CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법

기본 개념

  1. 지속적인 통합
  2. 지속적인 서비스 제공
  3. 지속적인 배포

➡ 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제를 해결하기 위한 솔루션
➡ 애플리케이션의 통합 및 테스트 단계에서부터 제공, 배포에 이르는 애플리케이션의 라이프사이클 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 제공 - 이런 구축 사례를 CI/CD 파이프라인이라고 부르며 개발 및 운영팀의 애자일 방식 협력을 통해 지원됨

CI

  • CI는 자동화 프로세스인 지속적인 통합 - Continuous Integration - 를 의미함
  • CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결

CD

  • 지속적인 서비스 제공과 배포 - Continuous Delivery, Deployment - 를 의미함
  • 제공 및 배포가 상호 교환적으로 사용되며 두 가지 의미 모두 파이프라인 추가 단계에 대한 자동화를 뜻함(얼마나 많은 자동화가 이루어지고 있는지를 성명하게 위해 별도로 사용되기도 함)

지속적인 제공

  • 지속적인 제공이란 개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리에 자동으로 업로드 되는 것을 뜻함
    ➡ 운영팀은 이 리지토리에서 애플리케이션을 실시간으로 프로덕션 환경으로 배포할 수 있음(개발팀과 비즈니스팀 소통 문제 해결)
    - 지속적인 제공은 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로 함

지속적인 배포

  • 지속적인 배포란 개발자가의 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리스하는 것을 의미함

CI/CD tool

  • Jenkins
  • Circle CI
  • Gitlab
    등등

Reference:
https://www.softwaretestingclass.com/what-is-difference-between-unit-testing-and-integration-testing/
https://u-tor.com/topic/system-vs-integration
https://www.redhat.com/ko/topics/devops/what-is-ci-cd
https://velog.io/@hanblueblue/CIContinuous-Integration-CDContinuous-Delivery

profile
Software Developer / 고통은 필연, 괴로움은 선택
post-custom-banner

0개의 댓글