글 / 통합 검증

Mock 서버를 이용한 연계 시험

상대 시스템 대신 약속된 응답을 반환하는 Mock 서버를 두고, 수신한 요청을 기록하여 검증에 사용한다.

작성일 · 읽는 시간 2분 · FastAPI 0.141 기준

Mock 서버의 필요성

두 시스템의 연계 시험은 양측이 모두 준비된 이후에만 가능하다. 상대 시스템의 준비가 지연되면 자체 시험도 함께 지연된다. Mock 서버(모의 서버)는 인터페이스 문서에 약속된 응답을 그대로 반환하는 서버이다. Mock 서버를 두면 상대 시스템이 없어도 호출과 응답 처리를 먼저 시험할 수 있다.

Mock 서버가 상대 시스템 대신 응답하고 요청을 기록하는 구성

FastAPI 구현 예제

응답은 고정값으로 반환하고, 수신한 요청은 목록에 누적한다. 본문을 Request에서 직접 읽으면 FastAPI가 검증하지 않으므로, 필드가 누락되거나 이름이 잘못된 요청도 수신한 그대로 기록된다.

pythonmock.py
from fastapi import FastAPI, Request

app = FastAPI()
received = []  # 받은 요청을 순서대로 쌓는다


@app.post("/orders", status_code=201)
async def create_order(request: Request):
    body = await request.json()
    received.append({"path": request.url.path, "body": body})
    # 인터페이스 문서에 약속한 응답을 그대로 돌려준다
    return {"orderId": "A-0001", "status": "ACCEPTED"}


@app.get("/_received")
async def list_received():
    return received


@app.delete("/_received")
async def clear_received():
    received.clear()
    return {"count": 0}

수신 요청 기반 검증

Mock 서버를 기동하고 시험 대상의 연계 주소를 Mock 서버로 변경한다. 시험이 끝난 뒤 기록을 조회한다.

bash
uvicorn mock:app --port 9000

# 실제로 나간 요청을 본다
curl -s http://127.0.0.1:9000/_received
# 다음 시험 전에 비운다
curl -s -X DELETE http://127.0.0.1:9000/_received

기록에서 확인할 항목은 세 가지이다.

  • 횟수: 한 번 전송할 요청이 두 번 전송되지 않았는지 확인한다.
  • 내용: 필드 이름과 값이 문서와 일치하는지 확인한다.
  • 순서: 먼저 전송되어야 할 요청이 먼저 전송되었는지 확인한다.

요청 기록부터 시험 후 기록 조회·삭제까지의 순서

한계

Mock 서버는 문서에 기술된 대로만 응답한다. 문서와 실제 상대 시스템이 다르면 그 차이는 검출하지 못한다. 상대 시스템이 준비되면 같은 시험을 실제 상대 시스템을 대상으로 다시 실행해야 한다.