[MSA스터디] 6. 분산 시스템 테스트하기

vector13·2022년 9월 18일
0

마이크로서비스를 구축할 때 단위테스트, 통합 테스트, 컴포넌트 테스트, 계약 테스트, 엔드투엔트 테스트까지 모두 사용해야한다.

엔드투엔드

엔드투엔드 테스트 : 모든 종류의 테스트 가운데 피라미드 위에 있는 테스트. 구현하고 관리가 가장 어려운 부분이다.
테스트 쉽게 유지가혹 비즈니스 로직 집중위해 Cucumber 프레임워크로 몇 사례 다룬다.

합리적 목표 세우기

확인할 기능

애플리케이션 전체가 잘 동작하는지 확인 위해서 최소한 두가지 기능 확인
1. user가 request 보내면 알맞은 response 받고 정답 여부 따라 점수 얻음
2. 리더보드는 user의 순위를 정확하게 반영

구현 수준 결정

엔드투엔드 케이스를 어떤 레벨에서 구현할지 결정

  • 엔드투엔드 서비스 테스트로 진행 이유 : 우리 시스템은 모든 기능 rest api로 제공하기 때문
  • 엔드투엔드 서비스 테스트는 엔드투엔드 ui 테스트(ex. selenium)으로 구현 가능

엔드투엔드 시나리오 접근 방식과 기술 선택

큐컴버 (행위에 초점을 맞춘 강력한 테스트 도구)
테스트 명세를 사람 언어로 작성 -> 큐컴버가 테스트 실행하는 스트립트로 변환 -> 결과 보고서 출력

큐컴버 사용해보기

큐컴버는 여러 언어와 프레임워크 지원한다.
기능은 여러 개의 .feature 파일로 구성
상단 -> 기능에 대한 설명 (엔진에 의해 무시됨)
기능 -> 테스트 케이스 정의하는 여러 시나리오로 구성
각 시나리오 ->BDD 키워드이용한 여러 스텝으로 정의 (Given, When, Then, And, But)

기능 안의 각 시나리오는 chache된 동일한 객체 내에서 실행된다.
== 같은 시나리오의 step은 서로 상태 공유할 수 있으나, 다른 시나리오와는 상태 공유 안된다. == step 에서 여러 클래스 사용해도 메모리에 일부 데이터 저장할 수있다

직접 코딩하기

빈 프로젝트 생성 + 도구 선택

스프링 부트가 필요없다! 메이븐 아키타입(archetypes)으로 메이븐 프로젝트 간단히 맘ㄴ든다.

블랙박스 테스트에 대한 오해

  • 블랙박스 테스트 : 외부 시스템과 상호작용하고, 예상대로 동작하는지 확인하기 위해 사용. tester는 시스템의 구현 알 수 없다.
  • 엔드투엔드 시나리오에 블랙박스 테스트 적용하면 사용자 관점에서 전체 시스템이 잘 동작하는지 확인할 수있어 가장 좋다. (하지만 이 아이디어 끝까지 고수할 필요는 없음)
  • 생성된 출력 확인위해 여러 로그 직접 파싱하거나 복잡한 스크립트 만들어야한다면 시스템 검증할 다른 도구나 테스트용 인터페이스 제공이 나은지 충분히 고려해야함


내 후기

이 책을 통해서 마이크로서비스 관련 주요 주제들을 다뤄봤다.
빈 프로젝트를 시작으로 계층으로 구성된 마이크로서비스 까지 만들어보았다.

책이 작은 일체형으로부터 시작하는게 왜 좋은지 알려주어서 좋았고 작은 사이즈로 설명을 하고 테스트 주도 개발 접근법으로 관련 주제들을 알려줘서 그나마 이해를 할 수 있었다고 생각한다.

나중에 프로젝트에 msa를 적용하게 된다면 지식이 깊지 않은 상태로 아키텍처를 구축하면 오히려 더 큰 혼란이 생길 것 이라는 예고편을 본 것 같기도 하다. ^^

프로젝트의 규모가 커지거나 사용자의 많아질 수록 회사들이 마이크로서비스 아키텍처를 구축하려 하는지는 언뜻 알 것도같다.

다음 스터디 하려는 책은 만만치않은 양의 지식을 전달하고 있어서 이 지식들을 받아들이기 위해서 예열을 하기에 좋은 책이라고 생각한다.
(물론 예열용으로만 사용할만한 책이 아니다. 전체적으로 소화하기에 더 많은 시간이 투자되어야 함을 안다. )

저자가 책의 맨 마지막에 써주었던 것처럼 저도
이 책을 보면서 굉장히 즐거웠고 무엇보다 많이 배웠습니다!

profile
HelloWorld! 같은 실수를 반복하지 말기위해 적어두자..

0개의 댓글