오늘 한일
- 개발하고 있는 프로젝트의 가장 핵심적인 목표는 무엇인가? 라는 의문으로 오늘 하루를 보냈습니다. 고객의 입장에서 프로젝트를 개발해야 하는지, 지금까지 배웠던 Node.js의 기술을 연습하는 것인지, 새로운 기술을 병합하는 것인지, 많이 고민하였지만 확실히 어떤 것을 목표로 삼아야 할지 정하지 못한 하루였습니다.
- 현재까지는 이번 프로젝트의 구성을 최적화시킨다는 것을 목표로 삼았었습니다. DB 구조를 최대한 줄여 불필요한 데이터가 생성되지 않도록 설정하였고, 미들웨어를 사용해 중복된 부분이 존재하지 않도록 코드를 작성하였습니다. 하지만 기술적인 부분에서는 새로운 기술을 도입하지 않아 부족한 느낌이 들었습니다.
- MySQL 서버의 Favorites 테이블과 Posts 테이블을 서브쿼리로 합쳐 case 문으로 Favorites 폴더에 해당하는 postId 가 존재할 경우 반환을 받도록 하는 SQL을 작성하였습니다. 그렇게 어렵지도 않지만 많은 시간을 소요하였고, Sequelize로 표현하는 방법을 찾지 못해 이번에도 mysql 모듈을 사용해 구현하였습니다.
오늘 배운 것
- 미니프로젝트 API 문서 수정
- SQL 서브쿼리문 작성
- 멘탈 관리
내일 할 것
- 미니 프로젝트 진행
- 멘탈 관리
필기노트
-- AWS EC2 업로드
$ npm i sequelize mysql2 sequelize-cli express mysql socket.io joi nunjucks jsonwebtoken chokidar body-parser cors multer fs
$ npx sequelize db:create
$ npx sequelize db:migrate
Object.keys(hello).length : 빈 오브젝트 객체를 검사하기 위해 사용
-- DB SQL Favorites Join Select문 작성
Select p.postId, p.userId, f.favoriteId, f.userId
from Posts AS p
Join Favorites AS f
on p.userId = f.userId;
select * from Posts;
select * from Favorites;
select * from Favorites where userId = 1;
select p.postId, case when f.postId = p.postId then "TRUE" else "FALSE" end as target
from Posts as p
inner join Favorites as f
on f.userId = 1;
- Favorites의 총 갯수만큼 곱연산
조건 ☆
- Posts를 모두 출력한다
- Favorites에서 UserId에 해당하는것만 출력한다
- Favorites에서 postId와 일치할 경우 출력한다.
SELECT * FROM Posts;
SELECT * FROM Favorites WHERE userId = 1;
SELECT postId FROM Favorites WHERE userId = 1;
In 연산자를 테스트
select case when postId in (30) then "TRUE" else "FALSE" end as target
from Posts;
select p.postId,
case when p.postId in (select postId from Favorites where userId = 1) then "TRUE" else "FALSE" end as target
from Posts as p
left outer join Favorites as f
on f.userId = 1;
- 정답에 맞게 출력은 하지만 Favorites의 기본키 갯수만큼 반복한다.
- JOIN을 안쓴다면?
select postId, userId,
case when postId in (select postId from Favorites where userId = 0) then "TRUE" else "FALSE" end as target,
title, artist, showDate, description
from Posts;
- userId에 해당하는 Favorites에서 Posts.postId와 Favorites.postId가 일치할 경우 TRUE, 아닐 경우 FALSE를 반환
-- 중간 주제 정리
과연 고객의 입장에서 이 사이트를 사용하였을 때 무엇이 더 필요하다고 생각할까?
- 내가 작성한 게시글
- 나의 게시글에 누군가 댓글을 달았다면 그에 대한 알람
- 마음맞는 사람과의 대화
- 내가 즐겨찾기 한 게시글들을 확인할 수 있는 페이지
백 엔드의 입장에서 무엇을 더 중점적으로 공부해야할까?
- Sequelize ORM 추상화 방법
- 프론트 엔드와의 협업
- Socket?
- CRUD 구현 기법
- Express 사용방법
- 오류 검출 기법
이 사이트를 만들면서 내가 얻고자 하는게 뭘까?
- 현재까지 배웠던 기술들을 재정리
- 다음 과제에서 사용할 기술들을 미리 예습
1. 모듈을 끌고와서 많은것을 접목시켜 보는지
2. 프로젝트의 전반적인 구조를 확실히 이해하고, DB의 완벽한 구조를 구성해 최적화를 시킬 것인지
-- 즐겨 찾기 가져오는것 정리
1. Favorites 테이블의 데이터를 가져오기
2. Faovirtes 테이블의 userId에 해당하는 값만 가져오고
3. Posts 테이블의 모든 데이터를 가져오고
4. Posts 테이블의 (2)에 해당하는 게시글들만 가져와야함
- Favorites에서 userId가 postId를 가리키는 경우에만 Posts테이블의 데이터를 가져온다
insert into Comments (userId, postId, comment, createdAt, updatedAt) values (1,1,"Hello11", NOW(), NOW());
insert into Comments (userId, postId, comment, createdAt, updatedAt) values (1,2,"Hello12", NOW(), NOW());
insert into Comments (userId, postId, comment, createdAt, updatedAt) values (1,3,"Hello13", NOW(), NOW());
insert into Comments (userId, postId, comment, createdAt, updatedAt) values (2,1,"Hello21", NOW(), NOW());
insert into Comments (userId, postId, comment, createdAt, updatedAt) values (2,2,"Hello22", NOW(), NOW());
insert into Comments (userId, postId, comment, createdAt, updatedAt) values (2,3,"Hello23", NOW(), NOW());
insert into Comments (userId, postId, comment, createdAt, updatedAt) values (3,1,"Hello31", NOW(), NOW());
SELECT c.commentId, c.userId, c.postId, u.nickname, c.comment
FROM Comments AS c
JOIN Users AS u
ON c.userId = u.userId;
'항해99 > TIL' 카테고리의 다른 글
2021-07-15 항해99 TIL (0) | 2021.07.16 |
---|---|
2021-07-14 항해99 TIL (0) | 2021.07.15 |
2021-07-12 항해99 TIL (0) | 2021.07.13 |
2021-07-11 항해99 TIL (0) | 2021.07.12 |
2021-07-10 항해99 TIL (0) | 2021.07.11 |