코딩, 개발에 대한 기록 저장소

기본적인 DB 연결 예제에서 주의점 3가지 찾기

기본적인 DB 연결 예제

아래는 nodeJS에서 mysql 모듈을 사용하여 my_database 데이터베이스의 my_table 테이블에서 모든 데이터를 가져오는 예제입니다.

아주 기본적인 database 연결 예제입니다.
예제는 nodeJS지만 얘기하려는 내용은 대부분의 프로그래밍 언어에 포함됩니다.

const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'my_database'
});

connection.connect();

connection.query('SELECT * FROM my_table', (error, results, fields) => {
  if (error) throw error;
  console.log('The result is: ', results);
});

실무에 적용한다고 했을 때 이 간단한 예제 안에서 주의해야 할 사항이 3가지 있습니다.
.
.
아시겠나요??
.
.
어느정도 경험 많은 개발자분들은 느낌이 딱 오시겠지만 경험이 적은 개발자분들은 인터넷에서 찾은 예제코드를 그대로 사용하는 경우가 있기 때문에 그 주위사항을 정리하였습니다.

하드코딩된 연결 정보

호스트명, 계정 정보, 데이터베이스명 등이 코드에 직접 하드코딩 되어 있습니다.
이러한 정보는 코드를 Git 같은 소스 코드 관리 시스템에 저장할 때 같이 저장되므로, 누군가 이 저장소를 복제하면 연결 정보를 쉽게 얻을 수 있습니다.
보통 setting파일을 따로 만들어 소스 코드 관린 시스템에 저장이 되지 않도록 ignore 처리를 해놓습니다.

DB root 계정 사용

DB에 연결할 때 root 계정을 사용하고 있습니다. root 사용하면 참 편하죠. 하지만 DB에 접근할 수 있는 모든 권한을 가지기 때문에 유출되면 돌이킬 수 없게 됩니다.
최소한의 권한만 가진 사용자를 생성하여 DB에 접근하도록 설정하는 것이 좋습니다.

DB 연결 종료 코드 누락

DB 연결을 종료하는 코드가 없습니다.
생성된 connectioni의 사용이 완료되면 connection.end()를 호출하여 자원을 돌려줘야 합니다.
그렇지 않으면 DB와 연결이 지속되어 불필요한 자원을 소비하고 나중에는 서버 자원 부족으로 장애가 발생할 수 있습니다.

기타

위 3가지는 정말 중요하다 생각되는 내용이고 아래 내용은 중요할 수도 있고 중요하지 않을 수도 있어서 기타로 뺐습니다.

DB 연결에 대한 예외처리

DB를 사용한다는 얘기는 내부망이든 외부망이든 네트워크로 묶여 있다는 얘기이고, 네트워크는 언제든 끊길 수 있습니다. 따라서 예외처리를 하는 것이 좋습니다.

예)

try {
  connection.connect();
  console.log('Connected!');
} catch (err) {
  console.error('Error connecting to database:', err);
}