Express 에서 DB 커넥션 관리 노하우가 궁금합니다.


(GDHOME) #1

안녕하세요. Python으로 개발하다 Nodejs에서 입문하고 있는 중입니다.
이벤트 루프 기반이라 그런지 Ngnix나 Flask와는 달리 글로벌 변수가 동시 접속한 유저에게 공유되기 때문에
DB 모듈에서 import 시 커넥션을 미리 생성하지 않고 라우트 내에서 생성하고 해제해주고 있는데, 더 나은 방법이 있는지 궁금합니다.
덧붙여 ConnectionPool 을 쓰지 않는 이유는 현재 서버 환경이 AutoScaling 방식이라(AWS Lambda) 컨테이너 대수 산정이 어렵기도 하고 미리 많이 생성해두기엔 메모리 부담이 염려 되서 위와 같이 하고 있습니다.
( 일 30 만 DAU 기준 )

아래 코드는 유저 테이블을 관리하는 모듈에 라우트에서 생성한 커넥션을 전달하고 내부에선 SQL 쿼리를 처리하고 반환합니다. 라우트 마다 커넥션 생성/해제하는게 올바른진 모르겠는데 더 좋은 방법이 있는지 궁금하네요.
실제 서비스에는 Hook 으로 진입 전 DB 커넥션을 생성하여 라우트로 객체를 넘기고 res.send 시 훅에서 클로징 하는 식으로 구성하여 실제 라우트 내에선 아래와 같이 하고 있지는 않습니다.

import express from 'express'
import DB from './DB'
import user from './model/user'

const app = express()
app.use(express.json())
app.get('/users', async (req, res) => {
  // Create Connection ( mysql2 wrapper )
  const db = new DB()
  const user = await user(db, 1)
  // Close Connection
  db.close() 
  res.json({ user })
})