Node.js - MySQL (4) MySQL 연결하기 (개념)

2022. 2. 28. 01:49·MySQL
반응형

 

 

이번 포스팅에서는 Node.js에서 "mysql" 패키지를 사용했을 때 MySQL에 어떤 방식으로 접속하는지 그 원리에 대해 간략하게 알아보고자 한다.

 

 

< 목차 >

  1. MySQL 접속이란?
  2. mysql 드라이버 사용하기

 

 

 

1. MySQL 접속이란? 

데이터베이스와 서버 간의 연결에 대해 자세히 알기 위해서는 네트워크 개념에 대해 숙지를 하고 있어야 한다. 하지만 네트워크 개념에 대해 완벽히 이해하고 있지 않더라도 데이터베이스와 서버 사이에서 어떠한 일들이 일어나는지 간략하게라도 알아보고 넘어가자.

 

네트워크 통신 방법에는 TCP 방식과 UDP 방식의 두가지 통신방법이 존재한다. HTTP 통신 역시 TCP 기반의 통신방법이며 웹서버가 DB 서버에게 요청하는 통신방법 역시 TCP 통신이다. TCP 통신은 간단하게 얘기해서 한번의 요청에 한번의 응답이 오는 형태의 통신 방식이라고 생각하면 된다. 

 

웹서버(클라이언트)와 DB서버 간의 통신을 단계별로 살펴보면 다음과 같다.

step1. TCP 통신 요청

step2. TCP 통신에 대한 응답

1단계와 2단계의 작업을 통틀어서 "핸드쉐이크(HandShake)"라 한다. 여기서 핸드쉐이크란 웹서버와 DB서버가 서로 간에 연결이 잘 되었는지 테스트 해보는 과정이라고 생각하면 된다. (서로 연결되었는지 테스트)

 

step3. 커넥션(Connection) 생성.

핸드쉐이크가 끝난 웹서버(클라이언트)와 DB서버는 연결 상태가 된다. 서로 연결된 상태에서는 요청자와 응답자가 서로 데이터를 마음대로 주고 받을 수 있는 상태가 된다. 해당 상태에서는 서버도 클라이언트에게 요청을 할 수 있게 되는데 이러한 통신을 "소켓 통신"이라 한다.

 

👉 HTTP 통신 & Socket 통신 

  • HTTP 통신은 클라이언트에서 서버에 요청을 보내고 서버는 이에 응답하는 방식으로 통신이 이루어진다. 이로 인해 HTTP 통신은 클라이언트의 요청이 있을 때 서버가 응답하는 방식인 단방향 통신의 성격을 가진다.
  • HTTP 통신은 TCP 기반이되 통신이 순차적, 개별적으로 이루어지며 요청자와 응답자가 정해져있다.
  • Socket 통신이란 서버와 클라이언트 간에 양방향 연결이 이루어지는 통신으로 클라이언트와 서버 양쪽에서 서로에게 데이터를 전달할 수 있는 방식의 양방향 통신이다. (채팅 프로그램 같은 실시간 통신 가능)

핸드쉐이크 작업이 완료가 되면 커넥션(Connection) 상태가 되고 이때부터 클라이언트와 서버는 데이터를 주고 받을 수 있다. 즉, 핸드쉐이크가 최초로 1회 실행된 후 종료될 때까지 커넥션 상태가 유지된다. 핸드쉐이크가 일어나고 그 이후부터는 소켓통신이 가능해지는 것이다. 이후 연결 상태를 끊고 싶은 경우 커넥션을 종료하고 소켓 통신을 종료하는 과정을 거치게 된다. (소켓 통신은 많은 자원을 소비하기 때문에 종료를 해줘야 한다.)

 

step4. 커넥션 종료.

step5. 소켓 통신 종료. 

 

HTTP 통신은 한번 요청이 가면 응답이 오기 전까지 다음 요청을 보낼 수 없다. 요청을 보냈다면 반드시 응답이 와야만 한다. Socket 통신을 하게 되면 이와 다르게 여러개의 요청을 보낼 수 있다. 그리고 서버쪽에서는 요청이 처리되는 순서대로 응답을 주게 된다. 이러한 형태는 마치 비동기 통신과 비슷하다고 할 수 있다. 

 

Node.js에서 제공하는 "mysql" 라이브러리를 사용하면 이러한 과정을 통해 DB에 접속할 수 있다. 이렇게 커넥션을 만들어 주고 소켓 통신을 할 수 있게끔 해주는 것을 "드라이버"라 하고 "mysql 드라이버"라고 부른다.

 

