mysql을 배워서 프로젝트에 도입해보았다.
mySQL 접속
mysql을 설치했다면, mysql에 접속해야 한다.
mySQL이 설치된 폴더 경로로 이동한 후 명령 프롬프트를 통해 MySQL에 접속할 수 있는데,
내 경우, 경로는 C:\Program Files\MySQL\MySQL Server 8.0\bin 이다.
- mysql -h [접속할주소] -u [사용자명] -p
- Enter password: [암호 입력]
접속한 후 프롬프트가 mysql> 형태로 바뀌었다면 접속이 된 것이다.
mysql> 이후 SQL 명령어를 입력하면 mysql을 사용할 수 있다.
스키마(데이터베이스) 생성
스키마를 생성해보자. 먼저 명령 프롬프트로 진행할 경우 mysql에 접속이 되어있어야 한다.
CREATE SCHEMA [데이터베이스명]
이것이 데이터베이스를 생성하는 명령어이다.
SCHEMA는 데이터베이스와 같은 개념이다. 여기에서는 nodejs라는 스키마를 생성하였고,
nodejs 데이터베이스를 사용하겠다고 mysql에 알렸다.
예약어는 소문자로 작성이 가능하지만 대문자로 작성하는 것이 좋다.
테이블 생성
스키마를 생성했다면, 테이블을 생성해보자.
테이블은 데이터가 들어가는 틀을 의미하며, 엑셀을 떠올리면 편하다.
다만 테이블에 맞는 데이터만 들어갈 수 있다는 점이 sql의 특징이다.
- CREATE TABLE nodejs.users <- nodejs 스키마에 users라는 이름의 테이블을 생성한다.
- 컬럼으로는 id, name, age, introduce,가 있다.
- id는 정수(INT), NOT NULL(null일 수 없음), 자동 증가하는 컬럼이고,
- name은 VARCHAR(20)으로 문자 변수가 20개 들어갈 수 있고 NOT NULL이다.
- age는 정수이고, 음수가 입력되지 않으며, NOT NULL이다.
- introduce는 텍스트이고, 비어도 된다.
- 유니크 키는 id이고 id는 오름차순된다.
- 인코딩은 utf8이며, 이를 통해 한글이 입력될 수 있다.
- engine은 확실히는 잘 모르겠으나, innoDB가 많이 사용된다고 한다.
반면, 위의 작업들은 워크벤치에서도 편리하게 할 수 있다.
실사용
mysql을 nodejs에서 사용해보자.
편리한 사용을 위해서 mysql2라는 서드파티 모듈을 하나 설치해야 한다.
설치를 했다면, 다른 파일에서 mysql을 import 받았을 경우, mysql 기능을 사용할 수 있도록 별도의 유틸 파일을 만든다.
(편의성을 위해서 이렇게 하는 것이다.)
mysql 모듈을 받아온 뒤, pool을 생성하고 pool에 따른 프로미스를 하나 열어놓은 것을 export한다.
어떤 파일에서 해당 유틸을 import 한다면 pool.promise()를 사용하게 되는 것과 같다.
mysql은 데이터베이스이고, MVC 패턴에서 데이터를 관장하는 부분은 Model이다.
그러므로 models 내부의 데이터를 담당하는 파일에 database.js를 이식해보자.
- save() 메서드와 findByid() 메서드에서 db.execute()를 사용하고 있다.
- pool으로 SQL 명령문을 전달하여 시행(execute)하고, 비동기로 데이터를 명령에 맞게 처리한다.
- 이 떄 VALUES (?, ?, ?, ?) 이나 id = ? 과 같이 ?가 있는 부분은 SQL injection을 막기 위한 수단이다.
- 사용방법은... 라이브러리이므로 일단 외우는 편이 속편하다.
이제 Controller에서는 이 Model을 활용할 것이다.
- Product 클래스를 import받아 fetchAll() 정적 메서드를 호출하면
- db.execute()를 리턴받게 된다.
- 이 때 커넥션 풀은 promise 였으므로, then과 catch문을 사용할 수 있다.
- SQL 명령문 전달 이후 2개의 배열이 오게되는데 데이터와 관련있는 배열은 첫 번째 배열이므로
- 구조분해할당해서 데이터를 뽑아 사용한다.
'했던것들 > MySQL' 카테고리의 다른 글
Error Code: 1175. safe update mode 해제 SQL문 (0) | 2023.07.31 |
---|---|
일대다(one to many) 관계 연습 (0) | 2023.07.30 |
Error Code: 1093. You can't specify target table 'people' for update in FROM clause (0) | 2023.07.29 |