📚요약
지난 시간 좋아요 API를 추가하고 책 API를 수정했습니다. 이번 시간에는 장바구니 API를 추가해 보겠습니다.
📖SQL
📄IN
여러 조건을 확인하기 위해서 OR을 사용할 수 있습니다. 하지만 조건이 간단한데 많아진다면 SQL만 길어지고 가독성이 떨어지게 됩니다. OR을 여러 번 사용하는 대신 IN을 사용하면 간단하게 사용할 수 있습니다.
SELECT * FROM table WHERE id = 1 OR id = 2 ... OR id = 100;
// 대신
SELECT * FROM table WHERE id IN (1,2,3,...,100);
📖장바구니 API
📄구현




📄테이블 생성 중 발생한 오류
외래키 설정이 안 되는 문제가 발생했습니다. 자세한 문제와 해결은 아래 글을 참고하시면 됩니다.
[MySQL Error 1005 - errno: 121] 외래키 설정이 안되네?
에러 배경MySQL Workbench에서 새로운 테이블을 생성하던 과정에서 기본키, 외래키를 설정하고 생성하려고 apply를 누르니 에러가 발생했다.에러 그 잡채Error 1005: "Can't create table `BookShop`.`baskets`(errno:
nulzi-dev.tistory.com
[MySQL Error 1061] 아니 외래키 이름도 바꿨는데 또 에러야?
에러 배경MySQL Workbench에서 외래키 에러를 해결하자마자 이어서 발생된 에러이다.에러 그 잡채Error 1061: Duplicate key name 'FK_book_id_idx'SQL Statement: ALTER TABLE `BookShop`.`baskets`ADD INDEX `FK_book_id_idx` (`book_id`
nulzi-dev.tistory.com
📑장바구니 추가
INSERT문을 이용해 테이블에 추가하는 방식으로 구현했습니다.
📑전체 목록 조회
SELECT문과 JOIN을 활용해 Front-End에 필요한 정보를 정리해서 넘겨줍니다. 이때 실제 전체 목록이 아닌 user_id를 통해 로그인한 유저의 목록만 보여주어야 합니다.
SELECT baskets.id, book_id, title, summary, quantity, price
FROM baskets LEFT JOIN books
ON baskets.book_id = books.id WHERE user_id = ?;
📑선택된 목록 조회
Front-End에서 요청을 할 때 선택된 장바구니 id를 배열에 담아서 넘겨주기로 했습니다. 선택된 장바구니의 수가 얼마나 될지 모르기 때문에 OR로 하나하나 받아오는 것보다 IN을 활용해 구현했습니다.
SELECT baskets.id, book_id, title, summary, quantity, price
FROM baskets LEFT JOIN books
ON baskets.book_id = books.id
WHERE user_id = ? AND baskets.id IN (?);
이제 여기서 드는 의문은 '배열로 받기로 했는데 IN 뒤의 ?는 한 개여도 괜찮은가?' 하는 의문이 들 수 있습니다. 예전에는 반복문을 통해 ?의 개수를 추가해 주는 작업이 필요했는데, 2021년 이후로는 IN의 ?에 배열을 그대로 집어넣어도 알아서 풀어서 넣어줍니다.
📑장바구니 삭제
DELETE 문을 이용해 테이블에서 삭제하는 방식입니다. 여기서도 중요한 부분은 다른 사용자의 목록을 삭제하면 안 되기 때문에 user_id를 조건으로 사용하는 것이 중요합니다.
❔▪❓
Q. 나는 삭제할 때 사용자를 확인해야 한다고 생각했는데 강사님은 단순하게 삭제하는 것으로 진행하셨는데 괜찮은가?
A. 사용자 확인은 필요한데 JWT를 아직 사용하지 않아서 그럴 것이다.
Q. 선택한 목록 조회를 할 때 FE에서 요청한 배열(selected)의 수와 결과(results)의 수를 비교해보지 않아도 괜찮은가?
A. 확인하면 더 좋다.
q. 예외처리 어디까지 하는게 좋은가?
a1. 큰 예외는 최대한 다 해주지만 사소하다고 생각되는 부분은 어느 정도 생략
a2. 보안 문제를 발생시키는 부분은 상세하게, 다른 부분은 어느 정도 널널하게 ex) 결제
a3. 시간 나는 대로 전부 ⇒ 사용자의 편의가 아닌 개발자의 편의를 위해서
자세한 코드는 Github에서 확인할 수 있습니다.
ProgrammersSchool/PROJECT-BOOKSHOP at main · nulzi/ProgrammersSchool
프로그래머스 데브코스에서 학습하는 것들을 모아두는 레포. Contribute to nulzi/ProgrammersSchool development by creating an account on GitHub.
github.com
다음 시간에 계속...
출처 & 참고
김송아 강사님의 강의
'개발 > 프로그래머스 데브코스' 카테고리의 다른 글
| 프로그래머스 데브코스 39일차 with. TS 웹 풀스택 (0) | 2024.05.30 |
|---|---|
| 프로그래머스 데브코스 38일차 with. TS 웹 풀스택 (0) | 2024.05.29 |
| 프로그래머스 데브코스 8주차 회고 with. TS 웹 풀스택 (0) | 2024.05.27 |
| 프로그래머스 데브코스 36일차 with. TS 웹 풀스택 (0) | 2024.05.27 |
| 데브코스 스터디(알고리즘, 코테) 10회차 (0) | 2024.05.26 |