brunch

3. AI 프로그래머, 그 설레는 의 첫걸음

어쩌면 이건 코딩이 아닐지도 몰라요.

by 갸리

앞장에서 AI와 함께하기 위한 기초 공사를 차근차근 해봤다면, 이번에는 정말 간단한 앱을 직접 만들어 볼 거예요. 회사에서 진짜 써먹을 만한 툴을 만들려면 이 기초 단계를 함께 잘 다져두면 정말 좋겠죠?


그 전에 한 가지는 꼭 말씀드리고 싶어요. 솔직히 저희 팀에는 전문적으로 코딩을 배운 사람이 아무도 없어요. 저도 마찬가지고요. 물론 AI가 나오기 전에 간단한 스크립트 정도는 뚝딱거려 본 적은 있지만, 그게 전부랍니다.


이제는 정말 코딩 지식 그 자체가 필수는 아닌 시대가 온 것 같아요. (물론 저희가 포토샵이나 3D 프로그램 같은 전문 소프트웨어를 만들려는 건 아니라는 점! 이 점은 미리 말씀드릴게요) 이 파트의 목표는 '코딩 1도 모르는 사람도 회사에서 쓸 만한 간단한 프로그램 정도는 충분히 만들 수 있다'는 걸 함께 경험해보는 거예요. 그리고 무섭게 발전하는 AI와 조금 더 친해지는 길을 찾아보는 거죠.



이건 코딩이 아니야!


사실 '코딩'이라는 단어만 들어도 머리가 지끈거리는 분들. 많으시죠?


대부분 그렇죠.


"에이, 내가 무슨 코딩이야"


아마도 이런 반응이 많겠지요.


"코딩은 아무나 하나"


맞아요. 얼마 전까지만 해도 코딩은 정말 아무나 도전하기 어려운 영역이었으니까요.

그래서 말인데요, 우리 이제 '코딩'이라는 단어를 잠시 다른 말로 바꿔보면 어떨까요?

그동안 너무 어렵고 높은 벽처럼 느껴져서 다가가기 힘들었으니까요.


지금부터는 그 단어를 '질문'이라고 한번 불러보면 어떨까요?


"코딩"은 아무나 하지 못하지만, "질문"은 아무나 할 수 있으니까요.

이렇게 단어 하나만 바꿔 생각해도 프로그래밍이라는 세계가 훨씬 가깝게 느껴지는 것 같아요. 물론 예전에도 구글에 '질문'은 할 수 있었죠. 하지만 돌아오는 건 끝없는 링크의 바다뿐이었어요. (다들 공감하시죠?) 그 속에서 내가 원하는 진짜 답을 찾아내는 건 정말이지... 엄청난 인내심이 필요한 일이었고요.


특히 영어가 편한 분들이라면 그나마 길을 덜 헤맸겠지만, 많은 분들이 바로 이 지점에서 '아, 역시 나는 안 되나 봐' 하고 돌아서곤 했어요. 딱 거기서 '할 수 있는 사람'과 '포기하는 사람'으로 나뉘었던 것 같아요.


하지만 이제는 달라요. 우리는 그저 AI에게 좋은 '질문'만 던지면 되는 시대를 살고 있으니까요.


솔직히 말씀드리면 앞으로 이어질 과정이 조금은 지루하고 어렵게 느껴지실 수도 있어요. 하지만 이 고비만 함께 잘 넘기면 그다음부터는 정말 여러분이 원하는 앱을 자유롭게 만들 수 있게 될 거라 믿습니다.

저를 믿고 조금만 더 따라와 주시면 진짜 프로그램을 완성할 수 있습니다.

.






첫 번째 미션: 나만의 타이머 앱 만들기



1. 질문

자, 이제 정말로 '질문'을 시작해 볼 시간이에요.

이게 코딩처럼 보일 수 있지만 코딩 1도 모르는 저에게는 그저 AI와의 '채팅'이자 '질문과 답변'일 뿐이랍니다.


ChatGPT를 열고 우리도 한번 이렇게 물어볼까요?

여기서 중요한 건 바로 '프롬프트', 즉 어떤 '질문'을 던지느냐예요.


macOS 스타일의 타이머 앱을 위한 프롬프트 작성해 줘


