오늘 배운 내용 📚
- 전체 도서조회와 카테고리별 도서조회
- BookController 분리
추가 정리 내용 📑
- 이미지 테이블 데이터 삽입 및 SQL 작성
오늘 수업에서는 도서 테이블을 생성하고 그에 따른 코드를 작성하였습니다. 도서등록API가 존재하지 않아서 테이블에 직접적으로 데이터를 입력을 해주어야 해서 다음에 시간이 조금 남는다면 해당 API를 작성해봐야겠다는 생각을 했습니다.
작업을 하면서 명세에 작성한 전체 도서조회와 카테고리별 도서 조회에 대해서 생각을 하게 됐습니다.
1-1. localhost:8080/books?category=category&new=true
1-2. localhost:8080/books/category?sort=popular&new=true
조건 : 전체도서조회 / 카테고리별 조회
그냥전체, 그냥카테고리 혹은 카테고리 조건에 맞는 전체 도서목록 등등
이런식으로 데이터를 받아오는데 필요한 코드를 작성하는데 1-1과 1-2중에 어떤 URI 더 효율적인건지 생각을 하게 됐습니다. 전체와 카테고리별 뿐만아니라 신간도서까지 해서 필요한 데이터가 동일한것을 와이어프레임을 통해서 알수 있었는데요. 때문에 1-2로 진행하게되면 같은 코드가 반복이 될거라 생각했습니다. 그래서 1-1로 작업을하기로 하였습니다. 또한 URI를 보고 카테고리명이 들어가있으면 확실하게 URI만으로도 알수있지만 테이블 구조를 보고 많은 테이블을 join하게되면 성능적인 부분에서 문제가 생길수 있기 때문에 일단은 기존 테이블에서 받아볼수 있는 category_id로 진행하기로 했습니다.
이미지테이블의 경우에는 이미지 테이블을 분리를 하였고, 등록시에 메인 이미지에 main 컬럼에 1이 들어가게 설정을 해놓았는데요. 불러올때도 마찬가지로 where절을 이용하여 main의 값이 1인 데이터만 불러오게 설정을 했습니다. 이렇게 설정을 하게되면 1번 도서에 이미지가 5개여도 main이 1인 단하나의 이미지만 선택되어 1번도서 row가 단 하나로 정리가 됩니다.
SELECT
b.idx, b.title, b.category_id,
bi.path as main_image, b.summary,
b.author, b.price, b.pubDate
FROM books as b LEFT
JOIN (SELECT book_id, path, main FROM book_images WHERE main = 1) as bi
ON b.idx = bi.book_id
그리고 SELECT문을 이렇게 작성을 해봤는데 *를 쓰지 않고 하나하나 나열한 이유는 도서의 전체 데이터가 필요한게 아니기 때문입니다. 필요한 데이터를 가져오기위해서 이렇게 필요한 데이터들만 하나하나 작성을 하였고, LEFT JOIN을 보시면 select로 book_images 전체를 받아오는게 아니라 main = 1인 값들만 가져오는것을 확인할 수 있습니다.
만약에 where을 작성하지 않았다면 어떻게 데이터를 받아올까요?
idx | title | category_id | main_image | summary | author | price | pub_Date |
1 | 콩쥐팥쥐 | 0 | 10 | 착한콩쥐, 나쁜팥쥐 | 미상 | 10000 | 2021-12-25 |
1 | 콩쥐팥쥐 | 0 | 11 | 착한콩쥐,나쁜팥쥐 | 미상 | 10000 | 2021-12-25 |
1 | 콩쥐팥쥐 | 0 | 12 | 착한콩쥐,나쁜팥쥐 | 미상 | 10000 | 2021-12-25 |
2 | 바다거북 | 1 | 21 | 바다거북이는... | 홍길동 | 12000 | 2022-10-17 |
2 | 바다거북 | 1 | 22 | 바다거북이는... | 홍길동 | 12000 | 2022-10-17 |
3 | 포켓몬스터도감 | 4 | 157 | 피카츄라이츄파이리꼬북이 | 지우 | 20000 | 2023-07-03 |
where절을 받지 않는다면 이와같은 데이터 테이블을 받아오기때문에 사용하기 불편할 수 있습니다. 때문에 where절을 작성해 주는것입니다. 만약에 where절을 사용하지 않는다면 DISTINCT나 GROUP BY를 이용해 보는방법도 있을것 같습니다.
'프로그래머스 데브코스 > TIL' 카테고리의 다른 글
[Day 39] 웹 풀사이클 데브코스 TIL (0) | 2024.01.05 |
---|---|
[Day 38] 웹 풀사이클 데브코스 TIL (0) | 2024.01.05 |
[Day 35~36] 웹 풀사이클 데브코스 TIL (0) | 2024.01.02 |
[Day 34] 웹 풀사이클 데브코스 TIL (0) | 2023.12.29 |
[Day 33] 웹 풀사이클 데브코스 TIL (0) | 2023.12.28 |