소프트웨어 엔지니어로 일하면서 저는 대부분의 시간을 소프트웨어를 배포하고 운영하는 일을 반복하거나, 그 일을 대신해 줄 소프트웨어를 만드는 데 썼습니다.

OpenAI에서 처음 맡은 일은 클라우드 인프라 팀에서 애플리케이션 팀을 위한 새 Kubernetes 클러스터를 구축하는 것이었습니다. 클러스터 여러 개를 한꺼번에 준비하는 데 일주일을 썼습니다. 그동안 프라이빗 링크, 할당량, Terraform 관련 문제를 하나씩 해결했습니다. 그렇게 클러스터가 준비되면 곧바로 다음 묶음을 준비하기 시작했습니다.
다음으로 옮긴 API 팀에서는 최신 모델을 대상으로 평가를 실행했습니다. 채점기, 할당량, 구성, PyTorch 관련 문제를 하나씩 해결했습니다. 평가가 성공적으로 끝나고 모델이 출시되면 다음 모델에서 같은 일을 다시 시작했습니다.
이제는 이런 반복 작업에 Codex의 도움을 받습니다. 여전히 소프트웨어를 만들고, 더 정확히 말하면 Codex와 함께 만듭니다. 다만 작업마다 별도의 자동화 도구를 만드는 대신 다음과 같은 일을 할 수 있도록 Runme를 개발하고 있습니다.
- 워크플로우에 필요한 컨텍스트를 수집하고 선별해 정리합니다.
- 어떤 단계에 검토와 승인이 필요한지 명확히 하고 그 기준을 유지합니다.
- 이전 실행에서 얻은 교훈을 바탕으로 이후 Codex 실행을 개선합니다.
Codex로 평가 실행하기
OpenAI에서는 새 모델이나 기능을 출시할 때 평가를 실행해 예상대로 작동하는지 확인합니다. 평가를 실행할 때 저는 먼저 Runme 노트북을 만들고 목표를 간략히 적습니다.
# 목표: 현재 모델을 대상으로 평가 실행하기
- 이전 실행 기록을 검토해 워크플로우를 파악하세요.
- 이 노트북에 구체적인 계획을 작성하세요.
- 제가 계획을 검토하고 승인할 때까지 기다린 다음 작업을 시작하세요.
- 실행한 명령어와 그 출력, 결과를 어떻게 해석했는지 기록하세요.
그런 다음 Codex에 해당 노트북 셀의 내용을 목표로 삼으라고 요청합니다.
브라우저에 열려 있는 Runme 노트북에서 목표가 적힌 셀을 읽으세요. 그 내용을 목표로 삼아
노트북에 계획을 작성한 뒤, 제가 승인할 때까지 기다렸다가 작업을 시작하세요.
Codex는 노트북을 읽고 작업을 진행하면서 내용을 업데이트합니다. 계획이 준비되면 제가 검토하고 필요에 따라 수정합니다. 제가 도움이 되는 순간은 대개 Codex가 여러 선택지 중 하나를 골라야 할 때입니다. 어떤 평가 시스템을 쓸지, 새 인프라를 프로비저닝할지, 기존 리소스로 충분할지 함께 판단합니다.
Codex가 작업하는 동안 저는 때로는 휴대폰으로 진행 상황을 확인하고, 작업이 막히면 가끔 방향을 짚어 줍니다. 예를 들어 할당량을 모두 써서 개발 환경을 프로비저닝할 수 없다면 기존 환경을 재사용하거나 승인된 다른 방법을 찾아보라고 제안합니다.
이렇게 완성된 노트북에는 작업을 마치는 데 필요한 단계뿐 아니라 시도했지만 막혔던 방법도 남습니다. 마무리하기 전에 저는 Codex와 함께 대화 속에 묻히기 쉬운 결정들을 기록합니다. 특정 선택지를 고른 이유, 이제 어떤 접근 방식을 선호하는지, 다음에 같은 일을 맡는 사람이 무엇을 다르게 하면 좋을지 적어 둡니다.