그랬더니 ChatGPT 4o가 정말 똑똑하게도 우리가 앞으로 프로그램을 만들기 위한 '설계도'에 가까운 프롬프트를 이렇게 정리해주네요.




ChatGPT의 답변

다음은 macOS 스타일의 타이머 앱을 디자인하기 위한 프롬프트예요.


이미지 프롬프트:

"macOS 디자인 언어를 기반으로 한 타이머 앱. 미니멀하고 세련된 UI를 갖추고 있으며, 깔끔한 타이포그래피와 반투명한 배경 효과를 사용. 타이머 설정, 시작, 일시정지, 재설정 버튼이 직관적으로 배치되어 있음. macOS의 다크 모드와 라이트 모드에 적합한 두 가지 테마를 제공하며, 각 모드에서 섬세한 음영과 부드러운 애니메이션 효과를 표현. 우아한 모노톤 컬러 팔레트와 정갈한 인터페이스가 돋보이는 디자인."


디자인 포인트:


macOS 디자인 언어: 반투명한 창, 부드러운 곡선, 섬세한 음영.

테마: 다크 모드와 라이트 모드.

기능: 타이머 설정, 시작, 일시정지, 재설정 버튼.

스타일: 미니멀리즘, 정렬된 인터페이스, 깔끔한 타이포그래피.


어떤가요?

그냥 막연하게 '타이머 만들어줘'라고 하는 것보다 훨씬 구체적이죠? AI는 이렇게 좋은 질문을 받으면 더 좋은 답을 내어준답니다.




2. 좋은 '질문'의 비밀은? 프롬프트


우리가 AI와 나누는 '질문'의 핵심에는 바로 이 '프롬프트(prompt)'가 있어요.

조금 어렵게 들릴 수 있지만, 한마디로 'AI가 제 마음을 찰떡같이 알아듣게 질문하는 방법'이라고 생각하시면 편해요.


'프롬프트(prompt)'는 특정 작업이나 행동을 유도하기 위해 제공되는 명령어, 질문, 지침, 또는 입력 텍스트를 의미합니다.


솔직히 저도 AI를 처음 쓸 때는 이 프롬프트의 중요성을 전혀 몰랐어요. 그래서 그냥 생각나는 대로 질문만 반복하면서 겨우겨우 답을 찾아가는, 그런 비효율적인 과정을 많이 겪었답니다. (아마 많은 분들이 공감하실지도 몰라요)


이게 왜 중요하냐면 AI에게 던지는 질문에 '프롬프트'라는 개념이 있고 없고의 차이가 결과물에서 정말 크게 나타나기 때문이에요. 좋은 프롬프트를 먼저 만들고 질문하면 우리가 원하는 프로그램을 만드는 데 드는 시간을 훨씬 아낄 수 있답니다.


예를 들어, 이렇게 비교해볼 수 있어요.



프롬프트를 활용한 좋은 질문:

"macOS 스타일의 타이머 앱을 위한 프롬프트 작성해 줘"


일반적인 질문:

"macOS 스타일의 타이머 앱을 만들어줘'


느낌이 오시나요?

첫 번째는 AI에게 '어떤 집을 지을지 설계도부터 그려줘'라고 하는 거고, 두 번째는 그냥 '집 지어줘!'라고 하는 것과 비슷해요. 당연히 설계도를 먼저 잘 만들고 시작하면 결과물도 훨씬 좋아지겠죠?




3. 설계도를 진짜 코드로 바꿔볼 시간

이제 AI가 멋지게 그려준 설계도(프롬프트)가 손에 들어왔어요. 이 설계도를 가지고 진짜 코드를 만들어 달라고 부탁할 차례랍니다.


기억하시나요? 앞 챕터에서 저희는 앞으로 프로그램의 '얼굴'을 만들 때 'PyQt5'라는 도구를 쓰기로 약속했었죠.

그걸 AI에게도 알려줘야 해요. ChatGPT와의 대화창에 방금 받은 프롬프트에 이어서 이렇게 한 마디만 덧붙여주세요.


"pyqt5 기반으로 해줘"


정말 이게 전부예요.

그러면 우리의 똑똑한 친구 ChatGPT 4o가 망설임 없이 코드를 뚝딱 만들어내기 시작할 거예요.


import sys

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox

from PyQt5.QtCore import QTimer


