AI와 기능을 하나씩 만들라는데, 어디까지가 하나인가요?
바이브코딩에서 기능 하나는 화면 하나나 코드 한 줄이 아니라 사용자가 한 행동을 하고 결과를 확인할 수 있는 크기예요. 누가 무엇을 하고 어떤 결과를 보면 끝인지 적은 뒤 한 기능만 구현·검증하고 다음으로 넘어가세요.
핵심 요약
- 기능마다 사용자·행동·확인할 결과·완료 범위를 한 문장으로 설명할 수 있어야 합니다.
- 여러 행동이 섞이거나 한 번에 완료 여부를 확인할 수 없다면 더 작은 사용자 흐름으로 나눕니다.
- 코드 단위로 지나치게 쪼개지 말고 작동하는 기능 하나를 확인한 뒤 commit하고 다음 기능을 시작합니다.
바이브코딩 수업에서 자주 하는 말이 있습니다.
기능을 한꺼번에 만들지 말고
작게 나눠서 하나씩 만드세요.
설명할 때는 모두 고개를 끄덕입니다. 막상 프로젝트를 시작하면 AI에게 이렇게 요청해요.
로그인과 운동 기록, 통계, 친구 기능을 만들고
알림까지 보내는 앱을 완성해줘.
기능을 나누라는 말을 이해하지 못해서가 아닙니다. 어디까지가 기능 하나인지 판단할 기준이 없기 때문이에요.
로그인이 기능 하나인지, 로그인 화면과 서버를 따로 나눠야 하는지, 데이터베이스는 언제 만들어야 하는지 알기 어렵습니다.
이번 글에서는 AI에게 맡길 기능 하나의 크기를 정하는 방법을 알아볼게요.
한 번에 요청하면 왜 문제가 될까요?
AI는 한 번의 요청으로 많은 파일과 코드를 만들 수 있습니다. 코드가 빨리 생기니 프로젝트도 빨리 완성되는 것처럼 보여요.
하지만 작업 범위가 클수록 확인할 내용도 함께 늘어납니다.
로그인 화면은 보이지만 실제 로그인이 안 됨
운동 기록은 저장되지만 다시 열면 사라짐
통계 숫자가 저장한 기록과 맞지 않음
알림 권한을 거부하면 앱이 멈춤
친구의 기록이 내 화면에 보임
여러 기능을 한꺼번에 만들면 문제가 생겼을 때 어느 작업부터 잘못됐는지 찾기 어렵습니다.
AI에게 수정을 요청해도 로그인, 데이터 구조와 화면을 함께 바꾸면서 다른 기능이 다시 깨질 수 있어요.
큰 요청
→ 많은 코드가 한 번에 바뀜
→ 무엇을 확인해야 하는지 모름
→ 문제의 원인을 찾기 어려움
→ 수정하면서 다른 기능도 바뀜
기능을 나누는 이유는 AI가 코드를 만들지 못해서가 아닙니다. 사람이 결과를 이해하고 확인할 수 있게 하기 위해서예요.
화면 하나가 기능 하나는 아니에요
입문자는 기능을 화면이나 기술에 따라 나누기 쉽습니다.
화면을 전부 만들어줘.
데이터베이스를 전부 만들어줘.
서버 기능을 전부 만들어줘.
마지막에 모두 연결해줘.
이 방식으로 나누면 화면은 많지만 실제로 작동하는 기능은 없는 기간이 길어집니다.
운동 기록 하나를 저장하려면 여러 부분이 함께 필요해요.
운동을 입력하는 화면
+ 잘못된 입력을 확인하는 규칙
+ 저장 요청을 받는 서버
+ 기록을 보관하는 데이터베이스
+ 성공과 실패를 보여주는 화면
화면, 서버와 데이터베이스는 서로 다른 기술 영역이지만 사용자에게는 운동 기록을 저장하는 기능 하나입니다.
기술별로 나누기보다 사용자의 행동이 처음부터 결과까지 이어지도록 나누세요.
기능 하나는 사용자가 확인할 수 있는 행동 하나예요
기능 하나를 다음 문장으로 표현해보세요.
[사용자]가 [행동]을 하고
[결과]를 직접 확인할 수 있다.
예를 들면 다음과 같습니다.
사용자가 오늘 운동을 입력하고
저장한 기록을 화면에서 확인할 수 있다.
이 문장에는 사용자가 누구인지, 무엇을 하는지, 어떤 결과를 봐야 하는지가 들어 있어요.
반면 다음 문장은 범위가 너무 큽니다.
사용자가 가입하고 운동을 기록하며
친구와 공유하고 통계를 확인할 수 있다.
서로 다른 결과가 여러 개 들어 있습니다. 가입, 기록, 공유와 통계로 다시 나눠야 해요.
네 가지 질문으로 기능의 크기를 확인해요
기능 하나를 정했다면 다음 질문에 답해보세요.
1. 누가 사용하나요?
로그인하지 않은 방문자, 로그인한 회원과 관리자는 할 수 있는 행동이 다릅니다.
너무 넓음
→ 사용자가 회원 기능을 이용할 수 있다.
구체적임
→ 로그인한 회원이 자신의 운동 기록을 확인할 수 있다.
한 기능에 서로 다른 사용자의 권한이 많이 섞이면 나눌 수 있는지 확인하세요.
2. 어떤 행동을 하나요?
기록하기, 수정하기, 삭제하기와 공유하기는 서로 다른 행동입니다.
너무 넓음
→ 운동 기록을 관리할 수 있다.
나누기
→ 운동 기록을 저장할 수 있다.
→ 저장한 기록을 수정할 수 있다.
→ 저장한 기록을 삭제할 수 있다.
“관리한다”처럼 여러 행동을 포함할 수 있는 말은 실제 행동으로 바꾸세요.
3. 어떤 결과를 확인하나요?
기능을 만든 뒤 내가 직접 볼 수 있는 결과가 있어야 합니다.
저장 버튼을 누름
→ 성공 안내가 나타남
→ 새 기록이 목록에 보임
→ 앱을 다시 열어도 기록이 남아 있음
결과를 어떻게 확인해야 할지 설명할 수 없다면 기능이 아직 모호한 상태예요.
4. 어디까지 만들면 끝인가요?
완료 기준과 이번 작업에서 제외할 내용을 함께 정합니다.
이번 기능에 포함
→ 운동 종류와 시간 입력
→ 입력값 확인
→ 기록 저장
→ 저장 결과 표시
이번 기능에서 제외
→ 기록 수정과 삭제
→ 연속 운동 일수
→ 친구와 공유
제외할 내용을 적어야 AI가 다음 기능까지 미리 만들지 않습니다.
기능과 개발 작업은 달라요
사용자에게 보이는 기능 하나를 만들려면 여러 개발 작업이 필요할 수 있습니다.
기능
→ 사용자가 운동 기록을 저장할 수 있다.
개발 작업
→ 입력 화면 만들기
→ 필수 입력값 확인하기
→ 서버에 저장 요청 보내기
→ 데이터베이스에 기록 저장하기
→ 성공·실패 결과 보여주기
기능은 사용자가 얻는 결과를 기준으로 묶습니다. 개발 작업은 해당 결과를 만들기 위해 AI가 수정할 부분을 기준으로 나눠요.
따라서 버튼 색상 바꾸기, 데이터베이스 열 추가하기처럼 너무 작은 기술 작업 하나를 기능 하나라고 부를 필요는 없습니다.
기능 하나
→ 사용자가 확인할 수 있는 결과
기능을 만드는 작업
→ 화면·서버·데이터에 필요한 변경
PRD가 있으면 기능을 나누기 쉬워져요
아이디어만 있는 상태에서 기능을 나누기는 어렵습니다.
무엇을 만들지 정하지 않았는데 어디까지 나눌지 먼저 결정할 수는 없어요.
PRD에는 기능을 나눌 때 필요한 기준이 들어 있습니다.
주요 사용자
핵심 사용자 흐름
첫 버전에 넣을 기능
나중에 추가할 기능
이번에는 만들지 않을 기능
기능별 작동 규칙
완료 기준
PRD를 먼저 작성하라고 하는 이유 중 하나가 바로 여기에 있습니다. AI가 PRD를 읽으면 기능 범위를 임의로 상상하지 않고, 이미 정한 사용자 흐름과 완료 기준에 따라 작업을 나눌 수 있어요.
PRD가 없다면 AI와 PRD를 작성하는 방법부터 확인하세요.
PRD에서 기능 목록을 뽑아달라고 요청해요
기능을 직접 나누기 어렵다면 AI에게 맡기면 됩니다.
다만 바로 코드를 만들게 하지 말고 기능 목록만 먼저 검토하세요.
docs/prd.md를 읽고 첫 버전의 기능을 작은 단위로 나눠줘.
아직 코드를 만들거나 파일을 수정하지 마.
각 기능은 다음 내용을 포함해야 해.
- 사용하는 사람
- 사용자가 하는 행동 한 가지
- 사용자가 확인할 수 있는 결과
- 먼저 끝나야 하는 기능
- 이번 기능에 포함할 내용
- 이번 기능에서 제외할 내용
- 완료 기준
- 직접 확인할 방법
한 기능에 서로 다른 사용자 행동이나 결과가 여러 개 들어가면
더 작은 기능으로 나눠줘.
PRD에서 첫 버전으로 정한 기능만 사용하고
나중에 추가하거나 제외한 기능은 작업 목록에 넣지 마.
추천 구현 순서와 순서를 정한 이유도 설명해줘.
AI가 만든 목록을 보고 기능 사이에 빠진 흐름이나 불필요한 기능이 없는지 확인합니다.
전체 개발 계획까지 정리하려면 PRD를 화면·데이터·작업 순서가 있는 개발 계획으로 바꾸는 방법을 참고하세요.
너무 큰 기능을 찾는 신호
다음 특징이 보이면 기능을 더 나눌 수 있는지 확인하세요.
이름이 넓고 모호해요
회원 기능
예약 시스템
관리자 기능
운동 앱 완성
어떤 사용자가 무엇을 할 수 있는지 이름만 보고 알 수 없습니다.
여러 행동이 한 문장에 들어가요
사용자가 기록을 만들고 수정하고 삭제하며 공유할 수 있다.
하고, 그리고, 및으로 서로 다른 행동이 계속 이어진다면 나눌 수 있어요.
완료됐는지 한 번에 확인할 수 없어요
기능을 확인하려면 여러 화면과 여러 사용자 역할을 오가야 하고, 어디까지 성공해야 완료인지 설명하기 어렵다면 범위가 클 수 있습니다.
AI가 다음 기능까지 함께 바꿔야 해요
운동 기록 저장을 요청했는데 친구 공유, 통계와 알림까지 함께 수정해야 한다면 기능 사이의 경계가 분명하지 않은 상태일 수 있습니다.
너무 작게 나누는 것도 도움이 되지 않아요
기능을 작게 나누라는 말이 모든 코드 변경을 따로 요청하라는 뜻은 아닙니다.
버튼 하나 추가해줘.
버튼 글자를 바꿔줘.
버튼을 서버와 연결해줘.
성공 문구를 보여줘.
서로 연결된 작업을 지나치게 나누면 AI가 전체 목적을 놓치고 중간 상태만 많이 만들 수 있어요.
좋은 기능 단위는 작지만 사용자에게 의미 있는 결과가 있습니다.
너무 큼
→ 운동 기록 기능을 완성해줘.
너무 작음
→ 저장 버튼을 추가해줘.
적당함
→ 사용자가 오늘 운동을 입력하고 저장 결과를 확인할 수 있게 해줘.
구현할 때는 기능 하나만 맡겨요
기능 목록과 순서를 확인했다면 첫 번째 기능만 구현하게 합니다.
개발 계획의 첫 번째 기능만 만들어줘.
작업을 시작하기 전에 다음 내용을 다시 보여줘.
- 이번 기능의 사용자 행동과 결과
- 포함할 내용과 제외할 내용
- 영향을 받는 화면·서버·데이터
- 완료 기준과 확인 방법
확인한 범위 안에서만 코드를 수정해줘.
작업을 마치면 완료 기준별 확인 결과와
직접 확인할 때 따라갈 순서를 알려줘.
다음 기능은 시작하지 마.
마지막 문장이 중요합니다. AI는 다음에 필요할 작업을 발견하면 미리 진행하려는 경향이 있어요.
필요한 작업을 발견하더라도 현재 기능과 직접 관련이 없다면 목록에만 남기고 시작하지 않게 하세요.
기능 하나를 마친 뒤 직접 확인해요
AI가 완료했다고 말하면 다음 기능으로 넘어가기 전에 실제 결과를 확인합니다.
- 사용자의 처음 행동부터 따라가 봤나요?
- 정상 입력이 원하는 결과를 만들었나요?
- 잘못된 입력을 안내하나요?
- 새로고침하거나 앱을 다시 열어도 데이터가 맞나요?
- 인터넷이나 저장에 실패했을 때 입력 내용이 남아 있나요?
- 이번 기능에서 제외한 내용까지 바뀌지 않았나요?
문제가 있다면 현재 기능 안에서 수정하고 다시 확인하세요. 확인하지 않은 상태에서 다음 기능을 추가하면 어느 작업에서 문제가 생겼는지 찾기 어려워집니다.
작동하는 기능 하나를 마쳤다면 작업 기록을 남기기 좋은 시점입니다. commit을 언제 해야 하는지 설명한 글에서 이어서 확인할 수 있어요.
다음 기능으로 넘어가는 기준
다음 조건을 모두 만족하면 다음 기능을 시작합니다.
사용자 행동이 처음부터 끝까지 이어짐
완료 기준을 모두 확인함
오류와 빈 상태를 확인함
제외한 범위가 바뀌지 않음
확인 결과와 남은 문제를 기록함
다음 기능을 시작할 때는 이전 기능과 연결되는 부분을 먼저 설명하게 하세요.
이제 개발 계획의 다음 기능을 검토해줘.
아직 코드를 수정하지 말고
완료한 기능과 어떻게 연결되는지,
새로 추가하거나 바꿔야 할 데이터가 무엇인지,
완료 기준을 어떻게 확인할지 먼저 설명해줘.
정리
“기능을 작게 나누세요”라는 말만으로는 어디까지 나눠야 할지 알기 어렵습니다.
기능 하나는 화면 하나나 기술 하나가 아닙니다.
사용자 한 명
+ 행동 한 가지
+ 확인할 수 있는 결과
+ 분명한 완료 기준
- PRD로 사용자, 첫 버전의 범위와 작동 규칙을 먼저 정합니다.
- AI에게 PRD를 읽고 기능 목록만 만들게 합니다.
- 기능마다 포함할 내용과 제외할 내용을 함께 적습니다.
- 사용자가 결과를 확인할 수 있는 크기로 나눕니다.
- 한 기능만 구현하고 완료 기준을 확인한 뒤 다음으로 넘어갑니다.
AI에게 한 번에 많은 기능을 요청하는 것이 빠른 바이브코딩은 아닙니다. 작동하는 기능 하나를 만들고 확인하는 일을 반복하는 것이 가장 빠르게 완성하는 방법입니다.
기능을 나누기 전에 프로젝트 전체 범위부터 너무 크다면 바이브코딩 프로젝트가 중간에 꼬이는 이유와 첫 버전을 줄이는 기준을 먼저 확인해보세요.
코딩 경험이 없어 무엇부터 배워야 할지 고민된다면 코딩을 몰라도 시작할 수 있는 것과 만들면서 익혀야 하는 것을 먼저 살펴보세요.
인스타그램 @ddukddak.build · 페이스북 뚝딱








