TIL 021 DB connection에 관하여...

조성현·2021년 7월 1일
0

개인 프로젝트를 하던 중, 서버와 데이터베이스를 연결하면서 의문이 들었다.

"언제 DB와의 connection을 종료해야 하지?:

connection = mysql.createConnection(dbInfo);
connection.connect()
// 쿼리 //
connection.end()

찾아보니 db와의 connection은 자동적으로 관리되지만 문제가 될 수 있으니 의식적으로 닫아주는 것이 좋다고 한다.

그렇다면 서버는 계속 켜져있을 텐데 언제 닫아주는 것인가
api 요청을 받을 때마다 계속 db connection을 맺어 줘야하는 것인가

다중 connection 연결에 관하여...

일단, connection은 네트워크나 보안 관련해서 cost가 높은 작업이다. 하나의 connection 객체를 계속 사용하는 것이 맞다.

다만, 멀티 쓰레드 등에 의해 다수의 connection이 필요할 수 있음으로 이를 pool을 사용해 멀티플 connections를 한번에 맺을 수 있다고 한다. 내부 작동 일종의 DB 상의 대기 큐를 만드는 듯 하다. (pool 이 꽉차면 대기시킴)

For efficiency, we're going to create a MySQL pool, which allows us to use multiple connections at once instead of having to manually open and close multiple connections.

이를 모듈로 export 시켜서 다른 routes 자바스크립트 파일에서 import 시켜서 여기에 쿼리를 보내는 식으로 사용한다.

// DBconfig.js
const pool = mysql.createPool(config);
// Export the pool
module.exports = pool;
// ohterRoutes.js
const pool = require('../data/config');

https://code.tutsplus.com/tutorials/code-your-first-api-with-nodejs-and-express-connect-a-database--cms-31699

ORM, ODM

예전 프로젝트를 살펴보니 분명히 서버가 켜질 때 DB와 connect를 시켜줬던 것 같은데... 따로 종료시키지도 않고, api routes에서도 따로 connection 맺는 부분이 없다!

바로 mongoose가 알아서 해주고 있는 것이었다. 당시 mongoDB를 사용하면서 스키마부재의 단점을 매꿔주고, sql문을 대신 써주는 기능 정도만 체험했는데, 더 있었다!

당시에는 mongodb를 썼는데, mongodb는 mongoose가 있고, mySql에는 Sequelize, Prisma 등이 있다. ORM과 ODM은 객체와 DB 데이터 사이를 매핑해주는 역할을 한다.

orm, odm을 썼을 때 장점
1. 코드를 덜 쓴다.
2. 직관적인 코드를 작성할 수 있고, 비즈니스로직에 더 집중할 수 있다.
3. SQL문을 거의 안 쓸 수 있다.
4. db 엔진을 추상화한다.
5. 많은 일들을 자동적으로 해준다. (connection 관리 같은 거겠지)

단점
1. 복잡한 쿼리문이 느려질 수 있다.
2. 추가적인 러닝 커브
3. 유연성이 떨어져 장기적으로 불리할 수도 있다.

https://www.youtube.com/watch?v=qsDvJrGMSUY
https://okky.kr/article/460583?note=1420530https://okky.kr/article/460583?note=1420530

추가적으로 sequelize는 비동기 처리를 큰 장점이 있어 nodeJS에 특화되어 있다고 하니.. 한번 써봐야겠다는 생각이 들었다.
하지만, SQL연습하려고 책까지 샀는데.. 또한 다룰 데이터가 주식이고 복잡한 쿼리도 필요할 것 같아 orm, odm 없이 한번 도전해 볼 예정.

profile
Jazzing👨‍💻

0개의 댓글