Node.js + MySQL 연동

김현우·2021년 9월 16일

MySQL 모듈

Node.js에서 DB에 접근하여 데이터를 CRUD하기 위해 필요한 모듈
MySQL은 mysql 모듈 사용
connection 객체를 생성하여 DB와 통신
connection 설정을 위한 config 설정 필요(DB 통신 정보 저장)
connection 생성/사용 방법

  • connectionCreate()
  • connectionPool
    MySQL을 돌리는 서버에 따라 connection 갯수에 제한이 있기 때문에 동시 접속자가 많아지면 DB 서버를 증설해야한다.

MySQL Config

프로젝트 내에서 config 폴더를 생성하고 그 안에 config 파일을 아래와 같이 만든다.

const config = {
	host: "RDS 엔드포인트 or localhost등 DB hostname",
  	port: "DB 포트번호(3306)",
 	user: "MySQL user 이름"
	password: "MySQL password",
 	database: "접근할 스키마 이름",
}

config에는 DB 정보를 입력해 넣는다.

MySQL - createConnection

1번에 1개의 connection을 생성 후 DB와 연결
하나의 쿼리를 실행: 쿼리 실행 중에 연결을 차단하여 다른 쿼리 실행 차단
connection을 매번 열고 닫는 작업을 반복해야 한다.

  • 연결 설정 / 반납하는데 걸리는 시간이 크기 때문에 실제로는 잘 안쓴다.

connection.query(query, [values], callback);

  • query: 쿼리문이 string 형식으로 들어감
    변수 자리에 ?로 푯시해 런타임에 배정하거나 백틱 문자열을 사용하여 쿼리문에 변수 배정

  • values: 쿼리문 안에 들어갈 변수들이 배열 형식으로 들어감 (1개일 때는 배열 생략 가능)

  • callback: select 문의 결과가 json 배열 형태로 돌아옴 ex) [{obj1}, {obj2}, {obj3}, ...]
    insert, update, delete는 에러 처리만 함

connection.end(): 커넥션 종료

MySQL - createPool

여러 개의 connection pool을 미리 만들어 놓고 거기서 connection을 가져다 씀
connection을 가져왔다가 반납하는 것을 반복

  • 연결 설정/반납하는 시간이 없음. 그냥 쓰고 다시 가져다 놓는 방법
    다만 pool에 존재한 connection 갯수 제한이 있음
  • 쓰고 다시 반환하지 않으면 connection limit에 걸릴 수 있음

connection.release();

  • connection 반환하는 메소드 -> connection.query 콜백 메소드 안에서 해줘야 한다.

    • 비동기로 처리되기 때문에 쿼리가 실행되기 전에 반납될 수 있다.
  • 빼먹으면 계속 connection이 쌓이고 쌓여서 결국 통신 불가

    • connection 반납하지 않아 connection leak 현상 발생 (유휴 connection이 pool에 남아있지 않음)
    • 에러가 나도 꼭 반납 해줘야 한다.

MySQL - beginTransaction

beginTransaction
트렌젝션 처리하기 위한 메소드
connection을 생성하고 beginTransaction 메소드로 감싼 부분에 트렌젝션이 적용된다.

  • rollback() : 실행에 실패하였을 때 결과 되돌리기 (롤백 이전의 처리 모두 무효화)
  • commit() : 트렌젝션 내 모든 쿼리 완료 후 결과 반영

트렌젝션 (Transaction)

데이터베이스의 상태를 변화시키기 위햇서 수행하는 작업의 단위
-> 여러 단계의 처리를 하나의 처리처럼 다루는 기능
커밋 (commit): 트렌젝션의 실행 결과를 데이터베이스에 반영하는 것
롤백 (roll-back): 반영하지 않고 원래 상태로 되돌리는 것

트렌젝션의 특징

  • Atomicity (원자성): 트렌젝션 안의 모든 처리는 모두 성공하거나, 모두 실패해야 한다.
  • Consistency (일관성): 트렌젝션의 작업 처리 결과가 항상 일관성 있어야 한다. (일관성 있는 DB 유지)
  • Isolation (독립성): 둘 이상의 트렌젝션이 동시에 병행되고 있을 경우에 서로 다른 트렌젝션끼리 영향을 줄 수 없다.
  • Durability (지속성): 트렌젝션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야 한다.
profile
두려워 말라, 놀라지 말라, 굳세게 하리라

0개의 댓글