본문 바로가기

Web

[nest] jest cannot find moudle error 문제 상황 jest가 import된 모듈을 읽을 때 절대경로를 제대로 읽지 못하는 오류로 추측했다. //package.json // 변경 전 "jest": { "moduleFileExtensions": [ "js", "json", "ts" ], "rootDir": "src", "testRegex": ".*\\.spec\\.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "collectCoverageFrom": [ "**/*.(t|j)s" ], "coverageDirectory": "../coverage", "testEnvironment": "node" } module의 절대경로는 vsc의 자동설정을 따랐고, 자연스레 src부터 시작했다. 추측하기로는 해당 파일이.. 더보기
[node.js] node-schedule, schedulejob 객체(readonly) 수정하기 도입 node-schedule은 서버단에서 스케줄링을 도와주는 라이브러리이다. 필자가 프로젝트에서 node-schedule를 사용한 이유는 반복 작업이 아닌, 일정 기간 이후에 db의 값을 바꾸는 작업을 하기 위해서였다. 반복 작업은 nest/schedule 등 더 좋은 라이브러리가 있다. 한편, crontab을 사용할 수 있으나 아직 배포 단계에서 확인이 어려운 수준이라 서버 단계에서의 schedule을 해낼 라이브러리를 찾아보았다. 스케줄링하는 라이브러리를 비교한 3년 전 글을 첨부한다. 아래 글의 저자와 같이 최근 사용되는 정도를 비교하였을 때 node-schedule을 사용하는 편이 낫다고 판단하였다. https://velog.io/@filoscoder/%EC%8A%A4%EC%BC%80%EC%A4.. 더보기
[Nest] Internal server error 문제 상황 너무나 기본적인 개념이었지만, 무턱대고 Nest 적용해보며 코드를 작성하다보니 어려움을 겪었던 문제이다. { "statusCode": 500, "message": "Internal server error" } 개념 nest가 error를 JSON으로 전송할 때, 해당 오류가 무엇인지 해석하고 그 결과를 전송한다. 사용자가 error 목록을 nest에게 알려주지 않으면, 해석하지 못한 에러가 등장한 경우 위와 같은 JSON 객체를 전송한다. "Internal server error"라는 것은 nest 서버에서 '해석' 기능을 하지 못한 오류가 발생하였다는 것을 의미한다. 결론 error handling을 꼼꼼하게 해두자. 공식 문서를 꼼꼼하게 읽어보자. https://docs.nestjs.com.. 더보기
[Express] body parser? urlencoded? 참고자료 https://velog.io/@hyunju-song/body-parser의-urlencoded는-도대체-어떤-역할을-하는-걸까 https://stackoverflow.com/questions/29960764/what-does-extended-mean-in-express-4-0/45690436#45690436 https://expressjs.com/ko https://tk-one.github.io/2018/08/28/nodejs-buffer/ body-parser 모듈 개념 http 통신 과정에서 요청된 request 객체를 추출하는 모듈이다. JS는 데이터를 주고 받을 때 JSON 객체 형태로 주고 받는데, 해당 객체에 담긴 데이터를 쉽게 다룰 수 있도록 파싱해주는 역할을 수행한다. 활용 ex.. 더보기
[CORS] CSR에서 google oauth2.0 적용기 자주 볼 수 있는 CORS에러지만 에러가 뜨지 않을거라 자부했었기에 그 경험을 공유하고자 한다. 문제 상황 1. Client Side Rendering - front: React - back: Express.js 2. Oauth 로직 - 프론트에서 구글 로그인 버튼 클릭 시 GET /api/auth/login/google로 요청 - 백에서는 passport를 활용하여 google oauth를 실행하여 google url로 요청 - 짜잔! No Access-Contorl-Allow-Origin 시도한 해결 방법 이번 cors 에러는 로컬에서 프론트(http://localhost:3000), 백(http://localhost:3001)을 따로 열어 시도했을 때부터 발생했다. 1. front package.j.. 더보기
[Express] request 객체에 object 담기 1. 핵심 - express.urlencoded의 속성과 qs 라이브러리를 활용해야한다. - 참고 자료: https://velog.io/@hyunju-song/body-parser%EC%9D%98-urlencoded%EB%8A%94-%EB%8F%84%EB%8C%80%EC%B2%B4-%EC%96%B4%EB%96%A4-%EC%97%AD%ED%95%A0%EC%9D%84-%ED%95%98%EB%8A%94-%EA%B1%B8%EA%B9%8C import express from 'express'; const app = express(); app.use(express.urlencoded({ extended: true })); // 기본 설정은 false. true로 바꿔야 함 2. 이해하기 기본적으로 자바스크립트는 데.. 더보기
[Express] request.body 빈 필드 validate하는 코드 스타일 고민 스택 1. node.js / express.js 2. mongoDB / mongoose 상황 1. 프론트에서 request body로 update할 input 값을 넘겨줌 2. 스키마에 넣기 전, 입력된 input 값이 없는 필드를 지우고 update 객체에 담고자 함 mongoose의 경우 input 값이 없는 필드가 입력되었을 때 기존의 값 대신 빈 값을 넣어버리기 때문. 방식 1. 나머지 변수 + 단축 평가 const { field1, field2, ..., fieldLast } = req.body const toUpdate = { ...( field1 && { field1 }), ...( field2 && { field2 }), ..., ...( fieldLast && { fieldLast }),.. 더보기
MVC 패턴 Service의 존재 가치 구조 차이 Model - Controller - View Model - Service - Controller - View 기능 차이 데이터를 다루는 비즈니스 로직은 Service 브라우저의 요청을 다루어 view로 데이터를 전송하는 기능은 Controller. 즉 req, res 등 http 요청과 관련된 변수를 service로 넘겨선 안 됨. 분리의 장점 모듈화로 비즈니스 로직의 재사용성 증가 더보기