이 글에는 제휴 링크가 없고 OpenAI·앤트로픽·구글과 아무 관계가 없습니다. 제가 직접 만든 중계기의 개발 기록을 바탕으로 썼습니다. 삽화는 GPT 이미지 생성, 도식은 직접 제작했습니다.
중계기란 무엇인가 — 콘센트 모양이 다른 나라에서 쓰는 만능 어댑터 (LLM 중계기 개발기)
해외여행 가방에 꼭 챙기는 물건이 있죠. 여행용 멀티 어댑터예요. 나라마다 콘센트 구멍 모양이 다른데, 이 작은 상자 하나만 있으면 내 충전기를 어디에든 꽂을 수 있어요.
겉으로는 플러그 덩어리 하나지만, 안에서는 하는 일이 나뉘어 있어요. 내 충전기를 받아 주는 구멍이 있고, 나라별 모양으로 바꿔 주는 부품이 있고, 제품에 따라서는 한꺼번에 전기가 너무 많이 흐르지 않게 막는 장치도 들어 있어요.
이 글은 LLM 중계기 개발기의 2편입니다. 1편에서는 여러 AI를 주소 하나 뒤에 세우는 중계기를 왜 만들었는지 이야기했어요. 오늘은 그 중계기의 뚜껑을 열어 안에서 무슨 일이 일어나는지 들여다봅니다.

결론 요약
- 질문 하나가 지나는 길 — 프로그램이 보낸 질문은 중계기 안에서 창구 → 교통정리 → 어댑터를 거쳐 AI에 닿고, 답은 조금씩 흘려보내기 칸을 지나 돌아옵니다
- 창구는 두 개 — 사람이 AI를 연결하고 상태를 보는 관리 화면, 프로그램이 질문을 보내는 API 창구가 있어요. API 창구는 스위치로 켜고 끄며, 처음 실행할 때는 꺼진 채로 시작합니다
- 처음부터 지키는 것 — 두 창구 모두 내 컴퓨터 안에서만 열리고, 열쇠는 암호화해 내 컴퓨터에만 두며, 기록에는 열쇠와 질문 내용을 남기지 않아요
🧭 1. 질문 하나가 지나가는 길
1편에서 프로그램 쪽이 할 일은 “AI 주소를 중계기 주소로 바꾸는 한 줄”이 전부라고 했어요. 그렇다면 그 주소로 들어간 질문은 중계기 안에서 어떻게 될까요?
중계기 안은 맡은 일에 따라 네 칸으로 나뉘어 있어요. 실제 프로그램 파일도 이 칸대로 나뉘어 있습니다.
- ① 창구 — 질문을 받아 형식을 확인하고, 어느 AI에게 보낼지 정해요
- ② 교통정리 — 지금 바로 보낼지, 줄을 세워 기다리게 할지 정해요
- ③ 어댑터 — 질문을 그 AI가 알아듣는 방식으로 바꿔 전달해요
- ④ 조금씩 흘려보내기 — AI가 답을 쓰는 대로 프로그램에 바로바로 넘겨요

