트레바리 시즌5, 두 번째 모임을 마치고 – 세상에 대한 일말의 책임감에 대하여
REDBUSBAGMAN | 빨간색 버스에 가방을 메고 탑니다
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)는 DB에서 날씨정보를 받아 포털 사이트 내 검색 결과로 응답값을 보여줍니다. API는 클라이언트-DB를 상호 연결하여 데이터를 주고받을 수 있도록 돕는 역할을 합니다.
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 테스트 범위는
1) API 요구사항 문서를 기준으로 정의된 스펙(parameter, field, type, body등)대로 입력값에 대한 응답값이 정상 출력되는지 확인
2) 구현된 로직이 요구사항에 맞게 설계되었는지 확인
3) API의 status code가 설계된대로 response되는지 확인
4) API 스펙상 정의되지 않거나 비정상적이거나 허용하지 않은 파라미터 호출시 에러가 응답되는지 확인합니다.
API 테스트를 수행하기 위해서는 특정 테스트 tool이 필요합니다. API 테스트의 대표적인 테스트 툴은 Postman, Jmeter, Thunder Client, SoupUI 가 있습니다. 여기서는 Postman을 활용하여 REST API 중 GET과 POST 테스트를 수행하는 방법을 간략히 적어보겠습니다. (수행 절차에 이미지를 적절히 배치할 수가 없어서 텍스트로만 아주 간단히 설명해보겠습니다.)
=====
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(날짜)
(파라미터 세팅시 GET은 'Params'에 입력한다.)
=> 파라미터 세팅 후 GET 요청을 보내면 비타민의 검색결과가 response 되는 걸
확인할 수 있습니다.
4) POST로 호출할 API 입력 후 Send → 파라미터 변경 → 응답값 확인
[예시] 네이버 파파고 번역 API 테스트 - POST 요청보내기 - Body 번역할 단어 입력 후
응답값 확인
네이버 파파고 번역 오픈 API : https://openapi.naver.com/v1/papago/n2mt
쿼리 파라미터 : key(요청 변수명) - source(번역전언어) | value(입력값) - ko
target(번역언어) | en
text(번역할단어) | 개구리
(파라미터 세팅시 POST는 'Body'에 입력한다.)
=> 파라미터 세팅 후 POST 요청을 보내면 Body에 개구리의 번역 결과 "Frog"가
response 되는 걸 확인할 수 있습니다.
POST 메소드는 입력데이터를 직접 작성/수정하여 응답값을 확인할 수 있습니다. 예시의 번역 프로그램 또는 금칙어 시스템, 화이트/블랙 리스트 관리 등 변경되는 입력값에 대한 응답을 확인하고자 할때 사용해보시기 바랍니다.
=====
API 테스트시 일반적으로 API 설계 문서를 기준으로 요청(입력값)에 대한 서버 응답값 및 에러코드 검증을 수행합니다. 여기에 추가로
유저 시나리오 기반으로 핵심 API의 정상 동작 확인
API문서상 정의되지 않거나 또는 비정상적이거나 허용하지 않은 파라미터 호출시 에러 응답 확인
back-end / front-end간 설계된 로직에따라 응답값이 전송되는지 확인
까지 추가로 검증된다면 API 품질을 좀 더 향상할 수 있고 기대수준의 품질을 확보할 수 있습니다.
테스트 수행 전략 계획시 위 내용도 참고하여 커버리지를 산정해보시기 바랍니다.
다음 내용이 궁금하다면?
이미 회원이신가요?
2023년 10월 25일 오전 4:44
좋아요 ☺️ 😂 🤣
1️⃣ AI 이야기가 피드를 채우는 밀도가 날로 높아진다. UX 리서치 업계에서도, 부동산개발업계에서도 이 흐름은 예외가 없다. 흥미로운 건 AI에 대해 잘 모르는 사람일수록 AI를 더 신뢰하고 잘 받아들인다는 연구결과였다. AI 리터러시가 낮은 사람들은 AI를 그
... 더 보기샌
... 더 보기