Codex와 노트북에서 협업하기
Runme는 Codex와 함께 노트북을 만드는 오픈 소스 웹 애플리케이션입니다. Jupyter나 Colab처럼 Markdown, 코드 셀, HTML을 지원하므로 지침, 명령어, 결과, 표, 차트를 한 문서에 담을 수 있습니다.
노트북은 Google Drive에 바로 저장할 수 있습니다. 덕분에 별도의 문서 저장소를 도입할 필요 없이 동료들이 익숙한 방식으로 결과물을 찾고 공유할 수 있습니다.
Runme는 노트북마다 *.index.md라는 Markdown 인덱스 파일도 함께 생성합니다. Google Drive가 이 파일을 색인할 수 있어 에이전트가 예시나 운영 컨텍스트, 과거 실행 결과가 필요할 때 이전 노트북을 더 쉽게 찾을 수 있습니다.
에이전트는 WebMCP를 통해 Runme와 상호작용합니다. 애플리케이션이 로드되면 브라우저 측에 도구를 등록합니다. 에이전트는 이 도구로 다음 작업을 수행할 수 있습니다.
- Runme와 노트북 사용 지침을 읽습니다.
- 실행 범위가 제한된 JavaScript 프로그램으로 노트북 내용을 읽거나 업데이트합니다.
- 애플리케이션 문서를 읽습니다.
이 구조가 중요한 이유는 Runme가 정적 웹사이트로 제공되는 클라이언트 측 애플리케이션이기 때문입니다. 기존 방식의 MCP 엔드포인트를 제공하기 위해 서버를 추가하면 인프라가 늘고 운영이 복잡해지며 노트북 데이터를 처리하는 위치도 달라집니다. WebMCP를 사용하면 애플리케이션이 브라우저에서 직접 기능을 제공할 수 있습니다.
유용한 컨텍스트 수집하고 정리하기
평가를 실행할 때마다 작업 과정을 기록해 다음 실행을 수월하게 만들 기회가 생깁니다. 워크플로우를 개선할수록 더 유용한 컨텍스트가 쌓입니다. Codex는 이 컨텍스트를 활용해 다음번에 비슷한 작업을 더 효과적으로 처리할 수 있습니다.
에이전트에 도움이 될 정보는 일상 업무에서 이미 많이 생겨납니다. 다만 터미널 기록, Slack, 런북, 문서, 대시보드 곳곳에 흩어져 있습니다. 문서가 유용하다는 점은 쉽게 알 수 있습니다. 어려운 건 작업을 진행하면서도 부담 없이 문서를 남길 만큼 작성에 드는 수고를 줄이는 일입니다.
Runme는 작업 의도와 수행한 작업, 결정 사항, 결과를 하나의 문서에 담습니다. 지속 목표를 설정하면 Codex가 해당 작업에 계속 집중할 수 있습니다. 승인 요청 자동 검토 기능은 기존 권한 범위 안에서 검토 요건을 충족하는 작업을 검토할 수 있습니다.
계획이 실행할 만큼 준비됐는지, 중요한 선택에 사람의 판단이 필요한지는 여전히 제가 결정합니다. Codex는 반복 작업을 수행하고 그 과정을 제가 직접 쓸 때보다 더 자세히 기록합니다. 이렇게 만든 노트북은 공유하기 쉬워 한 사람의 채팅 기록에만 남을 뻔한 실무 지식을 동료들도 활용할 수 있습니다.
내 시간을 되찾기
저는 소프트웨어 엔지니어로 일한 시간의 상당 부분을 까다로운 기계가 원하는 대로 움직이게 할 주문을 알아내는 데 썼습니다. 클라우드 인프라와 Kubernetes가 등장했을 때는 소프트웨어 배포와 운영이 더 쉬워질 것으로 기대했습니다. 그런데 CNCF 랜드스케이프를 보면 알 수 있듯이, 그와 함께 방대한 도구 생태계도 생겼습니다. 한 가지 문제를 풀려다 보면 또 다른 문제가 생기곤 합니다. 그 문제를 푸는 데 필요한 도구를 고르고, 익히고, 운영해야 합니다.
제가 Codex에 매력을 느끼는 이유는 반복되는 운영 작업에서 도움을 받으면서도 중요한 결정에는 계속 직접 참여할 수 있기 때문입니다.
그렇게 제 시간을 조금이나마 되찾아 반려견들과 노는 데 쓸 수 있으면 좋겠습니다.