본문 바로가기
AI

터미널에 AI 날개 달기: OpenAI Codex CLI (그리고 그 이후)

by JavaPark 2025. 11. 5.

GitHub Copilot이나 ChatGPT의 코드 생성 기능을 터미널에서 바로 사용할 수 있다면 어떨까요? 복잡한 awk 명령어를 기억해내려 애쓰거나, 간단한 Python 스크립트를 짜기 위해 웹 브라우저를 열 필요가 없을 것입니다.

'OpenAI Codex CLI'는 공식적으로 명명된 단일 제품은 아니지만, 많은 개발자가 터미널 환경에서 OpenAI의 강력한 코드 생성 모델(초기 Codex 및 현재의 GPT-4/GPT-3.5)을 활용하는 도구와 방식을 통칭하는 개념이 되었습니다.

이 포스팅에서는 명령줄 인터페이스(CLI)에서 AI의 힘을 빌려 개발 생산성을 극대화하는 방법을 소개합니다.


1. OpenAI Codex에서 현재의 GPT 모델까지

먼저 용어를 정리할 필요가 있습니다.

  • OpenAI Codex: GitHub Copilot의 초기 버전을 구동했던, 코드에 특화된 AI 모델입니다. Python, JavaScript, Shell 스크립트 등 다양한 언어의 코드를 이해하고 생성하는 데 탁월했습니다.
  • 현재 (GPT-3.5/4): Codex의 기능은 gpt-3.5-turbo, gpt-4와 같은 더 강력하고 범용적인 최신 모델로 통합되었습니다. 우리는 이제 'Codex'라는 이름 대신 이 모델들을 'OpenAI API'를 통해 호출하여 훨씬 더 정교한 코드 생성 및 이해 작업을 수행합니다.

따라서 우리가 'Codex CLI'라고 부르는 것은 사실상 **'터미널에서 OpenAI API를 호출하는 도구'**를 의미합니다.

2. 왜 코딩에 AI CLI를 사용해야 할까요?

  • 신속한 명령어 생성: "현재 디렉토리에서 node_modules 폴더만 전부 삭제해 줘" 같은 자연어 요청으로 복잡한 쉘 명령어를 즉시 얻을 수 있습니다.
  • 코드 스니펫 생성: "Python으로 YAML 파일 읽는 함수 짜줘"처럼, 에디터를 열지 않고도 필요한 코드 조각을 바로 생성할 수 있습니다.
  • 명령어/코드 설명: 동료의 스크립트에 있는 알 수 없는 sed 명령어나 정규식을 바로 설명해 달라고 요청할 수 있습니다.
  • 스크립트 통합: 쉘 스크립트 파이프라인 내부에 AI를 통합하여, 로그 파일을 요약하거나 에러 메시지를 분석하는 등 동적인 작업을 자동화할 수 있습니다.

3. 터미널에서 OpenAI API를 사용하는 방법

가장 실용적인 두 가지 방법을 소개합니다.

방법 1: curl을 이용한 직접 호출 (DIY 방식)

가장 기본적인 방법은 curl을 사용해 OpenAI API 엔드포인트를 직접 호출하는 것입니다.

필수 요소: OPENAI_API_KEY 환경 변수가 설정되어 있어야 합니다.

# .bashrc 또는 .zshrc 에 추가
export OPENAI_API_KEY="sk-YOUR_API_KEY_HERE"

curl 호출 예시: (Git 상위 기여자 3명 찾는 명령어 요청)

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4",
    "messages": [{"role": "user", "content": "Write a git command to find the top 3 contributors to this repository"}]
  }'

단점:

  • 명령어가 매우 길고 복잡합니다.
  • 매번 JSON 형식의 요청 본문을 작성해야 합니다.
  • 반환된 JSON 응답에서 원하는 텍스트만 파싱(parsing)하기가 번거롭습니다.

방법 2: 전용 CLI 래퍼(Wrapper) 도구 사용 (강력 추천!)

