Node.js + MySQL 연동

김현우·2021년 9월 16일
0

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개의 댓글