일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- bigdata engineer
- 영어
- 프로그래머스
- 삼성역맛집
- HIVE
- bigdata engineering
- Iceberg
- 용인맛집
- apache iceberg
- 코테
- java
- 여행
- Data Engineer
- pyspark
- 코딩
- hadoop
- Spark
- 백준
- Linux
- 자바
- Apache Kafka
- 개발
- Trino
- Kafka
- 맛집
- 알고리즘
- 코엑스맛집
- BigData
- 코딩테스트
- Data Engineering
- Today
- Total
지구정복
[Node.js] 02/19 | 리눅스에서 node.js사용(FileSystem, 우편번호검색기), Node.js 패키지 만들기(npm사용), 데이터베이스(MairaDB)와 Node.js연동(MariaDB설치, DB연동, 쿼리사용(select문, insert문, where절, 우편번.. 본문
[Node.js] 02/19 | 리눅스에서 node.js사용(FileSystem, 우편번호검색기), Node.js 패키지 만들기(npm사용), 데이터베이스(MairaDB)와 Node.js연동(MariaDB설치, DB연동, 쿼리사용(select문, insert문, where절, 우편번..
noohhee 2021. 2. 19. 17:451. 리눅스에서 Node.js 사용하기 2
1. 복습
* js(ECMAScript)를 이용한 프로그래밍
- node.js(Chrome v8 engine 포함)
포함하고 있는 것
-runtime
-추가 라이브러리
실행방법
1. REPL -테스트용
2. *.js 만들어서 사용 - 프로그램
추가라이브러리
- exports(package: js) / require(import : 함수, 클래스, 변수)
require가 필요없는 모듈은 global
그 외 라이브러리
os
uilities
데이터
path 경로
FileSystem 접근
exports 복습
-var1.js
"use strict"
const odd = 'odd';
const even = 'even';
function checkOddEven( num ) {
if( num % 2 == 1 ) {
return 'odd';
}
return 'even';
}
//데이터를 넘길 때는 넘길 데이터를 한 번에 넘겨야된다.
module.exports = { odd, even, checkOddEven };
//module.exports = { checkOddEven };
-require1.js
"use strict"
const data = require( './var1' );
console.log( data );
console.log( data.odd )
console.log( data.even )
//함수도 exports해서 실행시킬 수 있다.
console.log( data.checkOddEven(10) );

2. FileSystem 라이브러리
- 파일 삭제하기
"use strict"
const fs = require( 'fs' );
//비동기 사용
fs.unlink( 'hello.txt', err => {
if( !err ) {
console.log( 'success' );
}
} )

- 파일이름 변경 및 파일 복사하기
파일복사
"use strict"
const fs = require( 'fs' );
fs.copyFile( './hello.txt', './hi.txt', err => {
if( !err ) {
console.log( 'success' );
}
})

파일이름 변경
"use strict"
const fs = require( 'fs' );
fs.rename('./hello.txt', './hello2.txt', err => {
if( !err ) {
console.log( 'success' );
}
})

- 파일 쓰기 및 읽기
파일쓰기
"use strict"
const fs = require( 'fs' );
//첫번째 인자는 만들 파일의 이름, 두번째 인자는 파일의 내용, 세번째 인자는 에러함수
fs.writeFile( 'test.txt', 'hello', err => {
if( !err ) {
console.log( 'success' );
}
})

이때 내용을 여러줄 쓰려면 \n을 쓰면된다.
"use strict"
const fs = require( 'fs' );
//첫번째 인자는 만들 파일의 이름, 두번째 인자는 파일의 내용, 세번째 인자는 에러함수
fs.writeFile( 'test.txt', 'hello\nhello\nhello', err => {
if( !err ) {
console.log( 'success' );
}
})

보통 변수를 선언해서 내용을 쓴다.
"use strict"
const fs = require( 'fs' );
const msg = 'hello\nhello\nhello\nbye\nbye'
//첫번째 인자는 만들 파일의 이름, 두번째 인자는 파일의 내용, 세번째 인자는 에러함수
fs.writeFile( 'test.txt', msg, err => {
if( !err ) {
console.log( 'success' );
}
})
template 문자열을 사용할 수 있다. `` 백탭키(tab키 위 ~키) 로 묶어서 쓰고 싶은 문자를 쓰면 된다.
"use strict"
const fs = require( 'fs' );
//const msg = 'hello\nhello\nhello\nbye\nbye'
//template 문자열 사용하기
const msg = `hello
hello
hello
template문자열 사용`
//첫번째 인자는 만들 파일의 이름, 두번째 인자는 파일의 내용, 세번째 인자는 에러함수
fs.writeFile( 'test.txt', msg, err => {
if( !err ) {
console.log( 'success' );
}
})
파일읽기
"use strict"
const fs = require( 'fs' );
//에러가 날 경우와 데이터가 올 경우가 있다.
//readFile은 특정파일의 내용을 읽는데 byte계열의 array형태로 읽는다.
//데이터를 보고싶으면 data를 문자열화시켜야한다.
fs.readFile( './test.txt', ( err, data ) => {
if( !err ) {
console.log( data );
console.log( typeof data );
console.log( data.toString() );
}
})

실습) 우편번호 검색기 만들기

내코드
"use strict"
const readline = require( 'readline' );
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on( 'line', function( line ) {
console.log( '입력값은', line );
rl.close();
const fs = require( 'fs' );
let data = fs.readFileSync( './zipcode_all_utf8_type2.csv' )
let data_arr = data.toString().trim().split('\r\n');
for(let i of data_arr) {
let temp_arr = i.split(',');
if( line == temp_arr[3].substr(0, temp_arr[3].length-1) ) {
console.log( i );
}
}
})
강사님 코드
"use strict"
const fs = require('fs');
const file = './zipcode_all_utf8_type2.csv';
const strDong = '개포';
fs.access( file, fs.constants.F_OK, err1 => {
if( !err1 ) {
fs.readFile( file, 'utf-8', (err2, result) => {
if( ! err2 ) {
const dats = result.toString().trim().split( '\r\n' );
//함수지향 프로그래밍 기법
dats.forEach( data => {
let arrData = data.split( ',' );
if( arrData[3].indexOf( strDong ) != -1 ) {
console.log( data );
}
});
}
})
}
})
2. Node.js에서 패키지 만들고 사용하기
프로그램의 구성 - 프로젝트
프로젝트
- 패키지(npm: 노드 패키지 매니저) : 의존성이 존재함
* 공통라이브러리는 /usr/lib/node_modules 안에 있다.
- 디렉터리
*.js
라이브러리(외부)
npm의 기능은 아래 두 가지이다.
프로젝트용 패키지 구성
외부 라이브러리 다운로드
npm을 발전시킨 것이 yarn이다.
1. npm 사용하기
리눅스 터미널 창에 npm --help를 치면 각종 명령어들이 나온다. 이제부터 이런 명령어를 하나씩 알아보자.

프로젝트 만들기
npm init --help

프로젝트를 만들기위해서 먼저 디렉터리를 만들고 그 디렉터리를 프로젝트를 만들어야 한다.
#먼저 디렉터리를 만들고 그 디렉터리를 프로젝트로 만들자.
[master@localhost ~]$ mkdir npmtest1
[master@localhost ~]$ cd npmtest1
[master@localhost npmtest1]$ npm init
enter x 7
yes
[master@localhost npmtest1]$ ls
package.json
#package.json은 현재 이 프로젝트에 대한 설정이 나와있다.
#또한 export할 때는 이 프로젝트를 압축해서 넘겨주면 된다.
이때 초기값을 자동으로 설정해서 프로젝트를 만들려면 아래와 같이 만들면 된다.
npm init -y를 사용
[master@localhost npmtest1]$ cd
[master@localhost ~]$ mkdir npmtest2
[master@localhost ~]$ cd npmtest2
[master@localhost npmtest2]$ npm init -y
npm과 관련된 리소스가 저장된 사이트( 메이븐 레파지토리와 비슷하다 )
www.npmjs.com/
npm | build amazing things
Build amazing things We're npm, Inc., the company behind Node package manager, the npm Registry, and npm CLI. We offer those to the community for free, but our day job is building and selling useful tools for developers like you. Take your JavaScript devel
www.npmjs.com
npm을 이용해서 express란 라이브러리를 다운받아보자.
[master@localhost npmtest2]$ npm install express
#express의 사용가능한 modules확인
[master@localhost npmtest2]$ ls node_modules/
accepts cookie-signature etag inherits mime-types qs setprototypeof
array-flatten debug express ipaddr.js ms range-parser statuses
body-parser depd finalhandler media-typer negotiator raw-body toidentifier
bytes destroy forwarded merge-descriptors on-finished safe-buffer type-is
content-disposition ee-first fresh methods parseurl safer-buffer unpipe
content-type encodeurl http-errors mime path-to-regexp send utils-merge
cookie escape-html iconv-lite mime-db proxy-addr serve-static vary
#package.json에서 dependencies에 외부 라이브러리 추가된 것을 확인할 수 있다.
#이는 메이븐 프로젝트에서 pom.xml과 같다.
[master@localhost npmtest2]$ cat package.json
{
"name": "npmtest2",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1"
}
}
또한 만약 다른 사람에게 프로젝트를 넘겨줄 때 외부 라이브러리를 지우고 나머지 파일을 주게되면
받은 사람은 npm install 만 하면 원래 받아져있던 외부 라이브러리를 다시 다운받을 수 있다.
이는 package.json의 dependencies를 참조하기때문에 가능하다.
#외부 라이브러리를 지우고 시험해보자.
[master@localhost npmtest2]$ rm -r node_modules/
[master@localhost npmtest2]$ npm install
비주얼스튜디오 코드에서 사용할 때는 File - Open Folder - npmtest2(프로젝트명) 을 해서 열면 된다.
3. 데이터베이스(MariaDB)와 Node.js 연동하기
1. 리눅스에 MariaDB 설치하기
먼저 리눅스에 기존에 했던 것처럼 MariaDB를 설치한다.
#방화벽 설정
[master@localhost npmtest2]$ su - root
암호:
[root@localhost ~]# cd /usr/lib/firewalld/services/
[root@localhost services]# cp mysql.xml mariadb.xml
[root@localhost services]# vi mariadb.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>MariaDB</short>
<description>MariaDB Database Server</description>
<port protocol="tcp" port="3306"/>
</service>
#방화벽 적용
[root@localhost services]# firewall-cmd --zone=public --add-service=mariadb --permanent
[root@localhost services]# firewall-cmd --reload
#MariaDB 설치
[root@localhost services]# yum -y install mariadb
[root@localhost services]# yum -y install mariadb-server
#MariaDB 한글설정
[root@localhost services]# cd
[root@localhost ~]# vi /etc/my.cnf.d/client.cnf
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#
# These two groups are read by the client library
# Use it for options that affect all clients, but not the server
#
[client]
default-character-set=utf8
# This group is not read by mysql client library,
# If you use the same .cnf file for MySQL and MariaDB,
# use it for MariaDB-only client options
[client-mariadb]
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
[root@localhost ~]# vi /etc/my.cnf.d/mysql-clients.cnf
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#
# These groups are read by MariaDB command-line tools
# Use it for options that affect only one utility
#
[mysql]
default-character-set=utf8
[mysql_upgrade]
[mysqladmin]
[mysqlbinlog]
[mysqlcheck]
[mysqldump]
default-character-set=utf8
[mysqlimport]
[mysqlshow]
[mysqlslap]
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
[root@localhost ~]# vi /etc/my.cnf.d/mariadb-server.cnf
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld/mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server=utf8
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#MariaDB 시작 및 한글설정확인
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# systemctl enable mariadb
[root@localhost ~]# mysql
MariaDB [(none)]> show variables like 'c%';
MariaDB [(none)]> create database project;
MariaDB [project]> create table test(col varchar(10) );
MariaDB [project]> insert into test values('aaa');
MariaDB [project]> insert into test values('ㅇㅇㅇ');
MariaDB [project]> select * from test;
MariaDB [project]> exit
#MariaDB root 비밀번호설정 및 외부접근 허용설정
[root@localhost ~]# mysqladmin -u root password '!123456'
MariaDB [project]> grant all privileges on *.* to 'root'@'%' identified by '!123456';
MariaDB [project]> flush privileges;
MariaDB [project]> exit
2. MariaDB와 Node.js 연동하기
참고사이트
mariadb.com/kb/en/about-mariadb-connector-nodejs/
About MariaDB Connector/Node.js
LGPL-licensed library for connecting Node.js applications to MariaDB.
mariadb.com
[root@localhost ~]# exit
#필요없는 프로젝트를 지우자.
[master@localhost npmtest2]$ cd
[master@localhost ~]$ rm -r npmtest1
[master@localhost ~]$ rm -r npmtest2
#mariadbex1란 프로젝트를 만들자
[master@localhost ~]$ mkdir mariadbex1
[master@localhost ~]$ cd mariadbex1/
[master@localhost mariadbex1]$ npm init -y
#MariaDB 라이브러리 설치하기
[master@localhost mariadbex1]$ npm install mariadb
[master@localhost mariadbex1]$ ls node_modules/
@types denque iconv-lite long mariadb moment moment-timezone please-upgrade-node safer-buffer semver-compare
이제 비주얼 스튜디오 코드에서 open folder로 mariadbex1 프로젝트를 열자.
그리고 js파일을 만들고 코드를 작성한다.
"use strict"
//비동기처리
const mariadb = require( 'mariadb/callback' );
console.log( mariadb );
console.log( mariadb.version );

데이터베이스 연동
이제 데이터베이스를 연동해보자.
먼저 데이터베이스 설정해보고 설정값을 출력해보자.
"use strict"
const mariadb = require( 'mariadb/callback' );
//직접 연결이 아니라 설정이다.
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
console.log( conn );

이제 연결을 시켜보자.
"use strict"
const mariadb = require( 'mariadb/callback' );
//직접 연결이 아니라 설정이다.
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
conn.connect( err => {
if( !err ) {
console.log( 'success' );
//연결에 대한 정보 확인 conn.~
console.log( conn.serverVersion() );
} else {
console.error( err.message );
}
conn.end();
})

3. Node.js에서 DB 쿼리 실행하기
쿼리 실행하기"use strict"
const mariadb = require( 'mariadb/callback' );
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
conn.connect( err1 => {
if( !err1 ) {
console.log( '1' );
conn.query( 'select now() as now', ( err2, rows ) => {
console.log( '2' );
if( !err2 ) {
console.log( rows );
} else {
console.error( err2.message );
}
conn.end();
})
console.log( '3' );
} else {
console.error( err1.message );
}
})

이때 쿼리의 실행결과는 배열로 나온다.
아래 처럼 특정 결과만 출력할 수 있다.
"use strict"
const mariadb = require( 'mariadb/callback' );
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
conn.connect( err1 => {
if( !err1 ) {
console.log( '1' );
conn.query( 'select now() as now', ( err2, rows ) => {
console.log( '2' );
if( !err2 ) {
console.log( rows );
console.log( rows[0].now );
} else {
console.error( err2.message );
}
conn.end();
})
console.log( '3' );
} else {
console.error( err1.message );
}
})

connection하지 않고 바로 쿼리를 실행하기
쿼리를 던질 때 자동으로 connection이 되는 것을 알 수 있다.
"use strict"
const mariadb = require( 'mariadb/callback' );
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
conn.query( 'select now() as now', ( err, rows ) => {
if( !err ) {
console.log( rows[0].now );
} else {
console.error( err.message );
}
conn.end();
})

데이터베이스에 만들어진 테이블 쿼리 출력하기
"use strict"
const mariadb = require( 'mariadb/callback' );
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
conn.query( 'select * from test', ( err, rows ) => {
if( !err ) {
console.log( rows );
} else {
console.error( err.message );
}
conn.end();
})

딱 데이터만 가져와보자.
"use strict"
const mariadb = require( 'mariadb/callback' );
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
conn.query( 'select * from test', ( err, rows ) => {
if( !err ) {
console.log( rows[0].col );
console.log( rows[1].col );
} else {
console.error( err.message );
}
conn.end();
})

where 절 사용하기
쿼리에서 where절을 사용해보자. 작은따옴표를 사용할 때는 바깥에는 쌍따옴표를 사용해야 한다.
"use strict"
const mariadb = require( 'mariadb/callback' );
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
conn.query( "select * from test where col = 'aaa'", ( err, rows ) => {
if( !err ) {
console.log( rows[0].col );
} else {
console.error( err.message );
}
conn.end();
})

자바스크립트에서 쿼리에 값을 전달할 수 있다.
"use strict"
const mariadb = require( 'mariadb/callback' );
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
//const sql = "select * from test where col = 'aaa'"
const data = 'aaa';
conn.query( "select * from test where col = '" + data + "'", ( err, rows ) => {
if( !err ) {
console.log( rows[0].col );
} else {
console.error( err.message );
}
conn.end();
})

혹은 템플릿 문자열로 사용할 수 있다.
"use strict"
const mariadb = require( 'mariadb/callback' );
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
//const sql = "select * from test where col = 'aaa'"
const data = 'aaa';
conn.query( `select * from test where col = '${data}'`, ( err, rows ) => {
if( !err ) {
console.log( rows[0].col );
} else {
console.error( err.message );
}
conn.end();
})

preparedstatement 기법으로 사용하기
"use strict"
const mariadb = require( 'mariadb/callback' );
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
const sql = "select * from test where col = ?"
conn.query( sql, [ 'aaa' ], ( err, rows ) => {
if( !err ) {
console.log( rows[0].col );
} else {
console.error( err.message );
}
conn.end();
})

insert문 사용하기
"use strict"
const mariadb = require( 'mariadb/callback' );
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
const sql = "insert into test values ( 'bbb' )";
conn.query( sql, ( err, results ) => {
if( !err ) {
console.log( results );
} else {
console.error( err.message );
}
conn.end();
})

insert문도 preparedstate로 사용할 수 있다.
"use strict"
const mariadb = require( 'mariadb/callback' );
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
//const sql = "insert into test values ( 'bbb' )";
const sql = "insert into test values ( ? )";
conn.query( sql, [ 'ccc' ], ( err, results ) => {
if( !err ) {
console.log( results );
} else {
console.error( err.message );
}
conn.end();
})

실습) 컬럼이 2개인 새로운 테이블 만들어서 안에 데이터 넣기
먼저 데이터베이스에서 새로운 테이블을 만들자.
MariaDB [project]> create table testtbl2 (col1 varchar(10), col2 varchar(10) );
"use strict"
const mariadb = require( 'mariadb/callback' );
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
const sql = "insert into testtbl2 values ( ?, ? )";
const data = [ 'aaa', 'bbb' ];
conn.query( sql, data, ( err, results ) => {
if( !err ) {
console.log( results );
} else {
console.error( err.message );
}
conn.end();
})

데이터가 제대로 입력된 것을 확인할 수 있다.

실습) 우편번호 csv파일을 데이터베이스에 집어넣어보자.
[master@localhost mariadbex1]$ cp ../nodejs/zipcode_all_utf8_type2.csv .
먼저 데이터베이스에서 zipcode라는 테이블을 만들어준다.
CREATE TABLE zipcode(
zipcode char(7) not null,
sido varchar(4) not null,
gugun varchar(17),
dong varchar(16) not null,
ri varchar(45),
bunji varchar(17),
seq int(5) unsigned primary key
);
"use strict"
const mariadb = require( 'mariadb/callback' );
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
})
const sql = "insert into zipcode values ( ?, ?, ?, ?, ?, ?, ? )"
const file = './zipcode_all_utf8_type2.csv';
const fs = require( 'fs' );
let data = fs.readFile( file, ( err, data ) => {
if( !err ) {
let datas = data.toString().trim().split( '\r\n' );
datas.forEach( data => {
let arrData = data.split( ',' );
let tmp_data = [];
arrData.forEach( d => {
tmp_data.push( d );
})
conn.query( sql, tmp_data, ( err, results ) => {
if( !err ) {
console.log( results );
} else {
console.error( err.message );
}
})
})
}
})


