문앵 2021. 4. 28. 09:42

-----------------------------------------------------------1교시-----------------------------------------------------------

c -> (get)/middle ware ->s -> (select)->db

서버에서 물 한잔 주면 디비는 마실 수 있음 근데 100잔을 한번에 빠르게 마시라고 하면 

디비는 못마심= 과부하. 디비에서 과부하가 걸리면 서버가 나가버린다고 함.

 커넥션 풀을 이용해서 과부하를 해소해줄 수 있음.

 

connection pool :

서버와 디비에서만 사용 (클라이언트는 상관x) 서버와 디비가 접속 된 상태에서,

서버에서 connection.~~~~ 쿼리문 쓸때마다 요청을 보내는것임. "나 sql구문 보냈어".

=> 그 요청마다 디비는 응답을 보내줌. 이 요청이 계에에에에에에에엥속 들어오면 디비는 과부하가 걸려서 파업함

=> 서버 중지됨.

그래서 connection pool이 뭐야?

connection.connect(); 쓰면 접속된겨. pool은 접속 한 것을 미리 여러개를 만들어 놓는것임. 줬뺐하면서 요청방식을 수월하게 처리할 수 있도록 함.

 

비유를 하자면 

디비가 택배회사인데 주문 100개가 들어온겨. 혼자 하기 힘드니까 인력을 10명 고용함. 서버에서는 나 접속할거야 접속 정보 하나 줘. 하면 디비에서 인력 한명 주고 서버에서 사용함. 서버에서 인력을 다 사용하면 다시 디비에게 돌려줌. 

쉽게 말해서 100개의 요청이 있고 인력 하나당 1개의 요청만 처리할 수 있다고 하면, 동시에 10개의 요청을 처리할 수있는것임.

정리) db의 정보를 가진 pool이 여러개 있음. 이걸 connection pool이라 함.

서버는 이 풀을 이용하고 다쓰면 다시 제자리에 돌려놓음. 거기에 입력된 요청을 디비에서 처리해줌

-------------------------------------------------------------2교시------------------------------------------------------------

세팅 한다고 ... 오류 고쳐주신다고... 일단 connection pool 사용법 구글에서 익히라고 하셨음..

근데 나는 .... connection pool을 하기 전에.. 게시판부터 계속 오류가 나는것....

 

이번 시간은 자습인가봄..

-------------------------------------------------------------3교시---------------------------------------------------------

졸려졸려졸려졸려졸ㄹㅈ로렬

이번 시가넹 connection pool 해본다고함

 

이 블로그대로 따라서 하는 시간 가짐

 

basketdeveloper.tistory.com/53

 

초간단 Express + Mysql 환경 셋팅

Nodejs로 Mysql 연동 방법을 알아봅니다. Express 프레임워크를 사용해서 간단한 API 서버를 만들려고합니다. mysql이라는 라이브러리를 설치해 사용하면 됩니다. 01. mysql 라이브러리 설치 npm install --save

basketdeveloper.tistory.com

설치부터 하라고 하심

config.js 파일 작성하래요 그다음 로깅작성하래요 어쩌구저쩌구 모르는건 패스

const musql = require('mysql');
const pool = mysql.createPool(config);//config를 변수로 가져온다
//원래 로그도 만ㅎ이 찍어야하는데 지금은 할 필요가 없어서 그 관련 내용은 다 넘어가심


const config = { //그그그 mysql 정보 쓴거랑 똑같음.
    host: 'localhost',
    user: 'root',
    password:'root',
    databases:'homepage',
}

pool.getConnection((err,connection)=>{ //내가 사용하고 싶은 영역이 생길 때 그때 작업을 하겠다는 뜻
    if(error) throw err; //throw는 ()인 상태가 되면 그냥 거기서 실행 끝냄 바로 종료!
    //(error)면 에러 나면 그냥 바로 종료임 에러가 안나면 그 뒤가 실행됨
    console.log(error);

    connection.query("select *from board1",(error,result)=>{//요기 익명함수
        connection.release();// 여긴 사용한 풀을 반환하는 부분 (쿼리문 쳐서 결과값 받았으니까) 
        //
        if(error) throw error;
        //code block 실행될 때
        console.log(results);
    })
})

 

원래 코드보다 아주 많이 생략해서 기본적인것만 해봄

 

 

 

 

makebabysmile.com/2020/01/29/node-express-mysql-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0/tm

 

Node, Express, MySql 연동하기 - 경제적 자유

Express에 MySql을 연동하는 방법입니다. 실행 환경은 Node > v10.16.2, Npm > 6.12.1 그리고 MySQL은 로컬이 아닌 리모트로 연결했습니다. 로컬에서 테스트를 원하면 MySQL Community Edition을 설치해야 합니다. 소

makebabysmile.com

승희님 이걸로 하셔서 성공하셨다구 함..

 

-------------------------------------------4교시-------------------------------------------

 

와대박 언니가 오류 다 고쳐줌 다 작동됨 대박스

 

내가 만든 파일 경로가 이상했다고 해서 새로 경로를 아예 다시 짰다.

이게 원래 파일구성이고

언니가 다시 짜준게

요렇게.

 

나는 원래는 routes 파일에 온갖 js건 views 폴더건 html이건 다 때려넣어놨는데

수정한 경로는

routes 안에 js파일 두개만 있고, views 폴더 안에 html파일이 모여있다.

(dbconn 파일은 별개파일)

+

각각의 html 페이지에서 input 박스 name="" 으로 지정해준거를 js mysql 쿼리에서 같은 이름으로 받아줬어야 하는데

