본문 바로가기

verdantjuly/Today I Learned

TIL 20230713

728x90

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