본문 바로가기

Node.js/NPM

(7)
익스프레스의 각 라우트에 자동으로 예외처리를 해주는 모듈 클라이언트의 요청을 처리해주지 못하거나 예외적인 상황이 발생해 서버가 죽는 경우가 생길 수 있다. 사람들이 안 쓰는 앱이야 상관 없지만 인스타와 같은 앱의 서버가 멈춘다면 막대한 손해가 발생한다. 이를 막기 위해서 쉽게 떠올릴 수 있는 게 try, catch 문이다. try로 감싼 코드가 실행되다가 오류나 예외적인 상황이 발생하면 catch로 빠져 이에 따른 대처를 할 수 있게 된다. 그러나 아래의 코드가 더 들어가 지저분해진다는 단점이 있다. try { } catch (ex) { } 더군다나 모든 라우트에 이를 적용해야 한다면 중복해서 지저분한 코드를 사용하는 꼴이 된다. 신기하게도 라우트에 따라오는 콜백 함수에 try, catch 문을 자동으로 감싸주는 모듈이 있다고 한다. express-async-..
JSON Web Token이란? 노드에서의 사용 예제 JSON Web Token, 줄여서 jwt는 서버에서 사용자를 식별할 수 있는 정보를 담아 클라이언트에 내려줄 때 쓰는 토큰이다. 서버가 한 번 인증한 사용자에게 카드키를 준 거라고 생각하면 쉽다. 토큰을 받은 클라이언트는 다음에 따로 인증을 하지 않아도 토큰을 이용해 로그인한 상태로 웹에 접근할 수 있다. eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c 참고 : https://jwt.io/ jwt는 세 부분으로 나뉜다. 빨간색 부분은 헤더로 어떤 알고리즘이 적용됐는지 등의 정..
bcrypt의 작동원리와 노드에서 사용하는 방법 1. 간단한 원리 bcrypt를 사용하면 매번 솔트가 달라지기 때문에 해시 역시도 달라지고 데이터베이스에 특정한 해시를 저장하더라도 보안에 문제가 되지 않는다. 해시가 그때그때마다 달라져 해시를 이용해 비밀번호를 찾아내기 어렵기 때문이다. 그럼 데이터베이스의 해시가 달라지는데 어떻게 비밀번호가 일치하는지 확인할 수 있을까? bcrypt는 단순히 사용자가 입력한 비밀번호를 해싱해 데이터베이스에 저장된 해시와 비교하는 방식으로 돌아가지 않는다. 대신 사용자가 입력한 비밀번호와 데이터베이스에 저장된 해시 둘에, 어떤 해싱(로직?)을 적용해서 비교한다고 한다. 이것이 가능한 이유는 저장된 해시 앞부분에 솔트 정보가 들어 있고 이를 추론해서 사용자가 입력한 비밀번호의 해시와 비교할 수 있기 때문인 것 같다. (자..
회원 가입시 복잡한 패스워드만 등록 가능하게 해주는 노드 모듈 - joi 대부분 웹에서는 보안을 위해 비밀번호를 복잡하게 설정하라고 권한다. 다음 모듈을 쓰면 이를 손쉽게 설정할 수 있다. joi.dev
npm 유용한 명령어들 // 특정 버전의 모듈을 설치할 때 (최신 버전부터는 --save라는 키워드를 넣지 않아도 된다.) npm i mongoose@2.4.2 // i 뒤에 -D 옵션을 추가하면 devDependencies에 설치된다. npm i -D webpack // node_modules에 실제로 설치 되어 있는 모듈들의 버전을 확인할 때 npm list --depth=0 // 모듈(mongoose)에 들어 있는 모듈들의 버전을 보고 싶을 때 npm view mongoose dependencies // 모듈(mongoose)의 모든 버전 리스트를 보고 싶을 때 npm view mongoose versions // 설치된 모듈이 최신 버전인지 확인할 때 npm outdated // devDependencies에 설치할 때..
사용자가 입력한 값의 유효성을 판단해주는 노드 모듈 - hapi/joi joi는 로그인이나 회원 가입 같은 경우 사용자가 잘못된 입력 값을 넣었을 때 경우에 따른 에러 메시지를 손쉽게 만들어주는 모듈이다. 현재 예전의 joi는 deprecated 되었고 아래의 링크에서 hapi/joi의 사용법을 확인할 수 있다. https://hapi.dev/module/joi/ 아래는 서버에 유효하지 않은 값이 들어 왔을 때 joi를 이용해서 처리하는 예제다. const Joi = require('joi'); app.post('/api/users', (req, res) => { const schema = { name: Joi.string().min(3).required() // name이 갖춰야할 값의 조건을 설정 } const result = Joi.validate(req.body, s..
쓸만한 Lodash 메소드들 Lodash의 메소드를 이용하면 배열이나 객체와 같은 데이터들을 손쉽게 원하는 대로 변경할 수 있다. 설치법 : https://lodash.com/ _.range(start, end, step); 오름차순이나 내림차순 숫자로 이뤄진 배열을 만들 때 쓴다. 게시판의 페이지를 넘길 수 있는 숫자를 표시할 때 쓴다. // 1부터 시작해서 5 이전의 숫자까지를 담는 배열을 생성한다. _.range(1, 5); // [1, 2, 3, 4] https://lodash.com/docs/4.17.15#range _.orderBy(array, propertys, orders); 게시판의 글들을 분류할 때 쓴다. var users = [ { 'user': 'fred', 'age': 48 }, { 'user': 'barne..