목록Backend/Express (9)
만족
const normalDoc = await MyModel.findOne(); mongoose를 이용하여 쿼리할 때 위와 같은 형태로 쿼리한다. https://mongoosejs.com/docs/index.html mongoose 의 quick start에서도 위와 같이 소개하고 있어 계속 이렇게 사용해왔지만, 클러스터링까지 사용하게 되면서 cpu, memory 사용량이 증가하여 조치를 취해야만 한다. 쿼리 시 어떤 데이터를 반환하는가? const normalDoc = await MyModel.findOne(); 이 코드를 사용했을 때 normalDoc에는 어떤 데이터가 할당될까? util.inspect와 console.log를 이용해 normalDoc을 찍어보면 { _id: 659bc8cc415b117a..
결론만 보고싶다면 스크롤 맨밑으로 ㅎㅎ.. 현재 apache+express 조합으로 서비스를 운영중이다. client가 request를 보냈을 때 express project까지 도달하는 과정은 위와 같다. 그런데 express에서 req.ip 값을 확인하니, 전부 127.0.0.1로 찍혀 있었다. 왜 그럴까? 사실 express의 관점에서는 앞단에서 아파치가 프록시를 해주고 뭐고 그런건 관심없고 apache가 express에게 request를 보내는 것으로 인식된다. 따라서 자기 자신에게 포트 번호만 바꿔서 보내는 것으로 작동하므로, 요청 ip가 127.0.0.1로 찍히는 것이다. req.ip express의 req.ip는 어떻게 구현되어 있을까? expressjs https://github.com/e..
forever 모듈로 express 서비스를 배포한 후, 서비스가 죽는 현상이 관찰되었다. DDoS공격이 감지되긴 했지만, 서버가 아예 서버리는 상태가 아니라면 서비스가 죽은 후 다시 해당 서비스를 실행시키는 액션을 기대했지만 튕긴 상태로 유지될 뿐이였다. error: Forever detected script exited with code: 1 forever 에러 로그 맨 마지막엔 해당 오류가 찍혀 있었고, 그 외에 다른 특이사항은 없었다. 재미있는 것은 어떤 로그에서는 해당 로그가 표시된 뒤 서비스를 재시작한 이후, SIGTERM을 받고 프로세스가 죽어버리는 경우도 있었다. error: Forever detected script exited with code: 1 error: Script restar..
기존 사용하던 서버에서 Apache+php 조합을 사용하고 있기 때문에 nginx를 새로 설치하기는 부담스러워 apache+express 조합으로 서비스할 것이다. node/npm은 기존에 설치되었다고 가정한다. 설치하지 않았다면, soojae.tistory.com/25 를 참고해 설치를 진행하면 된다. apache의 경우엔 단순히 sudo apt-get install apache2 하면 된다. 버전 정보 Ubuntu 16.04 Apache 2.4.18 아파치 설정 sudo nano /etc/apache2/sites-avaliable/000-default.conf 를 이용해 vhost정보를 수정할 것이다. ... ServerName [도메인명(ex: test.com)] ServerAdmin [관리자 이메..
참고: https://expressjs.com/en/4x/api.html#res Express 4.x - API Reference Express 4.x API express() Creates an Express application. The express() function is a top-level function exported by the express module. var express = require('express') var app = express() Methods express.json([options]) This middleware is available in Ex expressjs.com 자주 쓸 것 같은 프로퍼티에 대해 정리한다 Res.headersSent response heade..
참고: https://expressjs.com/en/4x/api.html#req Express 4.x - API Reference Express 4.x API express() Creates an Express application. The express() function is a top-level function exported by the express module. var express = require('express') var app = express() Methods express.json([options]) This middleware is available in Ex expressjs.com 자주 쓸 것 같은 프로퍼티를 정리한다 req.ip request client ip req.meth..
예제로 알아보기 npx express-generator 커맨드로 프로젝트를 생성했다면, App.js에서 해당 코드블럭을 찾을 수 있다 app.use는 핸들러 등록에 사용되며, 등록한 핸들러의 순서대로 request가 처리된다. 다음 핸들러로의 진행은 현재 핸들러에서 next()를 호출함으로써 진행된다. 먼저 404(Not Found)를 핸들링하는 부분을 보면, request한 경로가 '/'이거나 ''/users'를 포함하면 해당 핸들러로 진입하지만 그 외의 경로일 경우 일치하는 패턴이 없기 때문에 마지막 순서인 404 handler로 진입한다 next()의 경우 인자로 null이 아닌 값이 전달되었을 경우 다음 핸들러로 진입하지 않고, 에러 핸들러로 점프한다. 해당 핸들러는 next를 호출하지 않으므로,..
단순히 yarn start해서 서버를 시작했을 경우에는 변경된 코드를 반영하려면 종료 후 재시작이 필요했다. 이는 매우 번거로운데, Nodemon을 사용하면 코드 수정 시 서버 재시작을 자동으로 처리해준다. https://github.com/remy/nodemon remy/nodemon Monitor for any changes in your node.js application and automatically restart the server - perfect for development - remy/nodemon github.com yarn add nodemon --global 로 해당 모듈을 설치한다 (npm 사용자라면 npm install -g nodemon을 입력하여 설치한다) 설치가 완료되었다면..