Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

ChatGPT와 함께하는 페어 프로그래밍: GPT-3.5는 Bash 스크립트를 얼마나 잘 다룰까?

최근 몇 주 동안 인공지능과 자연어 처리, 특히 OpenAI의 최신 GPT 모델에 대한 이야기가 끊이지 않고 있습니다.

GPT-3.5의 출시, 그중에서도 새롭게 공개된 ChatGPT 도구는 분명히 엄청난 도약입니다.

AI에게 부동산 계약서나 유언장을 작성시키고, 심지어 프로그래밍 코드를 생성시켰다는 이야기를 이미 접해보셨을 수도 있습니다. 이 글에서는 조금 다른 관점에서 이 도구를 살펴보려 합니다.

학습에 도움이 되도록 이 글의 영상 버전도 함께 시청하실 수 있습니다.

ChatGPT와 Bash 스크립팅 실험

저는 ChatGPT가 리눅스 Bash 스크립팅을 얼마나 잘 처리하는지 직접 확인해 보기로 했습니다. 그런데 (스포일러 경고!) AI가 제안한 코드, 좋은 코드든 나쁜 코드든 하나하나 검토하다 보니 훨씬 더 강력한 장점이 바로 눈앞에 있다는 것을 깨달았습니다. 바로 정말 유능한 파트너와 페어 프로그래밍(pair-programming)을 할 수 있는 기회였습니다.

결국 AI는 제 문제를 해결하지 못했지만, 그 '실패하는 방식' 자체가 놀랍도록 흥미로웠습니다. 그리고 AI가 새로운 답을 찾아 헤매는 과정을 지켜보는 것은 정말 미친 듯한 경험이었습니다.

첫 번째 시도 – ChatGPT가 문제 해결에 도전하다

그럼 어떤 일이 벌어졌는지 살펴보겠습니다. 제가 AI에게 처음 던진 프롬프트는 대략 다음과 같습니다.

"YouTube 영상의 URL을 입력받은 후 yt-dlp 프로그램을 사용해 해당 URL에서 영상을 다운로드하는 Bash 스크립트를 작성해 줘. 그다음 파일 이름을 myvideo.mp4로 변경해야 해."

몇 초 후 ChatGPT가 스크립트를 만들어 주었습니다. 결과물은 다음과 같았습니다.

#!/bin/bash
# 사용자에게 YouTube 영상 URL 입력 요청
read -p "Enter YouTube video URL: " url
# yt-dlp를 사용해 YouTube에서 영상 다운로드
yt-dlp $url
# 다운로드된 영상 파일 이름 가져오기
yt-dlp $url
# 다운로드된 영상 파일 이름을 "myvideo.mp4"로 변경
mv video-filename.mp4 myvideo.mp4

AI는 당연히 Bash 스크립트가 무엇인지, 코드를 어떻게 제시해야 하는지 알고 있었습니다. 각 코드 줄마다 주석까지 아주 깔끔하게 달아 주었죠. 사용자에게 입력을 올바르게 요청하고, 입력된 문자열을 url이라는 변수에 담는 방법도 정확히 알고 있었습니다.

yt-dlp 프로그램과 작동 방식도 알고 있어서, 제공된 URL을 적절히 전달했습니다. 그리고 최소한 다운로드된 영상 파일을 myvideo.mp4로 이름을 바꾸려는 시도는 했습니다. 하지만 다운로드 파일명이 video-filename.mp4일 것이라고 가정해 버리면서 모든 것이 무너지기 시작했습니다. 어이쿠.

그래도 AI는 친절하게 이 코드로 스크립트를 만들고 실행하는 방법까지 안내해 주었습니다.

두 번째 시도 – ChatGPT가 스스로 수정하다

제 첫 번째 후속 프롬프트는 명백한 실수를 지적하는 것이었고, 몇 초 후 ChatGPT는 자신이 틀렸음을 인정하며 개선안을 내놓았습니다.

"맞습니다. 제가 제공한 스크립트는 다운로드된 영상이 video-filename.mp4라는 이름으로 저장될 것이라고 가정하기 때문에 기대대로 작동하지 않습니다. 하지만 이것이 항상 보장되는 것은 아닙니다. 이 문제를 해결하려면..."

AI가 이 과정에 완전히 몰입해 있다는 사실은 정말 놀라웠습니다. 첫 번째 코드를 기억하고, 제 불만을 듣고 이해하며, 해결책을 고민합니다. 두 번째 시도는 다음과 같았습니다.

#!/bin/bash
# 사용자에게 YouTube 영상 URL 입력 요청
read -p "Enter YouTube video URL: " url
# yt-dlp를 사용해 YouTube에서 영상 다운로드
yt-dlp $url
# 다운로드된 영상 파일 이름 가져오기
filename=$(basename $url)
# 다운로드된 영상 파일 이름을 "myvideo.mp4"로 변경
mv $filename.mp4 myvideo.mp4

흥미롭게도 이 해결책은 일견 맞아 보였습니다. basename은 파일 시스템 경로를 제거하고 실제 파일 이름만 남기는 리눅스 도구니까요.

문제는 변수 url에는 로컬 파일 이름이 아니라 인터넷 주소가 담겨 있다는 점입니다. 이번 것도 확실히 작동하지 않습니다.

