인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

skehdxhd님의 프로필 이미지

작성한 질문수

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

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

해결된 질문

작성

·

387

·

수정됨

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 인턴님의 프로필 이미지

안녕하세요, 인프런 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님의 프로필 이미지

작성한 질문수

질문하기