
요즘 LLM과 AI 애플리케이션 개발을 진행하면서, 개발 패러다임이 정말 무섭게 변하고 있다는 것을 온몸으로 체감하고 있습니다.
오늘은 이번 주에 진행했던 '자동 완성 애플리케이션' 개발 과정의 회고와 함께, AI 시대의 개발 방식에 대한 짧은 단상을 남겨보려 합니다.
2시간 만에 뚝딱? 바이브 코딩이 바꾼 개발의 판도
오늘 애플리케이션에 단축키 컨트롤을 붙이고, LLM
모델에 병렬로 요청을 보내 여러 개의 제너레이터를 생성한 뒤 가장 적절한 답변을 골라내는 로직을 테스트했습니다.
과거 같았으면 프론트엔드와 백엔드 개발자, 그리고 기획자까지 한 팀이 모여 꽤 오랜 시간 고민해야 했을 작업입니다.
하지만 이번에는 클로드의 도움을 받아 말 그대로 '눈 깜짝할 사이'에 핵심 기능을 구현해 냈습니다. 단 2시간 남짓한 시간에 말이죠.
가끔은 완벽하게 의도대로 동작하지 않아 "이거 아직 구현 안 했나 보네" 하며 웃어넘기기도 하지만, 이제 시장은 일일이 모든 코드를 바닥부터 짜는 것이 아니라 AI와 소통하며 큰 그림을 그리는 바이브 코딩의 시대로 완전히 넘어왔음을 느낍니다.
자동 완성 애플리케이션
이번 주 핵심 주제는 '자동 완성 애플리케이션' 구축이었습니다.
단순히 API를 호출하는 것을 넘어, 내부적으로 어떻게 동작하는지 깊이 파고들었습니다.
주요 학습 포인트는 다음과 같습니다.
병렬 추론 처리: 사용자가 입력하는 순간 여러 개의 예측 텍스트를 병렬로 생성하고 최적의 결과를 UI에 렌더링하는 기법
데이터셋 파이프라인 구축: 모델이 우리 도메인에 맞는 텍스트를 완성할 수 있도록 양질의 데이터셋을 어떻게 구성할 것인가에 대한 고민
모델 튜닝및 환경 구성: Unsloth Studio 같은 환경을 활용하여 베이스 모델을 효율적으로 파인튜닝(Fine-tuning)하고 실제 서비스에 연동하는 방법
특히 원활한 튜닝과 API 추론을 위해 Docker 컨테이너 기반으로 Unsloth Studio 환경을 세팅해 두면 관리가 훨씬 수월합니다.
실제 모델 튜닝과 추론 API 서빙을 위해 작성한 docker-compose.yml 파일은 다음과 같습니다.
services:
unsloth:
image: 'unsloth/unsloth:latest'
container_name: unsloth_studio
restart: unless-stopped
ports:
- "10020:8888" # Jupyter Lab 및 Unsloth Studio 접속 포트
- "10030:8000" # API/Inference용 포트
volumes:
- ./unsloth/workspace:/workspace/studio/exports
- ./unsloth/assets:/workspace/studio/assets
- ./unsloth/work:/workspace/work
environment:
- TZ=Asia/Seoul
- JUPYTER_PASSWORD=xxx
- CUDA_VISIBLE_DEVICES=0
ipc: host
tty: true
stdin_open: true
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ['0']
capabilities: [gpu]
이렇게 구성해 두면 호스트의 GPU 자원을 컨테이너 내부에서 온전히 활용할 수 있으며, 10020 포트로는 Jupyter Lab 기반의 스튜디오에 접속하고, 10030 포트로는 튜닝된 모델의 Inference API를 바로 호출할 수 있어 개발 사이클을 단축할 수 있습니다.
구글 번역기 클론 코딩
이번 주 자동 완성 앱 개발로 AI 애플리케이션의 뼈대를 잡았다면, 다음 시간의 주제는 '구글 번역기 모델' 구현입니다.
언어의 문맥을 이해하고 변환하는 과정이 꽤 까다로울 것 같지만, 지금의 개발 속도와 AI 도구들의 발전상을 보면 이 또한 무난하게 해낼 수 있을 것 같습니다.
진도에 따라 하루에 한두 챕터씩 빠르게 돌파해 볼 예정입니다.
도구가 강력해질수록 개발자에게 요구되는 것은 단순한 '코딩 스킬'이 아니라, 어떤 문제를 풀 것인지 정의하고 시스템 아키텍처를 설계하는 '통찰력'인 것 같습니다.