즐코

mySQL - DB 데이터 가져오기 본문

mySQL

mySQL - DB 데이터 가져오기

YJLEE_KR 2022. 2. 18. 00:02

mySQL을 통해 DB에서 데이터 가져오기

초면이었다가 자기소개하고 인사나누고 친해졌다가 할일 다 끝나서 헤어지는 느낌 

 

#1. DB를 접속할 수 있는 client와 DB server가 존재해야함 

#2. client-DB server에게 핸드쉐이크(tcp요청/응답)를 한다. (http 통신과 비슷하다) 

#3. client-DB server간의 connection 완료

#4. client-DB server간에 socket이라는 게 생김 socket open!

#5. 서로 내용을 계속 주고받을 수 있는 상태가 됨 (요청-응답 일회성 X, 실시간 가능) / 채팅, 스트리밍서버

#6. 자원소비가 너무 큼 -> 할일 다 끝나면 종료라는 걸 해줘야함 connection close

#7. 그다음 socket close

 

근데 이런 connection을 만들어주고 socket 통신을 가능하게 하려면 코드를 어떻게 짜야함?

이미 똑똑한 사람들이 만들어둔, nodeJS에서 제공해주는 mysql 드라이버를 가져다 사용할거다. (mysql package)

 

 

커넥션이 맺어졌는지 안맺어졌는지 확인할 수 있는 쿼리문

SHOW STATUS LIKE 'Threads_connected';

근데 connection을 카운팅할 수 있다는 건 이 connection 자체가 제한적이라는 뜻

서버 컴퓨터가 수용할 수 있는 커넥션 수가 정해져있다. 

 

그래서 사용하고 끊고 사용하고 끊고 반복하게끔 connection.end() 코드를 넣어서 끊어주는 작업해주기 

 

연결하는 거 자체만으로 자원을 많이 먹는다. 

query문으로 겨우 테이블 하나 가져올거면서 connection까지 오는 로직이 길고, 데이터를 가져올 때마다 연결하고 끊고를 반복해야하니 비효율적이고 사용자가 많아질수록 서버에 과부하가 걸리게됨

 

그럼 우리 connection을 미리 맺어두고 데이터를 가져다쓰는건 어떨까? 해서 나온게

connectionPool 이란 개념

 

클라이언트 요청이 오면 커넥션을 주고 할일 끝나면 다시 커넥션을 반납받아서 POOL에 저장하는 형태

 

connectionLimit = 서버가 몇개의 커넥션을 커버할 수 있나 

 

 

리눅스 / 윈도우 각각 환경변수가 존재한다.

리눅스에 환경변수를 설정해서 nodejs에서도 환경변수를 불러오게끔..

 

PATH라는 리눅스의 환경변수 출력

echo $PATH라고 해두기

환경변수 설정

process.env 현 운영체제의 환경변수를 가져올수있다.

 

dotenv라는 라이브러리 다운..

환경변수를 파일에 담아서 사용할수있게끔 처리해줌 

환경변수를 굳이 .bashrc 에 들어가서 설정하지 않아도 dotenv 파일이 대신 해줌

 

npm install dotenv 로 패키지 깔기

프로젝트 최상위 폴더에 .env 파일 생성 그 안에 환경변수 설정해주기

 

connectionPool.js 에서 환경변수 가져와서 createPool안에 넣기 

DB 데이터를 가져옴 / 배열에 객체 형태

Comments