본문 바로가기

내일 배움 캠프/Weekly I learned

WIL 20230723

728x90

0. 기간 : 

20230716~20230723

1-1. 이번 주 동안 있었던 일

백 오피스 프로젝트 완성

Node.js 교과서 읽기

1-2. 이번 주 체크리스트

[ O ] 예쁜 말로 협업하였는가?

[ O ] 12시간 동안 몰입하였는가?

[ O ] 코딩 시 복사 + 붙여넣기를 하지 않았는가?

[ ... ] 친절한 개발자였는가?

[ ? ] 이번 주를 평가하였을 때 주니어 개발자가 될 수 있겠는가?

 

2. 이번 주 소감

프로젝트 진행이 원할하지 않을 때 좋지 않은 말과 생각을 많이 한 것 같다.

불안감에서 오는 부정적인 것들인 것 같은데 고쳐나가야겠다. 

그리고 해결할 수 있는 문제는 팀 외의 사람들에게 물어보기보다 우리 팀의 팀원들을 믿고 기다리는 것도 좋을 것 같다. 

왜냐하면 결론적으로 해결할 수 있는 방법은 팀원들과 소통하고 함께 해결하는 것이기 때문이다.

3. 이번 주에 배운 것

3-1. 바벨 사용법 

0. 바벨 사용 이유

ES6 이하의 하위 버전으로 문법을 수정하여 모든 사용자가 볼 수 있게 만든다.

 

1. babel.config.json 생성

// babel.config.json

{
  "presets": ["@babel/preset-env"]
}

2. 

npm install -D @babel/core @babel/node @babel/preset-env @babel/cli

3. 

// package.json

"scripts": {
    "dev": "nodemon --exec babel-node src/init.js",
    "build": "babel src --out-dir dist --copy-files ",
    "start": "node dist/init.js"
  },

3-2. is not a constructor

문제

constructor를 잘 작성한 것 같은데 아니라고 함.

시도

파일을 살펴 보았다.

해결

연결된 파일이 아닌 다른 곳에 ReservationService의 내용을 작성하였다.

알게된 것

연결된 파일에 constructor가 없는 경우 해당 constructor가 constructor가 아니라는 오류가 나올 수 있다. 

 

3-3. include 설정 시 Model 

문제

include를 설정해 둔 Model이 undefined 된다

시도

이전 파일을 살펴 보았다.

보니까 해당 모델을 가져오는 부분이 있었다.

해결

알게 된 점

include를 사용할 경우 해당 Model을 가져와야 한다.

3-4.  where 절을 작성하였으나 찾질 못한다

문제

where절을 분명히 적었는데 작동하지 않는다.

시도

프로퍼티의 value 축약하지 않기

해결

where절 위치 변경

알게된 것

sequelize에서는 문법의 위치도 중요하다.

 

3-5. GET 요청에는 body를 넣을 수 없다.

3-6. emit 보안

문제

emit에 이름이 노출되면 모두가 볼 수 있다.

시도

response.json({})안에 키는 아무거나, 값으로 emit이름을 넣어준다.

해결

잘 작동하고 emit 이름도 숨길  수 있게 됨.

알게된 것

response.json({})안에 키는 아무거나, 값으로 emit이름을 넣어준다.

 

3-7. IS NULL의 위치

문제

이 쿼리문을 실행하면 r.deletedAt이 Null인 심마니만 표시가 된다.

내가 원한 건 그게 아니라 AVG(r.star)에서의 자료가 r.deletedAt이 null인 심마니만 필요한 것이다.

즉, 삭제되지 않은 리뷰만 통계를 내고 싶었다. 

SELECT p.petsitterId, p.name, p.imgurl, p.description, p.signInCareer, IFNULL(AVG(r.star),0) AS starAvg
          FROM Petsitters AS p
          LEFT JOIN Reviews as r on p.petsitterId = r.petsitterId 
              WHERE p.deletedAt IS NULL AND r.deletedAt IS NULL
              GROUP BY p.petsitterId 
              ORDER BY starAvg DESC

