-
Web 백엔드 (7) / Sequelize를 통해 MySQL을 Node.js와 연결하기Programming/Web Programming 2023. 5. 13. 07:17
MySQL을 node.js에서 사용해보자.
이 포스팅에 작성된 모든 내용은 아래 강좌를 듣고 배운 내용을 기반으로 한다.
클래스 101 [유료강좌]
개발자 사관학교 - [웹 개발자 단과반 2교시] MySQL, Node.js 백엔드 속성 실무!
https://class101.net/ko/products/5fac071c1105fb001383cd2a
[웹 개발자 단과반 2교시] MySQL, Node.js 백엔드 속성 실무! | 개발자 사관학교
웹 개발자 단과반이 필요한 이유는 뭘까요? 📍 대체 뭐부터 개발해야 할지 모르겠어요. 원래 처음 개발을 배우면, 뭐부터 시작할지 모르기 때문에 막막합니다. 개발 방향성이 없으니 그걸 잡아
class101.net
CHAPTER 3: 데이터베이스까지 다루는 초간단 서버 개발
[3. Node.js에서 MySQL을 더 쉽게! Sequelize 적용하기]
< 1. Sequlize와 mysql을 node.js에 설치하기 >
Sequlize는 MySQL을 사용하기 위해 SQL언어가 아닌,
자바스크립트로 작성할 수 있게 해주는 편리한 도구이다.
만들어두었던 vscode를 다시 연다.
서버를 실행시키고 터미널 창을 나누어 Sequelize를 설치할 준비를 한다.
npm install sequelize@5.22
명령어를 적어 sequelize를 설치한다.
@5.22를 작성하지 않으면 최신 버전이 다운로드가 되는데, 최신버전이 문제가 많아 안정적인 예전 버전을 사용하려 한다.
npm install mysql2
명령어로 mysql을 다운받아준다.
sequelize5.22 버전에 맞춰 mysql2버전으로 다운받아주었다.
< 2. Node.js 코드에서 Sequelize를 통해 MySQL 접속 정보 만들기 >
vscode에서 MySQL 접속 정보를 만들어줄 차례이다.
코드내에서 sequlize구조를 작성해준다.
db.js 내에 다음과 같이 작성했다.
sequelize를 사용하기 위한 기본 설정같은 코드들이기 때문에,
하나하나 모두 외울 필요는 없지만 각각에 대한 설명을 간단히 적어보려 한다.
new Sequelize("데이터베이스이름","기본관리자","설정했던 MySQL 비밀번호",
host:"localhost": 내 컴퓨터의 서버를 사용중이기 때문에 localhost로
port:3306 : MySQL은 3306번 포트를 이용한다. (공식 약속)
dialect:"mysql": 데이터베이스 종류 작성. 망고bd등등.. 종류가 여러가지이기 때문에 mysql을 적어준다.
timezone:"+09:00": 국가 타임존 설정. 한국은 +9:00
다음으로 define 객체를 생성한다.
define안에는 구체적으로 만들 데이터베이스 테이블(=데이터)의 성격을 적어준다.
charset:"utf8",
collate:"utf8_general_ci",
이 두개의 값은 한글데이터가 넘겨질 수도 있는데 이때 글자깨짐을 방지하기 위한 인코딩이다.
trimstamps:true,
데이터베이스에 데이터를 저장할때, 자동으로 몇시 몇분에 만들었는지 자동으로 날짜데이터를 저장해준다.
freezeTableName:true,
Sequlieze의 독특한 특징 중 하나이다.
sequlize는 무조건 테이블을 만들때 복수형태로 이름을 짓는다.
그렇게 되면 직접 적어준 이름과는 다른 형태의 이름으로 바뀔 수가 있다.
이런 sequlieze의 규칙을 따르지 않고 이름을 직접 명시하겠다는 의미이다.
만들어준 접속 정보를 Router를 내보냈듯이, 내보내주어야한다.
db라는 변수를 만들어 그 안에 데이터베이스 정보를 눌러 담아 내보내준다.
이제 db.js에서 MySQL의 접속 정보가 준비된 것이다.
그렇다면 이제 서버에서 데이터베이스에 접속해보자.
< 2. 서버에서 데이터베이스 접속 >
서버의 모든 중요한 사항들에 대해 적혀있는 app.js에 다음과 같은 두 줄의 코드를 추가한다.
앞서 db파일에서 module로 내보내주었기 때문에 model/db라는 경로로 받아올 수 있다.
서버를 실행시켜주는 listen부분에 데이터베이스 서버도 실행시켜준다.
또한 sync부분은 force:true와 force:false 두 개의 값 중 하나를 선택할 수 있다.
false는 항상 model폴더를 바라보며 새로 생긴 테이블이 있으면 우리가 정해준 nodeStudy데이터베이스에
새롭게 업데이트 해준다. = 덮어쓰기를 해준다.
하지만 true는 새로운게 생기면 초기화 후 다시 시작한다.
즉 우리가 만들었던 모든 데이터들을 서버가 실행될때마다 계속해서 갈아 엎어준다.
따라서 아직 개발중, 테스트 중이라면 false로 두는 것이 좋다.
저장하면 서버가 다시 실행되면서 아래 Executing default ~ 이라는 응답이 뜬다.
이는 sync를 통해 db가 실행됐음을 알리는 것이다.
< Q. 오류 해결 >
처음에 파일을 저장하고 supervisor로 서버가 재실행되면서 다음과 같은 오류가 떴다.
대략 3306 포트에 연결이 안된다.. 의 내용인듯 하다.
MySQL 서버도 다시 껐다켜고, app.js에서 포트넘버도 3307로 바꿨다가 다시 3306으로 저장하고 db파일도 다시 저장하자
갑자기 해결이 되었다. 구체적으로 이유가 무엇인지 찾아내지는 못했지만 아마 app.js의 변경사항을 저장을 안해서 그런 것 같다.
저장필수!!
<A. 해결 >
+) 추가
아래와 같은 코드를 추가하니 실행이 됐다. (맥)전체적인 코드를 보면 이런 느낌이다.
프론트엔드에서 느낄 수 없었던 분노를 느낄 수 있었다..
터미널을 이용하면서 나는 오류는 적응도 안되고
해결 방법도 찾기가 쉽지 않아 더 어려운 것 같다.
저혈압치료에는 백엔드 코딩도 괜찮은 것 같다..^^;;
출처: 클래스101 / [웹 개발자 단과반 2교시] MySQL, Node.js 백엔드 속성 실무! - 개발자 사관학교
'Programming > Web Programming' 카테고리의 다른 글
Web 백엔드 (8) / 데이터베이스(MySQL)과 API 만들기: 데이터 생성, 조회 (0) 2023.05.15 zsh: command not found: mysql / Homebrew에서 다운받은 MySQL 경로 찾기, 실행하기 (0) 2023.05.13 Web 백엔드 (6) / 데이터베이스란? MySQL 설치 및 사용 (0) 2023.05.13 Web 백엔드 (5) / HTML과 CSS 연결해주기 (0) 2023.05.12 Web 백엔드 (4) / API 만들기 - GET과 POST 방식(+Postman) (0) 2023.05.12