90DaysOfDevOps (Day 15)

고태규·2025년 9월 22일
0

DevOps

목록 보기
14/21
post-thumbnail

해당 스터디는 90DaysOfDevOps
https://github.com/MichaelCade/90DaysOfDevOps
를 기반으로 진행한 내용입니다.

Day 15 - Using code dependency analysis to decide what to test


1. 느리고 비효율적인 CI 파이프라인


느린 CI 파이프라인은 개발 경험 전반에 부정적인 영향을 미친다.

CI 파이프라인 속도 저하의 가장 큰 원인은 린팅, 컴파일 등이 아닌 '방대한 양의 테스트를 실행하는 시간'이다. 프로젝트가 커질수록 테스트 시간은 수 분 ~ 수 시간, 더 나아가 며칠까지 늘어날 수도 있다.

이렇게 CI 파이프라인이 느려지게 되면, 코드 통합 주기가 길어져 '트렁크 기반 개발 (Trunk Based Development)' 와 같은 현대적인 개발 전략을 채택하기 어렵다. 따라서, 이로인해 여러 변경사항을 한번에 통합하는 비효율적인 '피처 브랜치 전략'을 사용하게 된다.

추가적으로, 테스트 실행에 필요한 컴퓨팅 자원이나 실제 테스트용 하드웨어를 유지하는 데 비용이 증가하게 되는 단점들이 존재한다.


2. 정적 코드 종속성 분석을 통한 선택적 테스트


문제의 해결책은 모든 테스트를 실행하는 대신, 변경 사항과 직접적으로 관련된 테스트만 선별하여 실행하는 것이다.

이때, 어떤 테스트를 실행해야 할지 정확하게 판단하는 근거로 '정적 코드 종속성 분석'을 활용한다.

'정적 코드 종속성 분석'을 이용하여 코드 변경시 해당 변경이 코드베이스의 다른 부분에 미칠 수 있는 최대 영향 범위를 정적 분석을 통해 파악한다. 이를 통해 실행하지 않아도 되는 테스트를 제외할 수 있다.

또한, 정적 분석은 런타임에 발생할 수 있는 코드 간의 호출 관계를 미리 파악하기 때문에, 영향이 없는 부분의 테스트는 실행하지 않아도 안전하다.


3. 코드 종속성 분석이란?


  1. 코드 파싱 및 AST 생성 : 소스 코드를 분석(렉싱 및 파싱)하여 코드 구조를 나타내는 추상 구문 트리(Abstract Syntax Tree, AST)를 생성

  2. 컴포넌트 그룹화 : 개별 소스 코드 파일들을 더 큰 논리적 단위인 컴포넌트, 레이어, 모듈 등으로 그룹화

  3. 의존성 그래프 생성 : AST를 바탕으로 파일과 컴포넌트 간의 참조 (호출) 관계를 찾아내 의존성 그래프를 생성

생성된 그래프를 보면 컴포넌트 간의 의존 관계를 확인할 수 있다.

  • 예시 1. 'supportive' 컴포넌트를 변경해도, 해당 컴포넌트에 의존하지 않는 'references' 컴포넌트에는 아무런 영향을 주지 않음. -> 'references'의 유닛 테스트는 실행할 필요가 없음.

  • 예시 2. 'layer' 컴포넌트를 변경하면, 여기에 직접 의존하는 'analyzer'와 간접적으로 의존하는 'supportive' 컴포넌트까지 영향을 받을 수 있음. -> 'layer' 자체의 테스트는 물론 'analyzer'와 'supportive'의 통합 테스트까지 실행하는 것이 바람직

해당 예시의 방식처럼 컴포넌트 간 의존성 그래프를 이용하여 선택적으로 테스트를 하여 CI 파이프라인 실행 속도를 높일 수 있다.


4. 선택적 테스트 실행 방법


1. 변경된 파일 목록 확보 :

git diff --name-only

해당 명령어를 사용하여 현재 브랜치에서 변경된 모든 파일의 목록을 가져옮.

2. 변경된 컴포넌트 식별 :
미리 정의된 매핑 규칙 (ex. 특정 디렉토리는 특정 컴포넌트)에 따라, 변경된 파일들이 속한 컴포넌트가 무엇인지 파악함.

3. 핵심 테스트 실행 (컨트랙트 테스트) :
변경이 발생한 컴포넌트 자체의 API 명세와 핵심 기능을 검증하는 '컨트랙트 테스트 (Contract Tests)'를 실행함.

4. 영향받는 범위 테스트 (통합 테스트) :
변경된 컴포넌트에 직,간접적으로 의존하는 모든 컴포넌트에 대해 '통합 테스트 (integration Tests)'를 실행


5. 결론


코드 종속성 분석을 CI 파이프라인에 도입하면, 변경된 코드와 그에 영향을 받는 부분만 선별하여 테스트할 수 있다.

이를 통해 전체 테스트의 90% 이상을 실행하지 않고도 동일한 수준의 신뢰도를 확보할 수 있고, 결과적으로 파이프라인 속도는 대폭 향상되고 인프라 비용은 크게 절감된다.


0개의 댓글