Do it! 공부단 스터디 노트
1. 공부한 책DB를 검색하여 넣어 주세요.
정재곤
이지스퍼블리싱 2017.03.06
2. 공부한 페이지 : p.201 ~ p.281
3. 공부한 내용 :
6-1 몽고디비 시작하기
노드에서 데이터 저장은 몽고디비를 많이 사용한다.
몽고디비는 NoSQL이라고 하며 비관겨형 디비이다.
비관계형디비는 단순 데이터 저장 및 조회에 용의하고 sql에 친숙하지 않은 사람도 쉽게 사용할수 있다.
하지만 데이터의 일관성이 보장되어야 하거나 여러번의 조인 연산이 필요한 데이터라면 NoSQL을 사용하는 것 보다 RDBMS를 사용하는 것이 좋을 것이다. NoSQL은 RDBMS를 대체하기 위한 데이터베이스가 아니라 상호 보완할 수 있는 데이터베이스이며, 따라서 목적에 맞게 사용하는 것이 중요하다.
6-2 익스프레스에서 몽고디비 사용하기
몽고 디비를 설치 하고 몽고디비 모듈을 설치하면 끝이난다.
설치한 모듈을 불러들이고 불러드린 객체에 정의된 함수를 사용하면 된다.
디비에 연결을 하고 참조된 컬렉션에 insertMany(), find()같은 메서드를 사용하여 쉽게 데이터를 저장하거나 조회할 수 있다.
몽고디비는 자체 관리도구를 사용해도 된고 로보몽고 처럼 서드파티 관리 툴을 사용하여 더 쉽게 DB를 관리 할 수 있다.
06-3 몽구스로 데이터베이스 다루기
몽고디비를 사용하면서 하나의 컬렉션 안에 똑같은 속성을 가진 문서객체를 다룰 때
관계형 데이터베이스의 테이블이나 엑셀의 시트처럼 다룰수있게 일정한 툴을 제공하는 몽구스 모듈이다.
스키마를 정의하고 사용할 수 있게 해주는 모듈이다.
npm install mongoose --save 로 모듈을 설치한다.
var mongoose = require('mongoose') 와 같이 사용한다.
몽구스 모듈의 대표적인 메소드
connect(uri(s), [option], [callback]) : 몽구스로 디비연결
Schema() : 스키마 정의 생성자
model(name,[schema],[collection],[skipInit]) : 모델정의
사용할 수 있는 스키마 타입은 다음과 같다.
String 문자열
Number 숫자
Boolean 이진타입
Array 배열
Buffer 버퍼
Date 날짜
ObjectId 문서별 ObjectId
Mixed 혼합
중괄호에 들어가는 속성
type : 자료형 지정
required : true면 반드시 있어야 하는 값
unique : true면 고유한 값
데이터 처리에 들어가는 메소드는 다음과 같다.
find([criteria],[callback]) : 조회
save([options],[callback]) : 저장
update([criteria],[doc],[options],[callback]) : 수정
remove([criteria],[callback]) : 삭제
06-4 인덱스와 메소드 사용하기
몽고디비는 속성에 인덱스를 만들수 있다.
위치 기반 서비스에 저장되는 좌표도 공간인덱싱을 사용할 수 있다.
스키마 객체에 메소드를 추가할때는 static()과 method()를 사용한다
static(name,fn) : 모델객체에서 사용할 수 있는 함수 등록
method(name,fn) : 모델 인스턴스 객체에서 사용할 수 있는 함수 등록
06-5 비밀번호 암호화하여 저장하기
로그인에 사용되는 비밀번호를 암호화하고 싶다면, 비밀번호를 암호화하여 저장하는 기능을 구현하면 된다.
virtual 함수 사용하기
실무에서 사용자 정보를 데이터베이스에 저장할 때는 비밀번호를 사람들이 볼 수 없도록 암호화하여 저장하는 경우가 많다.
이때 비밀번호는 단방향으로 암호화하여 원본 비밀번호 문자열을 알 수 없도록 만든다.
단방향 암호화란 말 그대로 한 방향으로만 암호화가 가능한 것이다.
사용자 인증과정에서 사용자가 입력한 비밀버놓를 암호화한 후 데이터베이스에 저장되어 있는 암호화된 비밀번호와 비교하는 과정을 거친다.
사용자를 추가할 때는 비밀번호를 암호화한 후 데이터베이스에 저장한다. 그다음 사용자 인증을 진행할 때는 클라이언트가 보내 온 비밀번호를 암호화한 후 데이터베이스에 저장된 암호화된 비밀번호와 비교한다.
비밀번호 암호화 작업은 사용자정보를 저장할 때 이루어져야 한다. mongoose에서 제공하는 virtual()함수를 사용하면 이 과정을 더 쉽게 처리할 수 있다. virtual() 함수는 문서 객체에 실제로 저장되는 속성이 아니라 가상의 속성을 지정할 수 있다.
예를 들어, 비밀번호를 저장하기 위해 문서 객체에 만들어지는 속성 이름이 hashed_password라면, 실제로 저장되는 속성은 아니지만 password 속성을 만든 후 속성 값은 hashed_password속성으로 저장되도록 만들 수 있다.
물론 password 속성 값은 hashed_password 속성 값과 같을 필요는 없으며, 필요한 과정을 거친 후 저장할 수 있다.
노드는 암호화를 위해 crypto 모듈을 제공한다. hashed_password속성에는 비밀번호를 암호화하여 저장하고 salt속성에는 암호화에 사용되는 salt값을 저장한다. 암호화과정에서는 일종의 키값으로 salt값을 사용하는데 이 값이 계속 변경되도록 만들것이다. 따라서 암호화된 비밀번호와 함께 데이터베이스에 저장한다. 기본에 사용한 password속성은 더 이상 사용하지 않도록 설정하고 virtual()함수를 사용해 가상 속성으로 추가한다.
virtual()메소드를 호출할 때는 가상 속성의 이름으로 password를 전달한다. set()함수는 전달된 문자열을 암호화된 비밀번호로 만든 후 hashed_password속성으로 저장한다. 암호화를 진행하기 위해 makeSalt()함수와 encryptPassword()를 호출한다.
06-6 MySQL 데이터베이스 사용하기
- 레코드 : 한 줄에 해당하는 데이터
- 관계형 데이터베이스 : 레코드가 들어 있는 테이블
- MySQL Community Server 설치하기
1) mysql-installer-community-8.0.20.0.msi 설치파일 실행
2) 아래 사진과 같이 설치 중 The configuration for MySQL Server 8.0.20 has failed. 난 경우
3) 컴퓨터 이름이 한글로 저장되어 있는지 확인한다 -> 컴퓨터 이름을 영어로 변경해줍니다.
4) 아래 사진과 같이 MySQL 설치 화면 중 아래 사진과 같이 Authentication Method 에서 Use Legacy Authentication Method를 선택하여 설치합니다.
## 실습코드 : https://github.com/dlckdgjs89/NodeJS
'Programing > NodeJs' 카테고리의 다른 글
Do it! NodeJs 프로그래밍 - Day 8 (0) | 2020.08.08 |
---|---|
Do it! NodeJs 프로그래밍 - Day 6 (0) | 2020.08.08 |
Do it! NodeJs 프로그래밍 - Day 3 (0) | 2020.08.08 |
Do it! NodeJs 프로그래밍 - Day 2 (0) | 2020.08.08 |
Do it! NodeJs 프로그래밍 - Day 1 (0) | 2020.08.08 |