반복적 개발
Iterative Development
개념
같은 대상을 여러 주기에 걸쳐 다시 손대며 조금씩 완성도를 높여 가는 개발 방식입니다.
등장 배경
한 번에 제대로 만들자는 생각이 오래 기본이었습니다. 무엇을 만들지 먼저 다 적고, 설계하고, 개발하고, 마지막에 시험합니다. 워터폴이라고 부르는 이 순서는 단계마다 끝을 확인하고 넘어가니 관리하기 좋아 보였습니다.
문제는 첫 단계의 전제였습니다. 무엇을 만들지 처음에 다 안다는 전제인데, 화면을 실제로 써 보기 전에는 아무도 모르는 것들이 있습니다. 검색 결과를 몇 개씩 보여 줘야 하는지, 필터를 위에 둘지 옆에 둘지는 문서에 적어 두고 합의할 수는 있지만 옳았는지는 써 봐야 압니다.
그래서 개발이 끝난 뒤의 회의가 늘 같은 모양이 됐습니다. 6개월 만에 완성된 화면을 처음 본 사람이 "이게 아닌데요" 라고 말하고, 만든 쪽은 "이건 승인하신 문서 그대로입니다" 라고 답합니다. 둘 다 맞는 말입니다. 문서를 쓸 때 몰랐던 걸 화면을 보고 알게 됐을 뿐인데, 고치려면 6개월을 되돌려야 합니다.
반복적 개발은 이 전제를 버린 방식입니다. 모르는 채로 시작해도 된다고 두고, 대신 알게 된 것을 반영할 기회를 여러 번 만듭니다. 6개월에 한 번 보는 대신 2주에 한 번 보면 "이게 아닌데요" 가 나와도 되돌릴 것이 2주 치입니다.
작동 방식
한 주기 안에서 기획·설계·구현·확인을 모두 돌리고, 그 결과를 보고 다음 주기에 같은 대상을 다시 손댑니다. 단계를 한 번씩 거치고 끝내는 대신 작은 순환을 여러 번 도는 구조입니다.
검색 화면을 만든다고 하면 이렇게 흘러갑니다.
- 1주기에는 검색어를 넣으면 결과가 나오는 데까지만 만듭니다. 정렬도 필터도 없고 화면도 거칠지만 실제로 검색은 됩니다.
- 만든 것을 씁니다. 팀 안에서 쓰거나 일부 사용자에게 열어 둡니다. 여기서 문서로는 안 보이던 것이 보입니다. 결과가 20개씩 나오는데 원하는 게 늘 아래쪽에 있다거나, 사람들이 검색어를 두 단어 이상 넣는다는 사실 같은 것입니다.
- 2주기에는 그 결과를 반영해 같은 화면을 다시 손댑니다. 최근 문서를 위로 올리는 정렬을 붙이고, 두 단어를 넣었을 때의 처리를 고칩니다.
- 3주기에도 같은 화면으로 돌아옵니다. 이번에는 결과가 뜨는 데 3초 걸리는 문제를 손봅니다.
같은 화면에 세 번 돌아온다는 점이 이 방식의 표시입니다. 한 번 끝낸 것을 다시 여는 게 낭비처럼 보이지만, 세 번 나눠 들어간 덕분에 2주기의 정렬 규칙은 짐작이 아니라 1주기에 본 사용 기록을 근거로 정해졌습니다.
이 방식이 성립하려면 조건이 둘 필요합니다. 하나는 주기가 짧아야 한다는 것입니다. 한 바퀴가 6개월이면 고칠 기회가 1년에 두 번뿐이라 워터폴과 다를 바 없습니다. 다른 하나는 매 주기 끝에 실제로 돌아가는 것이 나와야 한다는 점입니다. 화면 설계만 끝난 상태로는 3번 단계에서 반영할 관찰이 나오지 않습니다.
쓰이는 곳
스프린트처럼 고정된 주기로 일하는 팀이 이 방식을 그대로 담고 있습니다. 2주마다 결과물을 내놓기로 정해 두면 한 바퀴의 길이가 정해지고, 주기 끝의 회고는 만든 것뿐 아니라 만드는 방식까지 같은 주기로 다시 보게 만듭니다.
제품을 처음 내놓을 때도 이 방식으로 접근합니다. MVP는 가설을 확인할 수 있는 최소한의 제품인데, 내놓고 끝나는 게 아니라 반응을 보고 다음 판을 만드는 출발점입니다. 첫 판에서 사람들이 예상과 다른 곳을 누른다는 걸 알게 되면 그게 다음 판의 입력이 됩니다.
디자인 쪽에서도 같은 구조로 돌아갑니다. 와이어프레임으로 배치만 잡아 한 번 보고, 프로토타입으로 눌러 볼 수 있게 만들어 또 보고, 실제 화면으로 다시 봅니다. 같은 화면을 세 가지 밀도로 세 번 그리는 셈인데, 배치가 이해되는지, 흐름이 막히지 않는지, 실제 데이터를 넣어도 무너지지 않는지로 질문이 좁혀집니다.
실무 용례
"이번 주기엔 일단 되게만 만들고 정렬은 다음에 붙이죠."
완성도를 뒤로 미루는 대신 한 바퀴를 먼저 돌자는 제안입니다.
"이건 1차로 내보내고 반응 보고 2차에서 다듬읍시다."
지금 판단할 근거가 부족하니 써 본 결과를 근거로 삼자는 말입니다.
"지난 주기에 본 것 반영해서 이번에 같은 화면 다시 엽니다."
끝난 작업을 다시 여는 것이 계획된 순서라는 뜻입니다.
페이지덱의 문서 검색 기능이 이렇게 만들어졌습니다. 지현이 첫 주기에 담은 것은 검색어 하나로 제목만 찾는 기능이었습니다. 민서가 만든 화면도 입력창과 목록뿐이었고, 태오는 본문 검색을 빼자고 했습니다. 정확도를 맞추는 데 시간이 오래 걸리는데 그게 필요한지부터 확인하자는 이유였습니다.
2주 뒤에 본 기록에서 사람들이 제목이 기억나지 않아 본문의 문장을 넣고 있다는 게 드러났습니다. 그래서 2주기에 본문 검색이 들어갔고, 3주기에는 결과가 너무 많아 못 찾는다는 의견을 받아 작성자와 기간으로 좁히는 기능이 붙었습니다. 세 주기 모두 같은 화면을 열었고, 매번 무엇을 붙일지는 앞 주기의 관찰이 정했습니다.
흔한 오해
같은 것을 여러 번 만드니 낭비라고 읽는 경우가 가장 많습니다. 한 번에 제대로 만들면 한 번만 하면 될 일을 세 번 한다고 보는 겁니다. 실제로 다시 손대는 비용은 분명히 듭니다. 다만 견줄 대상은 한 번에 맞히는 경우가 아니라 6개월 뒤에 틀렸다는 걸 알게 되는 경우입니다. 2주기에 정렬 규칙을 고치는 데 사흘이 들고, 같은 것을 다 만든 뒤에 고치면 3주가 듭니다.
계획 없이 그때그때 만드는 방식으로 오해하기도 합니다. 반복한다는 말이 즉흥과 가깝게 들려서입니다. 실제로는 한 주기 안에 무엇을 확인할지가 정해져 있고 그 확인 결과가 다음 주기의 입력이 됩니다. 확인할 질문이 없는 반복은 그냥 같은 자리를 도는 것이라, 세 주기를 돌고도 왜 이 화면이 이렇게 생겼는지 아무도 설명하지 못하는 상태가 됩니다.
점진적 개발과 같은 말로 쓰는 것도 흔합니다. 둘 다 짧게 나눠 여러 번 내보내니 겹쳐 보입니다. 나누는 방향이 다릅니다. 반복적 개발은 같은 대상을 여러 번 덧칠해 선명하게 만들고, 점진적 개발은 부분을 하나씩 완성해 붙여 나갑니다. 검색 화면을 거칠게 만들어 두고 세 번 다듬으면 앞쪽이고, 그 화면을 완성해 내보낸 뒤 필터 화면을 통째로 붙이면 뒤쪽입니다. 실제 팀은 둘을 섞어 씁니다.
같이 보면 좋은 페이지
마지막 업데이트 2026-09-16