<요약>

DB에 접속하고자 하는 웹서버는 클라이언트가 되고, DB는 서버가 된다.

최초에 Client에서 DB Server에게 HandShake를 한다. 이는 Client -> DB Server에게 요청을 보내고 DB Server -> Client에게 응답을 보내는 행위를 말한다. 이것은 HTTP 구조랑 비슷하다.

핸드쉐이크로 Connection이 맺어지게 된다.

Client 와 DB Server 간에 소켓(Socket)이라는 것이 생긴다. <- 소켓 Open

소켓이 열리면 서로 내용을 주고 받을 수 있는 상태가 된다.

소켓 통신은 많은 자원을 소비하기 때문에 종료를 해줘야 한다.

커넥션 close -> 소켓 close

 

 

 

 

2. mysql 드라이버 사용하기 

이제 vsCode(Visual Studio Code)의 터미널에서 npm install mysql 을 입력해 mysql 패키지를 설치한 후 Node.js를 사용해 다음의 코드를 실행해보도록 하자. 

const mysql = require('mysql')
const connection = mysql.createConnection({  // 이때 핸드쉐이크가 일어나서 커넥션을 맺어준다.
    host: 'localhost',
    user: 'DB계정명',
    password: '비밀번호',
    database: '데이터베이스명'
})

connection.connect((err)=>{  // 소켓 open
    if (err) throw err;
    console.log('socket open')  // 연결이 되면 실행되게끔 하기 위해서 콜백형태로 구현이 됨.
});  


connection.query("SELECT * FROM tester", (err, result)=>{
    if (err) throw err;
    console.log(result)
})


connection.end()  // 커넥션 끊기

만약 connection.end( )를 작성하지 않는다면 계속해서 DB Server와 연결된 상태를 유지하고 있게 된다. 이를 확인해보기 위해서는 터미널에서 mysql에 접속한 다음 아래의 구문을 입력해보도록 하자. 다음과 같이 맺어진 커넥션의 개수를 확인해 볼 수 있다. 

--SQL 구문--

SHOW STATUS LIKE 'Threads_connected';

맺어진 커넥션 개수 확인

 

 

 

 

 

 

반응형

'MySQL' 카테고리의 다른 글

Node.js - MySQL (6) 환경변수 설정하기 (.env)  (2) 2022.03.01
Node.js - MySQL (5) 커넥션 풀 (Connection Pool)  (0) 2022.02.28
Node.js - MySQL (3) 테이블 생성하기  (0) 2022.02.18
Node.js - MySQL (2) SQL 구문 정리  (0) 2022.02.17
Node.js - MySQL (1) 환경설정  (0) 2022.02.17
'MySQL' 카테고리의 다른 글
  • Node.js - MySQL (6) 환경변수 설정하기 (.env)
  • Node.js - MySQL (5) 커넥션 풀 (Connection Pool)
  • Node.js - MySQL (3) 테이블 생성하기
  • Node.js - MySQL (2) SQL 구문 정리
bitkunst
bitkunst
Ever tried, Ever failed, No matter. Try again, Fail again, Fail better.
  • bitkunst
    THE DEVELOPER
    bitkunst
  • 전체
    오늘
    어제
  • bitkunst GitHub
    • 분류 전체보기 (154)
      • Setup (1)
      • HTML (7)
      • CSS (10)
      • Go (2)
      • JavaScript (14)
      • TypeScript (3)
      • Node (34)
        • Node.js (7)
        • Express (19)
        • NestJS (8)
      • React (19)
      • MySQL (6)
      • BlockChain (14)
      • Ethereum (20)
      • AWS (5)
      • Linux (2)
      • Infra (2)
        • Docker (2)
      • Testing (2)
      • ABOUT CS (11)
      • 토이 프로젝트 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    웹프론트엔드
    프론트엔드
    블록체인 트랜잭션 만들기
    nodejs mysql
    Blockchain
    css
    블록체인 지갑 서버 만들기
    블록체인
    TypeScript Blockchain
    html
    웹
    redux
    리액트
    타입스크립트로 블록체인 만들기
    타입스크립트 블록체인 만들기
    웹개발
    이더리움 스마트 컨트랙트
    nestJS
    CSS Style
    Ethereum
    이더리움
    자바스크립트
    AWS
    JavaScript
    타입스크립트로 블록 체인 만들기
    React
    AWS EC2
    Nest
    Nodejs
    타입스크립트 블록 체인
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
bitkunst
Node.js - MySQL (4) MySQL 연결하기 (개념)
상단으로

티스토리툴바