Restful API 스펙 문서 보면서 Data fetching 함수 작성하다가 endpoint 오타내기.. 저만 경험해봤나요? 😇
어떤 기능을 구현할 때 흔히들 아래와 같은 플로우로 진행하게됩니다.
다른 분들도 저와 비슷한 과정을 거치실 것이라고 생각합니다. 더 좋은 프로세스로 업무를 하시는 분들도 계시겠지만요!
4번 과정에서 프론트엔드 개발자는 API spec 문서를 보면서 Data fetching 함수를 작성하게 됩니다.
메소드, 경로, 헤더, 상황별 응답 등…
전달받은 API spec 문서를 살펴보는건 설레면서도 꼼꼼히 살펴야지 하는 긴장감을 주는 과정인 것 같습니다.
저는 실무에서 Swagger와 Notion을, 사이드 프로젝트에서는 Postman Collections과 Swagger를 주로 사용하고 있습니다.
TypeScript를 사용하면서 API spec에 맞춰서 request payload, response에 대한 타입들을 선언해두는것은 상당히 귀찮은 일이었는데요..!
quicktype 같은 json to TypeScript를 제공하는 웹사이트를 활용하면서 귀찮음을 조금씩 덜어내던 중이었습니다.
하지만 여전히 많은 부분의 타입을 직접 작성해야했습니다.
그런 중에 OpenAPI Spec(OAS) Generator라는 신세계를 맛보게 되었는데요..!
OAS → https://www.openapis.org/
OAS는 HTTP 기반 API에 대해서 기계, 사람이 모두 이해할 수 있는 문서를 작성하는 규칙을 명명한 것입니다.
예를 들어, swagger 문서에서 아래 이미지처럼 링크를 누르면 OAS 문서로 연결되며, Text로 구성되어 있는 JSON 혹은 yaml파일이 OAS(Open Api Specification)가 됩니다.
OAS는 API의 json/yaml 문서이고…
그러면 OAS Generator는 무엇일까요? → OAS yaml/json 파일로 Source code를 생성해주는 도구입니다.
이 것은 어떤 이점들을 가져올까요?
너무 유용하지 않나요! 🤭
이제 실무에 적용했던 과정을 남겨보겠습니다.
openapi-generator-cli를 전역에 설치하고 버전을 확인해보겠습니다.
yarn add @openapitools/openapi-generator-cli -g
openapi-generator-cli version //버전 확인oas generator에는 여러 종류가 있는데, 프론트엔드에서는 typescript-axios와 typescript-fetch를 많이 사용합니다.
저는 CSR환경에서 axios&tanstack-query조합을 사용하고 있어서 typescript-axios를 선택하겠습니다.
oas(OpenAPI spec)에 따라 파일 생성 (TypeScript)
openapi-generator-cli generate -i ./src/json/api-spec.json -g typescript-axios -o ./src/generate각 flag들의 의미는 아래와 같습니다.
-i 입력 파일 경로
-g 사용할 generator
-o 생성된 파일이 저장 될 출력 디렉토리
generate 폴더에 아래와 같은 파일들이 생성됩니다.
api.ts파일을 확인해보면…
이렇게 되면 스펙에 정의된 대로 API를 구현하게 되어 서버/클라이언트 간의 일관성을 보장할 수 있게됩니다.
또한, API 변경 사항을 스펙에서 관리하여 변경된 내용을 기반으로 자동으로 코드를 재생성할 수 있어 유지보수가 용이하게됩니다.
다음 번에는 mustache문법을 사용해 템플릿을 만들어 자동 생성되는 코드를 좀 더 사용하기 편리하게 생성해보도록 하겠습니다~