◾️ 테스트란
프로그램이 의도한 대로 동작하고 있는지 확인하고, 잠재적인 버그를 발견해 개선하기 위한 과정이다.
다양한 테스트 종류가 있으며, 각 테스트의 목적과 범위가 다르기 때문에 상황에 맞게 적용하면 된다.
◾️ 테스트 종류
-
유닛 테스트
- 가장 작은 단위의 코드 블록을 테스트한다.
- 보통 함수나 메소드 단위로 진행되며, 코드가 정확하게 원하는 결과를 반환하는지 확인한다.
- 다른 모듈에 대한 의존성이 없기 때문에 빠르고 독립적으로 실행된다.
const add = (a, b) => a + b;
test('add함수는 합을 반환해야 함.', () => {
expect(add(2, 3)).toBe(5);
});
-
E2E테스트
- 애플리케이션의 전체 흐름을 시나리오 기반으로 테스트한다.
- 실제 사용자가 애플리케이션을 사용하는 방식과 유사하게 테스트를 진행하여, 모든 기능이 처음부터 끝까지 의도한 대로 작동하는지 확인한다.
- 브라우저 자동화 툴(예: Cypress, Playwright)을 사용해 자동화할 수 있다.
-
통합테스트(Integration Test)
- 여러 모듈이 서로 연동될 때 올바르게 작동하는지 테스트한다.
- 특정 컴포넌트가 서로 잘 연계되고 있는지, 상태나 데이터 전달이 정상적인지 검증할 때 사용된다.
◾️ 목 데이터
목 데이터 - 실제 데이터나 서버와의 상호작용(api통신)을 대신하여 사용되는 가짜 데이터.
목 데이터를 사용해야만 하는 이유
- 네트워크 접근 제약
- 실제 API 서버가 외부 접근을 허용하지 않거나, 특정 IP 주소나 환경에서만 접근을 허용하는 경우가 많다. 예) API 서버가 사내 네트워크에서만 접근할 수 있도록 설정되어 있으면, 외부에서 테스트 환경에서 API를 호출할 수 없다.
- 개발 환경에서 로컬 서버나 클라우드 환경의 테스트 서버가 설정되지 않은 경우에도 외부 API에 접근할 수 없는 문제가 발생할 수 있다.
- 보안 설정
- 테스트할 때 사용하는 API가 민감한 데이터(예: 사용자 정보, 결제 정보 등)에 접근하거나, API 요청에 인증/인가가 필요할 때 테스트 환경에서 이를 사용하는 것은 보안 이슈를 유발할 수 있다.
- 특정 API는 외부 요청을 차단하고, 예외 처리를 따로 설정해야 하거나 인증 토큰을 사용하는데, 이 토큰이 테스트 환경과 맞지 않으면 호출이 실패할 수 있다.
- 네트워크 연결 문제
- 네트워크가 불안정하거나, 특정 환경에서는 네트워크 속도 지연이 발생할 수 있다. 이 경우 테스트 결과가 일관되지 않거나, 반복된 테스트가 비효율적으로 수행될 수 있다.
- 서버가 다운되어도 테스트가 실패하게 된다.
- API 사용 비용
- 일부 API는 사용량에 따라 비용이 발생하기 때문에, 테스트 환경에서 실제 API를 호출하면 비용이 발생할 수 있다.
- 트래픽 제한이 있는 API의 경우 테스트 중 많은 요청이 발생하면 한도를 초과할 수도 있다.
- 일관된 테스트 결과 보장
- 실제 API를 호출하면, 외부 상태나 데이터가 바뀔 수 있어 테스트 결과가 달라질 수 있다.
예) API의 응답 데이터가 매번 달라지는 경우 테스트 코드가 항상 일관된 결과를 보장하지 못할 수 있음.