백엔드는 많은 자료를 저장하고 가공하는 일을 한다. 당연하게도 백엔드 개발에 DB의 역할은 아주 중요하다.
데이터베이스
데이터 베이스는 관계형 데이터베이스와 NoSQL 데이터베이스로 나눌 수 있다.
- 관계형 데이터베이스(SQL데이터베이스)
저장할 자료의 구조를 행과 열로 구분해서 table형태로 관리한다.
퍼즐 조각을 연결하듯 필요할 때마다 원하는 정보를 검색하고 표시할 수 있다.
관계형 데이터베이스는 SQL(Structed Query Language)언어를 사용하므로 SQL 데이터베이스라고도 한다.
- NoSQL 데이터베이스
위에서 자료를 표 형태로 저장했다면 NoSQL 데이터베이스는 문서 형태로 저장한다. 자료의 구조가 표처럼 고정되지 않으므로 새로운 필드를 추가하기도 쉽고 기존 필드를 수정할 수도 있다.
즉, 자료의 구조를 변경하기가 쉽다.
몽고DB
몽고DB는 NoSQL 데이터베이스로, 문서는 JSON으로 저장된다.
JavaScript Object Notation (JSON)
JSON은 데이터를 표현하기 위한 경량의 형식이다. 주로 웹에서 데이터를 주고받거나 저장할 때 사용되는데, 사람이 읽기 쉽고 기계가 분석 및 생성하기 쉬운 특징을 가지고 있어 널리 사용된다.
JSON은 키-값 쌍의 집합으로 이루어져 있으며, JavaScript의 객체 리터럴 문법과 유사하다.
다음은 JSON의 예시이다.
{
"이름": "홍길동",
"나이": 30,
"성별": "남성",
"주소": {
"도시": "서울",
"우편번호": "12345"
},
"취미": ["등산", "음악 감상", "요리"]
}
JSON데이터는 텍스트 형태로 표현되며, 다양한 프로그래밍 언어에서 이를 해석하고 사용할 수 있다.
Mongoose 모듈
자바스크립트 코드를 사용해서 몽고DB에 연결할 때 몽구스(Mongoose) 모듈을 이용하면 편리하다.
몽구스는 Node.js를 위한 MongoDB Object Data Modeling 라이브러리로, MongoDB에서 데이터를 다루는 작업을 더 추상화하고 간단하게 만들어준다.
.env 파일
.env 파일은 애플리케이션에서 사용하는 환경 변수를 저장하는데, 주로 루트 디렉터리에 저장한다.
환경변수
데이터베이스 주소나 비밀번호처럼 애플리케이션마다 달라지는 정보를 가리킨다.
.env파일에는 애플리케이션의 설정이나 보안 정보처럼 외부에 드러내고 싶지 않은 값을 저장한다.
따라서 환경변수에 접근하려면 procss객체를 사용한다.
.env 파일과 process 객체
환경변수는 일반적으로 비밀번호, API키, 데이터베이스 연결 정보 등과 같은 민감한 정보를 포함한다. 이러한 정보는 소스 코드에 직접 하드코딩되면 보안상 위험하다.
이때 필요한 것이 process객체인 것이다.
process 객체는 노드에서 지원하는 글로벌 객체이므로 따로 임포트하지 않고 어떤 모듈에서나 사용할 수 있다.
즉 .env 파일을 소스코드 외부에서 안전하게 관리를 가능하게 한다.
몽고DB 접속 코드 작성
const dbConnect = async() => {
try{
const connect = await mongoose.connect(process.env.DB_CONNECT);
console.log("DB connected");
} catch (err) {
console.log(err);
}
};
- 데이터베이스와 연결하는 것은 비동기로 처리해야 하므로 async와 await를 사용하고
오류 처리를 위해 try ~ catch 문을 함께 사용한다. - 몽고DB에 접속할 때는 mongoose.connect 함수를 사용하고, 괄호 안에 데이터베이스 커넥션 스트링 (.env 파일에 저장된) 을 넣어준다. → process.env 사용
'백엔드 > Node.js' 카테고리의 다른 글
[Do it! Node.js 입문] 12. API (1) | 2024.04.03 |
---|---|
[Do it! Node.js 입문] 10. 미들웨어 (0) | 2024.04.02 |
[Do it! Node.js 입문] 09. express 활용 (1) | 2024.04.02 |
[Do it! Node.js 입문] 08. express 설정 (0) | 2024.03.30 |
[Do it! Node.js 입문] 07. 비동기 작업 처리 방법 (0) | 2024.03.28 |