class TimerApp(QWidget):

def __init__(self):

super().__init__()

self.time_left = 0

self.timer_running = False


self.init_ui()


def init_ui(self):

self.setWindowTitle("macOS Style Timer")

self.setGeometry(100, 100, 300, 200)


layout = QVBoxLayout()


self.timer_label = QLabel("00:00:00", self)

self.timer_label.setStyleSheet("font-size: 24px; text-align: center;")

self.timer_label.setAlignment(Qt.AlignCenter)

layout.addWidget(self.timer_label)


self.time_input = QLineEdit(self)

self.time_input.setPlaceholderText("Enter time in seconds")

layout.addWidget(self.time_input)


self.start_button = QPushButton("Start", self)

self.start_button.clicked.connect(self.start_timer)

layout.addWidget(self.start_button)


self.pause_button = QPushButton("Pause", self)

self.pause_button.clicked.connect(self.pause_timer)

layout.addWidget(self.pause_button)


self.reset_button = QPushButton("Reset", self)

self.reset_button.clicked.connect(self.reset_timer)

layout.addWidget(self.reset_button)


self.setLayout(layout)


self.timer = QTimer(self)

self.timer.timeout.connect(self.update_timer)


def start_timer(self):

if not self.timer_running:

try:

if self.time_left == 0:

self.time_left = int(self.time_input.text())

self.timer_running = True

self.timer.start(1000)

except ValueError:

QMessageBox.warning(self, "Invalid Input", "Please enter a valid number.")


def update_timer(self):

if self.time_left > 0:

self.time_left -= 1

self.display_time()

else:

self.timer.stop()

self.timer_running = False

self.timer_label.setText("Time's up!")


def pause_timer(self):

self.timer_running = False

self.timer.stop()


def reset_timer(self):

self.timer_running = False

self.timer.stop()

self.time_left = 0

self.timer_label.setText("00:00:00")

self.time_input.clear()


def display_time(self):

hours, remainder = divmod(self.time_left, 3600)

minutes, seconds = divmod(remainder, 60)

self.timer_label.setText(f"{hours:02}:{minutes:02}:{seconds:02}")


if __name__ == "__main__":

app = QApplication(sys.argv)

timer_app = TimerApp()

timer_app.show()

sys.exit(app.exec_())




4. 우리의 비밀 병기 Cursor 사용해보기

이제 ChatGPT가 만들어준 코드를 실행해 볼 시간이에요. 바로 이 단계에서 우리의 비밀 병기 Cursor가 등판할 차례입니다.

(물론 무료 버전으로도 충분히 체험해볼 수 있지만, 나중에 더 깊이 사용해보고 싶다면 유료 서비스도 한번 고려해보시면 좋을 것 같아요.)


1) Cursor 앱을 실행

먼저 Cursor 앱을 실행해주세요. (커서를 인스톨하는 방법까지는 설명 필요없겠죠?)


2) 파이썬 작업실 연결하기

가장 먼저 할 일은 Cursor에게 우리가 아까 만들어 둔 파이썬 작업실(p312)을 알려주는 거예요.


앱 화면 오른쪽 아래를 보시면 현재 설정된 파이썬 버전이 보일 텐데요, 그 부분을 클릭해주세요. 그럼 설치된 파이썬 목록이 쭉 나올 거예요.

여기서 우리가 만들었던 가상 환경 이름 Python 3.12.8('p312': venv) ./p312/bin/python을 선택해주시면 됩니다.


3) 코드를 담을 파일 만들기 (파이썬 파일 작성)

이제 코드를 담을 깨끗한 종이를 한 장 꺼내볼게요. New File 아이콘을 눌러 timer_gpt.py 라는 이름의 파일을 만들어주세요. 여기서 .py는 컴퓨터에게 '이건 파이썬 파일이야!'라고 알려주는 약속 같은 거랍니다. (파일 이름은 원하시는 대로 정하셔도 괜찮아요!)


4) 코드 복사 & 붙여넣기.

앞서 ChatGPT가 만들어준 코드를 전부 복사해서 방금 만든 timer_gpt.py 파일 안에 그대로 붙여넣어 주세요.


5) 떨리는 첫 실행! (그리고 에러)

이제 우측 상단의 Run Python File 버튼을 눌러 코드가 잘 작동하는지 확인해볼까요?


