NodeJS

[NodeJS] - MySQL 연동하기(Connection Pool), select문

Riucc 2018. 12. 3. 14:06

○ NodeJS - MySQL 연동하기(Connection Pool), select문

 

NodeJS-MySQL은 오픈소스로 아래에 코드들이 공개되어 있다

https://github.com/mysqljs/mysql#pooling-connections


// app.js


// MySQL 데이터베이스를 사용할 수 있도록 하는 MySQL 모듈 불러오기

// 당연히 사용전에 npm install mysql --save 로 모듈 설치하기

var mysql = require('mysql');


// MySQL 데이터베이스 연결 설정(커낵션 풀)

var pool      =    mysql.createPool({

    connectionLimit : 100, 

    host     : 'nodejs-rds-mysql.???.ap-northeast-2.rds.amazonaws.com', // aws rds 사용 부분

    user     : '아이디 입력',

    password : '비밀번호 입력',

    database : '데이터베이스명 입력',

    debug    :  false,

    port     : '3306',

    charset  : 'utf8'

});


// 'pool.getConnection() -> connection.query() -> connection.release()' 코드 흐름을 따름


// 예를들어 공지사항 DB 데이터를 불러오는 부분

router.route('/process/notice').get(function(req, res) {

// 커넥션 풀에서 연결 객체를 가져옴

pool.getConnection(function(err, conn) {

        if (err) {

        if (conn) {

                conn.release();  // 반드시 해제해야 함

            }

            callback(err, null);

            return;

        }   

        console.log('데이터베이스 연결 스레드 아이디 : ' + conn.threadId);


        // SQL 문을 실행함

        const sql = 'select noticeNo, noticeTitle, noticeDate from notice order by noticeNo desc';

        conn.query(sql, function(err, result) {

            conn.release();  // 반드시 해제해야 함(해제안할 시 DB연결 수가 계속 늘어남!!!)

                                  //  connectionLimit 값이 작을 경우 초과해서 서버 터짐  

            console.log(result);

            console.log(result[0].noticeTitle); // 데이터를 잘가져왔나 테스트용 출력

            // notice.ejs 로 userSessionId와 notice_result를 같이 가져감

            res.render('notice.ejs', {userSessionId : req.session.userID, notice_result: result});

        });

    });

});


// notice.ejs(가져온 세션값 userSessionId 와 DB에서 불러온 데이터 notice_result 로 출력)


<div class="sideNavProfile">
<img src="../public/img/profile.png">
<!-- db 유저 아이디 세션처리한거 가져오기 -->
<% if(userSessionId != null) { %>
<p><span id="sidenav_nickname"><%= userSessionId %></span>님 방갑습니다.</p>

<% } else { %>

<p><span id="sidenav_nickname">사용자</span>님 방갑습니다.</p>
<% } %>
</div>

<table class="noticeTable">
<colgroup>
<col width="50">
<col width="*">
<col width="150">
</colgroup>
<thead>
<tr>
<th><span>번호</span></th>
<th><span>제목</span></th>
<th><span>등록일</span></th>
</tr>
</thead>
<tbody>
<% for(var i=0; i< notice_result.length; i++) {%>
<tr>
<td class="text-center"><%= notice_result[i].noticeNo %></td>
<td id="td_title"><a href="/process/notice/<%=notice_result[i].noticeNo%>">
<%= notice_result[i].noticeTitle %></a> </td>
<td class="text-center"><%= notice_result[i].noticeDate %></td>
</tr>
<% }; %>
</tbody>
</table>