
🟦 개발 생산성 & 자동화 시리즈 — 1편
Vibe Coding으로 만드는 실용 앱: 사내 비용 정산 자동화 앱 구축기
📌 들어가며
사내 개발자 교육에서 가장 반응이 좋았던 세션이 바로 Vibe Coding으로 실제 업무용 앱을 함께 만들어보는 실습이었다.
“AI한테 코드만 받아 쓰는 것” 정도로 생각하는 개발자들도 많았는데, 실제로는 설계 → 코드 생성 → 디버깅 → 테스트 생성 → 문서화 → 리팩터링까지 LLM이 전부 참여하는 완성도 높은 워크플로우를 만들 수 있다.
이번 글에서는 실제로 내가 사내에서 개발했던 **‘월별 비용 정산 자동화 앱’**을 그대로 예시로 보여준다.
이 앱은 단순 CRUD가 아니라, 규칙 기반 정산 로직 + 테스트 자동화 + Slack 연동까지 포함된 실전 애플리케이션이다.
1. 📐 아키텍처 설계 — Vibe Coding과 함께 만든 시스템
내가 처음부터 정해둔 요구사항은 간단했다.
- 매달 직원들이 올리는 Excel 정산 파일을 자동으로 처리하고
- 정산 규칙은 YAML로 관리해 수정 가능해야 하고
- 승인 시 Slack으로 자동 알림을 보낼 것
Vibe Coding과의 대화를 통해 만들어진 실제 아키텍처는 아래와 같다.
[Excel Upload]
↓
[FastAPI Backend]
↓
[Vibe Coding 기반 Rule Engine 생성]
↓
[정산 로직 Executor]
↓
[DB 저장 (PostgreSQL)]
↓
[Slack Notification Webhook]
Vibe Coding이 단순히 “코드 생성기”가 아니라,
내 요구사항을 기반으로 구조 전체를 다듬어주고 API 스펙까지 초안으로 잡아주기 때문에 설계 시간이 크게 단축됐다.
2. 🧱 FastAPI 기반 앱 구조 — 자동 생성 + 커스텀 조합
아래는 실제 프로젝트 구조다.
/app
├─ api
│ └─ upload.py
├─ services
│ ├─ rules.py
│ ├─ executor.py
│ └─ notifier.py
├─ config
│ └─ rules.yml
├─ models
│ └─ expense.py
└─ main.py
이 중 50% 이상은 Vibe Coding에서 초안 코드를 만들어주고,
나머지를 내가 요구사항에 맞게 수정·보완했다.
3. 🧪 핵심 코드 해설
3-1. Excel 업로드 & 파싱
@app.post("/upload")
async def parse_excel(file: UploadFile):
df = pd.read_excel(file.file)
items = df.to_dict(orient="records")
return {"count": len(items), "items": items}
여기까지는 평범한 코드지만, 이 후에 필요한 상세 파싱 로직(금액 포맷 처리, 날짜 변환 등)은 대부분 Vibe Coding이 “데이터 패턴”을 학습해 자동 생성해주었다.
3-2. YAML 기반 정산 룰 관리
초기에는 정산 규칙을 코드에 넣었더니 매달 바뀌는 정책 때문에 유지보수가 너무 힘들었다.
그래서 Vibe Coding에게 “설정형 룰 엔진으로 바꿔줘”라고 요청했고, 바로 아래 구조를 제안해줬다.
rules.yml
rules:
- category: 식비
limit: 50000
- category: 교통비
limit: 30000
rules.py
import yaml
from pydantic import BaseModel
class ExpenseRule(BaseModel):
category: str
limit: int
def load_rules():
with open("config/rules.yml") as f:
data = yaml.safe_load(f)
return [ExpenseRule(**item) for item in data["rules"]]
룰 수정 → 서버 재실행 없이 즉시 반영되는 구조가 완성됨.
3-3. 정산 Executor — 핵심 비즈니스 로직
아래는 업종별로 금액을 검증하고 초과 금액을 따로 계산하는 주 로직이다.
def validate_expense(item, rules):
for rule in rules:
if rule.category == item["category"]:
if item["amount"] <= rule.limit:
return True, 0
else:
return False, item["amount"] - rule.limit
return False, item["amount"]
여기서 재미있던 점은, 초안은 Vibe Coding이 작성한 코드였고,
내가 “초과 금액도 반환해줘”라고 하자 diff 형태로 자동으로 수정해줬다는 것.
3-4. Slack Webhook 자동 알림
def send_slack_notification(user, total_amount):
payload = {
"text": f"[정산 승인] {user}님의 월 정산이 승인되었습니다. 총액: {total_amount}원"
}
requests.post(SLACK_WEBHOOK_URL, json=payload)
Vibe Coding은 Slack 문구 스타일도 자동으로 제안해주며 매우 빠르게 UX를 잡을 수 있었다.
4. 🔥 실무에서 실제로 겪은 문제와 해결 과정
문제 1) Excel 컬럼 표준화 안 됨
직원마다 쓰는 템플릿이 달라 컬럼명이 매달 바뀜
→ Vibe Coding에게 “가능한 컬럼 패턴 목록을 알려주고 자동 정규화 로직 생성” 요청
→ Text Pattern 기반 정규화 코드 자동 생성
→ 파싱 오류 80% 감소
문제 2) 룰 변경 시 테스트가 매번 필요
→ Vibe Coding에 “룰 기반 테스트 자동 생성” 요청
→ 아래와 같은 테스트 자동 생성됨:
def test_food_rule_limit():
item = {"category": "식비", "amount": 40000}
ok, diff = validate_expense(item, rules)
assert ok is True
테스트 코드 작성 시간이 0에 가까워짐.
문제 3) 초기에 LLM 출력이 비일관적
→ “시스템 지시문”에 코딩 스타일 가이드·패턴·예외 처리 방식을 넣어 해결
→ 이후 프롬프트 안정성 유지됨
5. 🏁 최종 결과 — 개발 속도 2배, 유지보수 난이도 1/3
프로토타입은 1일 만에 완성했고,
운영 버전은 3일 만에 배포했다.
이전에는 두 명이 일주일 걸리는 작업이었다.
특히 아래 3가지는 Vibe Coding 덕을 크게 봤다.
- API 코드 자동화
- 정산 규칙 변경 자동 반영
- 테스트 자동 생성
이후 다른 팀에서도 동일한 아키텍처로 여러 자동화 시스템을 만들기 시작했다.
6. 🚀 실전 팁 3개
1) Vibe Coding에는 “구조적 의도”를 먼저 말하라
“유지보수 쉬운 구조로”, “룰 기반 설정으로”, “테스트 자동 생성 포함” 등
의도를 말하면 더 좋은 코드가 나온다.
2) 반복되는 작업은 모두 패턴화해 맡겨라
파싱/검증/CRUD/테스트 같은 것은 사람이 할 이유가 없다.
3) 규칙이나 정책이 바뀌는 업무는 꼭 설정화하라
비용 정산, 평가 기준, 승인 룰 등은 모두 YAML·JSON으로 외부화하면 유지보수 비용이 극적으로 줄어든다.
7. 🏷 추천 태그
#개발생산성 #VibeCoding #업무자동화 #FastAPI #AI코딩 #백엔드개발 #자동화사례 #YAML엔진 #사내개발
- 1편 — 바이브 코딩으로 사내 비용정산 앱 만들기 (현재 글)
- 2편 — 반복 업무 자동화 실제 사례
- 3편 — 개발자 AI 워크플로우 추천
- 4편 — 사내 문서 요약·검색 자동화 시스템 구축기
- 5편 — 사내 RAG 운영 전략: 안정성·정확도·속도
'개발 자동화 & 생산성 도구' 카테고리의 다른 글
| 5편 사내 RAG + 자동화 시스템 운영 전략 — 안정성·정확도·속도를 모두 잡는 실무 운영법 (0) | 2025.12.05 |
|---|---|
| 4편 사내 문서 요약/검색 자동화 시스템 구축기 (RAG·vLLM·FastAPI 기반) (0) | 2025.12.05 |
| 3편 개발자용 AI 워크플로우 추천 — 실제로 효과 본 단계별 흐름 (0) | 2025.12.05 |
| 2편 반복 업무를 자동화한 사례 — 진짜로 시간을 절반으로 줄인 프로젝트들 (0) | 2025.12.05 |
| 타임페어런츠 TimeParents v1.2.0 — Windows11용 자녀 게임 시간 관리 프로그램 소개 (0) | 2025.11.30 |