Node.js 그리고 MySQL

Node.js

  • 서버 side 자바스크립트 실행 도구
  • MySQL 앱을 만들기 참 좋은 도구

MySQL

  • 대표적인 Relational Database 프로그램
  • 공짜 @.@ 쿨~
그럼 이제 정리해볼까?
먼저 MySQL에 데이터가 있어야겠지? 있다고 가정하자.
  • ID: my, PW: my,
  • DB: school
  • Table: student
student라는 이름의 테이블에 다음과 같이 데이터가 있다고 할까?
(Name, Score, Grade)
Kim, 100, A
Lee, 90, A
Park, 85, B
Chae, 75, C

필드는 3개, 레코드는 4개.

Node.js와 MySQL 연결

먼저 npm으로 mysql 패키지를 인스톨하자.
$npm install mysql

작업 중인 폴더에 mysql 패키지가 다운로드 되어 설치 끝.

mysql-server.js 라는 이름의 파일을 만들고 다음 내용을 쓰자.

var mysql = require('mysql');

이 코드는 mysql 패키지를 불러와서 변수 mysql에 연결시킨 모양이야.
이제 mysql 쓸 준비가 다 끝났어. 쉽지?

커넥션

전화를 하고 싶으면 뭘 하지? 번호를 눌러서 상대방과 연결하려 하지. 프로그램에서 mysql과 뭔가를 하고 싶으면 mysql의 전화번호를 입력해서 연결해야 해. Connection을 만든다는 것은 전화통화 같은 것이야. 해볼까?

var con = mysql.createConnection();

아직 우리는 번호를 넣지 않았어. Javascript에서 데이터는 어떻게 넣더라? 오브젝트 형식! 오브젝트는 {와 }로 둘러싼 데이터야. 키와 값으로 이뤄져 있지. 김태경 교수 오브젝트 데이터는 이렇게 생각할 수 있지.

var 김태경 = {name:'taekyung',age:'unknown'}

mysql에 전화를 하려면 host, user, password가 필요해. 컴퓨터에 깔려 있는 mysql의 호스트를 127.0.0.1이라 가정하고 user=my, password=my라고 할까? 그럼 오브젝트는 다음과 같아.

{host:'127.0.0.1', user:'my', password:'my',database:'school'}

이제 전화를 걸자.

var con = mysql.createConnection({host:'127.0.0.1', user:'my', password:'my', database:'school'});
con.connect(function(error) {});

접속이 안될 경우에 일을 처리하기 위해 callback 함수를 걸었어. 내용도 써 볼까?

con.connect(function(error) {
  if(error) throw error;
});

간단하게 에러가 나면(if(error)) 집어치우는(throw) 방법이야. 프로그램 종료하는 것이지.

쿼리

쿼리(Query)는 데이터베이스에 질문을 던지기라는 뜻이야. SQL 문법으로 질문을 해야 해. student 테이블의 전체 데이터를 가져오라는 질문을 해보자.

SELECT * FROM student;

이제 Node.js에서 이것을 실행해보자.

con.connect(function(error) }
  if(error) throw error;
  con.query();
});

좀 당연한 이야기인데 전화를 해서 전화기를 붙잡고 이야기를 해야 하는 것 아냐? 그래서 우리도 mysql에 연결해서 con.query()를 실행하려고 해.

con.connect(function(error) }
  if(error) throw error;
  con.query("SELECT * FROM student",function(err,result,fields) {  } );
});

쿼리를 입력한 다음에는 callback 함수를 정의해서 결과를 받아야 해. 이 함수는 에러처리(err), 데이터처리(result), 그리고 데이터형(fields)에 관한 내용을 포함해. 데이터를 받아서 REPL 콘솔에 찍어보자. console.log()함수가 필요하겠어.

con.connect(function(error) }
  if(error) throw error;
  con.query("SELECT * FROM student",function(err,result,fields) { 
    if(err) throw err;
    console.log(result); 
  });
});

역시 에러가 나면 집어쳐버리고, 다행히 그런 경우가 없으면 console.log(result)로 결과를 보자는 생각이지. 어때? Node.js와 MySQL 연결 쉽지?

다음에는 SQL injection 해킹과 이에 대한 대응책을 생각해볼까? 사실 SQL을 사용자가 입력한 데이터로 만드는 일이 위험해. 그래서 해킹도 일어나고 해서 적절한 대응을 해야 해.

댓글

이 블로그의 인기 게시물

Bradley-Terry Model: paired comparison models

xlwings tutorial - 데이터 계산하여 붙여 넣기

R에서 csv 파일 읽는 법