Server test용 General Mock server 만들기

2023. 1. 24. 23:03Development

Mock server

Micro service architecture 에서는 내부 타 Service와 Interaction을 하는 경우가 많이있고, 새로운 Micro service를 개발할 때 외부 호출을 통해 동작을 테스트 해야하는 경우가 종종있어왔습니다. 이때 mock server를 이용했으면 하는 케이스가 많이 있어서, 좀 더 쉽게 셋업을 할 수 있는 Mock server에 대한 고민을 하다가 이번에 토이 프로젝트 삼아 서비스를 만들게 되었습니다.

 

Github repo

Repo : https://github.com/wen-ys/GeneralMock.git

 

Config

routingPolicies:
  - path: "/books/1"
    filters:
      - type: "DelayFilter"
        args: |
          {
            "delayTime" : 2000,
            "deltaTime": 1000
          }
    response:
      code: 200
      body: "Good"

  - path: "/books/2"
    filters:
      - type: "HeaderFilter"
        args: |
          {
            "responseHeader" : "test"
          }
    response:
      code: 200
      body: |
        {
          "title" : "queen"
        }

어떻게하면 손쉽게 Mock server를 셋팅할 수 있을지에 대한 고민의 결과는 yml 포멧으로 리턴 값들을 정의해줄 수 있고, 이를 Server를 띄우면서 다이나믹하게 환경에 맞게 변경할 수 있는 형태로 구현하게 되었습니다.

 

그냥 값만 Return하면 재미가 없으니... filter의 개념을 도입해서 Delay를 주거나... Header의 값을 변경한다던가 하는 기능을 추가 구현하였으며, 앞으로 랜덤 값을 리턴한다던지, 필요하게 되면 좀 더 다양한 기능을 더 확장해나가는 것도 좋을 것 같았습니다. 일단은 현재 필요한 필터만 구현을 해두었습니다.

 

Run

docker로 띄울 수 있도록 구성을 해두었기 때문에...

docker run --mount type=bind,source=/{absolute path}/routing_config.yml,target=/service/routing_rule.yml -p 8100:8100 wenys/generalmock

mount를 통해서 만들어둔 routing_config.yml 파일을 내부의 정해진 파일으로 binding 시켜주면 서비스가 해당 위치의 파일을 참조하여 config를 구성하는 구조로 구현하였습니다.

 

앞으로 좀 더 확장시켜나가면서 좀 더 기능을 추가해 나갈 계획입니다.

 

누군가 기능 추가를 도와주신다면 언제든 환영입니다!!

'Development' 카테고리의 다른 글

Spring cloud gateway response body cache  (0) 2023.01.24
Spring cloud gateway request body cache  (0) 2023.01.24
GSON - Composite pattern class  (2) 2023.01.24
Design pattern - Composite pattern  (0) 2023.01.24
golang GO routine channel 테스트  (0) 2023.01.24