Codex 업무 자동화 예제 | Python 이미지 리사이즈 프로그램 만들기
오늘 처음으로 Codex를 설치해 보았다.
무료 플랜이라 사용할 수 있는 모델이 '5.6 Terra' 만 가능했다.
무료 플랜으로 만들 수 있는 실제로 사용할 수 있는 작은 자동화 도구를 추천해 달라고 했더니,
그 중에 이미지 리사이즈 자동화가 있었다.
그래서 다시 채팅으로 '이거 하고 싶은데 어떻게 해야 해?' 라고 물어보았더니,
아래와 같이(프로젝트 목표에서 마무리까지) 자세하게 설명해 주었다.
내가 한 것은 ChatGPT가 알려준 프롬프트대로 Codex에게 일을 시킨 거 밖에 없는데,
아래의 프로젝트 목표와 똑 같은 결과물은 아니었지만, 괜찮은 결과물이 나왔다.
이미지 resize하고, webp 변환과,
이미지 압축(TinyPNG 같은 기능)까지 해봤는데,
남아있는 토큰을 봤더니 25%가 남았다.
한 달 동안 쓸 수 있는 토큰의 75%를 쓴거다.
토큰이 5시간마다 리셋이 되었으면 불가능했을텐데,
한달마다 리셋되도록 풀려서 정말 맛보기로 간단한 것은 만들어 볼 수 있을 거 같다.
결과 코드는 github에 올려 놓았다.
Python으로 구현되었으며 자세한 설치 방법과 사용법은 README을 보면 된다.
| Codex 실행 화면 |
프로젝트 목표
예를 들어 다음과 같은 이미지 폴더가 있다고 가정한다.
images/
photo1.jpg
photo2.png
logo.webp
다음과 같이 명령어를 실행하면
python resize.py images --width 1200
자동으로 output 폴더에 리사이즈된 이미지를 생성한다.
output/
photo1.jpg
photo2.png
logo.webp
즉, 여러 장의 이미지를 한 번에 원하는 크기로 변경하는 자동화 프로그램을 만드는 것이 목표이다.
1단계. 프로젝트 생성
먼저 간단한 프로젝트 구조를 만든다.
image-resizer/ ├── resize.py ├── requirements.txt ├── README.md ├── images/ └── output/
Python에서는 Pillow 라이브러리 하나만 설치하면 시작할 수 있다.
pip install pillow
2단계. 첫 번째 목표
처음부터 많은 기능을 만들려고 하지 말고 아래 기능만 구현한다.
- JPG 파일 읽기
- PNG 파일 읽기
- 비율을 유지하면서 리사이즈
- output 폴더에 저장
이 정도만 구현되어도 충분히 하나의 프로그램이라고 할 수 있다.
3단계. 기능을 하나씩 추가하기
기본 기능이 완성되면 Codex에게 조금씩 기능을 추가하도록 요청한다.
① 크기 옵션 추가
--width 1200 --height 800 --max-width 1600
원하는 크기를 명령어에서 직접 지정할 수 있도록 만든다.
② WebP 변환
python resize.py images --webp
JPEG나 PNG를 WebP로 변환하도록 기능을 추가한다.
③ 이미지 품질 조절
--quality 85
파일 용량을 줄이기 위해 품질을 조절할 수 있도록 한다.
④ 여러 포맷 지원
- jpg
- jpeg
- png
- webp
- bmp
- tiff
⑤ 진행률 표시
[#####-----] 5/12
이미지가 많을 경우 현재 진행 상황을 표시해 준다.
⑥ 하위 폴더까지 처리
입력 폴더
images/
product/
banner/
icon/
출력 폴더
output/
product/
banner/
icon/
폴더 구조를 그대로 유지하면서 모든 이미지를 처리하도록 만든다.
⑦ 작은 이미지는 건너뛰기
예를 들어 이미 500px인 이미지를 다시 리사이즈할 필요는 없다.
설정한 크기보다 작은 이미지는 자동으로 건너뛰도록 만들 수 있다.
⑧ 덮어쓰기 방지
원본
photo.jpg
출력
photo_1200.jpg
원본 파일을 보호하기 위해 새로운 이름으로 저장하도록 만든다.
4단계. GUI로 발전시키기
CLI 프로그램이 완성되면 나중에는 간단한 GUI도 추가할 수 있다.
[폴더 선택] 가로 크기 품질 [Start]
tkinter나 PySide6를 이용하면 마우스로도 사용할 수 있는 프로그램을 만들 수 있다.
Codex에게 이렇게 요청해 보자
처음부터 모든 기능을 한 번에 만들어 달라고 하기보다 작은 단위로 요청하는 것이 훨씬 효과적이다.
I want to build a Work Toolkit project that will eventually contain several automation tools. Let's start with an image resizing tool. Create a clean Python project structure. Requirements: * Use Python 3.12 * Use argparse * Put the resize logic in its own module * Keep the code easy to extend * Explain every file you create.
그 다음에는 아래와 같이 기능을 하나씩 추가한다.
- Add support for WebP conversion with a --webp option.
- Add recursive directory traversal while preserving the original folder structure.
- Add unit tests for the resizing logic.
- Refactor the project into a reusable package with a clean architecture.
이처럼 기능을 하나씩 구현하고 개선해 나가는 과정이 Codex를 가장 효과적으로 활용하는 방법이다.
마무리
처음에는 단순히 이미지를 줄이는 프로그램으로 시작하지만, 조금씩 기능을 추가하다 보면 실제 업무에서 사용할 수 있는 수준의 자동화 도구가 된다.
예를 들어 최종적으로는 다음과 같은 기능을 갖춘 프로그램으로 발전시킬 수 있다.
- EXIF 회전 정보 자동 적용
- WebP와 JPEG 동시 생성
- 이미지 품질 자동 조절
- 메타데이터 제거
- 파일 용량 비교 리포트 생성
- CSV 또는 Markdown 보고서 생성
작게 시작해서 하나씩 개선하는 것이 Codex를 익히는 가장 좋은 방법이다.
댓글
댓글 쓰기