Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
Assignment 14 - MISSION (2022. 5. 30.)
by pksl
#pragmatic
2년 전
881

연습문제 33 (p.361)

다음 문장들이 진정한 요구 사항인가? 가능하다면 진정한 요구 사항이 아닌 것을 좀 더 유용하게 고쳐 써 보라.

1. 응답 시간은 500ms 이하여야 한다.

  • API 호출에 대한 응답시간인가? 트랜지션, 애니메이션의 시작부터 사용자 입력이 가능하게 될 때까지의 응답 시간인가?

  • 만약 500ms를 넘게 된다면 어떻게 처리해야 하는가?

2. 모달 창의 바탕색은 회색이다.

  • 테마를 바꿔도 고정되는 색상인가? (일반모드, 다크모드, 기타 테마 등등)

3. 애플리케이션은 프론트엔드 프로세스 몇 개와 백엔드 서버로 구성된다.

  • 너무 밑도 끝도 없어서 이해하지 못했다…

4. 사용자가 숫자가 아닌 글자를 숫자 필드에 입력하면 시스템은 입력 필드를 깜빡이고 입력을 거부한다.

  • 거부할 때 숫자만 입력하라는 경고 메시지 같은 것도 추가해야 하는가?

  • 비단 숫자 뿐 아니라 모든 입력 필드들의 에러가 입력을 거부하도록 해야하는가?

5. 이 임베디드 애플리케이션의 코드와 데이터 크기는 32Mb 이내여야 한다.

  • 사용자 저장 데이터나 캐싱 데이터, 로그 데이터 등의 관리도 32Mb 내에서 고려해야하는 요소로 포함되는가?

연습 문제 33 해답 (p.433)

1. 응답 시간은 500ms 이하여야 한다.

이 문장은 진짜 요구 사항처럼 보인다. 환경 때문에 애플리케이션에 제약을 추가해야 할 수 있다.

2. 모달 창의 바탕색은 회색이다.

이 문장 자체만으로는 진짜 요구 사항이 아니다. 하지만 진짜로 무엇이 필요한지 알아내려면 마법의 질문을 던져야 한다. “왜?”

이것이 회사의 표준일 수 있다. 그렇다면 진짜 요구 사항은 “모든 UI 요소는 메가코퍼레이션 사용자 인터페이스 표준 V12.76을 준수해야 한다.” 같은 것이어야 한다. 우연히 디자인팀이 좋아하는 색깔일 수도 있다. 그렇다면 디자인팀이 생각을 바꿀 가능성도 고려해야 한다. 따라서 요구 사항을 “모든 모달 창의 바탕색은 설정 가능해야 한다. 출시될 때는 회색으로 한다”로 바꾸어야 한다. 더 범위를 넓혀서 “애플리케이션의 모든 시각 요소(색상, 글꼴, 언어)는 설정 가능해야 한다”라고 하면 더 좋다. 아니면 단순히 사용자가 모달 창과 다른 창을 구별할 수 있어야 하는 것일 수도 있다. 그렇다면 더 논의해 볼 필요가 있다.

3. 애플리케이션은 프론트엔드 프로세스 몇 개와 백엔드 서버로 구성된다.

이 문장은 요구사항이 아니다. 이것은 아키텍처다. 이런 종류의 것과 마주쳤다면 사용자가 무슨 생각을 하는지 알아내기 위해 깊이 파고들어야 한다. 확장성 문제인가? 아니면 성능? 비용? 보안? 고객의 대답이 여러분의 설계를 안내할 것이다.

4. 사용자가 숫자가 아닌 글자를 숫자 필드에 입력하면 시스템은 입력 필드를 깜빡이고 입력을 거부한다.

밑에 숨겨진 요구사항은 아마 “시스템은 사용자가 필드에 올바르지 않은 값을 입력하는 것을 막는다. 올바르지 않은 값을 입력하는 경우 경고를 보낸다.” 라는 문장에 더 가까울 것이다.

5. 이 임베디드 애플리케이션의 코드와 데이터 크기는 32Mb 이내여야 한다.

이 문장은 하드웨어의 규격에 맞춘 것 같아 보인다. 아마 꼭 지켜야 하는 요구 사항일 것이다.

회고