그걸 못맞춰서 또 오류가 매우 났음..  

 

-------------------------------------------5교시----------------------------------------------

게시판 숫자 넘어가는거 만든다고 하심. 몇몇 사람들은 게시판 숫자 넘어가는거 만들고

기본기 다져야 할 사람들은 지금까지 만든 게시판 안보고 쳐보도록 해서 어디가 부족한지 

파악하라고 하셨다. 

근데 밥먹고 너무 졸려서 쓰면서 거의 잠

 

 

--------------------------------------------6교시---------------------------------------------

6교시에는 잠을 깨고, 교수님이 안보고 쳐보라고 하신걸 쳐보는시간..이었다

안보고 쳐보는건 처음인데 아주 중요한 것 같다. 그냥 보고 치는것보다 코드를 한번씩 더 생각하게 되고

이해하면서 넘어가는듯.

 

선생님이 도중에 오셔서 설명해주심.

나는 전체적인 흐름 파악보다는 구문의 사소한 부분이 헷갈렸음

예를 들면 

#####-------------#####

      app.set('view engine','html');

->여기서 'view engine' 이라던가 'html' 을 쓸 때 괄호를 쳐야 할지 말아야 할지.

#####-------------#####

      nunjucks.configure('views',{express:app,})

-> 여기서 express:app 에 중괄호를 넣는건지 소괄호를 넣는건지 등등.. 이런것들이 헷갈렸음.

 

내가 구문이 헷갈리는 이유는 크게 두가지라고 함 (물론 쳐보는 연습을 많이 안해서가 가장 큰 이유겠지만)

 

1. 객체를 잘 몰라서

2. 내가 치는 부분 어떻게 돌아가는지 몰라서

두가지 이유중에 사실 두번째 원인은 그다지 중요하지 않을 수 있다고 하심.

왜냐면 대강만 알아도 문제없이 구현할 수 있기 때문.

 

문제는 객체를 모르는 경우인데 이 경우에는 어떤 구문을 쓸때, 해당 구문에서 쓰이는 객체의

결과값을 몰라서 헷갈릴 수 있음.

또, 해당 구문에서 쓰이는 인자가 객체인지(->이 경우 따옴표x) , 변수인지(->이 경우 따옴표 써줌)

에 따라서도 달라지는데, 그걸 모르는 상태여서 헷갈리는 것임.

 

 

 

--------------------------------------------7교시---------------------------------------------

1. express만 이용해서

주소가 (/) 인 경우-> hello world

주소가 (/write) 인 경우-> hello write

주소가 (/list) 인 경우-> hello list

주소가 (/update) 인 경우-> hello update

가 브라우저에 뜨도록 만들기. (10분 이내)

 

2. express + nunjucks와 html 파일 이용해서

주소가 (/) 인 경우-> hello world

주소가 (/write) 인 경우-> hello write

주소가 (/list) 인 경우-> hello list

주소가 (/update) 인 경우-> hello update

브라우저에 뜨도록 만들기. (10분 이내)

 

3. <2> 상태에서 각각 페이지에 버튼을 달고 그 버튼을 누르면 서로 이동하도록

(world -> write -> list -> update->다시 world) 만들기

 

-------------------------> 이걸 단시간에 다 할 줄 알면 기본기를 익힌 것임!

1,2,3 번 연습하는 시간 가짐

 

 

--------------------------------------------8교시---------------------------------------------

* 3번째 인자 next 와 app.use 에 대해서

use() 매소드는 get 과 post와 구문도 같고 기능도 같다고 할 수 있다. 다만 use는 get 과 post를 모두 받는다!

만약 같은 url 주소에서 "app.get도 app.use도 동시에 실행시키고 싶다" 라고 한다면 

세번째 인자 next를 이용해주면 된다. 

app.get('/index',(req,res,next)=>{

   console.log('NEXT')

   next();

})

이렇게 써주면 이 주소에 다음 매소드도 있으니 찾아봐 ! 라는 뜻이라고 한다.

 

 

* 라우터(router) 사용하기

일단 라우터는 파일을 용이하게 관리하기 위해서 사용하는 것 같다. 

라우터를 이용하면 js 파일간 변수를 공유/이동 해서 쓸 수 있다는 것이 포인트

사용법은 간단하다.

<보낼 js 파일>에서 라우터 변수를 선언해주고

const router = express.Router(); -> (이게 공식임)

밑에

module.exports = router; 를 적어준다. 이것은 해당 라우터 파일을 다른 js파일로 보낼 준비가 되었다는 의미이다.

여기 =router; 자리에는 함수를 적어줄 수도 있다. 그전에,

여기서 아직 보내진건 아니다.

그 파일을 <받는 js파일> 에서도 require을 이용해 파일을 받아오고 변수를 선언해줌으로써 그 파일을 가져올 수 있다.

let log = require('./route/index'); // 이때 index.js에서 .js 생략 가능. (라우터 보내준걸 받아와서 log 변수에 담았어)

 

함수를 보내고자 한다면 어떻게 할 수 있을까?

>> 예를 들어 내가 index.js 에 로그라는 함수를 생성했고, 이 함수를 server.js 에서 이용하고 싶다고 해보자.

log(req,res,next){

   console.log('hi')

   next();

}

이 로그함수를~

module.exports = log; 이렇게 담아준다.. 그리고 server.js에서

let log = require('./route/index') 를 이용해 받아주면 된다.

근데 함수를 담아주면 해당 파일에서 그 함수 하나만 공유해줄 수 있다.

 

 

반응형