-
Web 백엔드 (8) / 데이터베이스(MySQL)과 API 만들기: 데이터 생성, 조회Programming/Web Programming 2023. 5. 15. 07:52
직접 데이터베이스 테이블을 만들어보는 시간이다.
이 포스팅에서 작성된 모든 내용은 아래 강좌를 통해 배운 내용을 바탕으로 한다.
클래스 101 [유료강좌]
개발자 사관학교 - [웹 개발자 단과반 2교시] MySQL, Node.js 백엔드 속성 실무!
https://class101.net/ko/products/5fac071c1105fb001383cd2a
[웹 개발자 단과반 2교시] MySQL, Node.js 백엔드 속성 실무! | 개발자 사관학교
웹 개발자 단과반이 필요한 이유는 뭘까요? 📍 대체 뭐부터 개발해야 할지 모르겠어요. 원래 처음 개발을 배우면, 뭐부터 시작할지 모르기 때문에 막막합니다. 개발 방향성이 없으니 그걸 잡아
class101.net
CHAPTER 3: 데이터베이스까지 다루는 초간단 서버 개발
[4. Sequelize로 초간단 데이터베이스 테이블 만들기]
직접 데이터베이스 테이블을 만들어보기 위해 model폴더 안에
unsers.js라는 파일을 만들었다.
그리고 안의 내용은 아래와 같이 채워주었다.
module.exports는 해당 데이터베이스를 같은 폴더 내 파일에서도 접근할 수 있도록 밖으로 내보내주는 역할을 한다.
return 부분을 살펴보면 users라는 key와 value로는 다양한 유저 정보를 내보내줄것이다.
idx는 (추가될 데이터의) 순서를 가리키며 타입은 정수이다.
autoIncrement는 행이 늘어나면 자동으로 첫번째 행, 두번째 행 이렇게 값을 늘려가며 인덱스를 부여해줄 것을 의미한다.
primaryKeys는 위와 같은 인덱스에 동의하며 값을 채워갈 것을 의미한다. (정확한 내용x)
allwNull은 데이터의 값이 비어있는것은 허용하지 않는다는 뜻이다.
(혹시 모를 실수를 예방할 수 있다.)
user_id는 이름 그대로 유저 아이디를 담는 key가 될 것이다.
타입은 String으로 정한다. 최대 글자수는 250자이다.
참고로 String같은 Squelize에서 제공하는 다양한 변수 타입을 아래 공식 문서를 통해 확인이 가능하다.
https://sequelize.org/v3/api/datatypes/
Datatypes - Sequelize | The Node.js / io.js ORM for PostgreSQL, MySQL, SQLite and MSSQL
Class DataTypes View code A convenience class holding commonly used data types. The datatypes are used when defining a new model using Sequelize.define, like this: sequelize.define('model', { column: DataTypes.INTEGER }) When defining a model you can just
sequelize.org
이제 db.js에서 db객체에 users라는 키를 만들어 아까의 유저데이터를 담는다.
데이터베이스는 squelize를 통해 값을 import해주어야 한다.
__dirname은 상대 경로로, +다음에 파일명을 쓰면 된다.
상대경로는 지금 파일을 기준으로 해당 이름의 가장 가까운 파일을 찾아준다.
파일을 모두 저장해주면 supervisor로 서버가 재실행된다.
그러면 아래에 디버깅 결과에 특이한 내용이 출력된다.
아래에 Executing구문을 읽어보면 Create Table if not Exists라고 뜨면서 테이블이 없다고 나온다.
이 경우, 자동으로 테이블을 만들어준다. 매우 편의적으로 뛰어난 기능이다.
터미널에서 데이터베이스를 확인해보자.
데이터베이스에 nodeStudy가 있다.
안으로 들어가본다.
nodeStudy에 unsers 데이터 테이블이 추가된 것을 볼 수 있다.
desc users;
라는 명령어로 unsers 테이블의 값을 더 구체적으로 볼 수 있다.
아까 적어준 idx, user_id 인덱스가 있는 것을 볼 수있다.
나머지는 createdAt과 updatedAt라는 type이 datetime인 인덱스들은 어디서 온 인덱스일까?
지난번에 작성한 부분중에 timestamps로 인해 자동으로 생성된 것이다.
[5. Squelize로 데이터 저장/조회 API 만들기]
직접 데이터베이스와 연결된 API를 만들어보자.
API는 크게 CRUD, 4가지 역할을 수행할 수 있다.
C - create: 데이터를 만든다.
R - read: 데이터를 조회한다.
D - delete: 데이터를 지운다.
이렇게 4가지 중에 오늘은 create(생성)과 read(조회)를 만들어 볼것이다.
가장 먼저 해야 할 일은, mainRouter.js파일에 db를 불러오는 것이다.
const db = require('..db주소');를 이용해 데이터베이스를 받아온다.
<1. 데이터 생성하기>
그 다음으로는 mainRouter.js에 새로운 get방식의 api를 만들어준다.
user_id는 프론트엔드에서 사용했던 방식으로 똑같이 javascript에서 기본으로 제공해주는 Math 함수를 이용해서
랜덤한 id를 할당한다.
새로운 데이터베이스를 만드는 함수는 .create이다.
여기서 user_id만 만들고 따로 인덱스 넘버를 생성하지 않는 이유는 위에서 처음 autoIncrement를 true로 해주었기 때문이다.
그리고 만든 user_id 변수를 key로 넘겨준다.
then(function(result))를 해주면 앞서 create에서 저장된 값들이 모두 result안에 저장된다.
보통의 경우 result를 이용해서 내부에 코드를 연결해서 더 짜지만, 여기서는 res.send만 해준다.
응답이 잘 전달될 경우, success:200을 성공메시지로 보내기로 한다.
- Postman을 열어 응답이 잘 전달되었는지 확인해보자!
타입을 GET으로 설정한뒤, API 주소를 적어주고 Send를 눌러준다.
성공 문구가 잘 나타나는 것을 볼 수 있다!
<2. 데이터 조회하기>
생성된 데이터를 조회해보자!
마찬가지로 받아온 db를 활용한다.
이번에는 조회니 /data/read로 주소를 만든다.
.findAll()은 데이터베이스 안에 있는 모든 데이터들을 불러온다.
데이터 생성 부분에서 result에 앞서 요청한 데이터들이 저장된다고 했었다.
이번엔 이 result 변수를 활용할 것이다.
res.send를 통해 데이터 조회에 성공하면 sucess메시지와 동시에 받아온 데이터를 응답으로 보내주기로 했다.
=> data:result
- Postman에 read주소를 불러와준다.
데이터들이 정상적으로 요청에 응답한 것을 볼 수 있다.
인덱스가 3개나 생긴것은 생성 주소를 바꿔주지 않고 몇번 Send했더니
그때마다 추가되면서 이렇게 데이터베이스에 쌓이게 되었다.
API 생성과 조회를 해보았다.
다음 포스팅으로는 삭제와 업데이트를 다뤄볼 예정이다.
생각보다 방법은 간단해서 재밌었다!
삭제와 업데이트도 간단하길 바란다^ㅡ^
출처: 클래스101 / [웹 개발자 단과반 2교시] MySQL, Node.js 백엔드 속성 실무! - 개발자 사관학교
'Programming > Web Programming' 카테고리의 다른 글
Web 백엔드 (9) / 데이터베이스(MySQL)와 API 만들기: 데이터 업데이트, 삭제 (0) 2023.05.16 에러 해결하기: Unhandled rejection SequelizeConnectionRefusedError: connect ECONNREFUSED ::1:3306 (0) 2023.05.15 zsh: command not found: mysql / Homebrew에서 다운받은 MySQL 경로 찾기, 실행하기 (0) 2023.05.13 Web 백엔드 (7) / Sequelize를 통해 MySQL을 Node.js와 연결하기 (0) 2023.05.13 Web 백엔드 (6) / 데이터베이스란? MySQL 설치 및 사용 (0) 2023.05.13