나는 Node.js에서 postgreSQL을 제대로 사용하고 있...나?

tennfin1·2024년 2월 11일
0

backend

목록 보기
12/18

node.js로 백엔드 개발을 수행하는 데에 데이터베이스로 PostgreSQL를 사용하고 있는데,
데이터베이스에 연결하는 connection을 API 내부에서 실행하는 것은 굉장히 비효율적입니다.

그래서 connection pool이라는 개념이 나왔습니다.

웹 컨테이너(WAS)가 실행되면서 DB와 미리 connection(연결)을 해놓은 객체들을 pool에 저장해두었다가,
클라이언트 요청이 오면 connection을 빌려주고, 처리가 끝나면 다시 connection을 반납받아 pool에 저장하는 방식을 말합니다.

  1. 기본적으로 다른 장치와의 연결(특히 보조저장장치)은 속도가 느릴 수 밖에 없습니다. (낮은 기준의 클럭사이클에 맞춰야하기 때문)
    이러한 부분에서 발생하는 오버헤드를 상당히 줄일 수 있다는 점

  2. connection의 개수가 필요 이상으로 늘어나지 않도록, 연결의 최대 개수를 제한할 수 있다는 점

이러한 장점들이 있는데, 사용법에 따라 잘 사용하고 있는가?

1. Non connection Pool




와 같이 실행하고, 5회 측정한 시간은




대략적으로 37ms 정도의 레이턴시가 나옵니다.

What is transfer Start?

2-1. Connection Pool (Declare on Server.js, Pass By Parameters)

connection pool로 생성하고 server.js(혹은 index.js)에서 선언하고 라우터 파일로 넘기는 경우 => 서버 실행동안 Pool 선언을 한번만 수행함






대략 5~6ms의 레이턴시가 발생합니다.

2-2. Connection Pool (Declare on Router)

Router 내부에서 connection Pool를 선언함. 이후 선언코드를 다시 마주치더라도, connection pool 자체는 서버에 할당된 개수가 정해져 있기 때문에 추가적인 시간이 발생하지는 않을 것으로 예상




대략 5~6ms의 레이턴시가 발생합니다.
비슷한 수준의 레이턴시입니다.

3. 결론

Pool 쓰면 확실히 더 빠름.
선언을 어디서 하던 connection 자체는 개수를 정해서 미리 해놨음. => 커넥션을 미리 개수만큼 해놓고 웹 서버에 할당해놨기 때문에, 커넥션으로 인한 레이턴시는 어차피 발생하지 않음.

profile
심도깊은개발

0개의 댓글

관련 채용 정보