-
[Node.js & MySQL] Intro, 환경설정생활코딩/WEBn 2020. 11. 3. 15:34
[강의 출처] opentutorials.org/course/3347
필요성 & Intro.
기존에 Node.js로 작성했던 Web2 페이지에서는
유저 게시판 기능(HTML Form - post)을 file 생성/편집 형태로 구현했었다.
여기에 검색, 정렬 기능을 추가하거나, 기존 데이터 양식을 일괄 변경하는 등의 작업이 필요하다면
데이터베이스를 사용하는 것이 바람직하다.
(파일 시스템으로 처리하기는 너무 번거로운데다, DB를 이용하면 보안, 안정성, 성능 등이 따라온다)
Node.js에는 MySQL을 제어하는 라이브러리가 있기 때문에
기존 Node.js 코드 중 CRUD 부분을 MySQL 제어 라이브러리로 넘겨주면 된다.
환경설정
*Goorm IDE 기준*
1. node.js 설치
Web2는 로컬에서 실습했기 때문에 MySQL 실습 환경인 Goorm IDE로 코드를 옮겨와야 했다.
Base image가 Ubuntu 18.04 LTS, 여서 거기에 맞춰 Node.js를 설치했다.
[참고 페이지] www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-18-04
$ sudo apt update $ sudo apt install nodejs $ sudo apt install npm $ nodejs -v // 잘 깔렸나 확인 v8.10.0
따로 설치했던 패키지들도 설치를 해줘야하는데,
package.json에 그 내역이 정리되어 있다면 아래 코드로 dependency 설정을 완료할 수 있다.
$ npm install
2. MySQL 세팅
DataBase2 - MySQL에서 했던 것과 동일하다. 여기: hayjo.tistory.com/40?category=896194
MySQL 서비스 실행
$ sudo service mysql start -- MySQL 시작 $ mysql -uroot -p -- root 유저로 접속하고 패스워드 설정 -- quit은 quit이다. mysql> quit Bye
데이터베이스 생성 및 선택
mysql> CREATE DATABASE data; -- 데이터베이스 생성 -- Query OK, 1 row affected (0.00 sec) mysql> USE data; -- data 데이터베이스 선택
실습용 테이블 (author, topic) 정의 및 생성
-- 생활코딩의 테이블 구성을 그대로 가져왔다. mysql> CREATE TABLE `author` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `profile` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ); mysql> CREATE TABLE `topic` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(30) NOT NULL, `description` text, `created` datetime NOT NULL, `author_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`) );
3. npm로 mysql 패키지 설치 및 세팅 (MySQL8 암호화 관련 legacy)
npm install --save mysql // --save 옵션: package.json의 dependencies에 추가
아래의 패키지 설명 페이지에 보면 Introduction이 있다.
var mysql = require('mysql'); // 모듈 임포트 var connection = mysql.createConnection({ // mysql의 createConnection 메소드에 host : 'localhost', // 호스트: DB 서버의 위치. 같은 컴퓨터라면 localhost user : 'root', // 로그인정보 password : 'password', database : 'data' // 접근할 데이터베이스 이름 }); connection.connect(); // 연결 시도 // 접속 성공하면, 아래처럼 SQL문을 1번째 인자로 넣어주면 // callback이 실행된다 connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) { console.log(err) }; console.log(results); }); connection.end();
이대로 실행시키니 아래와 같은 에러가 난다.
sqlMessage: 'Client does not support authentication protocol requested by server; conside r upgrading MySQL
npm의 mysql 패키지 쪽에서 MySQL 8의 (새로운) 기본 암호화 방식을 지원하지 않아서 생기는 문제라고 한다.
아래 페이지를 참고해서 해결했다:
일반적인 해결법은 mysql의 해당 유저로 들어가서 이전 암호화 방식을 쓰겠다고 설정하는 것.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password; Query OK, 0 rows affected (0.13 sec)
완료하고 다시 실행해보니 왜인지 또 Access denied가 뜬다.
Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: YES)
다시 mysql root 계정 들어가서 패스워드를 리셋하고 나니
mysql> SET PASSWORD = PASSWORD('new password');
드디어 접속이 된다. 혹시 nodejs용 계정을 따로 추가하고 싶다면 아래와 같이 하면 된다.
mysql> CREATE USER 'nodejs'@'localhost' IDENTIFIED BY 'password'; -- 유저 생성 mysql> GRANT ALL PRIVILEGES ON data.* TO 'nodejs'@'localhost'; -- 권한 부여 mysql> FLUSH PRIVILEGES; -- 환경설정 등을 변경했을 때, 재시작 없이 리셋
'생활코딩 > WEBn' 카테고리의 다른 글
[Node.js & MySQL] LEFT JOIN으로 가져온 데이터 출력 (0) 2020.12.09 [Node.js & MySQL] 데이터 처리방식: 파일 -> MySQL 이식 (0) 2020.12.09 [OAuth2.0] OAuth2.0 개요 (0) 2020.09.30 [DNS] Domain Name System 개요 (0) 2020.09.28 [Node.js] 입출력 데이터의 보안 이슈 (0) 2020.09.18