세 번째 시도 – ChatGPT가 다시 도전하다

그래서 저는 그 도구가 이 작업에 적합하지 않다고 설명하며 다시 시도해 달라고 요청했습니다. 그러자 ChatGPT가 또 한 번 시도합니다.

#!/bin/bash
# 사용자에게 YouTube 영상 URL 입력 요청
read -p "Enter YouTube video URL: " url
# URL에서 파일 이름 추출
filename=$(basename $url)
# yt-dlp 도구로 영상을 다운로드하며 파일 이름 지정
yt-dlp -o $filename $url
# 다운로드된 영상 파일 이름을 "myvideo.mp4"로 변경
mv $filename.mp4 myvideo.mp4

이번에는 yt-dlp 문서를 학습한 흔적이 보였습니다. -o 옵션을 사용해 다운로드되는 영상에 이름을 지정하면, basename이 이제 제대로 작동할 것이라는 제안이었죠. 반복할 때마다 AI는 복사해서 붙여넣기 좋게 업데이트된 코드를 건네줍니다.

물론 이번에도 작동하지 않았습니다. 다음 시도에서는 AI가 약간 절박해 보이는 느낌마저 들었습니다.

처음에 성공하지 못하더라도... 적어도 배우는 것은 있습니다

다음 한두 번의 시도는 건너뛰겠습니다. 부수적인 문제에 부딪혔기 때문입니다. YouTube에서 오는 영상이 항상 MP4인 것은 아니며, 때로는 MKV나 WEBM 형식이기도 합니다. 이런 불확실성이 우리가 다루는 파일 이름에 혼란을 줄 수 있어서, 저는 ChatGPT에게 이 부분을 코드에 반영해 달라고 요청했습니다.

#!/bin/bash
# 사용자에게 YouTube 영상 URL 입력 요청
read -p "Enter YouTube video URL: " url
# URL에서 파일 이름 추출
filename=$(basename $url)
# yt-dlp 도구로 영상을 다운로드하며 파일 이름 지정
yt-dlp -F mp4 -O $filename $url
# 다운로드된 영상 파일 이름을 "myvideo.mp4"로 변경
mv $filename.mp4 myvideo.mp4

이마저 작동하지 않는다고 보고하자 AI는 혼란스러워하기 시작했습니다. 먼저 -F 옵션에는 유효한 비디오 형식이 와야 하는데 "mp4"는 유효하지 않다고 말하더니, 곧이어 "mp4"를 포함한 유효한 옵션 목록을 보여주는 것이었습니다.

AI가 제안한 어떤 방법도 작동하지 않자, 결국 AI는 포기하고 제 컴퓨터에 yt-dlp가 실제로 설치되어 있는지 확인하라고 조언하며 설치 방법까지 보여주었습니다.

저도 그때가 포기하기 좋은 타이밍이라고 판단했습니다. 놀랍도록 좋은 노력이었고, 문제를 해결하지는 못했지만 유용한 문법 몇 가지를 보여주었고 제 생각을 자극했습니다.

참고로, 실제로 작동하는 스크립트가 어떤 모습인지 궁금하신 분들을 위해 소개합니다.

#!/bin/bash
# 사용자에게 YouTube 영상 URL 입력 요청
read -p "Enter YouTube video URL: " url
# yt-dlp를 사용해 YouTube에서 영상 다운로드
yt-dlp $url
# 다운로드된 영상 파일 이름 가져오기
original_filename=$(ls | awk '/mp4/ || /webm/ || /mkv/')
# 다운로드된 영상 파일 이름을 "myvideo.mp4"로 변경
mv "$original_filename" /home/ubuntu/vids/myvideo.mp4

코드의 처음 두 줄은 ChatGPT가 제안한 방식 그대로입니다. 하지만 그다음에는 현재 디렉터리의 모든 파일을 나열하고 awk를 사용해 mp4, webm, mkv가 포함된 파일 이름만 필터링하여 파일 이름을 분리합니다. (디렉터리에 한 번에 두 개 이상의 영상 파일이 존재하지 않는다고 가정합니다.)

파일 이름은 original_filename 변수에 저장됩니다. 그다음 이 변수를 move 명령어의 일부로 사용해 파일 이름을 myvideo.mp4로 변경합니다. 제가 확인하기로는 실제 전송된 형식이 무엇이든 이 방법은 작동합니다.

마무리하며

인공지능은 아직 실제 프로그래밍 업무를 수행할 준비가 되지 않았을지 모르지만, 내일이나 내년 언젠가 그렇게 될 가능성에 거는 돈은 걸지 않겠습니다.

그때까지는 어려운 프로그래밍 과제에 직면했을 때 ChatGPT 같은 도구와 함께 작업해 볼 것을 적극 추천합니다.

두 개의 머리는 (거의) 항상 하나보다 낫습니다.

구독 가능한 제 YouTube 채널 외에도, 제 웹사이트에서는 아티클, 도서, 강의 등 다양한 기술 콘텐츠를 만나보실 수 있습니다.

무료로 코딩을 배우세요. freeCodeCamp의 오픈소스 커리큘럼은 40,000명 이상의 사람들이 개발자로 취업하는 데 도움을 주었습니다. 지금 시작해 보세요.