Node.js와 MSSQL을 이용한 비동기 데이터베이스 연결 및 쿼리 실행


오늘은 Node.js와 MSSQL을 이용하여 데이터베이스에 연결하고, 데이터를 조회하는 방법을 소개하려고 합니다. MSSQL을 Node.js와 연동할 때 필요한 mssql 패키지를 사용해 비동기 방식으로 SQL Server와의 연결을 처리하는 법을 알아보겠습니다.

환경 설정

우선, 이 예제에서는 mssql이라는 Node.js 패키지를 사용하여 SQL Server와 연결합니다. 이를 위해선 해당 패키지를 설치해야 합니다. 다음 명령어로 패키지를 설치해 주세요:

npm install mssql

이후, 데이터베이스와 연결하기 위해 필요한 기본 설정을 정의합니다. 설정 정보에는 서버 주소, 데이터베이스 이름, 사용자 계정 정보 등이 포함됩니다.

const sql = require('mssql');

// 데이터베이스 연결 설정 정보
const dbConfig = {
    server: "localhost\\SQL2K14",  // 서버 이름 또는 IP 주소
    database: "SampleDb",  // 연결할 데이터베이스 이름
    user: "sa",  // 데이터베이스 사용자 이름
    password: "sql2014",  // 사용자 비밀번호
    port: 1433,  // 데이터베이스 연결 포트 번호
    options: {
        trustServerCertificate: true  // 인증서 오류 방지 옵션 (로컬 개발 시 사용)
    }
};

위의 설정에서는 로컬 서버와 연결하며, trustServerCertificate 옵션은 로컬 개발 환경에서 인증서 관련 오류를 방지하기 위해 사용됩니다. 이는 개발 중에만 사용하는 것이 좋으며, 실제 운영 환경에서는 보안 인증을 철저히 해야 합니다.

비동기 함수로 데이터베이스 연결하기

데이터베이스에 연결하고 데이터를 가져오는 작업은 시간이 걸리기 때문에 비동기 방식으로 처리하는 것이 일반적입니다. 아래 getEmp 함수에서는 async/await를 이용하여 데이터베이스에 연결하고 쿼리를 실행합니다.

// 직원 정보를 가져오는 함수
async function getEmp() {
    let pool;
    try {
        // 데이터베이스에 연결
        pool = await sql.connect(dbConfig);
        // SQL 쿼리를 실행하여 직원 정보를 가져옴
        const result = await pool.request().query("SELECT * FROM emp");
        // 쿼리 결과를 콘솔에 출력
        console.log(result.recordset);
    } catch (err) {
        // 데이터베이스 연결 또는 쿼리 실행 중 오류가 발생했을 때 오류 메시지 출력
        console.error('데이터베이스 연결/쿼리 중 오류 발생:', err);
    } finally {
        // 데이터베이스 연결 닫기
        if (pool) {
            try {
                await pool.close();  // 연결을 안전하게 닫음
            } catch (closeErr) {
                // 연결을 닫는 중 오류가 발생했을 때 오류 메시지 출력
                console.error('연결 닫기 중 오류 발생:', closeErr);
            }
        }
    }
}

// 직원 정보를 가져오는 함수 호출
getEmp();

코드 설명

  1. async function getEmp(): async 키워드를 사용하여 비동기 함수로 정의했습니다. 이를 통해 데이터베이스 연결과 쿼리 실행을 비동기적으로 처리할 수 있습니다.
  2. await sql.connect(dbConfig): 데이터베이스에 연결합니다. await 키워드를 사용함으로써 연결이 완료될 때까지 기다린 후 다음 작업을 진행합니다.
  3. await pool.request().query("SELECT * FROM emp"): 데이터베이스에 연결된 후, 쿼리를 실행합니다. 여기서는 emp 테이블의 모든 데이터를 조회하는 쿼리를 실행합니다.
  4. 오류 처리 (try...catch): 연결 및 쿼리 실행 중 발생할 수 있는 오류를 catch 블록에서 처리합니다. 데이터베이스 작업은 외부 요인에 의해 오류가 발생할 가능성이 높으므로 반드시 오류 처리를 포함해야 합니다.
  5. 연결 닫기 (finally): 데이터베이스와의 연결은 작업이 끝난 후 반드시 닫아주어야 합니다. 이를 위해 finally 블록에서 pool.close()를 호출하여 안전하게 연결을 종료합니다. 이렇게 하면 자원 누수를 방지할 수 있습니다.

async/await를 사용하는 이유

Node.js는 비동기 I/O 처리를 기본으로 하는 환경입니다. 비동기 작업을 수행할 때 콜백(callback) 패턴을 사용할 수도 있지만, 코드의 가독성과 유지보수성을 높이기 위해 async/await를 사용하는 것이 좋습니다. async/await는 프로미스 기반의 비동기 코드를 동기 코드처럼 쉽게 작성할 수 있게 해주며, 오류 처리도 더욱 직관적으로 할 수 있습니다.

맺음말

이번 포스팅에서는 Node.js와 MSSQL을 연동하여 데이터를 조회하는 방법을 알아보았습니다. 데이터베이스와의 연결부터 쿼리 실행, 그리고 연결 종료까지의 모든 과정을 비동기적으로 처리하였으며, 각 단계에서 발생할 수 있는 오류에 대비하여 안정적인 코드 작성 방법을 살펴보았습니다.

이 코드를 바탕으로 다양한 데이터베이스 작업을 수행하며 Node.js와 MSSQL의 연동을 연습해 보세요. 데이터를 추가하거나 업데이트하는 것도 비슷한 방식으로 처리할 수 있으니, 스스로 확장해보는 것도 좋습니다. 추가적인 질문이나 도움이 필요하다면 언제든지 댓글로 남겨주세요!


2930 Blog에서 더 알아보기

구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.