본문 바로가기

프로그래밍/Node.js

[Do it! Node.js 프로그래밍] 7일차

1. 공부한 범위


[06] 데이터베이스 사용하



2. 공부한 내용


[06] 데이터베이스 사용하기


06-4 인덱스와 메소드 사용하기

- 몽고디비는 데이터베이스이기 때문에 더욱 빠른 검색을 위해 각 속성에 인덱스를 만들 수 있다.

- 인덱스를 사용하게 되면 검색 속도가 빨라지기 때문에 조회가 필요한 속성에는 인덱스를 적용하는 것이 더 효율적이다.

- 위치 기반 서비스를 위해 저장되는 위도 & 경도 좌표에는 공간 인덱싱을 사용해야 하며 [type: [Number], index: "2d", sparse: true]같은 형태로 객체를 만들어 설정 가능하다.

- 몽구스에서는 스키마 객체에 메소드를 추가할 수도 있다.

static(name, fn) : 모델 객체에서 사용할 수 있는 함수를 등록한다. 함수의 이름과 함수 객체를 파라미터로 전달한다.

method(name, fn) : 모델 인스턴스 객체에서 사용할 수 있는 함수를 등록한다.

 

사용자 리스트 조회 기능 추가하기

 

- 스키마 뒤에 static 메소드를 통해 명령어를 추가해줄 수 있다.

 

- 프로젝트를 구동하는 과정에서 ENOENT문제가 발생했고 오류 화면을 보니 중간에 해당 프로젝트명이 없어 왜 그런가 고심했다.

- 생각해본 결과 편집 프로그램에서 기준 폴더를 github로 했었기 때문에 상대 경로가 꼬여 발생한 문제라는 것을 깨달았고 제대로 기준 폴더를 잡으면서 문제를 해결했다.

 

 

06-5 비밀번호 암호화하여 저장하기

 

virtual 함수 사용하기

- 실무에서는 비밀번호를 데이터베이스에 저장할 때 암호화를 수행하며 이 때 비밀번호는 단방향으로 암호화를 수행한다.

- 단방향 암호화 : 한 쪽으로만 암호화가 가능한 것으로 복호화할 수 있는 방법이 없다. 반대로 양방향 암호화는 암호화한 데이터를 복호화하는 것이 가능하다.

 

스키마 객체의 virtual() 함수 사용법 알아보기

- virtual 메소드를 이용해 info속성을 지정한다. 이렇게 저장해두면 스키마에 저장되었던 다른 속성들처럼 사용이 가능해진다.

 

비밀번호 암호화하여 저장하는 코드 적용하기

- 노드에서의 암호화는 encrypt 모듈을 사용한다.

- 스키마에 저장된 여러 속성들 중 salt를 통해 암호화를 수행하게 된다.

 

- 데이터베이스에서 반드시 들어가야 할 속성임에도 값이 없는지 체크하기 위해서 validate() 메소드를 사용해볼 수 있다.

 

- 암호화를 수행하는 과정에서 Nodeerror 등이 발생했지만 encrypt 모듈을 설치하지 않아 발생한 문제였음을 찾아내고 문제를 해결했다.

- 다음으로는 비밀번호가 틀렸을 때 일치하지 않음을 안내하는 페이지 대신 콘솔에 오류가 나타나는 현상을 해결하고자 하였다.

- 코드를 면밀히 살펴본 결과 authUser 함수 부분에서 결과가 제대로 나오지 않았을 경우 비밀번호 또는 아이디가 제대로 찾아지지 않았을 것인데 그 결과를 로그로 출력하려해 문제가 발생한 것이였다.

 

- 계속된 실수들을 보면 보통 로그를 이상한 곳에 넣을 때 자주 발생해왔다. 로그를 넣을 때는 면밀히 살펴본 후 넣어야 할 필요가 있다.