Event
null
생활 계획표
AM 3:00 프로그래머스 Lv.2
AM 4:30 공부
PM 2:30 산삼 팀 회의
PM 3:00 페어 프로그래밍
PM 4:00 공부
PM 12:00 취침
이번 주 목표
목요일 : 노드 심화 복습
금요일 : 노드 테스트 코드 복습
오늘 목표
TIL 작성
TIL 리뷰
노드 심화 복습
페어 프로그래밍
오늘 한 것
TIL 작성
TIL 리뷰
Lv.5 리팩토링
JS 특강 복습
노드 심화 복습 3-1까지
1. config 파일 노출
문제
config 파일을 github에 노출했다.
시도
git init을 통해 초기화한 디렉토리를 강제 푸시 하여 기록을 없애버렸다
해결
repository를 삭제해야 안전할 것 같다는 조언을 받아 바로 삭제하였다.
endpoint가 노출된 DB역시 삭제하였다.
알게된 것
config파일... 주의하자.
죽다 살아났다.
2. likesCount 조회 로직 변경
문제
likesCount 를 count 메서드로 세서 가져오는 로직이 불필요한 수행시간이 너무 많다
시도
rawquery 와 join을 이용해 [시퀄라이즈로 유저에서 닉네임을 가져온 테이블]과 likesCount를 합체
> 튜터 님 : left join을 이용하면 더 단축할 수 있습니다
left join 사용
> 튜터 님: 각 테이블마다 select를 사용하면 3번이나 select를 돌게 됩니다.
> 예시 자료 주심
// 게시글 전체 조회
const posts = await sequelize.query(
`
SELECT a.id, a.title, a.content, a.createdAt, c.email, COUNT(b.contentId) AS like_count
FROM posts as a
LEFT JOIN Likes as b ON a.id = b.contentId
LEFT JOIN Users as c on a.userId = c.id
GROUP BY a.id, a.createdAt ORDER BY like_count DESC;
`,
// raw query 를 보낼대 결과의 형식을 지정
{ type: QueryTypes.SELECT },
);
// 게시글 상세 조회
const post = await sequelize.query(
`
SELECT a.id, a.title, a.content, a.createdAt, c.email, COUNT(b.contentId) AS like_count,
CASE WHEN
EXISTS(SELECT id from Likes where userId = :user_id and contentId = :post_id)
THEN 1 ELSE 0 END
AS isLiked
FROM posts as a
LEFT JOIN Likes as b ON a.id = b.contentId
LEFT JOIN Users as c on c.id = a.userId
WHERE a.id = :post_id LIMIT 1;
`,
{
replacements: { post_id: postId, user_id: user.id },
type: QueryTypes.SELECT,
}
);
해결
예시 자료를 참고하여 select 횟수를 줄이고 줄바꿈을 잘 하였음.
// 게시글 전체 조회
findAllPost = async () => {
const allPosts = await sequelize.query(
`SELECT u.nickname, p.title, p.content, p.createdAt, COUNT(l.postId) AS likesCount
FROM Posts AS p
LEFT JOIN Users as u on p.userId = u.userId
LEFT JOIN Likes as l on p.postId = l.postId
GROUP BY p.postId
ORDER BY p.createdAt DESC`,
{ type: QueryTypes.SELECT }
);
return allPosts;
};
// 게시글 상세 조회
findOnePost = async (postId) => {
const post = await sequelize.query(
`SELECT u.nickname, p.title, p.content, p.createdAt, COUNT(l.postId) AS likesCount
FROM Posts AS p
LEFT JOIN Users as u on p.userId = u.userId
LEFT JOIN Likes as l on p.postId = l.postId
WHERE p.postId = ${postId}`,
{ type: QueryTypes.SELECT }
);
return post;
};
알게 된 점
sequelize로 너무 많은 희생이 필요할 때는 rawquery를 사용해도 좋다.
likesCount는 DB에 접근하여 데이터를 가져오므로 repository layer에서 처리하는 것이 맞음.
findAllPost = async () => {
const allPosts = await sequelize.query(
`SELECT u.nickname, p.title, p.content, p.createdAt, COUNT(l.postId) AS likesCount
FROM Posts AS p
LEFT JOIN Users as u on p.userId = u.userId
LEFT JOIN Likes as l on p.postId = l.postId
GROUP BY p.postId
ORDER BY p.createdAt DESC`,
{ type: QueryTypes.SELECT }
);
return allPosts;
};
정리
config파일... 주의하자.
sequelize로 너무 많은 희생이 필요할 때는 rawquery를 사용해도 좋다.
likesCount는 DB에 접근하여 데이터를 가져오므로 repository layer에서 처리하는 것이 맞음.
message.json (오류 메시지 따로 빼기)
잘 활용하고 변수 이름을 잘 정하면 좋다 !
컬럼 = 필드
체크리스트
[ O ] 예쁜 말로 협업하였는가?
[ O ] 12시간 동안 몰입하였는가?
[ O ] 코딩 시 복사 + 붙여넣기를 하지 않았는가?
[ O ] 친절한 개발자였는가?
[ ? ] 오늘을 평가하였을 때 주니어 개발자가 될 수 있겠는가?
잘 모르겠다... 취업의 기회가 생기더라도 수습 종료 되지 않기 위해 노력해야 할 것 같다
KPT
Keep
매일 개선할 점 찾기
Problem
멘붕을 지나고 나면 집중을 못한다
Try
정신력 오기로 기르기
소감
config 파일 항상 확인해야겠다 너무 힘들었다
뭔가 로직이 이상하다 싶으면 자주 검토를 받으러 튜터님께 다녀와야겠다
더 나은 걸 가르쳐 주셔서 좋다!!
'verdantjuly > Today I Learned' 카테고리의 다른 글
TIL 20230715 (0) | 2023.07.15 |
---|---|
TIL 20230714 (0) | 2023.07.14 |
TIL 20230712 (2) | 2023.07.12 |
TIL 20230711 (0) | 2023.07.11 |
TIL 20230710 (0) | 2023.07.10 |