BE/Spring & Spring Boot

[Spring Boot] E2E 테스트

baek-dev 2025. 4. 29. 13:42

E2E 테스트란 무엇인가 – End-to-End 테스트 개념과 전략

**E2E 테스트(End-to-End Test)**는 소프트웨어 시스템의 시작부터 끝까지, 사용자 관점에서 전체 흐름을 시뮬레이션하며 테스트하는 방식임.
사용자가 실제로 사용하는 방식 그대로 애플리케이션을 테스트함으로써, 기능이 서로 잘 연결되어 있는지를 검증함.
UI → API → DB → 응답 → 화면 결과까지 모든 흐름을 점검하는 것이 특징임.


1. E2E 테스트의 목적

  • 전체 기능 흐름 검증
    • 각 컴포넌트가 개별적으로 잘 동작하더라도, 통합 시 문제가 발생할 수 있음.
    • E2E 테스트는 이 전체적인 연결 상태를 검증함.
  • 실제 사용자 경험 시뮬레이션
    • 클릭, 입력, 전송 등 사용자의 행동을 자동화하여 실제 사용과 유사한 시나리오를 반복적으로 실행함.
  • 서비스 장애 예방
    • 릴리스 전에 기능이 실제 환경처럼 작동하는지 검증함으로써 배포 후 장애를 방지함.

2. E2E 테스트 구성 요소

구성 요소 설명
테스트 대상 시스템 프론트엔드, 백엔드, DB가 연결된 실제 시스템 또는 staging 환경
테스트 스크립트 사용자 시나리오를 코드로 작성한 파일
자동화 도구 Cypress, Playwright, Selenium, TestCafe 등
테스트 데이터 고정된 테스트 유저/상품/주문 정보 등
결과 검증 조건 화면에 출력된 값, 응답 코드, URL 이동 등

3. 대표적인 E2E 테스트 도구

도구 특징
Cypress 가장 인기 있는 JS 기반 도구, 프론트엔드 UI 테스트에 특화됨
Playwright 마이크로소프트에서 개발, 다양한 브라우저 지원, 강력한 API
Selenium 전통적인 도구, 다양한 언어와 브라우저 지원
TestCafe 설치가 간편하고 Node.js 기반으로 빠르게 실행 가능
Puppeteer Headless Chrome 전용, 크롤링/스크래핑에도 자주 활용됨

4. Cypress를 활용한 E2E 테스트 예시

1) 설치

npm install cypress --save-dev
npx cypress open

2) 테스트 스크립트 (예: 로그인 테스트)

describe('로그인 기능 테스트', () => {
  it('아이디와 비밀번호로 로그인하면 대시보드로 이동함', () => {
    cy.visit('http://localhost:3000/login');
    cy.get('input[name="email"]').type('test@example.com');
    cy.get('input[name="password"]').type('password123');
    cy.get('button[type="submit"]').click();
    cy.url().should('include', '/dashboard');
    cy.contains('환영합니다');
  });
});

5. E2E 테스트가 필요한 시점

  • UI, API, DB 가 연결되어 있는 전체 흐름 테스트가 필요한 경우
  • 주요 서비스(결제, 로그인 등)의 정합성 및 회귀 테스트가 중요한 경우
  • 릴리스 전에 QA 시간을 줄이고 싶은 경우
  • CI/CD 파이프라인에 테스트 자동화를 통합하고 싶은 경우

6. E2E vs 단위 테스트 vs 통합 테스트

구분 단위 테스트 통합 테스트 E2E 테스트
범위 함수/클래스 등 작은 단위 모듈 간 연결 시스템 전체
속도 빠름 중간 느림
의존성 없음 (Mocking) 일부 의존 전체 의존
목적 로직 정확성 모듈 연동 실제 사용 흐름 검증

7. E2E 테스트의 장단점

장점 단점
사용자 관점의 기능 검증 가능 테스트 속도가 느림
실제 배포 전 안정성 확인 가능 환경 세팅이 복잡함 (DB, API 서버 등)
회귀 테스트 자동화로 QA 시간 단축 UI 변경에 민감하여 테스트 코드 유지 비용 발생

8. 실무 활용 전략

  • 주요 사용자 시나리오만 선택하여 작성
    • 로그인, 회원가입, 주문 흐름 등 핵심 기능을 먼저 테스트함.
  • 데이터 초기화 자동화
    • 테스트 시작 전 고정된 상태로 DB 초기화하여 예측 가능한 결과 확보함.
  • CI/CD 통합
    • GitHub Actions, Jenkins 등과 연동하여 배포 전에 자동 실행되도록 구성함.
  • 스크린샷/로그 저장
    • 실패 시 화면 캡처 및 네트워크 로그 저장 기능을 활용해 디버깅 시간을 줄임.

정리

E2E 테스트는 사용자 입장에서 시스템 전체 기능 흐름을 검증하는 테스트 방식임.
UI, API, DB 등을 연결하여 시나리오 기반 테스트를 자동화함으로써 실 서비스 배포 전 안정성을 확보할 수 있음.
속도나 유지보수 측면에서는 단점도 있지만, CI/CD 환경에서 회귀 테스트 자동화와 QA 효율화에 매우 효과적인 전략임.

 

 

 

 

출처 : ChatGPT

'BE > Spring & Spring Boot' 카테고리의 다른 글

[Spring Boot] Redis pub/sub  (0) 2025.04.27
[Spring Boot] STOMP  (1) 2025.04.26
모놀리식 아키텍처와 MSA  (0) 2025.04.24
[Spring Boot] Spring JDBC  (0) 2025.04.22
[Spring Boot] 웹소켓  (1) 2025.04.19