본문 바로가기

회고/TIL

2023-06-13 TIL

🔸 Node.js

 

1. req.params vs req.query

 

HTTP GET 요청으로 특정 데이터를 받아오는 요청이 있다고 가정을 해보자

 

// 1번 예시
app.get('/posts/:post-id',(req,res)=>{
	console.log(req.params);
    });
    
    
// 2번 예시
요청 URL = http://www.yhjs1211.com/posts?post-id=1211
app.get('/posts',(req,res)=>{
	console.log(req.query);
    });

 

2. Schema & Model

 

MongoDB 의 특성을 생각해보자. noSQL의 특성상 정형화 되어있지 않은 데이터들을 마구마구 집어넣을수 있다. 양날의 검과 같은 부분인데, 일단 알아야 할 포인트는 '데이터의 일관성' 이 보장되지 않는다는 점이다.

 

예를 들어 post(게시글) 이란 데이터를 DB에 넣는다고 가정을 해보자.

 

Post 는 필드로 [ title , author, password, ID ( PK ) , content, created_at, comments ] 등등 이외에도 생각해본다면 여러가지 필드를 구성할수 있다. 그럼 내가 DB에 데이터를 등록을 할때, 1번 게시글은 5개의 필드가 있고, 2번 게시글은 3개의 필드가 있고, 3번 게시글은 6개의 필드가 있어서 이렇게 들쭉날쭉한 데이터를 보관한다 하면 특정 기준을 가지고 조회를 한다거나, 수정, 삭제를 진행을 할때 오류가 발생할 수 있다. 그래서 일련의 데이터 정형화를 시켜주는 작업이 스키마 ( Schema ) 이다.

 

// mongoDB 를 원활히 사용하게끔 도와주는 모듈 mongoose import
const mongoose = require('mongoose');

const schemaPost = new mongoose.Schema({
	title:{
    	type: String,
        required: true
        },
    author:{
    	type: String,
        required: true
        },
    password:{
    	type: String,
        required: true
        },
    content:{
    	type: String,
		}
    },{versionKey:false}); // versionKey 는 데이터가 등록될때마다 버젼을 나타내는 __v 값을 비활성화 되게끔 해준다.
    
const Post = mongoose.Model('Post',schemaPost);

module.exports = Post;

스키마를 작성하면서 느낀점은 '느낌이 클래스 만드는거랑 비슷한데?' 라는 점이었다. 하나의 클래스를 만들어두고 들어오는 데이터에 대해서 정의를 하고 그걸 그대로 DB에 전달해서 저장하는 흐름이었다. 다만 앞서 말했다시피 mongoDB 특성상 비정형 데이터를 한번 거쳐서 특정 데이터는 필수로 입력을 받아야 하고, 또 어떤 특정데이터는 중복되지 못하는 고유값을 가지게끔 할수도 있어 일관성된 DB를 만들수가 있었다.

mongoDB 웹페이지에서 확인해본 결과, 'Post' 라는 데이터 베이스에 내가 저장을 하라고 지시했지만, 실제로는 소문자로 변경을 한뒤 복수형태로 변경되서 데이터베이스가 생성된걸 확인할수있었다. mongoose 내부 로직에서 자동으로 그렇게 처리를 하게끔 해두었나보다.

mongoDB Collections 내에 NodeJS 라는 DB 안에 'posts' 로 확인할 수 있었다.

 

반대로 DB에서 데이터를 조회해서 사용할 경우, 내가 사용했던 모델 변수명을 불러와 메서드를 활용하면 되는 부분이 간단명료했던것같다.

find(), updateOne(), deleteOne() 등등 여러가지 함수를 통해 간단히 CRUD를 할수 있었다는 점이 맘에 들었다.

 

👉  맨처음 스키마를 작성하고 모델을 export 하고 router 내에서 사용을 할땐 사실 머릿속에 '???' 상태 였었다. 그 이유로는 실제 데이터 등록이 어떻게 이루어져서 나타나는지를 확인할 수 없었기 때문이고, 또 내가 해당 DB가 'Post' 로 되는지 'posts' 로 되는지에 대한 부분도 몰랐기 때문에 더더욱 미궁속에 있었으나, 일단 실행시켜 보자 라는 마인드로 해본 결과 mongoDB 웹 내에서 확인을 하고 바로 이해가 갔다. mongoose 짱짱맨 👊

 

 

'회고 > TIL' 카테고리의 다른 글

2023-06-20 TIL  (0) 2023.06.20
2023-06-19 TIL  (0) 2023.06.20
2023-05-26 TIL  (0) 2023.05.26
2023-05-23 TIL  (0) 2023.05.23
2023-05-21 TIL  (0) 2023.05.22