강사님 코드
"use strict"
const mariadb = require( 'mariadb/callback' );
const fs = require( 'fs' );
const file = './zipcode_all_utf8_type2.csv';
fs.access( file, fs.constants.F_OK, err1 => {
if( !err1 ) {
fs.readFile( file, ( err2, data ) => {
if( !err2 ) {
const datas = data.toString().trim().split( '\r\n' );
//배열처리
let arrTotalData = [];
datas.forEach( ( data ) => {
let arrDatas = data.split( ',' );
arrTotalData.push( arrDatas );
});
//데이터베이스 연결설정
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
//데이터베이스에 입력
const sql = "insert into zipcode values ( ?, ?, ?, ?, ?, ?, ? )"
conn.batch( sql, arrTotalData, ( err, results ) => {
if( !err ) {
console.log( results );
} else {
console.error( err.message );
}
conn.end();
})
}
})
}
});

여러 개의 데이터를 insert할 때
batch를 사용한다.
"use strict"
const mariadb = require( 'mariadb/callback' );
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
const sql = "insert into testtbl2 values ( ?, ? )";
const data = [ [ 'aaa', 'bbb' ], ['bbb', '222'] ];
conn.batch( sql, data, ( err, results ) => {
if( !err ) {
console.log( results );
} else {
console.error( err.message );
}
conn.end();
})


