본문 바로가기

개발/프로그래머스 데브코스

프로그래머스 데브코스 24일차 with. TS 웹 풀스택

📚요약

지난 시간은 테이블 생성 실습을 통해 여러 가지를 실습해 봤습니다. 이번 시간에는 미니 프로젝트(Library)를 실제 데이터베이스에 테이블을 만들고 서버에 연결해 보겠습니다.

 

📖미니 프로젝트(Library) 실습

지금까지는 테이블을 그렸던 것을 조금만 변경하고 실제로 서버와 연결해 보겠습니다.

 

📄workbench와 docker mariadb 연동

docker desktop을 동작시키고 설정해 둔 host, port, username(추가한 유저가 없다면 root), password를 작성하고 test connection 버튼을 누르면 연결을 테스트해 볼 수 있습니다.

mysql workbench에서 docker mariadb 연동하기

🍯tip! 연동하다가 다 맞게 한 것 같은데 연동이 안되면 다음 글을 참고해 보면 해결될 수 있습니다.

 

📄스키마 및 테이블 생성

연동이 잘 되었다면 이제 스키마와 테이블을 생성해 보겠습니다. 기존 사서 테이블에 id를 email로 사용하고 id는 숫자로 부여하는 방식으로 진행하겠습니다. 전화번호인 ph_num도 추가했습니다.

책 테이블

id name publisher publish_date librarian_id
1 books pbBook 2024.05.07 nulzi123
2 boks pbbooK 2020.05.07 nulzi123

 

사서 테이블

id email pw name ph_num
1 nulzi123@mail.com 1234 nulzi  

 

이제 스키마와 테이블들을 생성해 보겠습니다. 테이블은 기존에 create문에서 작성하던 것보다 쉽게 작성할 수 있습니다. 체크 박스를 통해서 제약 조건도 설정할 수 있습니다.

GUI 스키마 생성 & librarians(사서) 테이블 생성

책 테이블의 경우 외래키까지 설정해줘야 하는데 외래키도 Foreign Keys 탭으로 들어가서 쉽게 작업할 수 있습니다.

books(책) 테이블 생성 & 외래키(foreign key) 등록

 

📄테이블 행(레코드, 튜플) 추가, 수정, 삭제

CLI로 복잡하게 입력했던 때와 달리 조회를 해서 테이블의 데이터를 추가하거나 수정, 삭제를 손쉽게 할 수 있습니다.

GUI insert 테스트 & auto_increment와 default 값 구현 확인

🍯tip! NULL값이 들어갈 수 있거나 DEFAULT, AUTO_INCREMENT를 설정해 둔 경우에는 칸을 비우고 동작시키면 자동으로 값이 생성된다.

 

📖Node.js와 연동하기

이번에는 mysql2 패키지를 활용해 볼 예정입니다. 시작 예제의 경우 Promise 방식과 Callback 방식이 있는데, 지금까지 Callback 방식으로 배웠기 때문에 Callback으로 진행합니다.

const mysql = require("mysql2");

const connection = mysql.createConnection({
  host: "localhost",
  port: 3307,
  user: "root",
  password: "root",
  database: "Library",
  dateStrings: true,
});

connection.query("SELECT * FROM `librarians`", function (err, results, fields) {
  console.log(results);
});

전에 연결할 때 사용했던 코드와 크게 다른 점은 없습니다.

 

📄timezone(시간지역) 설정하기

하지만 시간을 표시하는 경우에는 뭔가 이상함을 느낄 수 있습니다. 왜냐하면 workbench에서 사용하는 시간이 세계 표준 시간이기 때문입니다. 저희는 서울 시간으로 바꿔서 사용해야 합니다.

// 기존 시간 세팅 확인하기
SELECT @@global.time_zone, @@session.time_zone;
// 기존 세팅은 둘의 값이 모두 SYSTEM 이다

SET GLOBAL time_zone = 'Asia/Seoul';
SET time_zone = 'Asia/Seoul';

 

설정을 변경하면 조회한 테이블에서도 자연스럽게 값이 바뀐 것을 확인할 수 있습니다. 하지만 Node.js에서 보이는 시간은 그대로 일 텐데 이를 바꾸기 위한 코드가 createConnection() 내부의 'dateStrings : true'입니다. 기존에는 시간이 '2024-05-09T08:47:47.000Z'으로 나오는 불편함이 있습니다. 설정을 해주게 되면 '2024-05-09 17:47:47' 원하는 문자열로 잘 나오는 것을 확인할 수 있습니다.

 

해당 코드는 github에서 확인할 수 있습니다.

https://github.com/nulzi/ProgrammersSchool/tree/main/NORMAL-LIBRARY

 

ProgrammersSchool/NORMAL-LIBRARY at main · nulzi/ProgrammersSchool

프로그래머스 데브코스에서 학습하는 것들을 모아두는 레포. Contribute to nulzi/ProgrammersSchool development by creating an account on GitHub.

github.com

 

다음 시간에 계속...

 

출처 & 참고

김송아 강사님의 강의