본문 바로가기
etc/블록체인 뉴딜일자리사업

MySQL 기본문법, DB와 node.js 연동하기

by vellahw 2023. 6. 19.

 

💭 교육 31일차

오늘은 프로그래밍 수업이 있었다. 저번주에 솔리디티로 작성한 컨트랙트 내용을 복습했고 MySQL의 기본 문법을 다루고 서버와 연동하는 실습을 했다. MySQL 기본 문법이 오라클과 크게 다르지 않아서 다행히 어렵지 않게 수업에 따라갈 수 있었다. 노드와 mysql 디비를 연동하고 간단한 로그인, 게시판을 구현 해보았는데 노드를 하면 할수록 너무 재밌다 ㅎㅎㅎ 아주 기초적인 내용을 배운거겠지만 즐거움을 뒷받침 삼아 꾸준히 공부할 수 있을 것 같다!

 

 

 

 

🧠 복습

구조체란?

'데이터를 저장하는 형태'

데이터베이스의 테이블의 형태와 흡사하다.

 

배열이 있는데 JSON은 왜 탄생 했을까?

배열과 JSON의 가장 큰 차이는 '키'의 존재 유무이다.

배열에도 키라고 부를 수 있는 '인덱스'가 존재하지만 인덱스는 위치, 순서를 나타내주는 것이기 때문에 데이터를 직접적으로 보기 어렵다. (0번째 인덱스에 있는 데이터가 뭐지? 하며 다시 한 번 찾아봐야함)

JSON은 작성자가 지정한 '키'를 통해 데이터를 어느정도 유추가 가능하기 때문에.. 편리성을 위해 나온거기도 함

 

if보다 require()

솔리디티는 가스비를 줄이는게 가장 중요하다.

require()를 통해 조건에 걸리면 함수가 일절 실행되지 않기 때문에 if문 보다는 가스비를 덜 소비한다.

 

 

 

 


MySQL 기본 문법

workbench를 설치하긴 했지만 mysql은 cmd로 작업할 일이 종종 생긴다고 하셔서 cmd로 실습했다.

 

 

 

✔️ MySQL 실행하기

mysql -u root -p

위 명령어를 입력하고 설정한 비밀번호를 입력해 접속한다.

*맥은 mysql 설치시 별도로 비밀번호를 설정하지 않기 때문에 그냥 엔터 눌러 넘기기

(MySQL 설치법)

 

✔️ 데이터베이스 목록 확인하기

show databases;

생성된 데이터베이스 목록을 확인한다.

모든 명령어 끝엔 세미콜론을 꼭 입력해주어야 한다!

(안 그러면 무한 화살표가 될 것)

 

 

 

✔️ 데이터베이스 생성하기

CREATE DATABASE 데이터베이스명;

'폴더'를 생성하는 개념이다. (오라클의 계정 생성 같은)

모든 명령어는 소문자로 입력해도 작동한다.

실습할 땐 귀찮아서 소문자로 작성 했는데.. 대문자가 가독성이 더 좋긴 한듯 ㅎ

 

데이터베이스를 생성했으니 다시 show databases로 확인하면 정상적으로 생성된 것을 확인할 수 있다.

 

 

 

✔️ 해당 데이터베이스로 이동하기

use 데이터베이스명;

위 명령어를 입력하면 해당 데이터베이스로 이동할 수 있다.

해당 데이터베이스를 사용한다는 명령어이다.

 

 

 

✔️ 테이블 생성하기 CREATE

CREATE TABLE
테이블명 (컬럼명, 제약조건 ...);

간단히 회원 테이블을 만들었다. 오라클과 동일한 문법~~

 

 

👉 생성된 테이블 컬럼들의 정보(?) 확인하기

DESC 테이블명;

을 입력하면 위처럼 생성된 컬럼들과 그의 타입, 제약조건을 확인할 수 있다.

 

 

 

✔️ 데이터 넣기 INSERT

INSERT INTO 테이블명
VALUES(값, 값, 값 ...);

컬럼의 순서에 맞게 값을 입력해준다.

테이블에 있는 모든 컬럼에 데이터를 넣는 방법이다.

 

💡 특정 컬럼에만 데이터 넣기

INSERT INTO 테이블명 ( 컬럼명, 컬럼명 ... )
VALUES ( 값, 값, ...);

위와 같이 컬럼명을 직접 선언해서 데이터를 넣어줄 수도 있다.

user_info 테이블을 생성할 때 age 컬럼은 null이 허용되도록 설정해주었기 때문에 데이터가 들어가지 않아도 된다.

 

 

 

✔️ 데이터 확인하기 SELECT

오라클과 동일하게  select * from 테이블명;

 

 

✔️ 데이터 수정하기 UPDATE

UPDATE
테이블명
SET
바꿀 컬럼명 = 바꿀 값
WHERE 조건 컬럼명 = 조건 값;

 

 

