본문 바로가기

DevOps

[Diffy] Diffy란 무엇인가? "Diffy를 활용한 코드 없는 API 회귀 테스트"

728x90
반응형

Twitter의 Diffy는 서비스 인스턴스 간의 응답을 비교하여 회귀 테스트를 자동화하는 오픈 소스 도구입니다. Diffy는 새 코드와 기존 코드의 응답을 비교하여 차이를 식별하고, 이를 통해 새로운 변경 사항이 기존 기능에 미치는 영향을 확인할 수 있습니다. 이 도구는 특히 대규모 마이크로서비스 아키텍처에서 효과적으로 사용될 수 있습니다.

Diffy의 주요 기능 및 작동 원리

출처 : https://reshadat.medium.com/test-apis-without-writing-tests-with-twitters-diffy-8dfad1d92b50

  1. 트래픽 미러링: 실제 프로덕션 트래픽을 새로운(Candidate), 기존(Primary), 중복(Secondary) 서비스 인스턴스로 미러링합니다. 이렇게 하면 동일한 입력에 대해 세 인스턴스의 응답을 얻을 수 있습니다.
  2. 응답 비교: Diffy는 각 인스턴스의 응답을 비교하여 Primary와 Secondary 간의 차이를 노이즈로 간주하고, Candidate와 Primary 간의 차이를 회귀로 감지합니다.
  3. 회귀 식별: 응답의 차이를 분석하여 잠재적인 버그나 예상치 못한 변경 사항을 식별합니다. 이를 통해 배포 전 코드의 품질을 보장할 수 있습니다.

Diffy의 구성 요소

  • Candidate: 새로운 코드가 배포된 인스턴스.
  • Primary: 마지막으로 안정성이 확인된 기존 코드가 배포된 인스턴스.
  • Secondary: Primary 인스턴스와 동일한 코드가 배포된 중복 인스턴스.

Diffy 사용 예시

Diffy를 설정하여 사용하기 위해서는 다음과 같은 과정을 따릅니다:

  1. 환경 설정: 새로운 코드와 기존 코드를 각각의 인스턴스에 배포합니다.
  2. Diffy 서버 설정: Diffy 서버를 설정하고, 각 인스턴스의 주소를 지정합니다.
  3. 트래픽 미러링 설정: 실제 트래픽을 Diffy 서버로 미러링하여 응답을 비교합니다.
java -jar diffy-server.jar \
  -candidate=localhost:9992 \
  -master.primary=localhost:9990 \
  -master.secondary=localhost:9991 \
  -service.protocol=http \
  -serviceName=My-Service \
  -proxy.port=:31900 \
  -admin.port=:31159 \
  -http.port=:31149 \
  -rootUrl='localhost:31149'

Docker를 이용한 Diffy 실행

Docker를 통해 Diffy를 쉽게 실행할 수 있습니다:

docker run -ti \
  -p 8880:8880 -p 8881:8881 -p 8888:8888 \
  diffy/diffy \
    -candidate=stg-service1:8080 \
    -master.primary=service1:8080 \
    -master.secondary=service1:8080 \
    -service.protocol=http \
    -serviceName="Service1" \
    -proxy.port=:8880 \
    -admin.port=:8881 \
    -http.port=:8888 \
    -rootUrl=diffy-service1:8888

Diffy의 장점

구분 내용
자동화된 회귀 테스트 수동으로 테스트 케이스를 작성할 필요 없이 자동으로 회귀 문제를 감지합니다.
실제 트래픽 기반 테스트 프로덕션 트래픽을 사용하여 보다 현실적인 테스트 결과를 얻을 수 있습니다.
빠른 피드백 코드 변경 사항이 기존 기능에 미치는 영향을 신속하게 확인할 수 있습니다.

Diffy는 주로 트위터에서 사용되었으며, 오픈 소스로 공개되어 다양한 기업에서 활용하고 있습니다.

728x90
반응형