Insomnia 와 HTTPie Desktop

개인적으로 API 보안 테스팅이나 개발할 때 Insomnia란 도구를 사용합니다. (제가 예전에 한번 소개했었어요)

그리고 보통 CLI 기반으로 웹 요청을 전송할 땐 HTTPie란 도구를 굉장히 자주 사용하는데, 알고보니 HTTPie도 API 테스팅을 위한 도구인 HTTPie Desktop을 제공하고 있었습니다. 일단 첫인상은 좋았는데 한번 면밀히 비교해보고, 도구 세팅을 바꿔볼만한 내용일지 궁금해서 밤에 자세히 살펴봤습니다.

오늘은 Insomnia와 HTTPie에 대한 글을 작성해볼까 합니다 :D

TL;DR

  • 개인적으로 Insomnia가 더 쓰기 좋은 도구라고 생각함 😎
  • 단 당분간 개발은 Insomnia, 보안테스팅은 HTTPie Desktop을 사용할 것 같음 🤔
  • Why?
    • 여러 포맷, 테스트를 위한 기능은 Insomnia쪽이 훨씬 좋음
    • 단 HTTPie의 HTTP Req(Preview)는 보안 테스팅과 밀접하기 때문에 매력적임

좌측: HTTPie Desktop / 우측 Insomnia

Diff

UI

레이아웃 구성은 거의 비슷합니다. 다만 HTTPie가 Preview라고 해서 Request에 대한 Preview를 추가로 보여주고 있습니다. (Resp preveiw는 둘다 Resp 탭에서 전환하거나 추가로 보여줄 수 있습니다)

Collection + Req + Preview(Req) + Res

Collection + Req + Res

Authentication

보통 API Key 기반 인증이 많으니 쓰는데는 두 도구 모두 편리합니다. 다만 지원하는 폭은 Insomnia가 훨씬 넓어서 OAuth 등을 처리 해야하는 경우 Insomnia가 훨씬 편리합니다.

  • HTTPie Desktop
    • Basic auth
    • Bearer Token
    • API Key
  • Insomnia
    • API Key
    • Basic Auth
    • Digest Auth
    • OAuth 1.0
    • OAuth 2.0
    • Microsoft NTLM
    • AWS IAM v4
    • Bearer Token
    • Hawk
    • Atlassian ASAP
    • Netrc File

Insomnia의 OAuth2

Body Type

Body Type은 거의 비슷합니다. 다만 이것도 Insomnia가 살짝 더 지원 폭이 넓습니다.

  • HTTPie Desktop
    • Text (JSON/YAML/XML/Raw)
    • Form
    • File
    • GraphQL
  • Insomnia
    • Multipart Form
    • Encoded Form
    • GraphQL
    • Text (JSON/XML/YAML/EDN/Plain/Other)
    • Binary

Generate Code

둘 다 여러가지 언어나 명령으로 치환하는 로직을 가지고 있습니다. 물론 Insomnia가 더 지원 범위가 넓습니다.

HTTPie Desktop의 매력

현재까지 내용으론 Insomnia가 훨씬 지원 범위가 넓기 때문에 Insomnia의 장점이 훨씬 많습니다. 다만 HTTPie의 장점이 없는 것은 아닌데, 바로 Preview의 존재에 있습니다.

Req 정보(Params, Headers 등)에서 추가된 내용이 Preview 탭에 HTTP Request 로 치환되서 보여집니다. API 개발에서는 크게 이점이 없더라도, 보안 테스팅에선 BurpSuite나 ZAP으로 바로 복사하여 사용하기 좋기 때문에 보안테스팅에서는 편리함이 좀 있다고 봅니다. (물론 Proxy를 설정해서 사용하는 경우 크게 의미는 없습니다)

예를들어 HTTP Request Smuggling과 같은 공격을 테스트할 땐 Body에 원하는 요청을 넣고 Preview로 완성된 Request를 볼 수 있어서 굉장히 맘에 들었습니다.

그래도 Insomnia

HTTPie Desktop이 Req와 Res에 중점이 맞춰져 있다면 Insomnia는 좀 더 크게 Design, Debug, Test라는 단계에 맞춰서 기능들이 구성되어 있습니다.

  • Design: OpenAPI 등의 처리
  • Debug: Req / Res 기반의 처리 (위에서 살펴본 기능들)
  • Test: Unit 테스트를 위한 Test Task

그래서 API를 만들고 유지보수 하는데 있어서는, Insomnia라는 하나의 도구로 커버할 수 있는 부분이 많습니다. 그리고 이러한 부분들은 보안테스팅에서도 쉽게 API Spec을 읽어오고, 테스팅 과정을 자동화 할 수 있어서 좋은 결과를 만드는데 도움을 줄 수 있습니다.

Conclusion

HTTPie Desktop을 살펴보고 싶어서 비교하다 보니 결국 Insomnia의 장점이 더 부각된건 사실입니다. 보안테스팅도 사실 Insomnia가 HTTP 말고도 gRPC, WebSocket 등도 지원하기 때문에 더 유연하죠.

제가 본업은 Security Engineer이지만 취미, 실무 모두 개발의 비중이 절대 작지는 않습니다. 결과적으로 저는 아마 그대로 Insomnia를 주력을 사용할 것 같네요. 다만 점점 쌓여가는 API 리스트가 많아질 수록 관리가 어려운건 사실이라, 가능하다면 Insomnia는 개발쪽 위주로, HTTPie Desktop은 보안 테스팅 위주로 나눠볼까 합니다.

Insomnia, HTTPie Desktop 둘 다 정말 편리한 도구니깐, 꼭 한번 써보시길 추천드려요 :D