2025. 3. 12. 18:22ㆍ개발/개발 방법론
3.2 통합 테스트(Integration Testing) 단계
통합 테스트(Integration Testing)는 단위 테스트를 통과한 개별 모듈들이 서로 정상적으로 연동되는지를 검증하는 과정입니다.
V-모델에서 통합 테스트는 모듈 간 데이터 흐름과 인터페이스가 정상적으로 작동하는지 확인하는 중요한 단계입니다.
이 단계에서는 Stub, Driver, Mock 등의 가상 구성 요소를 활용하여 테스트 환경을 구축하고,
API 및 데이터베이스 연동이 올바르게 동작하는지 검증합니다.
📌 학습 목표
✔ 여러 모듈이 서로 정상적으로 동작하는지 검증하는 방법을 학습한다.
✔ 모듈 간 데이터 흐름 및 인터페이스 테스트를 수행하는 방법을 익힌다.
✔ Stub, Driver, Mock을 활용하여 통합 테스트 환경을 구축한다.
✔ API 테스트 도구를 활용하여 외부 시스템과의 연동을 검증한다.
📖 학습 내용
1. 통합 테스트의 개념과 필요성
📌 통합 테스트(Integration Testing)란?
통합 테스트는 각각의 단위 모듈을 조합하여 전체 시스템이 올바르게 동작하는지를 검증하는 과정입니다.
단위 테스트가 개별 함수 또는 클래스의 동작을 검증하는 데 초점을 맞춘다면, 통합 테스트는 모듈 간의 데이터 교환, 인터페이스 연동, 시스템 간 통합을 검증합니다.
📌 통합 테스트의 필요성
항목 | 설명 |
모듈 간 데이터 교환 검증 | 서로 다른 모듈이 올바르게 데이터를 주고받는지 확인 |
API 및 데이터베이스 연동 확인 | 외부 API 호출 및 DB 트랜잭션이 정상적으로 수행되는지 검증 |
시스템 안정성 보장 | 여러 컴포넌트가 결합되었을 때 예상치 못한 오류를 사전에 발견 |
네트워크 및 분산 시스템 테스트 | 클라이언트-서버 통신이 정상적으로 이루어지는지 검증 |
✔ 통합 테스트를 수행하지 않으면, 모듈 간 연동 문제로 인해 전체 시스템의 동작이 불안정해질 수 있습니다.
2. 모듈 간 데이터 흐름 및 인터페이스 테스트
통합 테스트에서는 모듈 간 인터페이스 및 데이터 흐름이 정상적으로 동작하는지 검증해야 합니다.
📌 주요 테스트 대상
테스트 항목 | 설명 |
모듈 간 데이터 흐름 | 한 모듈에서 생성된 데이터가 다른 모듈로 정상적으로 전달되는지 검증 |
API 요청 및 응답 처리 | REST API 또는 RPC 호출이 예상한 대로 동작하는지 확인 |
데이터베이스 연동 | SQL 쿼리 실행 및 데이터 저장/조회가 정상적으로 수행되는지 확인 |
비즈니스 로직 검증 | 여러 모듈이 조합되었을 때 기대한 비즈니스 로직이 수행되는지 테스트 |
📌 테스트 기법
✔ Bottom-Up 방식 → 기초 모듈부터 상위 모듈로 점진적으로 테스트 진행
✔ Top-Down 방식 → 전체 시스템의 주요 기능을 먼저 테스트한 후, 세부 모듈 테스트 수행
✔ Big Bang 방식 → 모든 모듈을 한꺼번에 통합하여 테스트 (비효율적일 수 있음)
✔ 테스트 기법을 선택할 때는 시스템의 복잡성과 위험 요소를 고려해야 합니다.
3. Stub, Driver, Mock을 이용한 테스트 환경 구축
통합 테스트에서는 외부 시스템이나 미완성된 모듈 없이 독립적인 테스트 환경을 구축할 필요가 있습니다.
이를 위해 Stub, Driver, Mock 등의 가상 구성 요소를 활용합니다.
📌 Stub, Driver, Mock의 차이점
가상 구성 요소 | 설명 | 활용 사례 |
Stub | 테스트 대상 모듈이 호출하는 가짜 응답 객체 | DB 조회 결과를 가짜 데이터로 반환 |
Driver | 테스트를 수행하기 위해 호출하는 임시 모듈 | 상위 모듈이 구현되지 않은 경우 테스트 목적의 코드 작성 |
Mock | 특정 동작을 정의할 수 있는 더 정교한 Stub | API 응답을 특정 시나리오에 따라 반환 |
✔ Stub과 Driver는 모듈 간 연동을 테스트할 때 활용되며, Mock은 특정 동작을 시뮬레이션할 때 사용됩니다.
📌 Mocking 라이브러리 예시
언어 | Mocking 라이브러리 | 특징 |
Python | unittest.mock | 메서드 호출 감지, 가짜 객체 생성 |
C++ | Google Mock | 인터페이스 기반의 모의 객체(Mock Object) 지원 |
Java | Mockito | 실제 객체와 동일한 동작을 하는 Mock 객체 생성 |
JavaScript | Sinon.js | 비동기 함수의 Stub 및 Spy 지원 |
✔ Mock을 활용하면 네트워크 요청 없이도 API 테스트를 수행할 수 있어 효율적입니다.
4. API 테스트 도구 활용 (Postman, REST Assured 등)
📌 API 테스트 도구
도구 | 설명 |
Postman | REST API 테스트 및 응답 확인 |
REST Assured | Java 기반의 API 자동화 테스트 |
SoapUI | SOAP 및 REST API 테스트 지원 |
Swagger | API 문서화 및 테스트 기능 제공 |
✔ Postman을 활용하면 REST API의 요청/응답을 간편하게 테스트할 수 있습니다.
📌 Postman을 활용한 API 테스트 예시
- GET http://api.example.com/users 요청 실행
- 응답이 200 OK인지 확인
- JSON 데이터 구조가 예상과 일치하는지 검증
✔ API 테스트 자동화를 위해 REST Assured를 활용할 수도 있습니다.
🛠 실습: 간단한 API 시스템을 대상으로 통합 테스트 수행
📌 실습 목표
- 간단한 API 시스템을 구축하고 통합 테스트를 수행한다.
- Stub 및 Mock을 활용하여 테스트 환경을 구성한다.
- Postman을 활용하여 API 응답을 검증한다.
📌 실습 과제
- Flask 기반 간단한 API 서버 구현
- 사용자 정보를 조회하는 GET /users API 구현
- 새로운 사용자를 추가하는 POST /users API 구현
- Mocking을 활용한 API 테스트 작성
- unittest.mock을 활용하여 데이터베이스 없이 API 테스트 수행
- Postman을 활용한 API 요청 및 응답 검증
- API 호출 후, 응답 코드와 데이터 구조가 올바른지 확인
📌 예제 코드 (Python, Flask, PyTest 활용)
# app.py (테스트 대상 코드)
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/users", methods=["GET"])
def get_users():
return jsonify({"users": ["Alice", "Bob", "Charlie"]})
if __name__ == "__main__":
app.run(debug=True)
# test_app.py (테스트 코드)
import pytest
from app import app
@pytest.fixture
def client():
with app.test_client() as client:
yield client
def test_get_users(client):
response = client.get("/users")
assert response.status_code == 200
assert "users" in response.get_json()
✔ pytest 실행:
pytest test_app.py
✔ Postman에서 GET http://localhost:5000/users 요청을 실행하여 응답을 확인
✅ 결론
✔ 통합 테스트는 모듈 간 데이터 흐름과 인터페이스가 정상적으로 동작하는지를 검증하는 과정입니다.
✔ Stub, Driver, Mock을 활용하면 독립적인 테스트 환경을 구축할 수 있습니다.
✔ API 테스트 도구(Postman, REST Assured)를 활용하여 시스템 연동을 검증할 수 있습니다. 🚀