사용자 도구

사이트 도구


language:nodejs:nodejs

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
language:nodejs:nodejs [2021/04/24 17:02] kieunslanguage:nodejs:nodejs [2024/04/23 22:44] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 +<title>node.js</title>
 +
 +익스프레스<sup>express</sup> 프레임워크
 +
 +====== 설치 ======
 +
 +전역설치
 +
 +<code>
 +npm install -g express-generator
 +</code>
 +
 +윈도우즈라면 ''%APPDATA%\npm\node_modules''에 설치된다.
 +
 +====== 프로젝트 생성 ======
 +
 +프로젝트 만들기
 +
 +<code>
 +express <프로젝트 이름>
 +</code>
 +
 +ejs와 pug<sup>?</sup>를 쓸수 있도록 프로젝트 만들기
 +
 +<code>
 +express --ejs --pug --view=ejs <프로젝트이름>
 +</code>
 +
 +설치 하고 해야할거 더 알려준다. 이런 식으로.
 +<code>
 +change directory:
 +    > cd <프로젝트 이름>
 +
 +install dependencies:
 +    > npm install
 +
 +run the app:
 +    > SET DEBUG=<프로젝트 이름>:* & npm start
 +</code>
 +
 +
 +  * ''npm install'' 을 실행하면 패키지를 자동으로 설치.
 +  * ''package.json'' 파일에 설치할 패키지 정보가 있다.
 +
 +
 +====== Nodemon ======
 +
 +소스 수정시 자동으로 서버를 재시작해서 변경 내용을 바로 반영할 수 있는 도구.
 +개발시 매번 재시작하는 귀찮음을 해결해줌
 +
 +<code bash>
 +npm install nodemon -g
 +</code>
 +
 +커맨드를 바로 쓸 수 있어야 하니, 전역으로 설치한다.
 +
 +실행
 +
 +''nodemon npm start''
 +
 +====== MYSQL ======
 +
 +  * 패키지 문서: https://www.npmjs.com/package/mysql
 +
 +어 그런데, 마리아DB<sup>MariaDB</sup>를 쓰면 다른 패키지가 있네?
 +
 +  * 마리아DB : https://www.npmjs.com/package/mariadb
 +
 +=====추가 정보 링크=====
 +
 +  * SSL 연결 : https://www.npmjs.com/package/mysql#ssl-options
 +  * 풀링 연결 : https://www.npmjs.com/package/mysql#pooling-connections
 +
 +=====설치=====
 +
 +''npm install mysql''
 +
 +=====require 설정=====
 +
 +<code javascript>
 +var mysql = require('mysql');
 +</code>
 +
 +=====초기화=====
 +
 +<code javascript>
 +var _conn = mysql.createConnection({
 +    host: 'localhost',
 +    port: 3306,
 +    user: '<계정>',
 +    password: '<암호>',
 +    database: '<접속할 DB>'
 +});
 +</code>
 +
 +=====접속=====
 +
 +<code javascript>
 +_conn.connect(function (err) {
 +    if(err){
 +        console.error(err);
 +        //throw err; // throw를 해버리면 앱이 정지되니 ...
 +    } else {
 +        // 연결 성공:
 +    }
 +});
 +</code>
 +
 +=====쿼리=====
 +
 +<code javascript>
 +_conn.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
 +    if (error) throw error;
 +    console.log('The solution is: ', results[0].solution);
 +});
 +</code>
 +
 +=====종료=====
 +
 +<code javascript>
 +_conn.end();
 +</code>
 +
 +종료에는 두 함수를 제공
 +  * ''end()'' : DB 서버에 ''COM_QUIT'' 를 전송해서 끊어지는것을 유도한다. 실패시 호출할 콜백을 지정할 수 있다.
 +  * ''destroy()'' : 소켓을 삭제시켜 끊는다.
 +끊어달라고 하느냐, 내가 끊느냐 이 차이인가보다.
 +
 +
 +=====풀링 연결=====
 +
 +  * https://www.npmjs.com/package/mysql#pooling-connections
 +
 +<code javascript>
 +var pool  = mysql.createPool({
 +  connectionLimit : 10, // 이건 개수겠지
 +  host            : '<접속할 도메인 or 주소>',
 +  user            : '<멤버 아이디>',
 +  password        : '<암호>',
 +  database        : '<디비>'
 +});
 +</code>
 +
 +''mysql.createPool'' 호출한 다음 바로 ''query()''를 쓸 수 있다.
 +
 +<code javascript>
 +pool.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
 +  if (error) throw error;
 +  console.log('The solution is: ', results[0].solution);
 +});
 +</code>
 +
 +위의 방법이 ''pool.getConnection()'' -> ''connection.query()'' -> ''connection.release()'' 과정을 축약한 것.
 +
 +한번 사용한 디비 커넥션을 이어서 사용해야할 경우, 
 +
 +  * 한번 쿼리를 불렀는데 그 상태에서 이어 받아 써야할 경우<sup>가 있겟지?</sup>
 +
 +''pool.getConnection()''으로 디비 커넥션을 얻은 다음 사용하는 방법도 있다. 아래 코드처럼 쓰는 모양.
 +
 +<code javascript>
 +var pool  = mysql.createPool(...);
 +
 +pool.getConnection(function(err, connection) {
 +  if (err) throw err; // 연결실패
 +
 +  // 연결 사용
 +  connection.query('SELECT something FROM sometable', function (error, results, fields) {
 +    
 +    // 변수'connection'은 여기에서도 쓸 수 있겠지?
 +
 +    connection.release(); // 다 썻으면 풀에 보내기
 +    
 +    if (error) throw error; // 에러 처리를 해야할때가 있나?
 +    // error가 있더라도 release()는 호출되어야 한다.
 +
 +    // 커넥션은 풀에 반환 되었기 때문에 이 시점에는 쓰면 안됨
 +  });
 +});
 +</code>
 +
 +=====풀링 종료=====
 +
 +''pool.end''를 호출해서 풀<sup>pool</sup>을 끊는다.
 +
 +<code javascript>
 +pool.end(function(err) {
 +  // 풀 안의 모든 커넥션이 종료됨
 +});
 +</code>
  
language/nodejs/nodejs.txt · 마지막으로 수정됨: 2024/04/23 22:44 저자 127.0.0.1