1. 문제
3주차의 과제는 다음과 같다.
* 아래 시나리오 중 한 가지를 선택한다.
1. E-커머스 서비스
2. 맛집 검색 서비스
3. 콘서트 예약 서비스
* 선택한 시나리오의 요구사항을 분석하여 분석 자료를 작성한다.
> 시퀀스 다이어그램, 플로우 차트 등
* ERD 설계하여 자료를 작성한다.
* API 명세서와 Mock API를 작성한다.
이번 주차는 드디어 앞으로 항해 과정동안 함께할 시나리오를 선정하는 주차이다. 각 시나리오 별로 특징들이 있는데 E-커머스 서비스에서는 이벤트 드리븐, 맛집 검색 서비스에서는 검색 기술, 콘서트 예약 서비스에서는 Redis 대기열 구현 방법에 대해 주로 다룬다는 점이었다. (물론 “주로” 다루는 것이지 한 시나리오에서 특정 기술을 아예 다루지 않는다는 것은 아니다.)
생각보다 콘서트 예약 서비스를 선택한 팀이 많았다. 인기 많은 콘서트 예약 서비스를 뒤로하고 우리 팀은 E-커머스 서비스를 선택했다. 아무래도 포괄적으로 여러 기술들을 접목시킬 수 있는 서비스는 E-커머스가 아닐까 하고 선택했던 것 같다.
이번 주차에서 제시한, 앞으로 4~6 주차 동안 구현해야 하는 E-커머스 서비스에서의 요구 사항은 다음과 같았다.
1. 잔액 충전 / 조회 API
2. 상품 조회 API
3. 주문 / 결제 API
4. 상위 상품 조회 API
5. 장바구니 기능
2. 시도
처음에는 이 요구사항에서 얘기하는 입력과 전달해야 할 정보만 가지고 판단해서 “이건 뭐 금방 작성하겠네~” 하고 쉽게 생각했었다. 바로 이 생각으로 기존에 작성한 문서들을 싹 갈아엎게 된 결정적인 실수였다.
요구사항을 더 명확히 분석하지 않고 바로 시퀀스 다이어그램과 플로우 차트를 작성하고, 충분히 고민하지 않고 ERD를 설계하기 시작했다. 여기서 잘못 고려한 점은 다음과 같았다.
* 상품 테이블을 하나로 두고, 상품의 세부적인 정보 (가격, 재고 등) 또한 하나의 테이블에 저장하려 함
* 주문과 결제를 분리해서 고려하지 못하고 하나의 플로우로만 생각함
우선 상품이라는 하나의 테이블 안에 상품의 재고 정보까지 저장하도록 했는데, 이후 실제로 서비스를 구현할 때 재고에 대해 Lock을 걸어야 할 것 같았다. Lock을 걸어야 하는 컬럼은 정규화를 통해 작은 규모의 테이블로 분리하여 거는 게 효율적이기 때문에, 상품의 세부 정보 테이블로 분리해야 할 필요가 있었다.
그리고 주문과 결제… 이 부분은 상당히 큰 실수였다. 주문과 결제를 동일시 생각한 점이다. 처음 생각은 “주문을 하면 당연히 결제가 이루어지니까~” 라고 생각해서 주문과 결제를 하나의 플로우로 묶어서 생각했던 것이다. 하지만 여타 E-커머스 서비스를 보면 알겠지만 주문 화면에서 결제를 하지 않고 뒤로 간 후에 시간이 지난 후 다시 어떤 상품을 주문하려고 할 때 “이전 주문 정보가 존재합니다. 삭제하고 새로운 주문을 하시겠습니까?” 와 같은 알럿 창이 뜨는 서비스를 본 적이 있을 것이다. 이러한 경우는 분명 결제는 하지 않았는데 주문 정보만 저장이 된 것이다. 그래서 주문과 결제는 반드시 함께 일어나는 건 아니라는 점을 깨닫고, 주문 API와 결제 API를 분리하고 주문 테이블과 결제 테이블을 따로 관리하도록 다시 설계했다.
3. 해결
이러한 생각을 다시 하게 된 계기가 바로 멘토링 시간에 코치님과 요구사항을 다시 분석해보며 깨닫게 되었다.
단순히 기획서만 보고 대충 넘어가서 바로 설계 단계로 들어가는 건 비효율적인 방식임을 다시 일깨우게 되었고, 주어진 요구사항에서 내가 어떤 것들을 개발해야 할지 한글로 코딩하는 식으로 작성해보는 과정에 대해 배우게 되었다. 우리에게 가장 익숙한 언어는 바로 한글이기 때문이다. 한글로 먼저 요구사항에 대해 코딩을 해보면 리팩토링할 수 있는 부분도 보이고, 기획서에서 빠진 사항들도 찾을 수 있다.
실제로 이러한 과정들을 멘토링 시간에 코치님이 직접 보여주셨는데, 이런 부분이 시니어 개발자로서 필수적인 역량이 아닐까 생각하게 되었다. 우리가 개발해야 하는 사항들이 명확해지면 이후에 코드로 작성하는 것은 간단하기 때문이다.
4. 알게된 것
결국 요구사항을 빠르게 명확히 파악하느냐가 일 잘하는 개발자이지 않을까 하는 생각을 하게 되었다. 개발 역량이 높은 것과 일 잘하는 것은 다르다고 생각한다. 결국 개발자도 다른 사람들과 협업해야 하는 사람들이기 때문에 다른 사람들이 원하는 바를 정확히 해줄 수 있는 사람이 진짜 일 잘하는 개발자인 것이다.
설계에 대해서도 다시 한 번 깨닫게 되었는데, 설계를 할 때는 내가 작성한 설계 문서를 보고 다른 개발자들이 실제로 구현할 때 어려운 부분은 없을까 고려하면서 해야 보다 꼼꼼한 설계가 가능해지고 좋은 설계 문서가 나온다는 점을 생각하게 되었다.
이번 과제로 알게된 점은 요구사항을 자세히 분석하는 방법, 그리고 이러한 요구사항 분석의 중요성, 그리고 설계 문서를 작성하는 점까지 알게 되었다. 비교적 간단한 과제가 주어진 주차라고 생각이 들었지만, 실제로는 앞으로의 개발자 인생에서 어쩌면 가장 중요한 점을 배우게 되었던 주차였다고 생각이 든다. 결국 이번 주차에 진행한 요구사항 분석과 설계하는 역량이 다른 개발자들과 차별성을 줄 수 있는 가장 큰 역량이 되지 않을까 싶다.
Keep : 현재 만족하고 계속 유지할 부분
필요한 문서를 작성하는 작업에 대해서는 깔끔하게 정리를 잘 하고 있다는 팀원분들의 피드백이 있었다. 이러한 부분은 앞으로도 유지할 것이다.
Problem : 개선이 필요하다고 생각하는 문제점
앞으로는 요구사항을 보다 더 자세히 분석해야 할 것 같다.
Try : 문제점을 해결하기 위해 시도해야 할 것
이번 주차 때 배운 방법을 활용하여 요구사항을 더 정확하게 분석할 수 있는 개발자가 되도록 노력하겠다!
🤩 다음 수료생 추천 할인 혜택!
혹시라도 항해 플러스에 합류하고 싶은데 비싼 수강료 때문에 망설여진다면…? 🤔
수료생 추천 할인 혜택으로 20만 원을 할인받으실 수 있다는 사실! 💡
결제페이지 → 할인 코드 → 수료생 할인 코드에 tJQjYK 입력하면 추가로 20만 원을 할인받는 혜택 꼭 챙겨가시길 바란다🚀🚀🌟
#추천인: tJQjYK #항해플러스 #항해99