API 설계에서 중요한 점은 각 엔드포인트가 명확하게 정의되고, 각 기능에 필요한 데이터가 적절하게 반영되는 것이다.
bookId
cartItemId
, bookId
, count
orderId
, items
, delivery
totalPrice
, deliveryDetails
좋아요 API
장바구니 API
장바구니 담기
Method: POST
URI: /cart
설명: 도서를 장바구니에 추가
Request Body: { bookId: "도서 id", count: "수량" }
장바구니 조회
Method: GET
URI: /cart
설명: 장바구니에 담긴 도서 목록을 조회
장바구니 삭제
Method: DELETE
URI: /cart/(bookId)
설명: 장바구니에서 특정 도서를 삭제
주문 API
주문 예상 상품 목록 조회
Method: GET
URI: /cart
설명: 선택된 장바구니 항목의 주문 예상 목록을 조회
Request Body: [cartItemId, cartItemId, …]
주문 목록(내역) 조회
Method: GET
URI: /orders
설명: 사용자의 주문 내역을 조회
주문 상세 상품 조회
Method: GET
URI: /orders/{orderId}
설명: 특정 주문의 상세 내역을 조회
Books (도서 정보 저장)
CREATE TABLE books (
book_id SERIAL PRIMARY KEY,
title VARCHAR(255),
summary TEXT,
author VARCHAR(255),
price DECIMAL(10, 2)
);
Likes (사용자가 좋아요 표시한 도서 정보 저장)
CREATE TABLE likes (
like_id SERIAL PRIMARY KEY,
user_id INTEGER,
book_id INTEGER REFERENCES books(book_id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Carts (사용자 장바구니 정보 저장)
CREATE TABLE carts (
cart_id SERIAL PRIMARY KEY,
user_id INTEGER,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CartItems (장바구니에 담긴 각 도서 정보 저장)
CREATE TABLE cart_items (
cart_item_id SERIAL PRIMARY KEY,
cart_id INTEGER REFERENCES carts(cart_id),
book_id INTEGER REFERENCES books(book_id),
count INTEGER
);
Orders (주문 정보 저장)
CREATE TABLE orders (
order_id SERIAL PRIMARY KEY,
user_id INTEGER,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
address VARCHAR(255),
receiver VARCHAR(50),
contact VARCHAR(20),
total_price DECIMAL(10, 2)
);
OrderItems (주문에 포함된 각 도서 정보 저장)
CREATE TABLE order_items (
order_item_id SERIAL PRIMARY KEY,
order_id INTEGER REFERENCES orders(order_id),
book_id INTEGER REFERENCES books(book_id),
count INTEGER,
price DECIMAL(10, 2)
);
장바구니 기능 설계하는 과정에서 결제가 필요하다는 요구사항 발생! 이를 추가해준다.
결제하기 (주문 등록)
{
"items": [
{
"cartItemId": "장바구니 도서 id",
"bookId": "도서 id",
"count": "수량"
},
{
"cartItemId": "장바구니 도서 id",
"bookId": "도서 id",
"count": "수량"
}
],
"delivery": {
"address": "주소",
"receiver": "이름",
"contact": "010-0000-0000"
},
"totalPrice": "총 금액"
}
현업에서는 API 설계가 매우 중요할 것이고, 데이터베이스 스키마 역시 효율적이고 확장 가능한 설계가 중요할 것이다. 설계가 튼튼하다면 시스템의 안정성과 유지 보수성을 높일 수 있다. 이러한 설계 과정은 개발 초기 단계에 충분히 검토하고 논의해야 할 것이다. 혼자 해결할 수 있는 문제라기 보다 팀원들의 피드백도 반영하여 최대한 개선해 나가는 방향이 옳을 것이다. 현업에서는 한 달 가까이 걸쳐 정하는 부분이라는 강사님의 말씀에 충분히 그럴 수 있단 생각을 했다...