Node.js 12

[Node.js - Express] Application-Level과 Route-Level에 차이점은?

이전에 Application-Level에 있는 Router로직을 Routes폴더에 Router에 역할마다 분리하는 작업을 했습니다. 라우터 로직을 왜 분리해야하는 것일까? 동작 레벨에 Application-Level과 Route-Level으로 나누게 되면 성능적으로 차이가 있나? 궁금직이 생겼습니다. 무슨차이일까? 결론적으로 말하면, 모듈화를 위한 디자인적인 설계입니다. Application-Level에 있는 router들에 공통적인 관심사를 분리하여 역할을 덜어주는 겁니다. Application분기와 Router분기로 분리하고 역할을 URL을 분리하여 제어가 가능합니다. 하나에 웹사이트를 만드는데 회원과 상품에 대한 기능을 만든다고 해봅시다. 다음과 같은 요구사항이 있고, API를 설계하였습니다. Us..

Node.js/Node.js Doc 2022.05.12

[Node.js] dotenv로 환경변수 (process.env)관리하기

dotenv란? 개발 중에 필요한 API_KEY, SECRET_KEY, 포트 등 보안에 신경 써야 할 정보들을 소스코드 로직에 그대로 작성하거나, 오픈소스와 같은 github 등 외부에 노출되면 불특정 사람들이 사용을 할 수 있게 됩니다. 따라서 이번 시간에는 .env라는 외부 파일을 만들어 중요한 정보를 환경변수로 저장하여 관리할 수 있는 dotenv 라이브러리에 대해서 공부해 보겠습니다. 자세한 설치 방법은 npm dotenv에서 확인할 수 있습니다. 크로스 플랫폼 환경변수 설정 Node.js는 크로스 플랫폼입니다. Windows, OSX, Linux 플랫폼에서 실행이 가능합니다. 개발을 혼자 하기 보다는 여러 개발자들과 Github/SVN을 통해 형상관리를 하면서 프로젝트를 진행 시, 개발자마다 사..

Node.js/Node.js Doc 2022.05.11

[Node.js] MongoDB 연동하기

이번 시간에는 Node.js에서 MongoDB를 연동하는 법에 대해서 학습해 보고자 합니다. 아직 MongoDB를 사용하기 위한 설정을 하지 않으셨다면 MongoDB 무료로 사용하기(MongoDB Atlas)먼저 보고 와주시면 감사하겠습니다. 이전 시간 마지막에 MongoDB 연결을 위한 코드를 복사하라고 했던 코드로 연결을 해주어야합니다. ⛔️주의 사항! 위에 MongoDB를 연결하기 위한 코드는 외부에 유출이 되면 안됩니다. 따라서 코드를 숨기기 위해서 .env라는 파일을 만들고 .gitignore로 숨겨야합니다. .env파일은 개발 시 필요한 값들을 작성하는 파일입니다. Node.js에서는 .env라는 파일이 존재할 시 환경변수처럼 소스코드로 가져와 사용할 수 있습니다. .env파일을 생성했다면 여..

Node.js/Node.js Doc 2022.05.10

MongoDB 무료로 사용하기(MongoDB Atlas)

MongoDB사이트에 접속하여줍니다. :) 먼저 로그인을 하고, 계정이 없을 경우에는 회원가입을 진행합니다. Build a Database를 클릭하여 MongoDB를 무료로 사용하여 봅시다. 요금제를 선택하는 화면인 Deploy a cloud database가 나오는데 무료로 사용하기 위해서 맨 오른쪽에 있는 Shared - FREE에 Create버튼을 클립합니다. Create a Shared Cluster에서 클라우드 서비스와 클러스터의 리전을 선택해줍니다. 여기서 중요한 것은 저는 배포는 heroku로 할 예정이라 heroku에서 지원하는 리전과 가까운 Oregon을 선택했습니다. 그 이유는, DB는 미국에 있고 만약 서버는 한국에 있다면 거리가 멀어지면, 속도 성능에 대한 이슈가 있을거라고 생각했기..

Node.js/Node.js Doc 2022.05.10

[Node.js - Express] 미들웨어(Middelware)란?

미들웨어란? 애플리케이션의 요청(req)-응답(res) 주기 중 그 다음 미들웨어 함수에 대한 액세스 권한을 갖는 함수입니다. 그 다음의 미들웨어 함수는 일반적으로 next라는 이름의 변수로 표시됩니다. 클라이언트가 reqeust를 보내고, 서버에서 받은 요청에대한 response를 하는 과정에서 중간(Middle)에서 개발자가 간섭하여 로직을 생성하거나 흐름을 제어하여 실행 할 수 있다는 것이다. 미들웨어(Middleware) 종류 Application-level 어플리케이션 수준 Router-level 라우터 수준 Error-handling 오류 처리 Built-in 내장 Third-Party 제3자 미들웨어 함수는 다음과 같은 태스크를 수행할 수 있다. 모든 코드를 실행 요청 및 응답 오브젝트에 대..

Node.js/Node.js Doc 2022.05.08

라우터 분리하기

Router로 분리에 필요성에 대해서 알아보자 ⛔️ 문제의 app.js - AS-IS 아래 코드는 이전 Basic routing에서 라우팅 작업을 했던 코드입니다. 동작은 잘 되는 코드이지만, Application-Level인 app.js에 역할이 너무 많다는 것입니다. app.js에 역할 Router관련된 로직 Server를 띄워주는 app.listen()로직 현재 아래 코드는 Application-Level에 routing작업이 같이 작성되어 있습니다. 프로젝트 규모가 커질수록 routing작업이 많아집니다. routing작업이 많아진다는 의미는 여러 경로로 갈 수 있는 화면들이 많아진다는 것을 의미합니다. 결론적으로, 서로 연관되어있는 역할에 Router끼리 파일을 만들어서 관심사를 분리해야합니다...

Node.js/Node.js Doc 2022.05.08

[Node.js] bodyparser 미들웨어 사용하기

클라이언트단에서 사용자가 입력한 데이터를 처리하기 위해서는 두 가지 방법이 있다. 1. bodyparser 모듈(4.16이전 버전) 2. express.json 이번에는 body-parser모듈이라는 미들웨어를 사용하는 방법에 대해서 공부해보고자 합니다. 설치 $ npm install body-parser --save cmd에 위에 명령어를 입력하면 설치할 수 있다. body-parser가 없을 때 문제점: undefined Client to Server json value client에서 사용자가 `ilkyu`라는 이름과 `30`나이를 서버로 전달하려고 했지만, 서버에서 req.body로 요청한 값을 받아보면 undefined가 출력된다. { "name": "ilkyu", "age": 30 } 서버에서..

Node.js/Node.js Doc 2022.05.08

[Node.js] Basic routing

routing은 URI또는 path 및 특정한 HTTP 요청 메소드(GET, POST 등)인 특정 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 결정하는 것을 말한다. 각 route는 하나 이상의 핸들러 함수를 가질 수 있고, app.METHOD(PATH, HANDLER) app은 express의 인스턴스이다. METHOD는 HTTP 요청 메소드이다. PATH는 서버에서의 경로이다. HANDLER는 라우트가 일치할 때 실행되는 함수이다. METHOD 종류 app.get : 가져오다 app.post : 생성하다 app.put: 전체 수정 app.delete: 제거 app.patch: 부분 수정 (수정작업은 대부분 patch로 활용하게 됨) app.options: 찔러보기 app.head..

Node.js/Node.js Doc 2022.05.08

[Node.js] Express 실행

app.js파일 만들기 express는 listen으로 서버를 실행한다. 서버를 실행하기 위한 폴더인 app.js 파일을 만들어 준다. 서버 실행 후 Hello World 띄우기 const express = require('express') const app = express() const port = 3000 app.get('/', (req, res) => { res.send('Hello World!') }) app.listen(port, () => { console.log(`Example app listening on port ${port}`) }) 위에 코드를 app.js파일에 작성한다. $ node app.js app.js를 실행한 후에 http://localhost:3000/에 접속하면, 앱은 ..

Node.js/Node.js Doc 2022.05.08

[Node.js] http-status-codes란 무엇인가?

http-status-codes 이 모듈은 HTTP 통신에서 서버가 클라이언트에게 전달하는 응답의 상태 코드를 나타내는 상수들을 제공한다. http-status-codes를 사용하지 않을 경우 다음과 같이 status값에 리터럴한 정수 값으로 대입을 해야한다. res.status(200); // 성공 res.status(400); // 클라이언트 오류 res.status(500); // 실패 위에 상수로 선언을 해도 정상적인 잘 돌아가는 로직이다. But.... 상수로 정수 값을 할당하면 의미를 명확하게 전달하기 어렵다 설치 $ npm install http-status-codes --save 사용법 1. require 함수를 사용하여 http-status-codes 모듈을 가져온다. const { St..

Node.js/npm 2022.05.08