본문 바로가기
✍ 따뜻한 개발 공부

Node.js로 웹서버 간단 구축해보기 (코딩애플 영상보다 삘받아서 mysql, node.js, express 사용해보깅)

by 따따시 2023. 5. 6.

* HTML

웹페이지에 글쓰고 그림 넣기 위해 만들어진 언어

 

 * JS ?

HTML 페이지에 '종속' 된 언어

HTML 페이지를 위해 만들어진 언어 !!!

' HTML 조작 ' 을 위해서 만들어진 언어

 

 

그럼, JS는 누가 동작시켜주냐 ?!

이 js를 해석하는게 '브라우저'이다

'브라우저'마다 자쓰 해석 엔진이 있는데, 크롬은 v8 , 모질라는 스파이더몽키

 

크롬이 v8를 만들어내고 나서 js엔진이 너무 뛰어난 나머지 v8를 브라우저에서 똑 떼서 출시를 하게 됌

그것이 바로 Node.js !!!!!!!!

( 노드.js 는 크롬의 자쓰 해석 엔진으로 이루어져 있음 )

 

node.js를 만든 이유?

자쓰를 브라우저 내에서 말고도 다른 환경에서 쉽게쉽게 실행하기 위해서 (자바스크립트 런타임)

 

그러다 node.js로 서버를 만듦

=> 이유 : Non-blocking I/O

 

* Node.js의 특징

 

문제점 : 중간에 버거운 요청이 들어오면, 그 요청을 처리하는 동안 너무 시간이 오래 걸림

 

- Non-blocking I/O

node.js는 일단 요청을 한번에 다 받고 처리 속도가 빠른 것부터 먼저 처리해서 보내준다. 

완료가 된 것부터 갖다주는 것 

 

SNS, 채팅서비스 같은 경우 서버가 1초에 몇 십만개의 요청을 처리할 수 있어야 된다.

(1초에 카톡보내는 사람들이 개많지)

일반 서버 같은 경우 이런 무거운 요청을 처리하는데 대기 시간이 오래 걸리는데

node.js의 경우 요청이 많거나 오래걸리는 요청이 있어도 멈추거나 요청 대기시간이 있지 않음)

=> 일반 서버같은 경우 , 서버 스케일링이나 멀티쓰레딩을 통해 해결할 수도 있다고 함

 

- Event-driven

 

-  이미지 처리가 필요한 서버인 경우엔 node.js가 적합하지 않다고 한다.

이유 : 같이 쓸 수 있는 라이브러리가 별로 없다고 함

-> 수학 계산, 이미지 처리 같은 경우엔 python을 사용하는게 더 좋다고 한다.

 

 

터미널 명령어에

node

라고 입력하면, 바로 js를 실행할 수 있는 런타임이 실행이 된 것

 

 

express 설치하기  -> 서버를 쉽게 만들 수 있게 도와줌

 

npm ->  라이브러리 설치를 쉽게 도와주는 도구 

npm init

// npm init 하고 나서
// enter- enter 누르다 entry-point에서 "server.js" 입력

npm install express

내가 어떤 라이브러리를 설치했는지 기록하기 좋으니 pacakage.json를 생성해주기

(npm init하면 알아서 생성된다)

 

 

 

mysql 설치

 

brew install mysql //brew로 Mysql 설리
mysql --version //버전 확인
mysql.server start  // mysql server 실행

 

mysql 기본 설정 해주기

mysql_secure_installation

질문들 -

1) VALIDATE PASSWORD COMPONENT ( 복잡한 비밀번호 여부 ) : n

2) set the password (비밀번호 설정 & 확인)

3) Remove anonymous users? (익명 사용자 삭제) : y

4) Disallow root login remotely? (원격 접속 허용하지 않을 것인지) : y

5) Remove test database and access to it? (test DB 삭제 여부) : n

6) Reload privilege tables now? (변경된 권한을 반영하여 테이블 다시 로드) : y

 

 

기본 설정 한 다음에 mysql 접속해주기

 mysql -uroot -p

 

 

 

.....

 

갑자기 진도 쫙 빼고 돌아오기 ^_^

 

const express = require("express");
const path = require("path");
const app = express();
const mysql = require("mysql2/promise");
const db_config = require("./config/db-config.json");

const pool = mysql.createPool({
  host: db_config.host,
  port: "3306",
  user: db_config.user,
  password: db_config.password,
  database: db_config.database,
});

const getConn = async () => {
  return await pool.getConnection(async (conn) => conn);
};

app.use(express.static(path.join(__dirname, "../public")));
app.get("/", (req, res) => {
  res.sendFile(path.join(__dirname, "../public/index.html"));
});

app.get("/testSelect", async (req, res) => {
  const conn = await getConn();
  const query = "SELECT TEST_ID, TEST_TXT FROM TB_TEST";
  let [rows, fields] = await conn.query(query, []);
  conn.release();

  res.send(rows);
});

app.listen("8080", () => {
  console.log("Server started");
});

 

 

mysql 테이블 생성하고 mysql workbrench도 깔아보고 중간에 정상적으로 연결안되는것도 해결하고 그러다보니

갑자기 진도 뽝 나가서 돌아왔음 ㅎㅅㅎ....

아무튼 매우 알차게 궁금햇던 node.js도 사용해보고 express, mysql 사용해서 서버 실행도 해보고 재밌었던 시간 

'✍ 따뜻한 개발 공부' 카테고리의 다른 글

객체지향 프로그래밍?  (0) 2023.05.09
CORS 에러! 복습하기  (0) 2023.05.08
오버라이딩과 오버로드 ?  (0) 2023.05.05
바이트 단위  (0) 2023.05.04
피보나치 수열 - DP 적용  (1) 2023.05.03

댓글