Oct 27, 2021

Sung Hyun Hong (Jenny)·2022년 1월 24일
0

어젯 밤에 들었던 얘기를 바탕으로 내 자신을 다시 remind 하면서, 아침에 개념공부를 다시 시작했다.

일단, 개념공부는 crud 위주로 찾아보았고, 1-2시간 할애했다. 생각해보니, 개념도 미흡하고, mysql 에 대한 지식도 부족해서 프로그래밍 실력이 부족한게 확연히 드러나기 때문에, 앞으로 아침시간에는 개념공부 위주로 할 계획이다.

저녁 9시가 지나서야 팀원들이 하나둘씩 나가고, 현재 조에서 나 혼자 남아있을 때, 부족한 점을 채우고 기능 하나라도 더 하기 위해, 밤을 새우기로 마음 먹고, 시작했다.

내가 해야 할 분량 중에 댓글 조회를 할 것인가, 댓글 삭제를 할 것인가 고민을 했는데, 일단, 댓글 조회를 먼저 하기로 방향을 잡았고, 그 전에, 팀장님과 해결하던 도중에 mysql program 에 문제가 생겨서, 재설치하고, 비밀번호 재설정하고, cmd에서 발생한 여러 문제들을 하나둘씩 해결하기로 했다. 문제점이 왜 발생했는지, 무슨 의미인지 파악하기로 했다.

  1. postman 으로부터 댓글 생성기능이 잘 등록되었다는 것을 확인했다. 하지만, vscode에서 다음과 같은 에러가 떴다.

UnhandledPromiseRejectionWarning: SequelizeAccessDeniedError: Access denied for user 'root'@'localhost' (using password: YES)

이 에러는 db에서 발생한 문제로, vscode에서 db 비밀번호가 틀렸을 때 발생한 문제이다. 이전의 비밀번호가 틀렸기 때문에, 재설치 후 재설정하고, 비밀번호를 고쳐주어서 해결하였다.

  1. 그 다음 npm start를 다시 실행했더니, 두번째 에러가 vscode에서 발생했다.

UnhandledPromiseRejectionWarning: SequelizeConnectionError: Unknown database 'focus'

이 에러는 중요 문서에 저장된 db name 에 focus가 없어서 발생한 에러인지 혹은 db 안에 저장된 focus 가 없어서인지 처음엔 헷갈렸다. 하지만, 후자가 맞았고, npx sequelize db:create로 해결해서 focus 라는 테이블이 생성되었다.

  1. 그 다음 terminal에서 mysql이 제대로 설치되었는지 확인하기 위해 mysql을 입력하여 실행했더니 다음과 같은 에러가 발생했다.

mysql is not recognized as an internal or external

이 에러는 mysql이 다운로드가 제대로 안되어서 발생한 문제라고 생각했는데, 알고보니 환경변수에 mysql 설정을 집어넣지 않았기 때문에 발생한 문제이다. mysql 8.0 버전이면 그에 맞게 환경변수 path에서 설정해주면 된다.

  1. 그 다음, vscode 에서 npm start 후 발생한 문제이다.

UnhandledPromiseRejectionWarning: SequelizeDatabaseError: Table 'focus.comments' doesn't exist

말 그대로 해석하면, 아까 focus라는 테이블은 생성되었지만, focus 안에 아무것도 존재 하지 않을때 발생하는 문제이다. comments 라는 테이블을 생성하는 것이 이 문제의 해결방법이다. 그래서 npx sequelize db:migrate 로 테이블을 생성해 줌으로써 해결했다.

  1. 그 다음, vscode 에서 npm start 후 발생한 문제이다.

UnhandledPromiseRejectionWarning: SequelizeDatabaseError: Field 'userId' doesn't have a default

userId 에 default 값이 없다는 뜻이지만, 댓글 조회하려는 부분에 body 값에 아무것도 존재하지 않아서 발생한 문제임을 알았다.

특히나, 댓글 조회에서는 get 방식이라, 내가 코드상에 썼던 Comment.create({}) 방식은 생성할때 쓰는 방식이기 때문에 옳지 않음을 알게되었고, 그 부분을 지워주어서 해결했다.

또한 api명세서 보면 response에 불러오는 값이 comment 와 message 였기 때문에, {comment, res.status(200).send(message: "")} 방식으로 해결했다.

  1. 그리고 terminal을 통해서 제대로 실행되는지 알아보았다. 다음과 같은 방식으로 실행해본다.

mysql -u root

mysql -u root -p

SHOW DATABASES;

use focus

SHOW TABLES;

SELECT * FROM commets;

SELECT * FROM comments WHERE postId = 1;

여기서 SELECT * FROM comments WHERE postId = 1; 는 code 상에서 comment.findAll({where: {postId}) 와 같은 뜻임을 알게되었다.

terminal_mysqlCheckOct28.PNG

Reference:

https://jeonghwan-kim.github.io/sequelize-migration/

https://velog.io/@aaronddy/Express-req.params-vs.-req.body

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=oralol&logNo=222051630555

profile
오늘 하루도 열심히!

0개의 댓글