에필로그 - MyGPT

생각보다 빨리 ESP32 최신 SDK 적용에 따른 리팩토링 작업 시기가 앞당겨졌다. 작업을 빠르게 진행하려고 Codex를 적극적으로 쓰기 시작했는데, 개인 계정의 토큰이 녹아가는 게 눈에 보였다. 그래서 회사에서 제공하는 Claude 대신 내가 익숙한 Codex를 쓰는 쪽으로 변경 신청했다.

 

문제는 회사 계정으로 로그인한 뒤였다. VS Code와 데스크톱 앱까지 회사 계정으로 같이 전환되면서 로그인 상태가 꼬이기 시작했다. 업무는 회사 계정으로 하면 되지만, 회사에서 관리하는 계정과 개인적인 ChatGPT 대화까지 굳이 섞고 싶지는 않았다. 사적인 대화와 개인 작업은 그냥 내 개인 계정으로 쓰고 싶었다.

ChatGPT의 제안한 초간단 코드

브라우저를 따로 띄우는 수밖에 없나 싶어서 ChatGPT와 방법을 검토하다가, Chrome에 별도 프로필을 지정하고 앱 모드로 실행하는 방법을 먼저 확인했다.

import subprocess
from pathlib import Path

profile_dir = Path.home() / "Library/Application Support/GonGPTProfile"

subprocess.Popen([
    "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
    f"--user-data-dir={profile_dir}",
    "--app=https://chatgpt.com",
])

브라우저에서 ChatGPT 실행하지 않고 독립 앱처럼 실행되는 것을 확인했다. 즉, 회사에서 사용하는 로그인 환경과 별도로 개인 ChatGPT 세션을 띄울 수 있었다. 여기까지만 했으면 정말 10분짜리 작업이었다.

초간단 코드의 한계

그런데 막상 써보니 몇 가지 소소한 부분이 계속 눈에 밟혔다. Dock에는 MyGPT가 아니라 Chrome 아이콘이 보였고, 실행 중인 아이콘을 다시 누르면 내가 원한 전용 앱 느낌과는 다른 동작도 나왔다. 이왕 만드는 거 브라우저를 하나 더 띄우는 수준이 아니라, 그냥 별도 앱처럼 쓰고 싶어졌다.

 

그래서 외부 Chrome 실행 방식에서 PySide6 + QtWebEngine 구조로 방향을 바꿨다. 그 뒤로 아이콘, 로그인 세션 유지, 복사, 새로고침, 패키징 같은 자잘한 부분을 하나씩 확인하다 보니 10분짜리라고 생각했던 작업이 어느새 두 시간짜리가 됐다. 중간에는 아이콘 포맷이나 QtWebEngine 동작처럼 예상하지 못했던 문제도 있었다. Codex로 구현과 검증을 반복하고 실제 앱에서 직접 확인하면서, 필요 없는 우회 방법은 걷어내고 최소한의 앱 형태로 정리했다.

웹이 할 일, MyGPT가 할 일

처음에는 새 대화나 사이드바 같은 기능까지 MyGPT에서 따로 연결하려고 했다. 그런데 실제로 확인해보니 ChatGPT 웹 자체에 이미 새 대화, 사이드바, 검색, 단축키 목록 기능이 있었고 QtWebEngine에서도 그대로 동작했다. 결국 웹이 이미 제공하는 기능은 웹에 맡기고, MyGPT는 새로고침과 화면 확대·축소처럼 wrapper에 필요한 기능만 담당하는 쪽으로 정리했다. 괜히 ChatGPT 화면 구조를 따라가며 다시 구현할 이유가 없었다.

이제 회사에서도 MyGPT

이제 회사에서는 업무용 Codex와 VS Code는 회사 계정으로 사용하고, 사적인 대화나 개인 작업은 MyGPT에서 내 개인 ChatGPT 계정으로 분리해서 사용할 수 있다. 개인 ChatGPT를 쓰려고 매번 별도의 브라우저 창을 관리할 필요도 없어졌다. 거창한 프로그램은 아니다. 시작은 ChatGPT 웹을 별도 프로필로 띄우는 짧은 Python 코드였다.

 

다만 몇 가지 소소하게 거슬리는 부분을 그냥 지나치지 못한 덕분에 10분짜리 작업이 2시간을 넘겼다.

역시... 세상은 내 뜻대로 되는건 없다...;;