[Node.js] MySQL 연결하기 + RowDataPacket 데이터 사용하기
Node.js v16.13.1
MySQL v8.0.28
버추얼 박스 우분투 가상 머신에서 진행합니다.
Node.js와 MySQL을 연동하고 RowDataPacket에서 값을 뽑아내는 방법을 다룹니다.
모듈과 코드를 저장할 적절한 폴더를 하나 생성해 줍니다.
저는 Node_MySQL로 이름을 정했습니다. ㅎㅎ

그리고 해당 디렉토리에서 터미널을 열어줍니다.

이제 모듈을 설치하겠습니다. 아래 명령어를 실행합니다.
$ npm install express mysql

그리고 js파일을 하나 만들어 해당 폴더에 저장합니다. 저는 gedit를 사용하겠습니다.

그리고 MySQL 모듈을 탑재하고 접속할 계정과 사용할 데이터베이스의 정보를 입력해 줍니다.
host : 호스트
user : 계정
password : 비밀번호
database : 데이터베이스

그리고 이제 연결을 할건데, 코드 실행시 ER_NOT_SUPPORTED_AUTH_MODE 에러가 뜬다면
MySQL 서버에 접속해 아래 명령어를 입력해 주면됩니다.
mysql -u [계정] -p
ALTER USER '[계정]'@'[호스트]' IDENTIFIED WITH mysql_native_password BY '[비밀번호]';
코드를 보면 다음과 같습니다.
계정정보를 입력하고 connect(); 함수로 연결을 시도하는 코드입니다.
const mysql = require('mysql');
const connection = mysql.createConnection({
host : 'localhost',
user : '---',
password : '---',
database : 'mysql'
});
connection.connect();
connection.end();
이제 node 명령어로 파일을 실행시킵니다.
오류 메시지가 뜨지 않는다면 연결 성공입니다.

이제 데이터 베이스에서 데이터를 가져와 보겠습니다.
저는 미리 아래와 같은 테이블을 만들어 두었습니다.

똑같은 테이블을 만드려면 아래 쿼리문을 사용하면 됩니다.
// 테이블 생성
CREATE TABLE member (
seq INT NOT NULL AUTO_INCREMENT,
id VARCHAR(20),
pw VARCHAR(100),
PRIMARY KEY(seq)
) ENGINE=MYISAM CHARSET=utf8;
// 값 삽입
insert into member values (null, 'a', '123');
insert into member values (null, 'b', '456');
insert into member values (null, 'c', '789');
데이터를 가져오는 방법은 아주 간단합니다.
만들어둔 연결 객체에 query메소드로 원하는 쿼리문을 넣어주면 됩니다.
코드를 다음과 같이 수정하고 실행시켜 보겠습니다.
const mysql = require('mysql');
const connection = mysql.createConnection({
// 계정 정보
});
connection.connect();
connection.query('SELECT * FROM member', (error, rows, fields) => {
if (error) throw error;
console.log(rows);
});
connection.end();
error에는 에러의 정보가 들어있고 rows에는 데이터베이스의 각 튜플, fields에는 튜블의 자세한 정보가 들어있습니다.
실행 결과를 보니 RowDataPacket의 형태로 데이터가 잘 조회된 것을 확인할 수 있습니다.

RowDataPacket에서 특정 값을 가져오고 싶다면 rows[조회된 튜플의 행번호][속성이름]또는
rows[조회된 튜플의 행번호].속성이름 을 사용하면 됩니다.
저는 반복문을 사용해 다음과 같이 id를 가져와 봤습니다.
const mysql = require('mysql');
const connection = mysql.createConnection({
// 계정 정보
});
connection.connect();
connection.query('SELECT * FROM member', (error, rows, fields) => {
if (error) throw error;
for(var i in rows){
console.log(rows[i].id);
console.log(rows[i]['id']);
}
});
connection.end();
잘 출력되는 것을 확인할 수 있습니다.

감사합니다.
[참고자료]
[#. mySQL] ER_NOT_SUPPORTED_AUTH_MODE 에러 해결하기
node 서버에서 mySQL를 연동해서 실행하려고 하는데 Client does not support authentication protocol requested by server; consider upgrading MySQL client 에러가 발생한다 해결하기 위해 mySQL에 접속해서..
developer0809.tistory.com
MySQL 연동 | PoiemaWeb
Node.js(express)와 MySQL 연동
poiemaweb.com
공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.