애초에 문제부터 잘못 이해했다… 제시된 문장에서 문장에 관련된 정보를 더 끌어내 구현이 가능하도록 만드는 건줄 알았다. ‘문제’라는 요구 사항 부터 제대로 이해하지 못했던 것이기에 여러모로 반성이 된다.

1. 응답 시간은 500ms 이하여야 한다.

  • API 호출에 대한 응답시간인가? 트랜지션, 애니메이션의 시작부터 사용자 입력이 가능하게 될 때까지의 응답 시간인가?

  • 만약 500ms를 넘게 된다면 어떻게 처리해야 하는가?

1번 같은 경우 다짜고짜 ‘응답 시간’에 제약을 걸어서 당황했다. 뭐에 대한 응답 시간인지 명확하지 않았기 때문이다.

하지만 내가 낸 답은 개발을 즉시 진행할 수 있도록 요구 사항을 완성하는 것뿐이었고, 책에서 제시하는 해답에는 한참 부족했다. 핵심은 요구 사항이 500ms로 특정된 걸 보고 환경에 제약이 필요할 것 같다는 식으로 유추해 내는 발상이 부족했다.

2. 모달 창의 바탕색은 회색이다.

  • 테마를 바꿔도 고정되는 색상인가? (일반모드, 다크모드, 기타 테마 등등)

2번의 경우도 핀트를 못잡고 답을 ‘모달 창 이외의 배경 색은?’ , ‘모달 창 내 다른 구성요소들의 색상은?’ 처럼 모달 창에 구성된 색상 요소들을 전부 확정하는 방식으로 접근해서 답이 너무 많아졌었다. 많아도 너무 많아 ‘색’이 아닌 ‘바탕색’ 에 걸치는 질문 하나만 남기고 나머지는 지웠다.

해답을 읽고 감탄했다. 내가 제시한 답 또한 해답에 일부분 수록되어있으나 문제는 ‘진정한 요구사항은 무엇인가?’ 이므로 생각이 한참 부족했다. 애초에 문제를 잘못 이해한 시점부터 생각의 틀에 갇혀버렸다.

3. 애플리케이션은 프론트엔드 프로세스 몇 개와 백엔드 서버로 구성된다.

  • 너무 밑도 끝도 없어서 이해하지 못했다…

가장 답이 궁금했던 건 3번이었다. 처음 읽자마자 ‘다른 정보는…? 이게 끝?’ 하고 당황했다. 그래도 어떻게든 ‘왜 프론트 엔드 프로세스가 “몇 개” 가 되어야 하는가?’ , ‘프론트 엔드의 프로세스는 몇 개로 특정이 됐는데 백엔드에 프로세스 수는 따로 지정하지 않는가?’ 등등… 전체 설계를 아우르는 질문들만 꼬리에 꼬리를 물고 왕창 튀어나오길래 문제의 범위를 벗어난 것 같아 ‘이해하지 못했다…’ 라고 적고 넘어갔었다.

해설을 보니 역시 요구 사항이 아니라 아키텍쳐에 관한 것이라 답을 낼 수 없던 것이었다. 이때는 깊게 파고들어 가서 그렇게 설계하려는 목적을 끌어내는 게 역시 맞는 것이었다.

4. 사용자가 숫자가 아닌 글자를 숫자 필드에 입력하면 시스템은 입력 필드를 깜빡이고 입력을 거부한다.

  • 거부할 때 숫자만 입력하라는 경고 메시지 같은 것도 추가해야 하는가?

  • 비단 숫자 뿐 아니라 모든 입력 필드들의 에러가 입력을 거부하도록 해야하는가?

그나마 가장 문제의 의도에 근접한 답을 낸것이 아닐까 생각한다.

5. 이 임베디드 애플리케이션의 코드와 데이터 크기는 32Mb 이내여야 한다.

  • 사용자 저장 데이터나 캐싱 데이터, 로그 데이터 등의 관리도 32Mb 내에서 고려해야하는 요소로 포함되는가?

용량의 제약을 걸었으면 왜 제약이 걸렸는지 부터 생각하는게 필요했다. 제시된 요구 사항을 깊숙히 파고 들기보다 ‘왜?’ 라는 방식으로 접근해서 유추해 내는 것이다.

여러모로 부족함을 많이 느끼게 될 수 있었던 문제였다. 제시된 요구 사항으로부터 진정한 요구 사항을 끌어낼 수 있도록 생각하는 힘을 길러야겠다.