지구정복

[Node.js] 02/19 | 리눅스에서 node.js사용(FileSystem, 우편번호검색기), Node.js 패키지 만들기(npm사용), 데이터베이스(MairaDB)와 Node.js연동(MariaDB설치, DB연동, 쿼리사용(select문, insert문, where절, 우편번.. 본문

데이터 엔지니어링 정복/HTML-CSS-JavaScript-Spring-Node.js

[Node.js] 02/19 | 리눅스에서 node.js사용(FileSystem, 우편번호검색기), Node.js 패키지 만들기(npm사용), 데이터베이스(MairaDB)와 Node.js연동(MariaDB설치, DB연동, 쿼리사용(select문, insert문, where절, 우편번..

eeaarrtthh 2021. 2. 19. 17:45
728x90
반응형

1. 리눅스에서 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();
})

 

 

 

 

 

 

 

 

 

 

728x90
반응형
Comments