* 참고 - 비주얼스튜디오코드 편집기에서 한국어 사용하기 (비주얼스튜디오코드 한글 깨질 때)
현재 편집기에서 한글이 깨져나오는 것을 확인할 수 있다. 리눅스에서 UTF-8을 사용하는데 편집기에서는
EUC-KR을 사용해서 그렇다.
그래서 비쥬얼스튜디로코드에서의 js파일도 UTF-8 로 바꿔줘야 한다.
아래 EUC-KR 동그라미친 부분을 클릭

Reopen with Encoding 클릭

UTF-8 클릭

아래처럼 바뀐 것을 알 수 있다. 그리고 다시 편집기에서 한글을 쓰면 잘 나온다.

실습) 우편번호 검색기 만들기

"use strict"
const mariadb = require( 'mariadb/callback' );
const strDong = '개포';
const conn = mariadb.createConnection({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project'
});
const sql = "select * from zipcode where dong like ?"
conn.query( sql, [ strDong+'%' ], ( err, rows ) => {
if( !err ) {
rows.forEach( row => {
console.log( row.zipcode, row.sido, row.gugun, row.dong, row.ri, row.bunji, row.seq );
});
} else {
console.error( err.message );
}
conn.end()
})
4. ConnectionPool 사용하기
"use strict"
const mariadb = require( 'mariadb/callback' );
const pool = mariadb.createPool({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project',
connectionLimit: 5
});
pool.getConnection( ( err, conn ) => {
if( !err ) {
console.log( 'success' );
} else {
console.error( 'fail' );
}
conn.end();
})

쿼리사용
"use strict"
const mariadb = require( 'mariadb/callback' );
const pool = mariadb.createPool({
host: 'localhost',
user: 'root',
password: '!123456',
database: 'project',
connectionLimit: 5
});
pool.query( 'select now() as now', ( err, results ) => {
if( !err ) {
console.log( results );
} else {
console.error( err.message );
}
pool.end();
})
