brunch

You can make anything
by writing

C.S.Lewis

by Ruth Hyojin Nam Sep 19. 2023

개발초기 API 품질을 확보하는 방법

API Test


API Test (Application Programming Interface) 


  IT 서비스들은 어플리케이션(클라이언트,서버,DB)와 서로 다른 수백 개의 API와 상호 연결되어있습니다. 그 중 하나가 실패하면 서비스가 제대로 동작하지 않습니다. API테스트란 API 시스템 자체에 대한 엔드포인트 테스팅 활동으로 API가 예상대로 작동하고 사용할 준비가 되어있는지 확인하고 기능의 안정성, 성능, 보안 측면에서 기대치를 충족하는지 확인하는 비기능 테스트입니다. 


  API 테스트는 front-end나 client가 구축되기 전 back-end 시스템의 내부 설계 및 통합이 완료된 후 API 엔드포인트에 대한 테스트를 수행하는 것 입니다. UI 구현이 완료 후 App이나 Web의 실제 사용자가 사용하는 화면상에서 블랙박스 테스트를 수행할 수 있지만 그러기위해 테스트를 위한 모든 시스템(서버, DB, 클라이언트)과 응용 프로그램 개발이 완성된 상태여야 테스트가 가능합니다. 개발이 완성된 단계에서 end to end 테스트가 시작된다면 개발 초기에 해소할 수 있는 이슈에 대한 대응은 늦어질 수 밖에 없습니다. 


  백엔드 시스템이 개발되는 과정 중에 API 테스트를 병행해서 진행 할 수 있다면 개발 수명 주기가 짧아지고, 개발 단계에서부터 API 기능상/로직상 오류를 발견하고 해소함으로써 품질을 확보할 수 있고, API 성능 향상 및 개선이 가능하며, QA 통합테스트 기간을 단축하는 등 효과를 기대할 수 있습니다. 



API란?

API(application programming interface)란, 응용 프로그램과 운영체제를 연결하여 두 소프트웨어 구성요소가 서로 통신할 수 있게 하는 메커니즘입니다. 


예시를 들어 쉽게 설명해본다면,

A가 카페에가서 점원인 B에게 음료를 주문합니다. B는 음료 주문서를 바리스타에게 전달합니다. 바리스타는 주문한 음료를 만들어 B에게 전달니다. B는 음료를 A에게 서빙해줌으로 임무를 완수합니다.













API는 점원인 B의 역할에 해당됩니다. 클라이언트(주문자A)에게 요청을 받고 서버(바리스타)와 인터페이스로 요청에 대한 응답값(주문받은 메뉴)을 클라이언트에게 전달합니다. 즉 API는 클라이언트와 응용프로그램이 서로 통신할 수 있게 연결해주는 매개체로 볼 수 있습니다. 



API 종류와 유형

  API는 구조에 따라 SOAP API / RPC API / Websocket API / REST API 4가지 종류로 구성됩니다.

SOAP API는 그 자체가 프로토콜이며 XML을 사용하여 클라이언트와 서버간 메시지를 교환합니다. REST API는 웹에서 가장많이 사용되고 최적화된 API 입니다. JSON을 사용하여 클라이언트가 서버에 요청을 데이터로 전송하며 서버는 내부 함수를 사용하여 출력데이터를 클라이언트로 반환합니다. 

  API 유형은 사용 범위에 따라 Private API / Public API / Partner API / Composite API 4가지로 분류됩니다. Private API는 제 3자에게 노출되지 않는 기업 내부에서 사용되는 API로 비즈니스 내에서 시스템과 데이터를 연결하는데 사용합니다. Public API는 일반에 공개되어 누구나 사용할 수 있는 API입니다. Partner API는 일부 사용자에게만 액세스 권한이 부여된 API입니다. B2B 파트너 관계에서 주로 사용됩니다. 


API 테스트시 주로 사용되는 API 종류와 유형은 REST API 또는 최근들어 gRPC가 주로 사용되고 있으며 개발중인 API가 테스트 대상이 되기때문에 대부분 Private API나 Partner API를 대상으로 테스트하게 됩니다. 



API 테스팅

  API 테스트 목적은 클라이언트의 요청에 대한 ‘서버의 응답'을 검증하는 데 초점을 둡니다. 그 외 API 엔드포인트의 요청 부하를 발생시켜 API 성능을 확인하거나 서버 우회 접근 또는 시스템 공격 등 위협에 대응 준비가 되어있는지 확인하는 보안 테스트를 목적으로 테스트가 진행됩니다. 


  API 테스트 범위는 API 요구사항 문서를 기준으로 정의된 스펙(parameter, field, type, body등)대로 입력값에 대한 응답값이 정상 출력되는지 & 구현된 로직이 요구사항에 맞게 설계되었는지 확인하고, API의 status code가 설계된대로 response되는지 확인합니다. 또한, API 스펙상 정의되지 않거나 비정상적이거나 허용하지 않은 파라미터 호출시 에러가 응답되는지를 확인합니다. 


API 테스트를 수행하기 위해서는 특정 테스트 tool이 필요합니다. API 테스트의 대표적인 테스트 툴은 Postman, Jmeter, Thunder Client, SoupUI 가 있습니다. 여기서는 Postman을 활용하여 REST API 테스트를 수행하는 방법을 간략히 소개해드리겠습니다. 



