[Project design] 요건 정의(요구 사항 정리)


Study/Project design  2020. 12. 9. 19:26

안녕하세요. 명월입니다.


이 글은 요건 정의(요구 사항 정리)에 대한 글입니다.


요건 정의는 프로그램 공정에 상관없이 어떠한 프로젝트라도 반드시 정리해야 하는 단계입니다. 요건 정의라는 것은 프로그램을 왜 만드는 것인가, 어떻게 활용할 것인가를 정의하는 것과 같습니다.


프로그램이라는 것은 거의 대부분 어떠한 정보를 수집해서 그것은 어떻게 보기 좋게 출력하고 통계 및 산술 수치를 계산하는 것이 대부분입니다. 거의 대부분이라고 하는 것은 꼭 데이터 수집만이 목적이 아닌 편리성을 위한 배치, 사람이 할 수 없는 일을 하는 로봇이나 기계를 조종하기 위한 프로그램도 존재합니다. 그러나 저는 주요 프로젝트가 웹 프로그램이고 웹 프로그램이라는 것은 보통 어떠한 데이터를 수집, 게시가 주요 목적이 많습니다.


웹 프로그램이라는 것을 좀 더 자세히 설명하면 보통 많이 만드는 형식이 신청이나 요청등의 페이지로 데이터를 생성하면 유저나 프로그램에 의해 데이터가 수집, 가공이 되어 데이터가 산출이 되고 최종적으로 웹 페이지에 테이블이나 통계 그래프 등을 통해 표시하는 것이 일반적입니다.

물론 특수한 요청 사항에 의해 신청이나 요청은 생략이 되고 봇이나 수집, 검색 프로그램에 의해 데이터가 자동 생성되고 표시하는 방법도 많이 있습니다.


이런 형태로 보았을 때, 웹 프로그램의 요건 정의의 구조는 Input -> Calculate -> Output의 형태로 정의를 하면 정의가 됩니다.

위 예제는 제가 간단하게 작성한 요건 정의 표입니다. 실제에서는 좀 더 자세한 내용이 있을 수 있지만 기본적으로 Input, Calculate, Output의 내용이 있으면 설계를 할 때 어떠한 내용이 중요하게 있어야 하는지, 코딩의 Unit 테스트의 구분과 시나리오 테스트의 액션 형태를 정의할 때 매우 편해집니다.

위 구조는 개인적으로 이렇게 하면 편하다라는 것이지 저런 방법이 정답이다라는 것은 아니니 참고하시는 게 좋을 듯 싶습니다.


요건 정의의 구조를 생각했으면 누구로 부터 요건 정의를 받는 지 생각해 보겠습니다.

보통 프로그램은 내가 필요해서 만드는 경우도 있지만 누군가에게 프로그램 개발의 요청이 오는 경우가 많습니다. 그 요청이 고객이 될 수도 있고 직장 상사나 사장이 되거나 다른 부서에서 필요에 의한 개발 요청이 있을 수 있습니다.

요청의 종류는 매우 다양하지만 형태는 거의 비슷합니다.

먼저 요청자의 형태는 먼저 관리자가 있습니다. 이 관리자는 프로그램의 모든 권한을 가지는 관리자이면서 특히 데이터가 정리된 통계를 보거나 최종적인 데이터를 확인하는 유저입니다.

그리고 일반 유저가 있습니다. 일반 유저는 권한에 따라 열람할 수 있는 데이터가 한정되어 있고 대부분 프로그램에 데이터를 입력하는 주체가 됩니다.

그 다음은 운영자가 있습니다. 운영자는 실제 프로그램의 주요 트랜젝션 데이터를 다루는 주체는 아니고 마스터 데이터의 코드 추가, 관리 등을 관리하는 유저입니다.

그리고 개발자가 있습니다. 이 개발자는 내가 될 수도 있고 프로젝트가 끝났을 때, 프로그램을 인계해야 할 대상이 되는 유저입니다.


각각 요청자의 타입에 따라 프로그램을 바라보는 시선이 다르고 원하는 요구 사항이 확연하게 다릅니다.

즉, 요건 정의를 할 때는 요청자 타입을 생각하고 요건 정의를 구성하는 것이 좋습니다.


데이터의 형태의 관한 요건 정의입니다.

업무에 따라 이 데이터의 형태는 천차 만별인데, 보통은 하나의 큰 데이터를 놓고 데이터 추가, 수정등을 거치며 완성된 데이터가 나오는 것이 일반적입니다.

예를 들면, 우리가 도서관 책을 대여, 관리 프로그램을 만드는 것을 가정해 봅시다.

최초에 책을 빌릴 때 책 대출이라는 데이터가 생깁니다. 이것을 우리는 메인 객체(Main entity)라고 이야기 합시다.

먼저, 누군가가 책을 빌리려고 컴퓨터에 앞에 신청 버튼을 누르면 최초의 메인 객체(Main entity)가 작성될 것입니다.

이 메인 객체(Main entity)에 고객 정보를 연결하고, 또 어떤 책을 빌리는 연결하고 ,대출 일시를 넣고 최종 반납 예정일 까지 계산해서 생성합니다.

그리고 이 메인 객체(Main entity)는 대출 담당자에게 넘어가서 대출 담당자가 추가 내용을 입력하고 승인이라는 데이터를 입력합니다.

그 후 다시 이 메인 객체(Main entity)를 통해 최초 작성한 유저에게 승인이라는 정보를 알려주고 데이터의 스케줄이나 기타 프로그램등으로 데이터를 넘깁니다.

다시 그 스케줄러는 이 메인 객체를 가지고 반납 일시가 가까우면 해당 유저에게 메시지나 문자등을 통해서 반납 요청을 합니다.

그리고 유저가 다시 반납을 하기 위해 반납 버튼을 누르면 반납 담당자에게 메인 객체(Main entity)가 넘어가게 됩니다.

그리고 이 반납 담당자는 책을 확인하고 반납 완료해서 메인 객체(Main entity)를 Log로 넘겨 버립니다.


위 예제에서 보면 메인 객체(Main entity)라는 것이 최초에 생성되서 중간에 데이터 수정, 관리등을 통해서 다루어지게 됩니다.

즉, 어떠한 업무던지 이런 메인 데이터가 존재할 것입니다. 먼저 이것을 파악해야 합니다.

그리고 이 데이터를 어떻게 다룰 것인지 요건 정의를 작성하게 됩니다.


요건 정의라는 것은 사실 정확하게 이렇게 해야한다라고 정해진 방법이라는 것은 없습니다. 사실 업무에 따라 천차 만별이 되는 것이 이 요건 정의입니다.

그래도 저의 경우는 위의 3가지 요건 Input, Calculate, Output의 요건 구조, 요청자 타입, 데이터의 구조을 분리해서 생각하면 거의 정리가 되는 요건 정의가 되더라고요.

많은 분들이 참고해서 도움이 되었으면 합니다. 혹시 무언가 추가하거나 더 좋은 방법이 있으면 알려주세요.


여기까지 요건 정의(요구 사항 정리)에 대한 글이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.