소프트웨어 개발
실제 사례는 공개 기록을 바탕으로, 가상 사례는 개념을 설명하기 위한 설정으로 작성했습니다.
예약 화면보다 먼저 살펴본 대기 줄
요구사항 추출 — 만들기 전에 불편을 확인한다
예약 앱을 만들기 전에 수리점의 대기 원인을 살펴보니 부품 확인이 늦었습니다. 방문 전에 부품 보유 여부를 확인하고 안내하는 기능을 먼저 정했습니다.
이야기 읽기 →저장된 휴가 신청을 승인할 사람이 없었다
테스트 케이스와 완료 기준 — 같은 결과를 확인한다
인사팀과 개발팀은 팀장 부재 중 신청을 시험해 대리자 전달과 신청자 안내까지 완료 조건에 넣었습니다.
이야기 읽기 →배송비 계산이 화면마다 달랐다
업무 규칙 — 프로그램이 지켜야 할 약속을 찾는다
배송비를 계산할 공통 기능을 두고 할인 후 금액을 기준으로 삼았습니다. 장바구니와 결제 화면은 같은 계산 결과를 사용했습니다.
이야기 읽기 →전국 예약을 만들기 전에 한 지점의 예약을 끝내 봤다
점증적 개발 — 작은 변경으로 일찍 확인한다
한 지점의 접수 예약을 먼저 사용해 수리 시간과 접수 시간의 차이를 확인한 뒤 기사 배정과 지점 범위를 넓혔습니다.
이야기 읽기 →문자 발송 때문에 주문 저장까지 바뀌었다
응집도와 결합도 — 모듈의 역할을 모으고 서로의 의존을 줄인다
문자 업체를 바꿀 때 주문 계산까지 고치지 않도록 계산·저장·알림을 나눴습니다. 문자 발송 실패 시에는 주문을 유지하고 발송만 다시 시도했습니다.
이야기 읽기 →정상 할인만 시험한 행사
검증 — 중요한 실패를 먼저 잡는다
쿠폰의 만료·재사용·최소 주문 금액을 시험했습니다. 화면을 우회한 요청에서도 서버가 할인 조건을 검사하도록 했습니다.
이야기 읽기 →응답이 없다고 결제를 다시 보냈다
트랜잭션과 실패 처리 — 응답이 끊겨도 실제 처리 결과를 확인한다
결제 응답이 끊긴 주문은 상태를 먼저 조회했습니다. 같은 요청 번호를 다시 받아도 새 결제를 만드는 대신 기존 결과를 확인했습니다.
이야기 읽기 →괄호 처리 코드를 지우기 전에 확인한 배송 주소
리팩토링 — 기존 동작을 보존하며 개선한다
택배 주소가 잘리던 조건을 시험으로 보호하고, 세 곳에 복사된 변환 코드를 공통 함수로 모았습니다.
이야기 읽기 →배포 파일은 되돌렸는데 데이터는 남았다
배포와 복구 — 실제 환경에서 확인하고 실패 시 되돌린다
새 주문 상태를 옛 프로그램이 읽지 못했습니다. 팀은 두 버전이 함께 읽을 수 있는 전환 기간을 두고 배포와 복구를 시험했습니다.
이야기 읽기 →오류는 없는데 고객이 떠났다
관찰과 피드백 — 공개 후 실제 사용을 확인한다
검색 응답은 성공했지만 이미지 표시가 늦었습니다. 클릭부터 결과 표시까지 측정해 고객이 실제로 기다리는 과정을 개선했습니다.
이야기 읽기 →누가 고친 파일이 운영에 올라갔을까
형상관리와 버전 기록 — 변경의 이유를 남긴다
메신저로 주고받던 수정 파일을 버전 관리에 모았습니다. 긴급 수정도 기록하고 어느 버전을 배포했는지 표시했습니다.
이야기 읽기 →검토에서 발견한 다른 고객의 주문
코드 검토 — 다른 사람이 이해할 수 있는지 확인한다
주문 번호만 바꾸면 다른 고객 자료를 볼 수 있었습니다. 서버에서 해당 주문의 고객과 로그인한 사용자가 같은지 검사했습니다.
이야기 읽기 →마지막 한 자리를 두 사람이 예약했다
동시성 — 여러 사용자가 함께 행동하는 상황을 다룬다
잔여 좌석의 조건부 차감에 성공한 요청만 예약을 확정하고, 겹친 신청 중 한 건만 성공하는지 시험했습니다.
이야기 읽기 →배송 중인 주문을 취소할 수 있었다
FSM과 상태 전이 — 현재 상태에서 가능한 다음 동작을 정한다
배송 중인 주문을 취소로 바꾸지 못하게 하고 반품 요청으로 안내했습니다. 화면마다 다른 상태 변경 규칙도 함께 정리했습니다.
이야기 읽기 →이름만 바꾼 응답 필드
인터페이스 계약 — 프로그램 사이의 입력·출력 규칙을 관리한다
고객 이름 항목을 바꾸면서 이전 앱이 멈췄습니다. 팀은 옛 항목을 일정 기간 유지하고 앱팀과 전환 시점을 합의했습니다.
이야기 읽기 →최신 라이브러리로 바꾼 뒤 빌드가 멈췄다
의존성 관리 — 외부 코드를 제품의 일부로 취급한다
라이브러리를 설치할 때마다 최신 버전을 받자 빌드 결과가 달라졌습니다. 버전을 고정하고 갱신할 때 변경 내용과 시험 결과를 확인했습니다.
이야기 읽기 →시험 주문이 실제 고객에게 발송됐다
설정 분리 — 시험 서버와 실제 서비스의 설정을 구분한다
실제 문자 발송 설정을 복사해 시험 주문이 고객에게 전달됐습니다. 시험 환경에서는 정해진 번호에만 발송하도록 제한했습니다.
이야기 읽기 →오류 안내가 입력 내용을 지웠다
사용자 경험 — 오류가 나도 작업을 이어 갈 수 있게 돕는다
날짜 하나가 틀려도 신청서 전체를 지우지 않도록 바꿨습니다. 나머지 입력을 유지하고 고칠 항목과 방법을 표시했습니다.
이야기 읽기 →급한 복사 코드가 다음 변경을 막았다
기술 부채 — 개선을 미룰 때 늘어날 유지보수 비용을 기록한다
세 화면에 복사한 할인 코드를 한곳에 모았습니다. 미룬 정리 작업은 어떤 변경을 어렵게 하는지와 담당자를 함께 남겼습니다.
이야기 읽기 →가끔 실패한다는 보고를 재현 가능한 기록으로
문제 재현 — 추측보다 증거로 원인을 좁힌다
실패한 파일의 크기·형식·처리 단계와 연결 조건을 확인했습니다. 큰 파일을 느린 연결에서 보낼 때 시간 제한에 걸리는 상황을 다시 만들어 수정 결과를 시험했습니다.
이야기 읽기 →