REST API Testing with Postman

[테스트전 참고]

API 테스트 수행을 위해 반드시 알아야 할 요청변수명의 key값, response 응답값, Prarmeter, API Key 등의 정보는 API 개발명세서에서 확인할 수 있습니다. 테스트 전 API 명세서를 확인하여 설계된 스펙으로 테스트를 수행합니다. 


HTTP Method 중 GET / POST 테스트

1) Postman 설치 후 실행

https://www.postman.com/downloads/


2)   API Key를 준비하여 Authorization 또는 Headers의 Key, Value(api key) 값 입력 

   기업에서 사용하는 API의 경우 public API가 아닌 private API에 해당됩니다. API에 접근하기위해서는 별도의 접근권한이 필요합니다. 
API key를 준비하여 API Test tool에 입력 후 테스트를 수행합니다.



3) GET으로 호출할 API 입력 후 Send → 응답값 확인

   [실습] 네이버 블로그 게시글 검색 API 테스트 - GET 요청 보내기 - Body에 테스트 결과 확인         

            네이버 검색 오픈 API : https://openapi.naver.com/v1/search/blog.json

            쿼리 파라미터 : key(요청 변수명) - query(검색어) | value(입력값) - 비타민
                                                           sort(정렬) | date(날짜) 입력 후 [Send]시 Body에 결과 확인
                                 파라미터 세팅시 GET은 'Params'에 입력한다.


4) POST로 호출할 API 입력 후 Send → 파라미터 변경 → 응답값 확인

    [실습] 네이버 파파고 번역 API 테스트 - POST 요청보내기 - body 번역할 단어 입력 후 응답값 확인       

             네이버 파파고 번역 오픈 API : https://openapi.naver.com/v1/papago/n2mt

             쿼리 파라미터 : key(요청 변수명) - source(번역전언어) | value(입력값) - ko
                                         target(번역언어) | en
                                         text(번역할단어) | 개구리 입력 후 [Send]시 Body에 결과("Frog") 확인
                          파라미터 세팅시 POST는 'Body'에 입력한다.

  POST 메소드는 입력데이터를 직접 작성/수정하여 응답값을 확인할 수 있습니다. 예시의 번역 프로그램 또는 금칙어 시스템, 화이트/블랙 리스트 관리 등 변경되는 입력값에 대한 응답을 확인하고자 할때 사용합니다. 


5) PUT(데이터 수정)

    ① GET으로 호출할 API 입력 후 Send → 응답값 호출 → 저장

   ② 저장된 폴더 밑에 새로운 페이지 생성 → PUT 선택 

    ③ Body → raw → JSON 선택

   ④ 변경할 Key와 변경값 입력 후 [Send] 클릭 → 응답값 확인

[실습 예시] GET 요청보내기 - 응답값 확인 - PUT - 변경할 key 입력 후 응답값 확인                     

(출처 : https://www.tutorialspoint.com/)


6)   DELETE(데이터 삭제)

      ① GET으로 호출할 API 입력 후 Send → 응답값 호출 → 저장

     ② 저장된 폴더 밑에 새로운 페이지 생성 → DELETE 선택

     ③ 삭제할 Key값(id 또는 name 등) 입력 후  [Send] 클릭 → 응답값 확인

[실습 예시] GET 요청보내기 - 응답값 확인 - DELETE - 삭제할 id 입력 후 응답값 확인



API 엔드포인트 성능 테스트

1) 트래픽 과부하상태에서 병목이나 시스템 성능 저하가 발생되지 않는지 확인하려면 많은 양의 request를 발생하여 과부하를 줄 수 있습니다. 

  API 테스트 스크립트 작성시 많은 양의 request를 폴더로 생성하고 폴더별로 테스트를 반복 실행함으로 트래픽을 발생시킵니다. 

 - Iterations : 테스트 반복 횟수 

 - Delay : 초단위 주기 횟수

를 설정하여 과부하 or 제한 성능 테스트를 수행합니다. 


2) API 성능 지표 확인

  Postman에서는 응답크기, 응답시간과 같은 응답 매개 변수에 대한 세부정보를 표시해줍니다. 아래와 같이 요청 시간에 대해-연결 시간, 소켓 시간, DNS 조회, 핸드 셰이크 등과 같은 개별 구성 요소로 성능을 분석합니다.


 



API 테스트시 일반적으로 API 설계 문서를 기준으로 요청(입력값)에 대한 서버 응답값 및 에러코드 검증을 수행합니다. 여기에 추가로 

    유저 시나리오 기반으로 핵심 API의 정상 동작 확인   

    API문서상 정의되지 않거나 또는 비정상적이거나 허용하지 않은 파라미터 호출시 에러 응답 확인   

    back-end / front-end간 설계된 로직에따라 응답값이 전송되는지 확인  

 까지 추가로 검증된다면 API 품질을 좀 더 향상할 수 있고 기대수준의 품질을 확보할 수 있습니다. 

테스트 수행 전략 계획시 위 내용도 참고하여 커버리지를 산정해보시기 바랍니다. 

 

작가의 이전글 전략적 테스트 실행을 위한 테스트 설계 기법 활용
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari