전체 글 36

[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

[MongoDB] 스키마 정의하고 모듈화 하기

이번에는 Node.js + MongoDB 환경에서mongoose를 사용하여 사용자 정보를 다루는 User 모델을 정의하고,이를 모듈화하여 외부에서 사용할 수 있도록 구성하는 방법을 다룬다.핵심은 "어떻게 하면 DB에 들어갈 유저 정보를 정의하고, 그걸 코드로 관리할 수 있느냐"이걸 mongoose로 푼다는 거다.mongoose 설치 먼저 스키마(Schema)를 정의하기 위해서는 mongoose를 프로젝트에 설치한다.$ npm install mongoose --saveImportingconst mongoose = require('mongoose');models 폴더 만들기폴더를 만든 후 회원(User)를 정의하기 위한, User.js파일을 만들어 줍니다.회원(User)에 필드를 정의회원 필드에 요구사항em..

카테고리 없음 2022.05.11

[Node.js] 회원 관리 REST API 정하고 이해하기

이전 시간 학습 내용 라우터 분리하기에서 저는 회원에대한 routes(라우트)와 handler(핸들러)를 구현했고, 실제 DB와 연동하진 않았지만 엔드포인트에 따른 Call이 진행이 되도록 임시로 구현했습니다. Goal 이제 실제로 구현하기에 앞서서 회원 정보 관리 요구사항을 정의해 보겠습니다. 회원 정보 관리 기능 정의(Requirements) 회원은 서비스에 계정을 생성 할 수 있어야 한다. 기존의 회원은 정보를 수정할 수 있어야 한다. 회원은 계정을 삭제할 수 있어야 한다. 한명에 회원에 정보를 조회할 수 있어야 한다. 회원 목록 정보를 조회 할 수 있어야 한다. ⛔️ 잘못된 API URI 디자인 설계 회원 등록 /create-user 회원 수정 /update-user 회원 삭제 /delete-us..

카테고리 없음 2022.05.11

[Node.js] 비밀번호 해시와 솔트 정리

Node.js를 독학하면서 웹사이트 구조를 하나씩 따라 만들어보다가, 자연스럽게 회원가입 → 로그인 → 권한 부여 과정을 접하게 됐다.근데 문득 이런 생각이 들었다.."회원가입할 때 입력한 비밀번호는 DB에 어떻게 저장되지?" 당연히 암호화는 하겠지 싶었지만, 구체적으로 어떤 방식으로 저장되는지는 잘 몰랐다.그래서 이번 기회에 비밀번호 보안과 관련된 개념을 정리해봤다. 비밀번호를 평문으로 저장하면 왜 안 될까?개인정보보호법 위반DB가 해킹당하면 해커가 바로 로그인 가능대부분 사람들이 사이트마다 같은 비밀번호를 쓰기 때문에 다른 사이트들도 줄줄이 털릴 수 있음암호화와 해싱의 차이보통 "암호화"라는 단어를 많이 쓰는데, 실제로는 해싱(Hashing)이라는 걸 사용한다.둘은 비슷해 보여도 큰 차이점이 하나 있..

Node.js 2022.05.11

[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)란?

미들웨어란?미들웨어(Middleware)는 클라이언트의 요청(req) 과 서버의 응답(res) 사이에서 실행되는 중간 함수다.이 함수는 next()라는 키워드를 통해 다음 미들웨어로 흐름을 넘길 수 있고, 개발자가 요청-응답 주기 사이에 원하는 로직을 삽입하거나 흐름을 제어할 수 있게 해준다.쉽게 말해, 요청과 응답 사이에 끼어들어 이것저것 할 수 있는 애다.미들웨어(Middleware) 종류Express에서 사용되는 미들웨어는 다음과 같은 종류가 있다.Application-level (어플리케이션 수준)app.use()나 app.get() 등으로 전역적으로 적용하는 미들웨어Router-level (라우터 수준)express.Router()를 이용해 특정 라우터에서만 동작하게 등록하는 미들웨어Error-..

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