✔️ 데이터 삭제하기 DELETE

DELETE
FROM
테이블명
WHERE 삭제할 조건 컬럼명 = 조건 값;

** Delete문은 언어를 막론하고 사용에 주의하도록 하자

신입 시절 데이터 다 날려먹었다는 에피소드.. 정신이 아득해짐

 

 

 

✔️ 생성된 테이블 컬럼 수정하기

💡 테이블에 컬럼 추가하기

ALTER TABLE
테이블명
ADD
컬럼명 조건... ;

UPDATE는 테이블 수정, ALTER는 테이블의 컬럼 수정

테이블을 생성할 때처럼 ADD 키워드(?) 뒤에 컬럼명과 제약조건들을 나열한다.

 

💡 컬럼 제약조건 수정하기

ALTER TABLE
테이블명
MODIFY COLUMN
수정할컬럼명 컬럼의타입 제약조건; 

위 쿼리문은 null 허용이었던 age 컬럼을 not null로 수정한 것이다.

(근데 왜 수정할 컬럼명의 타입까지 적어줘야 하는 걸까?!)

 

 

✔️ mysql에서 나가기

EXIT

만 입력하면 된다.

인사도 해줌 ㅋㅋ

 

 

 


서버와 DB 연동하기

노드js로 서버를 만들고 MySQL DB와 연동해보자!

 

 

1. 라이브러리 다운로드

npm install express ejs mysql2 dotenv

  • express: 서버를 돌리기 위함
  • ejs: view engine 사용을 위함
  • mysql2: mysql 사용을 위함
  • dotenv : 환경변수 설정해줌

 

dotenv로 환경변수를 왜 설정하죠? 🤔

private key나 서버 접속 정보 등 외부에 노출시키고 싶지 않은 정보들이 공개되지 않게 하지 않기 위함이다.

실습 전엔 .gitignore 같은건가 싶었는데 비슷하지만 다르다!

.gitignore는 깃허브에 올리지 않을 파일이나 폴더명을 직접 선언해두어 해당 폴더나 파일을 아예 업로드 하지 않게 한다.

반면 dotenv 라이브러리는 app.js와 같이 해당 파일이 없으면 프로젝트 구동에 문제가 생기는 파일들을 위함이다!

.env 라는 파일을 만들어 그 안에 변수를 선언하듯 [ 변수명 = 값 ]의 형태로 선언해주는데, 선언한 변수명을 가지고 app.js 등에서 사용할 수 있다. 예를 들어 password : 1234 라는 완전히 공개된 문장이 password : password로 감춰질 수 있는 것이다.

 

 

2. mysql2 라이브러리 가져오기

🔻 먼저 express 라이브러리를 로드해줬는데 코드만 첨부하고 기록은 생략한다!

더보기
// express 로드
const express = require('express')
const app = express()
const port = 3000

// view 파일의 기본 경로 설정
app.set('views', __dirname+"/views")
// view engine 지정 -> ejs
app.set('view engine', 'ejs')

// post 형태로 데이터를 받는 겅우 json 형태로 데이터를 변환해주는 세팅
app.use(express.urlencoded({extended:false}))

// 서버 실행
const server = app.listen(port, function(){
    console.log("Server Start")
})

 

// mysql2 라이브러리 로드
const mysql = require('mysql2')

const connection = mysql.createConnection({
     host : 'localhost', // 주소 
     port : 3306, // 포트번호
     user : 'root', // 사용할 유저
     password : '0000', // 패스워드 지정 안 했으면 패스 가능
     database : 'my_data' // 사용할 데이터베이스
})
  • host 주소: 어디에 있는 mysql을 사용할 것인가 (우린 로컬호스트) / 맥의 경우 127.0.0.1로 입력해야 오류 발생 안 함
  • port: 포트번호

 

require 함수를 이용해 라이브러리를 로드한다.

createConnection 함수를 이용하여 연결할 mysql 서버 정보(host, port 번호, 유저이름, 패스워드, 연결할 데이터베이스명)을 입력한다.

서버가 정상적으로 작동되면 틀린 정보 없이 연동 잘 된 것!

 

 

dotenv 모듈

위와 같은 서버 정보는 오픈소스로 공유되면 안 되는 정보이다.

개발환경을 구축하며 다운로드 한 라이브러리인 dotenv를 이용해 정보를 감춰줄 수 있다.

 

.env 파일을 생성하여 index.js에서 connection 변수에 입력한 내용을 동일하게 작성해준다.

 

다시 Index.js로 돌아와서, 각 키에 대한 값을 process.env.env 파일에 입력한 변수명으로 입력해준다.

 

콘솔로 process.env.host 를 찍어주도록 하고 서버를 작동해봤는데 정상적으로 작동되었다!

 

 

 

댓글