개발노트/Node.js
이전 포스팅에서는 MySQL ConnectionPool을 만드는 부분까지 진행했습니다. 이번 글에서는 직접 DB에 접근하여 저장된 값을 가져오는 방식을 해보려고합니다. 저는 각각의 역할을 수행하도록 디렉토리 구조를 나눠서 사용하였습니다. 1. routes -> Controller의 역할을 수행 2. services -> service 로직을 수행 3. db -> 설정한 connectionPool 객체를 반환해주는 DB 설정 관련 이러한 구조로 구분하였습니다. routes 프론트에서 요청을 할때 /api/~~를 통하여 백엔드에 요청을 하게 됩니다. 따라서 /api 라는 요청이 들어오면 app.ts에서 api.ts로 접근을 하도록 하였습니다. app.ts import api from "../routes/ap..
이전 포스팅에서 express 프로젝트 생성과 server 연결까지 진행했습니다. 이번에는 데이터베이스를 연결하는 작업을 진행하도록 하겠습니다. 작업을 하기전에 필요한 모듈이 있습니다. npm i dotenv mysql2 dotenv는 사용자 정보를 담을 .env파일을 사용하기 위한 모듈입니다. 정보를 깃에 올리지 않기 위한 파일이니 다운받아주세요. 또한 mysql을 사용하지 않고 mysql2를 사용합니다. mysql은 콜백 기반이기 때문에 promise를 사용하지 못하고 npm에 있는 promise-mysql 모듈을 따로 설치해서 사용해야 합니다. 하지만 mysql2는 promise를 지원하기 때문에 다른 모듈을 설치하지 않고 사용이 가능합니다. * mysql을 사용하게 되면 async/await를 사..
프로젝트를 진행하면서 react와 javascript를 공부해 나가는 스터디에 나가게 되었습니다. 그러면서 프로젝트 주제를 정하게 되었고 커뮤니티 웹앱을 만들게 되었습니다. 그러다 보니 백엔드를 맡을 사람이 필요하게 되었는데 express를 좀 더 공부해보자는 제가 맡게 되었습니다. 물론 프론트쪽의 작업도 몇개 주어지긴 했지만 일단은 주는 백엔드이다보니 작업을 하면서 정리를 해보려고 합니다. express 프로젝트 생성 터미널에서 해당 명령어를 입력하면 프로젝트가 생성됩니다. express --view=ejs 프로젝트명 ** --view=템플릿 -> 이부분은 생략 가능합니다. 저는 프론트를 react로 진행하기 때문에 선언을 하지않고 바로 프로젝트를 생성하였습니다. express 환경에서 typescri..
지난 번의 MongoDB 모듈화 방식과 동일한 방식으로 진행하였다. 다만, 차이점은 사용하는 MySQL 모듈이 다르다는 점이다. 모듈화를 진행시키기 위해 찾아보는 예제 코드들은 대부분 import mysql from "mysql"; 모듈을 사용하였는데....내가 하려는 방법과 맞지 않았다. 아직 공부하는 단계라 해결하는데 원인을 몰랐기에..이틀은 고생한거같다. 막상 이유를 알고보니 너무 단순한 문제... 일단 사용한 코드는 이와 같다. import { createPool, Pool } from "mysql2/promise"; import dotenv from "dotenv"; dotenv.config(); export namespace DB { export const config = { user: pro..
기존에 사용했던 방법은 DB에 접근할 때마다 connection 객체를 생성하여 값을 조회하는 방식으로 진행하였다. 하지만 이렇게 되면 매번 새로운 객체가 생성됨으로 속도가 저하될 수도 있다. 그렇기 때문에 미리 connectionPool을 준비해줌으로써 새로 객체를 생성하지 않고 준비된 pool을 이용하여 DB에 접근할 수 있다. 사용된 코드는 아래와 같다. db.ts import { MongoClient } from "mongodb"; export namespace DB { //DB export const NAME: string = 'DATA'; //COLLECTION export enum COLLECTIONS { ToDo = 'ToDo', Board = 'Board', } export class M..
NPM(Node Package Manager) 자바스크립트 패키지 매니저이고 NodeJS에서 사용할 수 있는 모듈들을 패키지화하여 모아둔 저장소 역할을 하며 설치/관리를 수행할 수 있는 CLI를 제공한다. 패키지 설치 npm i 명령어로 손쉽게 패키지가 설치된다. 설치에는 local install과 global install이 있다. 기본값은 local install이고 local package는 해당 프로젝트 내에서만 사용할 수 있다. npm i -g 명령어로 global install을 할 수 있다. global package는 모든 프로젝트에서 공통으로 사용할 수 있다. global packge install path는 다음과 같다. 의존성 관리 패키지들의 버전이 빈번하게 업데이트되므로 프로젝트가 ..
Tutorial - 웹서버 연결 const http = require('http'); const hostname = '127.0.0.1'; const port = 3333; http.createServer((req, res) => { res.writeHead(200,{'Content-Type': 'text/plain'}); res.end('Hello World With egoing'); }).listen(port,hostname,() => { console.log('서버 실행 되었습니다 사용중인 포트 번호 : ' + port); }); const http = require('http'); : 노드 모듈을 가져온다 ( http 모듈 사용 ) const hostname = '127.0.0.1'; : 사용할 ..
Node.js에서 Mysql을 연동하는 과정에서 이런 에러가 발생.. 에러내용) code: 'ER_NOT_SUPPORTED_AUTH_MODE', errno: 1251, sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client', 클라이언트 프로그램에서 mysql 패스워드 플러그인 "caching_sha2_password"을 소화하지 못해서 생기는 에러 클라이언트 프로그램에서 사용할 수 있도록 유저의 패스워드 Plusin을 바꿔주면 해결된다. mysql에 접속하고, 아래와 같이 수정 mysql> ALTER USER '사용중인계정'@'localhost' IDENT..