Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- springboot
- 연습문제
- BFS
- codeground
- 데이터베이스
- 백준
- DFS
- Spring
- 우아한형제들
- BOJ
- Database
- Algorithm
- 탐색알고리즘
- 웹프로그래밍
- framework
- JavaScript
- BAEKJOON
- SQL
- mobx
- react
- Backtracking
- 알고리즘
- TypeScript
- JPA
- 단위테스트
- 프레임워크
- Java
- 우아한테크캠프
- Vue
- Vue.js
Archives
- Today
- Total
설모의 기록
mongoDB 사용법 본문
이전 포스트에서 몽고디비 설치에 대해 포스팅 했습니다.
이번에는 몽고디비 명령어에 대해 정리해보겠습니다.
몽고디비의 기본 포트번호는 27017 입니다.
# mongo 명령어
- use local // use 데이터베이스_이름 으로 데이터베이스 지정
- db.users.insert(JSON객체) // users 라는 컬렉션에 객체 추가
- db.users.find( ) // users 라는 컬렉션에 들어있는 문서를 모두 보여줌
- db.users.find( ).pretty() // users 라는 컬렉션에 들어있는 문서를 JSON 형태로 줄바꿈되어 보여줌
- db.users.remove(JSON객체) // 예) db.users.remove({name: /hyeona/}) 와 같이 regexp 표현식 이용가능
# 로그인 기능 예제
1. 사용자 조회 예제
- var MongoClient = require('mongodb').MongoClient; // 몽고디비 모듈 사용해 변수 선언
- databaseUrl 변수에 데이터 베이스 연결정보 정의 // 예) mongodb://IP주소:포트번호/데이터베이스이름
- 데이터베이스내에 일치하는 문서가 있는지 조회하는 함수 authUser( )
- database.collection(‘users’) : users 라는 콜렉션 정보 불러오기
- users.find(JSON객체).toArray(function (err, docs) {} ) : JSON객체를 users 콜렉션에서 찾고, 객체배열로 변환해 docs 인자로 받는다.
2. 사용자 추가 예제
- 데이터베이스에 문서를 추가하는 함수 addUser( )
- database.collection(‘users’) : users 라는 콜렉션 정보 불러오기
- users.insertMany([JSON객체들], function (err, result) {} ) : JSON객체 배열을 users 콜렉션에 저장한다. 콜백메소드의 result인자의 insertedCount 속성에 추가된 레코드 개수가 저장되어 있다.
3. mongoose 사용예제
- mongoose 모듈 선언
- 데이터베이스 관련 변수 선언
- mongoose 를 이용해 데이터베이스에 연결하는 함수 connectDB( )
- mongoose.connect(데이터베이스주소) : 데이터베이스와 연결
- ‘open’ 이벤트 : 데이터베이스와 연결되었을 때 발생
- ‘error’ 이벤트 : 데이터베이스 연결이 제대로 되지 않았을 때 발생
- ‘disconnected’ 이벤트 : 데이터베이스와 연결이 끊어졌을 떄 호출
- mongoose.Schema(JSON형태로 정의) : ‘속성이름: 속성타입’ 쌍으로 이루어진 JSON객체로 스키마 정의
- 속성타입(스키마 타입) 종류 : String, Number, Boolean, Array, Buffer, Date, ObjectId, Mixed(혼합타입)
- {password: {type: String, required: true, unique: false}} 이런식으로 정의 가능 (required === not null, unique === unique)
- mongoose.model(콜렉션이름, 스키마객체) : 스키마와 콜렉션 연결
- 몽구스 모델을 이용해 사용자 인증하는 함수 authUser( )
- UserModel.find(JSON객체, function (err, results) {} ) : UserModel의 콜렉션에서 JSON 객체 데이터를 조회
- UserModel.where(JSON객체).update(JSON객체, function (err, results) {} ) : UserModel의 콜렉션에서 JSON 객체를 찾은 후 업데이트
=> 예) UserModel.where({id: ‘hyeona’}).update({name: “현아”}, function (err, results) {} )
- UserModel.remove(JSON객체, function (err, results) {} ) : UserModel의 콜렉션에서 JSON객체 삭제
- mongoose 를 이용해 사용자를 등록하는 함수 addUser( )
- user.save(function (err, results) {} ) : save( ) 메소드는 모델 객체에서 사용하는 것이 아니라 모델 객체의 인스턴스인 user를 생성해 사용해야 한다.
4. 인덱스 생성
- 인덱스 사용 이유 : 검색 속도가 빨라진다. 조회가 필요한 속성에 인덱스를 생성한다. 위치기반 서비스에서는 경도와 위도에 인덱스를 설정하는 것이 좋다.
- id 속성의 값으로 전달된 객체처럼 unique: true 로 설정하면 자동으로 인덱스가 생성된다.
- name 속성의 값으로 전달된 객체는 index 를 ‘hashed’ 로 설정했다.
5. mongoose 스키마 객체에 메소드 추가
- 스키마객체.static(‘함수이름’, 함수정의) : 스키마 객체에서 사용가능한 함수 정의
- 스키마객체.method(‘함수이름’, 함수정의) : 모델 인스턴스 객체에서 사용가능한 함수 정의
- _doc 속성 : 각 문서 객체의 정보
6. 비밀번호 암호화하기
- 단방향 암호화 : 한 방향으로만 암호화 가능, 즉 복호화할 수 있는 방법이 없다.
- 양방향 암호화 : 암호화한 데이터를 다시 복호화해 원본을 구할 수 있다.
- mongoose 의 virtual( ) 함수 이용 : 문서 객체에 실제로 저장되는 속성이 아니라 가상의 속성을 지정
=> 예) 비밀번호를 저장하는 속성 이름이 hashed_password 라면, 실제로 저장되는 속성은 아닌 password 속성을 만든 후 이 속성에 값을
넣어 저장할 때 hashed_password 속성으로 저장되도록 한다.
- 문자열을 받아 빈칸을 제거한 후 첫번째 단어는 id로, 두번째 단어는 name으로 저장한다.
- info 속성의 값을 불러올 때는 id 속성값 + ‘ ‘ + name 속성값 을 불러온다.
- user.id 는 test01, user.name 은 소녀시대 이다.
- 실제 데이터베이스에는 info 속성값은 저장되지 않으며 id, name 속성값만 저장된다.
- crypto 모듈 이용하여 비밀번호 암호화
=> npm install crypto --save
- encryptPassword(password) : password 와 salt 값을 crypto 모듈로 암호화한다.
- makeSalt( ) : 랜덤값 생성
- authenticate(password, salt값, hashed_password) : password 와 salt값으로 암호화된 비밀번호가 hashed_password와 같은지를 반환
- 인스턴스 객체인 user 를 생성하여 저장하면 실제로는 password 속성이 아니라 _password, salt, hashed_password 속성들이 저장된다.
- password 와 results[0]._docs.hashed_password 가 같은지 체크한다.
'데이터베이스' 카테고리의 다른 글
[SQL 스터디] SQL 첫걸음 스터디 - 2 (0) | 2018.12.05 |
---|---|
[SQL 스터디] SQL 첫걸음 스터디 - 1 (1) | 2018.10.19 |
MongoDB 설치법 (mac 기준) (0) | 2017.10.09 |
일주일 간격으로 데이터 개수 출력하기 (0) | 2017.06.22 |