이러한 curl의 불편함을 완벽하게 해결해주는 것이 바로 shell-gpt와 같은 오픈소스 CLI 래퍼 도구입니다. 이 도구들이야말로 'OpenAI Codex CLI'의 실질적인 구현체입니다.


4. 추천 도구: shell-gpt (sgpt) 깊이 파고들기

shell-gpt (또는 sgpt)는 터미널을 위한 강력한 AI 비서입니다.

설치

Python과 pip가 설치되어 있다면 간단하게 설치할 수 있습니다.

pip install shell-gpt

설정

설치 후, API 키를 설정해야 합니다. (위에서 OPENAI_API_KEY 환경 변수를 이미 설정했다면 이 단계는 건너뛰어도 좋습니다.)

sgpt --api-key sk-YOUR_API_KEY_HERE

핵심 활용 예시

1. 쉘 명령어 생성 (기본: sgpt)

자연어로 요청하면 쉘 명령어를 제안하고, 실행 여부를 묻습니다.

$ sgpt "list all running docker containers and their IP addresses"

> docker ps -q | xargs docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress}}'

[E]xecute, [D]escribe, [A]bort: E 
# E를 누르면 명령어가 바로 실행됩니다.

2. 코드 생성 (sgpt --code)

--code 플래그를 사용하면 바로 코드 스니펫을 생성해 줍니다.

$ sgpt --code "python function to check if a port is open using sockets"

import socket

def is_port_open(host, port):
    """
    Checks if a given port is open on a host.
    """
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(1)  # 1 second timeout
    try:
        s.connect((host, port))
        s.close()
        return True
    except (socket.timeout, socket.error):
        return False

# Example usage:
# if is_port_open("127.0.0.1", 80):
#     print("Port 80 is open")
# else:
#     print("Port 80 is closed")

3. 명령어/코드 설명 (파이프라이닝 활용)

파이프(|)를 사용해 기존 명령어의 설명을 요청할 수 있습니다.

$ echo "kubectl get pods -A -o wide" | sgpt "explain this command line"

This command line uses `kubectl`, the Kubernetes command-line tool.
- `get pods`: Retrieves information about pods.
- `-A` (or `--all-namespaces`): Lists pods from all namespaces in the cluster.
- `-o wide`: Outputs more information (e.g., node, IP address) than the default format.
In summary, it fetches a detailed list of all pods running across all namespaces in your Kubernetes cluster.

4. 대화형 채팅 (sgpt --chat)

특정 주제에 대해 대화를 이어갈 수 있습니다. (예: 쿠버네티스 디버깅)

$ sgpt --chat kube_debug "My pod 'my-app-123' is in CrashLoopBackOff. What are the first 3 steps to debug?"

A `CrashLoopBackOff` status means your pod is starting, crashing, and being restarted repeatedly. Here are the first 3 essential steps to debug:

1.  **Check the Logs:** Get the logs from the *previous* (crashed) instance of the pod.
    `kubectl logs my-app-123 --previous -n <your-namespace>`
    This will usually tell you exactly why the application inside the container is failing.

2.  **Describe the Pod:** Get detailed events and configuration.
    `kubectl describe pod my-app-123 -n <your-namespace>`
    Look at the 'Events' section at the bottom. It might show issues like "ImagePullBackOff" (image not found) or OOMKilled (out of memory).

3.  **Check Container Command/Args:** Ensure the `command` and `args` in your pod's YAML definition are correct. A simple typo here (e.g., wrong file path) is a common cause.

결론

'OpenAI Codex CLI'라는 공식 제품은 없지만, OpenAI APIshell-gpt 같은 훌륭한 래퍼 도구를 통해 그 개념은 이미 완벽하게 구현되었습니다.

터미널 작업은 개발 워크플로우의 핵심입니다. 이 핵심 영역에 AI를 통합함으로써, 우리는 더 적은 노력으로 더 많은 것을 성취하고, 반복적인 검색 대신 본질적인 문제 해결에 집중할 수 있습니다.

지금 바로 shell-gpt와 같은 도구를 설치하고 여러분의 터미널을 업그레이드해 보세요.