시도

Reviews에서 JOIN하는 조건으로 걸어주었다.

SELECT p.petsitterId, p.name, p.imgurl, p.description, p.signInCareer, IFNULL(AVG(r.star),0) AS starAvg
      FROM Petsitters AS p
      LEFT JOIN Reviews as r on p.petsitterId = r.petsitterId AND r.deletedAt IS NULL 
          WHERE p.deletedAt IS NULL 
          GROUP BY p.petsitterId 
          ORDER BY starAvg DESC

해결

시도의 방법으로 해결하였다. 편안하다.

알게된 것

로직이 맞는 것처럼 보여도 꼭 한 번씩 SQL raw query를 실행시켜서 맞는 데이터가 뽑히고 있는지 확인하자.

 

3-8. 리뷰 안 쓴 예약만 불러오기

문제

아래의 쿼리문을 실행할 경우 soft delete된 데이터가 있는 경우 다시 리뷰를 작성하였을 때

soft delete 된 데이터를 포함하여 selector에 표시 된다.

 

ex)

1. 35, 36, 37 예약

2. 35, 36, 37 보임

2. 36 삭제

3. 36 재작성

4. 35, 36, 37 보임 (원래 35, 37만 보여야 함)

SELECT r.reservationId
        FROM Reservations AS r
        LEFT JOIN Reviews as v on r.reservationId = v.reservationId 
            WHERE r.petsitterId = :petsitterId AND r.userId = :userId AND r.deletedAt IS NULL AND (v.deletedAt IS NOT NULL OR v.reviewId IS NULL)
            GROUP BY r.reservationId
            ORDER BY r.reservationId

시도

COUNT를 통해 soft delete 된 리뷰와 전체 리뷰 데이터 수를 센다.

일치하는 경우 현재 작성된 유효한 리뷰가 없는 경우 이므로 reservationId를 selector에 보여 줘서 리뷰가 작성 가능하게 만들고

오차가 있는 경우, 즉 1만큼 차이가 나는 경우에는 삭제가 안 된 데이터가 1개 있는 것이므로 reservationId를 보여주지 않는다.

SELECT DISTINCT r.reservationId, COUNT(v.reviewId) AS "reviewData", COUNT(v.deletedAt) AS "reviewDeleted"
        FROM Reservations AS r
        LEFT JOIN Reviews as v on r.reservationId = v.reservationId 
            WHERE r.petsitterId = :petsitterId AND r.userId = :userId AND r.deletedAt IS NULL 
            GROUP BY r.reservationId
            ORDER BY r.reservationId

해결

막판에 죽다 살아났다... 아래는 해결 쿼리를 실행한 결과이다. 

알게된 것

COUNT 메서드를 통해 조건 값에 해당하는 데이터의 수를 비교하면 원하는 결과를 얻을 수도 있다. 

SQL은 데이터의 집합이므로 조건에 해당하는 데이터 개수를 세는 것이 관건인 것 같다. 

 

4. 배운 것들을 토대로 적용할 미래

SQL로 원하는 데이터를 가져올 수 있는 사람

 

5. 다음주 목표

기본적인 자바스크립트의 기능이나 문법을 설명할 수 있게 하기

6. 나에게 응원 마디

언제나 착한 사람일 수는 없겠지만 최대한 친절하게 행동하고 생각하고 말하고 살자.

긍정적인 말을 들었을 때 나도 힘이 나는 것처럼 남도 같다.

다른 사람이 못하는 부분을 말하거나 힘들게 만들면 안 된다. 

이 점을 꼭 기억하고 더 좋은 사람으로 나아가는 과정을 응원한다.

'내일 배움 캠프 > Weekly I learned' 카테고리의 다른 글

WIL 20230806  (0) 2023.08.06
WIL 20230730  (0) 2023.07.30
WIL 20230716  (0) 2023.07.16
WIL 20230709  (2) 2023.07.09
WIL 20230702  (0) 2023.07.02