여기서 아주 중요한 꿀팁!
AI가 준 코드가 한 번에 완벽하게 실행되는 경우는 생각보다 드물어요. 그러니 아래 TERMINAL 창에 빨간 글씨로 에러가 떠도 절대! 놀라거나 실망하지 마세요. 이건 실패가 아니라 AI와 함께 문제를 해결해나가는 지극히 자연스러운 과정이랍니다.

6) 에러와 친구 되기

TERMINAL 창에 나타난 에러 메시지를 마우스로 쭉 긁어서(드래그) 선택한 다음, 나타나는 Add to Composer 버튼을 클릭해주세요. 바로 이럴 때 Cursor가 마법을 보여줄 시간이에요. AI가 작성한 코드는 대부분 첫 번째에 완성되지 못합니다. 항상 에러가 발생한다는 것을 잊지 마세요. 에러가 발생한다고 겁먹지 않아도 됩니다. COMPOSER가(Agent) 에러를 수정하고 적용하기 때문입니다. 물론 무료 버전은 제한이 있습니다. (커서 현재 버전에서는 Add to Composer -> Add to Chat으로 변경)

터미널 탭에 표시된 에러 (좌) / 에러 코드를 수정하기 위해 선택 (우)


7) AI에게 부탁하기: "고쳐줘!"

COMPOSER 탭으로 에러 내용을 가져왔다면 AI에게 딱 한 마디만 해주면 돼요. (현재는 Chat)

"에러 수정해 줘"

정말 이게 전부예요. 그러면 Cursor가 순식간에 에러의 원인을 파악하고 코드를 수정해준답니다. 솔직히 저는 이 부분이 AI를 쓰면서 가장 감탄하게 되는 순간 같아요. 코드의 내용을 잘 몰라도 괜찮아요. 우리는 그저 AI가 고쳐준 해결책을 적용하기만 하면 되니까요.

에러 코드 (좌) / 수정된 에러 (우)


8) 다시 한번 실행! (수정되어 자동 적용된 코드를 테스트)

수정된 코드가 자동으로 적용되었다면 다시 Run Python File 버튼을 눌러 프로그램을 실행해 보세요. 터미널에 더 이상 에러가 뜨지 않고 프로그램 창이 예쁘게 나타난다면 드디어 코드가 완성된 겁니다!



9) 프로그램 코드 완성

짜잔! 드디어 우리 손으로 만든 타이머 앱이 완성되었습니다.

"macOS 스타일의 타이머 앱을 위한 프롬프트 작성해 줘"


기억나시나요?

우리는 그저 "macOS 스타일의 타이머 앱을 위한 프롬프트 작성해 줘" 라는 '질문' 하나로 시작했어요. 코딩을 한 줄도 몰랐던 제가, 그리고 여러분이, 이 멋진 타이머 앱을 만들어낸 거죠.


여기서 기능을 더 추가하고 싶다면 어떻게 해야 할까요?

맞아요. 또다시 AI에게 '질문'을 던지면 된답니다.

정말 멋진 세상이죠?

타이머 앱 (좌) / 타이머 앱 10분 설정 (우)

타이머 앱 완성 파이썬 스크립트 파일




5. 내가 만든 코드를 진짜 앱으로 배포하기

앞에서 만든 timer_gpt.py 파일은 사실 아직 '진짜 앱'은 아니에요. Cursor라는 특별한 작업실 안에서만 움직일 수 있는 일종의 설계도 같은 상태죠. 이 파일을 다른 사람들도 편하게 쓸 수 있도록 더블 클릭으로 실행되는 맥 앱(.app)으로 만들어주는 과정이 필요하답니다. 즉, 배포하는 과정입니다.


다시 Cursor로 돌아가서 COMPOSER(Chat) 탭을 열고 AI에게 이렇게 한번 물어볼까요?


"이 코드를 앱으로 만드는 방법 알려줘"라고 질문하면


아마 AI는 py2app이라는 도구를 추천해 줄 거예요. 그것도 물론 좋은 방법이지만, 제 경험상으로는 'pyinstaller'라는 친구가 조금 더 사용하기 편하고 결과도 좋더라고요.




1) COMPOSER 탭에서 다시 질문하기(지금은 Chat)

