Proxyman으로 NodeJS의 OpenAI API 디버깅하기
이 튜토리얼에서는 OpenAI API(/chat/completions)를 호출하는 간단한 NodeJS 서버와 채팅 클라이언트를 만들고, Proxyman으로 HTTP/HTTPS 트래픽을 확인하는 방법을 보여 드립니다. OpenAI를 사용할 때 내부에서 어떤 일이 일어나는지 디버깅하고 싶을 때 유용합니다.
이 튜토리얼에서 다룰 내용은 다음과 같습니다:
- Proxyman macOS 설정하기
- Express JS로 OpenAI를 호출하는 간단한 NodeJS 서버 개발하기
- NodeJS 서버로 메시지를 보내는 간단한 HTML 채팅 클라이언트 만들기
- ✅ Proxyman으로 OpenAI의 HTTP/HTTPS 요청과 응답 캡처하기

1. 사전 준비 사항
- Proxyman macOS (Proxyman.com에서 다운로드)
- OpenAI
2. Proxyman 설정하기
- Proxyman.com에서 Proxyman을 설치하세요.
- Proxyman을 열고 Certificate Menu → Install Certificate for macOS로 이동한 다음, 안내에 따라 인증서를 설치하세요.

이제 Proxyman이 macOS의 모든 HTTPS 트래픽을 가로챌 준비가 되었습니다.
3. ChatGPT 샘플 앱 시작하기
ChatGPT API를 호출하는 간단한 RESTful 서버가 필요합니다.
GitHub에서 소스 코드를 클론하여 실행해 봅시다.
git clone https://github.com/ProxymanApp/chatgpt-nodejs-app
cd https://github.com/ProxymanApp/chatgpt-nodejs-app
npm install
.env파일을 열고OPENAI_API_KEY를 본인의 OpenAI API 키로 바꾸세요. 키는 OpenAI Dashboard에서 발급받을 수 있습니다.
OPENAI_API_KEY=your_openai_api_key
- NodeJS 서버를 시작하세요
npm run dev
그러면 3000번 포트에서 NodeJS 서버가 시작되고, http://localhost:3000에서 정적 HTML 파일을 제공합니다.
GPT와 대화해 보며 어떻게 동작하는지 확인해 보세요.

기본 구조는 다음 다이어그램과 같습니다:

- 채팅 클라이언트는 사용자 메시지를 담아 NodeJS 서버에 POST /chat 요청을 보냅니다.
- NodeJS 서버는 OpenAI API(
https://api.openai.com/v1/chat/completions)를 호출합니다. - NodeJS 서버는 응답을 채팅 클라이언트로 돌려줍니다.
- 채팅 클라이언트가 메시지를 화면에 표시합니다.
채팅 클라이언트에서 OpenAI API를 직접 호출하지 않는 이유는 채팅 클라이언트에 OpenAI API 키를 노출하지 않기 위해서입니다.
코드를 이해하려면 server.js와 index.html 파일을 살펴보세요.
질문
1. NodeJS 서버가 https://api.openai.com/v1/chat/completions로 OpenAI에 요청하는 과정을 보고 싶어요
답변:
다행히 Proxyman은 클릭 한 번으로 채팅 클라이언트에서 NodeJS 서버로 가는 HTTP/HTTPS 트래픽을 캡처할 수 있습니다.
- Proxyman → Setup Menu → Automatic Setup을 열고, 좋아하는 터미널을 선택하세요(저는 iTerm을 씁니다). 그런 다음
Open new Terminal버튼을 클릭하세요.

- 이 터미널에서 NodeJS 서버를 실행하세요
npm run dev
- 웹 브라우저로 돌아가 http://localhost:3000에 접속해 ChatGPT 샘플 앱을 여세요.
- GPT와 몇 번 대화해 보며 어떻게 동작하는지 확인하세요.
- Proxyman으로 돌아가면 채팅 클라이언트에서 NodeJS 서버로 가는 HTTP/HTTPS 트래픽이 보입니다.

보시다시피 Proxyman은 NodeJS 서버가 OpenAI를 호출할 때의 HTTP/HTTPS 트래픽도 자동으로 캡처합니다.
2. 채팅 클라이언트의 /chat 요청 세부 정보를 보고 싶어요
답변:
localhost:3000에 접속해 몇 번 대화하면, Proxyman은 기본 설정으로는 localhost:3000 트래픽을 캡처하지 못합니다. 이유는 localhost 트래픽이 모두 프록시를 거치지 않기 때문입니다. macOS 시스템이 그렇게 동작합니다.
최신 Proxyman 버전에서는 Setup → Automatic Setup에서 준비된 Chrome 창을 열 수 있습니다. 브라우저의 localhost 트래픽을 캡처하는 가장 쉬운 방법입니다. 이 설정을 사용할 수 없다면, 아래의 /etc/hosts 방법도 여전히 유용한 대안입니다.
sudo vim /etc/hosts
파일에 다음 줄을 추가하세요:
127.0.0.1 proxyman.debug
::1 proxyman.debug
proxyman.debug는 원하는 도메인 이름으로 바꿔도 됩니다.
파일을 저장하고 편집기를 종료하세요.
이제 Google Chrome을 열고 http://proxyman.debug:3000에 접속해 몇 번 대화하면 채팅 클라이언트의 /chat 요청 세부 정보를 확인할 수 있습니다.

자세한 내용은 localhost 서버에서 요청이 보이지 않을 때를 참고하세요.
4. 다음 단계
이 튜토리얼에서는 Automatic Setup을 사용해 Node.js 서버에서 OpenAI로 가는 HTTP/HTTPS 트래픽을 캡처하는 방법을 소개했습니다. 샘플은 Chat Completions 엔드포인트를 사용합니다. 최신 프로젝트는 대신 Responses API를 사용할 수 있습니다. 두 호출 모두 api.openai.com으로 가기 때문에 Proxyman은 둘 다 캡처합니다.
OPENAI_API_KEY는 서버에만 두고, 소스 관리 저장소 밖에 보관하며, 브라우저 코드에는 절대 넣지 마세요. Proxyman 로그를 내보내거나 공유하기 전에 Authorization 헤더와 비공개 프롬프트 또는 응답 데이터를 삭제하세요. 키가 노출되었다면 OpenAI 대시보드에서 키를 새로 발급해 교체하세요.
Automatic Setup은 다음 언어와도 함께 동작합니다:
- NodeJS
- Python
- Ruby
- PHP
- Go
궁금한 점이 있다면 Proxyman 문서를 확인해 주세요.
Proxyman은 고성능 macOS/Windows/Linux 앱으로, 개발자가 iOS 기기, iOS 시뮬레이터, Android 기기의 HTTPS 트래픽을 캡처할 수 있게 해 줍니다.
https://proxyman.com에서 받아 보세요.
