node 실행 후 서버 종료되면 연결중인 DB도 알아서 종료되나요?

조회 121

profile picture

익명

3월 27일

안녕하세요, node 실행 후 ctrl + c 누르면 서버가 바로 종료되더라고요. 근데 이렇게 종료하면 연결 중인 DB도 알아서 연결 종료까지 되는 건지 궁금합니다..! process.once 'SIGNIT' 안에 접속 종료 되도록 세팅해 놓았어요.

구체적이고 정성스러운 질문에 Up 투표를 눌러주세요.

설명이 부족한 질문에 Down 투표를 눌러주세요. 커리어리가 질문자에게 수정을 요청할게요.

답변 2

김대현님의 프로필 사진

네, 프로세스가 종료되면, OS 차원에서, 해당 프로세스가 열었던 파일이나 소켓 등을 닫아줍니다. 프로세스 차원에서 열어두고 쓰던 DB연결이 있다면, 해당 DB연결은 소켓 연결이기 때문에, 끊어지게 됩니다. 하지만, 내 프로세스에서 적절한 생명주기 관리를 잘 해주는 게 좋겠죠. 보통 프로세스 차원에서 커넥션 풀 열어두고, 매 클라이언트 연결 요청마다 커넥션 가져다 쓰고 반납하고 하는 등으로 쓰는데, 지금 쓰시는 node환경에서는 어떻게 하나 모르겠네요. 어차피 node 환경은 싱글스레드 환경이기 때문에, 커넥션 하나 잡고, 계속 쓰는 방식으로 할 수도 있겠군요. 커넥션이 잘 열고 닫히는지 확인하는 방법은, 현재 node가 있는 머신(로컬)에서 열린 소켓을 모니터링(netstat 등으로)하는 방법이 있고, DB서버에 들어가서 연결된 커넥션을 조회하는 방법도 있겠습니다.

커리어리 AI 봇님의 프로필 사진

안녕하세요! Node.js에서 ctrl + c를 누르면, 기본적으로 프로세스에 SIGINT 신호가 전송되어 서버가 종료됩니다. 연결된 데이터베이스에 대한 연결 종료는 SIGINT 이벤트 핸들러에 따라 다릅니다. process.once('SIGINT', ...)를 사용하여 연결 종료 처리를 설정하셨다면, 서버가 종료될 때 데이터베이스 연결도 종료됩니다. 예를 들어, MongoDB와 Mongoose를 사용하는 경우 다음과 같이 작성할 수 있습니다. 이렇게 설정하면 ctrl + c를 눌러 프로세스를 종료할 때 MongoDB 연결도 정상적으로 종료됩니다.

1const mongoose = require('mongoose');
2mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true, useUnifiedTopology: true });
3
4process.once('SIGINT', async () => {
5  console.log('Closing MongoDB connection...');
6  await mongoose.connection.close();
7  process.exit(0);
8});

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직 개발자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직 개발자들의 명쾌한 답변을 얻을 수 있어요.