Node.js 백오피스 프로젝트 [1일차]
오늘 한 일
이번에는 prisma와 MySQL을 사용하여 실제로 배포하여 사용할 수 있는 pet sitter 서비스를 만드는 프로젝트를 시작하게 되었다.
오전 코드카타와 새로운 프로젝트에 대한 발제 시간, 팀원들과 회의하는 시간을 가졌고 오후에는 팀 계획표, 코드작성 규칙, API 명세서 작성, ERD 작성, 와이어프레임 작성하는 시간을 가졌다. 저녁에는 주어진 내용들을 기반으로 코드를 작성하는 시간을 가졌는데 내가 오늘 맡은 부분은 사용자가 마음에 드는 pet sitter를 선정하고 원하는 날짜에 예약을 할 수 있도록하는 reservation API CRUD 구현을 맡게 되었다.
배운 부분
prisma의 dateTime 타입 데이터 넣기
prisma 의 데이터 타입으로 dateTime인 컬럼에 값을 넣을 때 문제가 발생했다.
위의 사진과 같이 DB에 들어갈 데이터 값에 "2023-12-12"와 같이 데이터를 넣었는데, 데이터 타입이 맞지 않아 데이터를 저장할 수 없다는 오류가 떴다.
해결 방법은 다음과 같다.
ISO 8061 이라는 국제표준화기구에서 지정한 날짜, 시간데이터에 대한 표준 규격을 사용하는 것이다.
기본적인 형식은 "YYYY-MM_DDTHH:mm:ss"의 형태로 작성하면 된다. 여기서 T는 날짜와 시간을 구분하는 문자이다. 만약 날짜만 주어진 경우에는 시간이 "00:00:00"으로 설정된다.
그런데 이것만으로는 안되고 "YYYY-MM_DDTHH:mm:ssZ"의 형식으로 작성해줘야 데이터가 DB에 저장된다. 여기서 Z는 협정 세계시(UTC)를 나타낸다.
req.session 사용하기
로그인 성공 시 req.session에 사용자의 정보를 넣어두게 코드를 작성했다.(auth.controller.js)
그런데 펫 시터를 예약하는 API에서 예약을 할 때 사용자의 id가 필요한 상황이 생겼고, 로그인한 유저의 id가 세션값에 들어있기 때문에 이를 꺼내려고 했다. 처음에는 headers에 session이 있나 싶어 headers에 console.log를 찍어봤는데 콘솔에 찍히지 않았다.
결국 찾다보니 req.session에 사용자의 정보가 담겨있는 것을 확인할 수 있었다. 서로 다른 파일이고 import를 해온 적이 없기 때문에 req.session이라는 값 안에 값이 담겨있지 않을 것이라고 생각했었는데 착각이었다.
이는 app.js 파일에서 express-session이라는 모듈? 라이브러리? 를 가져오기 때문에 session 값을 저장시킬 수 있는 것 같다
(자세한 부분은 조금 더 알아봐야 할 것 같다. 내일 자세히 알아보고 더 정확하게 정리하자)
3-layered-architecture에서의 try catch
3-layered-architecture에서의 try catch 구문은 controller, service, repository 등 모든 파일에서 사용할 필요 없이 controller 파일에서만 사용해주면 된다. 그 이유는 데이터 처리를 위해 service와 repository로 데이터를 보낸다고 해도 결국에는 controller 파일로 돌아오기 때문이다.
거기에 더해 catch 구문의 동작부분에는 next(err)가 사용되는데 이는 에러가 발생했을 경우에 코드가 멈추지 않으면서도 에러가 출력되는 구문이다.
3-layered-architecture가 위치한 부분은 app.js에서도 app.use("/", router) 부분에 작성되고 실행되고 있기 때문에 이 다음의 코드인 app.use(errorHandlingMiddleware)로 가고, 여기서 모든 error 처리가 진행되게 된다.
customError
class 객체를 이용해서 customError를 만들어 Error를 처리할 때 조금 더 깔끔하게 처리할 수 있다.
바로 위에 적었던 글과 마찬가지로 에러가 발생하면 next(error)로 에러를 넘기고 errorHandlingMiddleware에 넘겨지게 된다.
[errorHandlingMiddleware]
에러 핸들 미들웨어는 위와 같이 생겼고 이를 처리하기 위해 에러를 다음과 같이 class를 이용해 설정해주었다.
이렇게 customeError를 설정해주게 된다면 조금 더 편리하고 깔끔하게 코드를 관리할 수 있다.
(이것도 조금 더 정리하며 공부해보자)
참고자료
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Error
https://expressjs.com/en/guide/routing.html
'TIL' 카테고리의 다른 글
2023_12_14 TIL (1) | 2023.12.15 |
---|---|
2023_12_13 TIL (1) | 2023.12.14 |
2023_12_11 TIL (2) | 2023.12.12 |
2023_12_08 TIL (0) | 2023.12.09 |
2023_12_07 TIL (1) | 2023.12.08 |