📚요약
지난 시간에 새로운 SQL을 배우고 기능까지 구현했습니다. 이번 시간에는 좋아요 API를 구현하고 책 API에 likes(좋아요 수)와 is_like(좋아요 누른 여부)를 구현해 보겠습니다.
📖SQL
📄count()
count()를 사용하면 테이블의 행 수를 셀 수 있습니다. 개수가 필요한 경우나 존재하는지(0과 1로 구분 가능)를 확인할 수 있습니다.
SELECT count(*) FROM table;
📄AS
테이블 칼럼명이 마음에 안 드는 경우도 있습니다. 그렇다고 마음대로 테이블의 칼럼을 바꾸면 곤란한 상황이 올 수 있습니다. 그럴 때 사용하는 것이 AS를 통해서 별명(다른 이름)을 만들어서 사용하는 것입니다.
SELECT 기존컬럼명 AS 원하는컬럼명 FROM table;
📄서브 쿼리
서브 쿼리란 쿼리 안에 쿼리를 의미합니다. 쉽게 말해 기존 쿼리가 있고 그 안에서 또 다른 쿼리를 사용하는 것입니다. 다양한 예시가 있지만 SELECT문으로 예시를 들겠습니다.
SELECT *, (SELECT 필요한컬럼 FROM table2) FROM table1;
자세한 내용은 해당 글을 참고하면 좋을 것 같습니다.
[MYSQL] 📚 서브쿼리 개념 & 문법 💯 정리
서브쿼리(Subquery) 서브쿼리(subquery)란 다른 쿼리 내부에 포함되어 있는 SELETE 문을 의미한다. 서브쿼리를 포함하고 있는 쿼리를 외부쿼리(outer query)라고 부르며, 서브쿼리는 내부쿼리(inner query)라
inpa.tistory.com
📄EXISTS
단어 그대로 값이 존재하는지의 여부를 확인하는 함수입니다. count()로도 확인할 수 있지만 직관적으로 알아보기에는 EXISTS가 좋아 보입니다. 존재 여부는 0은 존재하지 않고, 1은 존재하는 것을 의미합니다.
SELECT EXISTS (SELECT * FROM table WHERE id = id);
📖좋아요 API
📄구현


📑좋아요
좋아요는 INSERT문으로 구현했습니다. JWT를 이용하면 좋겠지만 우선은 테스트 용으로 body에 userId를 담아서 동작을 확인합니다.
📑좋아요 취소
좋아요 취소는 DELETE문으로 구현했습니다. 좋아요와 마찬가지로 body에 userId를 담아서 동작을 확인합니다.
📖책 API
📄구현


기존 구현되어 있던 API에 likes(좋아요 수)와 is_like(좋아요 여부)를 추가했습니다.
likes의 경우 count()를 사용해서 likes 테이블에서 책에 대해 좋아요가 눌린 수를 가져왔습니다.
SELECT *,
(SELECT count(*) FROM likes WHERE books.id = liked_book_id) AS likes
FROM books;
is_like의 경우 count()를 활용할 수 있지만 좀 더 직관적인 느낌을 위해 EXISTS를 활용했습니다.
SELECT *,
(SELECT count(*) FROM likes WHERE books.id = liked_book_id) AS likes,
(SELECT EXISTS (SELECT * FROM likes WHERE user_id = ? AND liked_book_id = ?)) AS is_like
FROM books WHERE books.id = ?;
🍯tip! 오늘 강의 내용과 다른 내용이지만 깃 커밋을 실수했다면 push 전 git reset 명령어를 통해 해결할 수 있으니 찾아보면 좋습니다.
❔▪❓
Q. 좋아요 테이블에 PK(기본키)가 없는데 괜찮은가?
A. 없어도 문제는 없다.
→ q. 같은 데이터가 중복해서 입력되는 문제는 어떻게 해야 하는가?
a. 프론트에서 처리하면 중복이 발생할 일이 드물다.
→ q. workbench에서 ReadOnly 테이블이 되어 GUI로 수정을 할 수 없는데 어떻게 해야 할까?
a. pk나 unique한 칼럼을 추가하는 것만이 답인듯 싶습니다…
// 1.
SET sql_safe_updates = 0; // 실패
// 2.
// workbench의 preferences의 safe updates 옵션 해제 // 실패
자세한 코드는 Github에서 확인할 수 있습니다.
ProgrammersSchool/PROJECT-BOOKSHOP at main · nulzi/ProgrammersSchool
프로그래머스 데브코스에서 학습하는 것들을 모아두는 레포. Contribute to nulzi/ProgrammersSchool development by creating an account on GitHub.
github.com
다음 시간에 계속...
출처 & 참고
김송아 강사님의 강의
서브쿼리 개념 & 문법 정리, inpa, 2024.05.27
'개발 > 프로그래머스 데브코스' 카테고리의 다른 글
| 프로그래머스 데브코스 37일차 with. TS 웹 풀스택 (0) | 2024.05.28 |
|---|---|
| 프로그래머스 데브코스 8주차 회고 with. TS 웹 풀스택 (0) | 2024.05.27 |
| 데브코스 스터디(알고리즘, 코테) 10회차 (0) | 2024.05.26 |
| 프로그래머스 데브코스 35일차 with. TS 웹 풀스택 (0) | 2024.05.24 |
| 데브코스 스터디(알고리즘, 코테) 9회차 (0) | 2024.05.23 |