요구사항 분석
현업에서 개발을 진행할 때 요구사항 분석 과정 없이 바로 개발부터 진행하는 주니어 개발자들이 눈에 많이 보입니다. 개발 이후 막히거나, 기획쪽 수정될 내용을 뒤늦게 찾게되면, 기존 개발했던 로직들을 전반적으로 수정해야해서 개발 시간을 더 달라는 개발자들이 있습니다. 그럴때 저는 반대로 질문합니다.
요구사항 분석 제대로 하셨나요?
개발 전에 충분히 알 수 있었던 내용으로 보입니다만?
개발자 중 어떤 개발자는 질적으로도 속도로도 잘하는 개발자가 있는 방면, 어떤개발자는 코드 리뷰에도 수정될 부분이 많이 발생하고 개발시간도 느리게 개발하는 사람들이 있어요. 그런데 그 중 원인을 분석해보면, 요구사항분석을 개발전에 진행했냐? 안했냐로 구분되기도 합니다.
요구사항 분석 제대로 하기
: 무엇을 개발할 지를 여러분들이 가장 잘 이해하기 쉬운언어로 풀어보는 겁니다.
이번강의에서의 개발할 내용은?
1) 상품(product)
- 사용자가 상품조회(상품정보, 가격정보, 재고수량)
- 상품 조회만 구성하면 되고, 상품 table 에서 상품정보, 가격정보, 재고수량을 확인할 수 있는 컬럼이 있어야 겠구나!
2) 장바구니(cart)
- 장바구니 조회
- 상품을 선택하여 장바구니로 저장
- 장바구니에서는 상품과, 주문하려는 수량과 가격정보가 있어야 겠구나!
3) 주문서(order)
- 장바구니의 상품을 주문 하기위한 주문서
- 내가 구매하려는 제품이 주문가능상태(판매중인지? 재고가 있는지?)인가를 검증해야하고 언제 주문했고,
주문한 수량만큼 재고차감을 해야하겠구나?
그런데 여러상품을 주문하면?
여러상품의 총금액을 계산해야 하고,
상품별 orderDetail table에 저장을 하고 장바구니는 비워줘야 할 것이다.
4) 주문서 상세(orderDetail)
- 주문서에 어떤 상품이 담겼는지 상품 detail 정보
- 여러개 상품을 주문할 수 있기때문에 body역할인 상세 영역이 필요하구나!
(주문서가 총 정보가 기입되어있는 Header의 역할이고 주문서 상세는 Body의 역할)
/*이외에도 커머스서비스를 운영하기 위해서는 많은 기능이 필요한데 왜 주문 중점적으로 하나요?
라는 질문을 할 수도 있을겁니다. 이러한 구조와 기술을 사용해서 하나를 개발할 수 있으면 다른 영역의 유사한 기능들도 개발이 가능할꺼에요
응용하고 다른기능에 적용하는 몫은 여러분의 몫으로 남겨두겠습니다.*/
ERD 설계
학습에 필요한 4개의 table 만 사용해보자!
(개발을 배울때에는 단순한 구조가 좋다!)
product 는 말그래도 상품정보가 저장되는 곳(옵션정보도 나중에 추가해보자!)
order 는 주문정보 저장
하나의 오더번호로 여러 상품을 담을 수 있기때문에 order detail table을 별도로 두었다.
끝으로 cart 정보!
왜 오더와 매핑이 없냐!
저 정보는 말그대로 임시 저장소 같은 존재이다.
오더로 넘어가 버리면, 더이상 존재할 필요가 없고, 주기적으로 비워줘야하는 대상이기 때문이다
그럼 왜 cart 는 detail 로 구분하지 않는것인가?
일반적으로 cart 에 남긴 모든 제품을 주문하기 때문이다.
(파는 사람입장에서도 많이 파는게 이득)
물론, 상황에 따라서는 cart 와 cart detail을 분리해야할 수도 있을 것이다.
이후에 Cart table를 사용하지않고 nosql 관점의 redis를 이용하여 리팩토링을 진행할 예정이다.
[DB Table 생성]
dbdiagram.io - Database Relationship Diagrams Design Tool
dbdiagram.io
※ 위 사이트를 이용해서 ERD를 작성하면, DB 별로 스키마 정보를 자동으로 추출할 수 있다.
CREATE TABLE `order` (
`id` integer PRIMARY KEY AUTOINCREMENT,
`customer_id` integer,
`order_no` varchar(255),
`total_price` integer,
`status` varchar(255),
`created_at` timestamp,
`updated_at` timestamp
);
CREATE TABLE `ordersDetail` (
`id` integer PRIMARY KEY AUTOINCREMENT,
`order_no` varchar(255),
`product_id` integer,
`unit_price` integer,
`qty` integer,
`created_at` timestamp,
`updated_at` timestamp
);
CREATE TABLE `product` (
`id` integer PRIMARY KEY AUTOINCREMENT,
`productname` varchar(255),
`price` integer,
`qty` integer
);
CREATE TABLE `cart` (
`id` integer PRIMARY KEY AUTOINCREMENT,
`customer_id` integer,
`product_id` integer,
`unit_price` integer,
`qty` integer,
`created_at` timestamp,
`updated_at` timestamp
);
TypeORM으로 개발 시에는 entity를 먼저 작성하고, DB를 자동생성하는 순이 편할 것이고,
Prisma이용시에는 상기 내역을 이용하여 DB를 먼저 생성시킨 후 pull, generate을 이용하여 prisma schema를 자동생성하는 방식이 편할 것이다.
(FK관계는 삭제하도록 하자)
'Node js > Nest js 강의 내용' 카테고리의 다른 글
5-1. prisma 기본 (0) | 2024.12.06 |
---|---|
4. controller & service정리 (1) | 2024.12.06 |
3. Nest 프로젝트 생성 및 예상 아키텍처 (0) | 2024.12.06 |
1. Nest js 기본 (간략하게 집고 넘어가보자) (0) | 2024.12.05 |
0. [과정을 들어가면서] 과정소개 (0) | 2024.12.04 |