본문 바로가기

프로그래머스 풀스택 데브코스/데브코스 TIL

웹 풀사이클 데브코스 TIL 24일차

WorkBench

mysql, mariaDB는 Mysql Workbench 라는 프로그램을 통해 GUI 접근이 가능하다.
다운로드 링크: https://dev.mysql.com/downloads/workbench/


프로그램 설치가 되었으면 들어오는 메인 화면이다.
MySQL Connections 옆에 있는 + 버튼을 눌러본다.

이와 같은 창이 뜬다. Connection Name을 원하는 이름으로 작성하고 나머지 설정은 그대로 둔다. 패스워드는 Store in Keychain을 눌러서 우리의 mariaDB 비밀번호를 입력해준다. 비밀번호를 키체인에 미리 입력하지 않고 하면 어째서인지 워크벤치가 Crash 되는 버그가 있다는 점도 참고.

mariaDB에 접속한 화면이다. Schemas 탭을 눌러보면 우리가 생성한 스키마들이 보이는 것을 알 수 있다. 특정 스키마를 USE 하려면 간단하게 스키마를 더블클릭해주면 된다.

그렇게 하면 선택된 스키마는 굵은 글씨로 표시가 된다.
이제 SQL을 한번 작성해보자

성공적으로 조회가 되는 것을 알 수 있다.

이런식으로 UPDATE 문 대신 직접 컬럼의 값을 더블클릭하여 값을 바로 수정할 수도 있고, INSERT 문 대신 아래에 바로 추가할 수도 있다.

스키마도 SQL 없이 추가할 수 있다.

비슷한 방식으로 테이블도 생성가능하다.

외래키 설정도 가능하다

컬럼 추가도 가능하다
TIMESTAMP는 뒤에 괄호를 일단 지워주고(초 단위를 적는 공간이기 때문) Default에 CURRENT_TIMESTAMP()를 적어준다.

Express.js DB 연동

npm에서 mysql2 라는 패키지를 사용해보겠다.
https://www.npmjs.com/package/mysql2

// get the client
const mysql = require('mysql2');

// create the connection to database
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'root',
  database: 'Youtube'
});

// simple query
connection.query(
  'SELECT * FROM `users`',
  function(err, results, fields) {
    console.log(results); // results contains rows returned by server
    console.log(fields); // fields contains extra meta data about results, if available
  }
);

제공하는 예제 코드를 변형하여 우리의 db를 조회해보자.

//console 출력결과
[
  {
    id: 1,
    email: 'kim@mail.com',
    name: '김',
    password: '1111',
    contact: '010-1234-5678'
  },
  {
    id: 2,
    email: 'park@mail.com',
    name: '박',
    password: '2222',
    contact: '010-5555-5555'
  },
  {
    id: 3,
    email: 'choi@mail.com',
    name: '최',
    password: '3333',
    contact: '010-5555-7777'
  },
  {
    id: 4,
    email: 'chim@mail.com',
    name: '침',
    password: '5555',
    contact: '010-1111-2222'
  }
]

json 배열 형태로 자동으로 반환되는 것을 볼 수 있다.

이제 배열의 비구조화를 이용해 우리가 원하는 값을 변수에 담아보겠다.

// simple query
connection.query(
  'SELECT * FROM `users`',
  function(err, results, fields) {
    let {id, email, name, created_at} = results[0];    
    console.log(id);
    console.log(email);
    console.log(name);
    console.log(created_at);
  }
);
// 1
// kim@mail.com
// 김
// 2023-12-21T20:48:07.000Z

변수에 잘 담아지는 것을 확인할 수 있다. 그런데 이상한 점이 하나 있다. created_at의 시간이 db에 저장된 시간과 다르게 표시된다는 점이다.

Timezone

SET GLOBAL time_zone = 'Asia/Seoul'

데이터 베이스 전체를 시간대를 맞춰주는 쿼리문이다. 하지만 이 쿼리문을 적용하고 다시 users 테이블에 값을 적용해봐도 여전히 시간이 적용이 안된것을 알 수 있다.


글로벌 뿐만아니라 세션의 타임존을 설정도 해주어야한다.

SET time_zone = 'Asia/Seoul'

그 후 확인해보면

올바른 시간이 적용된 것을 알 수 있다.

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'root',
  database: 'Youtube',
  dateStrings : true
});

뿐만 아니라 노드js connection 설정에서 dataStrings 설정을 추가해주면
2023-12-22T05:48:07.000Z => 2023-12-22 14:48:07
로 노드에서 값을 바꿔서 받아오게된다.

후기

오늘은 Workbench의 전반적인 사용방법과 데이터베이스와 노드를 연결하는 방법에 대해서 학습하였다. 그 과정에서 timezone 이슈가 생겼고 그것을 해결하는 방법에 대해서도 알아보았다.

키워드: 프로그래머스 데브코스, 국비지원교육, 코딩부트캠프