여행용 어댑터에 빗대면 ①은 충전기를 꽂는 구멍, ②는 과부하를 막는 장치, ③은 나라별 모양으로 바꾸는 부품이에요. ④는 전기 어댑터에는 없는 칸인데, AI가 답하는 방식 때문에 필요해졌어요. 하나씩 볼게요.
🚦 2. 창구와 교통정리 — 받고, 차례를 정한다
창구는 프로그램이 보낸 질문을 맨 먼저 받는 곳이에요. 프로그램은 claude/opus처럼 ‘AI 이름/모델 이름’ 모양으로 누구에게 물을지 적어 보내요. 창구는 이 이름을 보고 어느 AI에게 보낼지 정합니다.
보낼 수 없는 질문이면 그 자리에서 이유를 담아 돌려보내요. “그 AI는 아직 열쇠를 넣지 않았거나 로그인하지 않았다”, “그런 모델은 없다”, “질문이 너무 크다”처럼 프로그램이 알아들을 수 있는 이유로요. 1편에서 프로그램마다 다시 만들어야 했던 ‘오류 정리’를 이 칸이 한 번에 맡는 셈이에요.
교통정리는 중계기의 한가운데에 있어요. AI마다 한꺼번에 감당할 수 있는 질문 수가 다르기 때문이에요. 예를 들어 제 중계기는 기본 설정에서 Codex와 Claude에 각각 동시에 3건까지 보내고, 그중 같은 모델에는 한 번에 1건씩만 보내요. 자리가 없으면 질문은 줄을 서서 차례를 기다리고, 줄이 너무 길거나 너무 오래 기다리면 “지금은 붐빈다”고 알려 주며 돌려보내요.
이 교통정리가 왜 그렇게 중요한지, 정리를 잘못하면 어떤 일이 생기는지는 3부에서 따로 다룹니다.
🔌 3. 어댑터와 흘려보내기 — AI의 말로 바꾸고, 답은 오는 대로
차례가 온 질문은 어댑터로 가요. Codex와 Claude는 원래 사람이 터미널에서 쓰는 명령어 도구이고, 다른 AI는 인터넷 너머의 주소에 열쇠(API 키)를 보여 주고 부르는 방식이에요. 부르는 방법도, 답을 돌려주는 모양도 제각각이죠.
어댑터는 AI마다 하나씩 있어요. 중계기의 공통 질문을 그 AI의 방식으로 바꿔 전달하고, 돌아온 답을 다시 공통 모양으로 바꿔요. 그래서 새 AI를 붙이고 싶으면 어댑터 파일 하나를 만들고 목록에 한 줄 등록하면 됩니다. 어댑터가 꼭 지켜야 하는 약속은 2부에서 자세히 이야기할게요.
어댑터를 실제로 돌리는 부분은 그 옆에서 스톱워치와 장부를 들고 있어요. 질문을 보낸 뒤 첫 글자가 오기까지 얼마나 걸렸는지, 토큰을 얼마나 썼는지, 답이 왜 끝났는지를 적어 둡니다. 이 기록은 4절의 관리 화면에서 볼 수 있어요.
마지막 칸은 조금씩 흘려보내기예요. AI는 답을 한 번에 다 써서 주지 않고 한 조각씩 써 내려가요. 채팅 화면에서 답이 타자 치듯 나타나는 게 그 때문이에요. 중계기는 조각이 오는 대로 바로 프로그램에 넘겨서, 긴 답도 앞부분부터 곧바로 볼 수 있게 해요. 이런 방식을 스트리밍이라고 불러요.
AI가 오래 생각하느라 한동안 아무 글자도 보내지 않을 때도 있어요. 그러면 프로그램은 연결이 끊긴 건지 헷갈리겠죠. 그래서 중계기는 답을 기다리는 동안 15초마다 “아직 연결돼 있어요”라는 신호를 따로 보내요.
🪟 4. 창구는 두 개 — 사람용과 프로그램용
지금까지 말한 창구는 프로그램이 질문을 보내는 창구예요. 중계기에는 창구가 하나 더 있어요. 사람이 보는 관리 화면이에요.