AI에게 우리가 사용하고 싶은 도구를 콕 집어서 알려줄 차례예요. COMPOSER(Chat) 탭에 이렇게 질문해 보세요.

"pyinstaller로 만드는 법 알려줘"

그러면 정말 마법처럼 pyinstaller를 사용해서 앱을 만드는 방법을 단계별로 착실하게 알려줄 거예요. 우리는 그저 AI가 안내하는 길을 그대로 따라가기만 하면 된답니다.

COMPOSER가 답한 대로 따라 하면 됩니다


2) pyinstaller 설치

AI의 첫 번째 지시에 따라 아래 명령어를 COMPOSER(Chat)에 입력해주세요.

pip install pyinstaller


3) Run 버튼 클릭!

입력했다면 바로 오른쪽의 Run 버튼을 눌러 설치를 시작해주세요.


4) 자동으로 설치되는 모습 구경하기.

터미널 창을 보면 pyinstaller가 자동으로 착착 설치되는 과정을 구경할 수 있어요. 정말 편하죠?


5) 앱으로 변신! 마법의 주문 외우기. 파이썬 파일 빌드 (timer_gpt.py)

이제 가장 중요한 순간이에요. 터미널에 아래와 같은 마법 주문이 나타나고 파이썬 파일을 진짜 앱으로 변신시켜 줄 거예요.

pyinstaller --windowed --name="Timer App" timer_gpt.py


6) 빌드 과정 지켜보기.

주문이 시작되면 터미널에서 앱이 만들어지는 과정이 쭉 나타날 거예요. 중간에 (y/N) 같은 질문이 보이면, "응, 계속해 줘!" 라는 의미로 Y를 입력하고 엔터를 눌러주세요.


7) 완성된 앱을 찾아라!

파이썬 스크립트가(timer_gpt.py) 저장된 폴더로 이동.

빌드가 끝나면 원래 파일(timer_gpt.py)이 있던 폴더로 가보세요. distbuild라는 새로운 폴더가 생겨났을 거예요. 그중 dist 폴더 안에 들어가면 드디어 우리가 만든 'Timer App'이 짠! 하고 나타납니다. 이제 이 파일을 더블클릭하면 어디서든 타이머 앱을 실행할 수 있어요!


8) (선택) 나만의 아이콘으로 예쁘게 꾸미기

기본 아이콘이 조금 아쉽다면 나만의 아이콘으로 꾸며줄 수도 있어요.

아이콘으로 사용하고 싶은 이미지 파일을 준비해서 timer_icon.ico 라는 이름으로 저장해주세요. (파일 이름 끝에 .ico를 붙여주는 게 중요해요!) 그리고 이 아이콘 파일을 아까 그 파이썬 파일과 같은 폴더에 넣어주세요.


그런 다음, 아까 사용했던 마법 주문을 조금 더 길게 업그레이드해서 다시 외워주면 된답니다.

pyinstaller --windowed --onefile --name="Timer App" --icon=timer_icon.ico --clean timer_gpt.py

옵션 설명:

--windowed: 콘솔 창 없이 실행

--onefile: 단일 실행 파일로 생성

--name: 앱 이름 지정

--icon: 앱 아이콘 지정 (선택사항)

--clean: 빌드 전 캐시 삭제


앱 아이콘 이미지 파일 : timer_icon.ico (좌) / 타이머 앱 아이콘 (우)


드디어 나만의 타이머 앱이 세상에 나왔습니다.



마무리를 하며


솔직히 고백하자면 저도 파이썬이 뭔지, 코딩이 정확히 어떤 건지 잘 몰랐습니다. 하지만 AI 덕분에 예전에는 상상도 못 했던 새로운 창작물을 제 손으로 만들 수 있게 되었어요.


사내에서 쓸 간단한 프로그램을 만드는 데 필요한 모든 설명은 이것으로 끝입니다. 이 정도의 과정을 이해하고 따라오셨다면 이제 여러분도 "나도 프로그래머야!" 라고 조심스럽게 외쳐볼 수 있지 않을까요?


다음 챕터에서는 이 타이머 앱을 한 단계 더 업그레이드하는 방법을 소개해 드릴게요. 기대해주세요

keyword
매거진의 이전글2. AI 코딩을 위한 기반 설정