신용대출 찾기 서비스 제휴사 mock 서버 개발기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- 백엔드 개발자, QA 엔지니어, 제휴사 연동 담당자
- Spring Framework, REST API, 데이터베이스 연동 경험자
- 난이도: 중급 (Spring Boot, 복잡한 테스트 환경 구축 경험이 필요)
핵심 요약
- mock 서버는 유저/제휴사/퍼널 단위로 테스트 조건을 정밀하게 제어하는 기능 제공
- RestTemplate/WebClient에 커스텀 헤더 주입을 통해 비즈니스 로직 영향 없이 테스트 수행
- 스케줄링을 통한 비동기 응답 시뮬레이션 및 데이터 템플릿 기반의 mock 응답 생성 방식
섹션별 세부 요약
1. 문제 정의 및 배경
- 제휴사 서버의 불안정한 응답, 테스트 데이터 확보 어려움, 신규 기능 개발 지연 등의 문제 발생
- QA 및 서비스 출시 일정에 부정적 영향을 주는 상황 해결 필요
2. 기능적/비기능적 요구사항
- 유저/제휴사/퍼널 단위로 mock 사용 여부 설정 가능
- 동기/비동기 응답 지원, relay 서버 역할 수행, 유저 친화적 설정 인터페이스 제공
- 기존 비즈니스 로직 변경 없이 mock 서버 연동 가능
3. mock 서버 구성 요소
- 커스텀 헤더 주입, 설정 관리, 비동기 응답 지원, mock 데이터 생성, relay 서버 역할, 메신저봇 연동, 유연한 모듈화 구조
partner_metadata
,partner_response
,user_status
DB 테이블을 통해 설정 관리
4. 헤더 주입 구현
- RestTemplate:
MockServerHeaderInjectionInterceptor
를 통해 요청 헤더 자동 주입 - WebClient:
ExchangeFilterFunction
을 활용한 헤더 주입 처리 @Profile("dev")
어노테이션으로 테스트 환경에서만 동작
5. 비동기 응답 처리
- 예약 등록: API 호출 시 DB에 예약 정보 저장 (executeTs 기준)
- 예약 실행:
@Scheduled
를 통해 1분 단위로 예약 확인 및ThreadPoolTaskScheduler
로 콜백 전송 reserveInternal
함수 내lockExecutor.runOnce
를 통한 동시성 관리
6. mock 응답 생성 흐름
- 예약어 기반 템플릿 정의:
"{{amount}}", "{{productId}}"
등 사용 - 예약어 치환:
JsonNode
순회를 통한 깊은 중첩 구조 치환 - 상품명 → 원장 아이디 매핑:
loan_product_id_property_names
메타데이터 기반 정확한 치환
7. relay 서버 역할
- 유저가 mock 사용 시:
getMockResponse()
로 응답 생성 - 제휴사 콜백 시: API Gateway 라우팅 변경으로 mock 서버에서 요청 처리 및 다시 신용대출 서버로 전달
8. 모듈화 및 확장성 설계
mock-server-api
,mock-server-base
,mock-server-serviceA
,mock-server-serviceA-admin
모듈 구조- Multi DataSource 지원: Class 기반 정의 방식 채택 (base package, annotation 기반 방식 제외)
- 프로퍼티 설정:
application-{service}.properties
파일로 모듈별 설정 분리
결론
- mock 서버는 테스트 환경에서 실제 서버와 동일한 동작을 시뮬레이션하여 QA 효율성 향상
- Spring Boot의
RestTemplate
/WebClient
인터셉터 기능과@Scheduled
를 활용한 비동기 테스트 구현 - 모듈화 및 Multi DataSource 지원을 통해 제휴사 연동 서비스 확장성 강화