사람용 창구, 관리 화면에서는 이런 일을 해요.
- AI 연결 — 쓸 AI를 고르고 연결 버튼을 눌러요. 열쇠로 쓰는 AI는 열쇠를 넣고 연결하면, 그 열쇠가 실제로 통하는지 AI 쪽에 확인해요
- 진단 — Codex·Claude처럼 명령어 도구로 쓰는 AI는 연결할 때 ① 컴퓨터에 설치돼 있나 ② 로그인돼 있나 ③ 실제로 한 번 불러서 답이 오나를 차례로 확인해요. 어느 단계에서 막혔는지에 따라 설치나 로그인 안내가 화면에 떠요
- 스위치 — 프로그램용 창구를 열고 닫아요
- 기록 — 요청마다 기록이 한 줄씩 쌓여요(아래에서 설명)
프로그램용 창구, API는 프로그램이 질문을 보내는 곳이에요. 1편에서 말한 ‘OpenAI 호환’ 형식을 쓰고, 관리 화면의 스위치나 화면 구석 트레이 아이콘으로 켜고 꺼요. 꺼 두어도 관리 화면과 연결 설정은 그대로 동작합니다.
처음 실행할 때의 모습도 정해 두었어요. 만든 지 한 달쯤 된 8월 중순 업데이트(v0.1.67)부터, 처음 실행하면 프로그램용 창구를 꺼진 채로 시작해요. 막 설치한 중계기에는 연결된 AI가 하나도 없어서, 창구를 열어 봐야 빈 목록만 보여 줄 테니까요. AI를 연결한 뒤 스위치를 켜면 되고, 그다음부터는 마지막에 켜 뒀는지 꺼 뒀는지를 기억했다가 다음 실행 때 그대로 돌려놓아요. 이미 쓰고 있던 중계기는 원래처럼 켜진 채로 시작하게 남겨 두었어요.
기록 한 줄에 담기는 것
관리 화면 아래쪽에는 AI별 기록이 쌓여요. 질문이 들어올 때 한 줄, 답이 끝날 때 한 줄이에요. 답이 끝날 때의 줄에는 이런 것이 적혀요.
| 기록 | 뜻 |
|---|---|
| 토큰 (질문 → 답, 합계) | 토큰은 AI가 글을 잘게 나눠 세는 단위예요. 질문과 답에 각각 몇 개를 썼는지 |
| 첫 글자까지 걸린 시간 | 질문을 보내고 답의 첫 조각이 오기까지. 흔히 TTFT라고 불러요 |
| 줄 선 시간 | 교통정리 칸에서 차례를 기다린 시간(기다렸을 때만) |
| 전체 시간 | 질문을 보낸 때부터 답이 끝날 때까지 |
| 끝난 이유 | 답이 스스로 끝났는지, 정해 둔 길이를 다 써서 잘렸는지 |
끝난 이유가 ‘길이를 다 써서 잘림’이면 그 줄은 경고로 표시돼요. 겉보기엔 멀쩡히 끝난 답이 사실은 중간에 잘린 것일 수 있다는 뜻이거든요. 이 이야기는 4부에서 다시 꺼낼게요.
🔒 5. 처음부터 지키는 세 가지
중계기는 여러 AI의 열쇠를 한곳에 모아 두는 프로그램이라, 처음부터 몇 가지를 기본값으로 정해 두었어요.

- 내 컴퓨터 안에서만 열린다 — 관리 화면도 프로그램용 창구도 내 컴퓨터 안에서만 접속할 수 있어요. 같은 와이파이에 있는 다른 기기나 인터넷에서는 들어올 수 없어요
- 열쇠는 암호화해서 내 컴퓨터에만 둔다 — 관리 화면에 넣은 API 키는 저장하는 순간 암호화돼(AES-256-GCM이라는 널리 쓰이는 방식) 내 컴퓨터의 파일 하나에만 남아요. 다른 곳으로 보내거나 원격에 따로 보관하지 않아요. Codex·Claude처럼 로그인해서 쓰는 AI는 원래 쓰던 로그인을 그대로 씁니다
- 기록에는 열쇠와 질문 내용을 남기지 않는다 — 기록에는 모델 이름, 메시지 개수, 토큰 수, 시간 같은 정보만 남겨요. 혹시 오류 메시지에 열쇠가 섞여 나오면 앞 세 글자만 남기고 가려요. 프로그램에 돌려주는 오류 메시지에도 열쇠 값은 담지 않아요
정리
① 중계기 안에서 질문은 창구 → 교통정리 → 어댑터를 지나 AI에 닿고, 답은 오는 대로 조금씩 흘러 돌아와요 ② 창구는 사람용 관리 화면과 프로그램용 API 두 개예요. 관리 화면에서 AI를 연결·진단하고 요청별 기록을 보며, API 창구는 처음엔 꺼진 채로 시작해요 ③ 두 창구 모두 내 컴퓨터 안에서만 열리고, 열쇠는 암호화해 두고, 기록에는 열쇠와 질문을 남기지 않아요 — 다음 편은 “‘OpenAI 호환’은 왜 표준 콘센트가 됐나”입니다
중계기를 왜 만들었는지는 1편에 있어요.
2026년 10월 1일 기준입니다. 제가 만든 중계기의 개발 기록을 바탕으로 썼고, 특정 기업·서비스의 공식 입장이 아닙니다.