인프런 커뮤니티 질문&답변

skehdxhd님의 프로필 이미지
skehdxhd

작성한 질문수

백엔드 애플리케이션 성능 테스트하기

외부 api는 어떻게 테스트해야 하나요 ?

작성

·

92

·

수정됨

1

api를 제가 개발했다고 가정하겠습니다. 이 기능에는 외부 api 호출이 포함되어 있습니다.

 

그러면 api를 어떻게 테스트할 수 있을까요 ?? 과금 문제나 타사의 api 를 무차별적으로 호출해 성능테스트 하면 여러 문제가 있을 것 같습니다.

 

예를들어 실시간계좌이체를 위해 금감원이나 금결원의 api를 연동하는 경우나, 소셜로그인 등을 위해 네이버, 카카오의 api를 연동하는 경우, 타사에서 제공해준 api 호출이 포함된 기능을 개발하는 경우가 될 것입니다.

(물론 타사에서 호출은 일정 수준으로 제한하는 등 여러 가이드를 보내주겠지만 이런게 없다고 가정합니다)

 

wiremock, mockserver같은 여러 방법들을 찾아보았지만 이는 테스트코드 기반의 테스트방법이고 외부 연동이 성공적으로 연동되었음을 테스트할 수는 있지만 성능테스트에는 부적절하다고 생각되는데, 성능테스트를 하기 위해서는 적절한 방법이 있을까요 ?

답변 2

0

이준형(Foo)님의 프로필 이미지
이준형(Foo)
지식공유자

skehdxhd님 안녕하세요~

우선 좋은 질문 남겨주셔서 감사합니다.

외부 API를 호출하는 기능의 성능 테스트는 말씀하신 것처럼 신중해야 합니다. 실제로 타사의 API를 무분별하게 호출하면 과금 문제나 서비스 약관 위반 등의 문제가 생길 수 있죠.

이럴 때는 외부 API를 모의(Mock) 서버로 대체하여 성능 테스트를 진행하는 것이 일반적입니다. WireMock이나 MockServer 같은 도구를 사용하면 외부 API의 응답을 모의할 수 있는데요, 테스트 코드뿐만 아니라 독립된 서버로 구동시켜서 성능 테스트 시에 실제 외부 API 대신 사용할 수 있습니다.

이렇게 하면 실제 외부 API를 호출하지 않고도 시스템의 성능을 측정할 수 있고, 응답 시간이나 오류 상황을 자유롭게 설정하여 다양한 시나리오를 테스트할 수 있습니다.

 

요약하면, 성능 테스트를 위해서는 외부 API를 모의 서버로 대체하고, 그 모의 서버를 활용하여 테스트를 진행하시는 것이 좋을 것 같습니다.

다만 이 경우 개발, 운영 환경을 별도로 구성하고 설정도 다르게 동작해야할 필요가 있을텐데요, 관련해서는 스테이징 환경 같은걸 두는 것도 좋은 방법입니다.

혹시 더 궁금한 점 있으시면 언제든지 질문 남겨주세요~

0

안녕하세요, 인프런 AI 인턴입니다. skehdxhd님.

외부 API를 포함한 시스템의 성능 테스트는 주의가 필요합니다. 외부 서비스에 직접 과도한 요청을 보내는 것은 예상치 못한 비용이나 서비스 제한을 초래할 수 있습니다. 이러한 문제를 방지하기 위해 몇 가지 대안을 고려해볼 수 있습니다.

  1. Mocking: WireMock과 같은 도구를 사용하여 외부 API를 모방하는 서버를 설정하고 테스트를 진행할 수 있습니다. 실제 환경과 최대한 비슷하게 모사할 수 있기 때문에 테스트 신뢰성을 높일 수 있습니다.

  2. Rate Limiting: 실제 API 호출을 통해 테스트가 불가피하다면, 요청 횟수를 조정하여 부담을 줄이는 방법도 있습니다. 예를 들어, 낮은 요청 수로 시작하여 점진적으로 증가시키면서 테스트할 수 있습니다.

  3. Contract Test: 외부 API와의 통신에서 발생할 수 있는 문제점을 파악하기 위해 API의 계약(Contract)을 확인하고 이를 바탕으로 테스트 케이스를 작성해보세요.

  4. 캐싱을 통한 테스트: 외부 API 응답을 캐싱해 두고, 캐시된 응답을 사용하여 테스트할 수 있습니다. 이를 통해 외부 API에 대한 실질적인 호출을 최소화할 수 있습니다.

  5. 엔드포인트 분리: 테스트용으로 별도의 엔드포인트를 제공받을 수 있는지 외부 API 제공자와 협의하는 것도 도움이 됩니다. 많은 경우, 외부 API 제공자가 테스트 용도의 제한된 환경이나 API 키를 제공하기도 합니다.

이와 관련한 더 자세한 내용을 원하신다면 다음 링크들을 참고해보시기 바랍니다:

저는 질문자님의 이해를 돕고자 기존의 관련 답변을 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 언제든지 추가 질문 부탁드립니다. 곧 지식공유자께서 답변해 주실 것입니다.

skehdxhd님의 프로필 이미지
skehdxhd

작성한 질문수

질문하기