1. Sequelize
- 객체와 관계형 DB를 연결하는 ORM (Object Relational Mapping)의 한 종류
- SQL문을 사용하지 않아도 명령문만으로도 DB 관리가 가능
- 필요에 따라 Row Query(SQL 쿼리문)도 사용 가능
2. Sequelize 설치 및 DB 연결 사용
1. 설치 및 폴더
- 설치 : npm i mysql2 sequelize sequelize-cli
- 기본 설정 : npx sequelize init
- config : DB와 연결 설정
- models : 테이블 정의 및 스키마 구현
- migrations : 테이블, 스키마 수정
- seeders : 백업본 저장
- 설치 후 env를 사용하기 위해 config.json을 config.js로 바꾸고 module.exports를 붙여줌으로 js로 사용
2. env 사용과 config.js 설정
- env는 데이터를 숨기는 용도로 쓰이는 것이다.
- env 설치 : npm i dotenv
- .env로 파일을 만들고 키/값 형식으로 작성을 한다.
- DB를 연결하기 위해 DB 비밀번호를 env로 작성해서 사용
- 다른 곳에서 env의 값을 받기 위해서는 'dotenv'를 require를 해주고 dotenv.config() 해주면 된다.
- 그 다음 process.env.키값 을 하면 그 키 값에 대응하는 값을 사용 가능하다.
- config.js는 DB와의 연결을 설정하는 곳이다.
- config.js에는 세가지로 나눠지는 데 development, test, production 단어 뜻 그래도 순서대로 개발용, 테스트용, 실제사용으로 사용 목적에 따라 모듈을 받아서 사용하면 된다.
- username은 DB 아이디, password는 DB 비밀번호(env), database는 우리가 사용하려고 하는 database 이름
- host는 ip 주소, port DB port를 뜻한다.
- 우리가 사용할려는 DB의 정보들을 작성하면 된다.
3. models/index.js 설정
- Sequelize의 DB 연결의 큰 그림은 models 폴더에 있는 index.js에 설정한 config.js(DB 정보), 테이블, 스키마, 제약조건 등을 설정하고, 그 이후에 app.js(서버)가 DB와 연동될 수 있도록 하는 것이다.
- models/index.js에 가서 기존에 것을 지워주고 설치한 Sequelize, DB 정보가 담긴 config.js, config.js 중 개발을 위한 development 설정을 requrie해서 가져온다.
- 설치한 Sequelize를 우리가 가져온 config.js의 development에 적힌 DB 정보를 new를 이용해 설정해주고, db 빈 객체를 만들어 객체 값을 채워준다.
4. 실제 사용할 app.js(서버)에 설정
- index.js에 설정한 것을 실제 사용할 서버에 require을 한다.
- 받은 객체 안에 값 중 sequelize의 .sync().then(()=>{}).catch(()=>{}) 를 하게 되면 DB 연결이 완료된 것이다.
3. 회원가입 예시
1. app.js(서버)와 routes
- 먼저 app.js에 라우트를 작성하고 routes를 작성한다.
- 그리고 routes에서 UserService로 기능을 나눠 모듈을 require를 해서 사용한다.
2. 회원가입을 받기 위한 DB안에 table 생성
- 회원가입 전에 DB 안에 먼저 table을 생성을 해야한다.
- 그러기 위해서는 폴더 중 테이블, 스키마, 제약조건을 관리하는 models 폴더에 user.js를 하나 만들어 준다.
- 그 user.js 안에서는 설치한 Sequelize.Model을 상속 받아서 사용한다.
- type에서 STRING은 varchar를 의미하고, allowNull은 Not null, unique는 유니크키를 의미한다.
- tablename이 이 테이블의 이름이 되는 것이다.
- 테이블을 만드는 로직을 만들었으면 실제로 DB와 연결하는 곳에서 만들어야 한다.
- 아까 DB 정보를 불러오고 하는 index.js에서 테이블을 만드는 user.js를 불러와서 forEach문을 통해 table을 생성해준다
3. 실제 회원가입 시도(중복 아이디 체크, 회원가입)
- 실제 회원가입을 위한 로직은 아까 분리해 놓은 userService해서 하면 된다.
- 회원가입 전에 비밀번호는 개인정보이기 때문에 대부분 암호화를 통해 DB에 저장한다.
- 그래서 여기서는 bcrypt를 이용해 비밀번호를 암호화를 한다.
bcrypt 설치 : npm i bcrypt
- 요청에서 회원가입을 위한 아이디, 비밀번호의 값을 json으로 전달하기 때문에 json 데이터는 요청의 body를 통해 전달 받는다.
- 먼저 아이디가 있는지를 찾기 위해 model에 있는 User.findOne({where : {email: req.body.email}) 를 이용해 User에서 하나를 찾는데 조건은 email이 req.body.email이 같은 게 있는 건지 찾는 것이다.
- 만약에 exUser가 있다면 중복되는 것이므로 400 상태와 메세지를 보내준다.
- 그게 아니라면 회원가입이 가능한 것이므로 요청 들어온 password를 설치한 bcrypt.hash를 이용해 암호화를 해준다.
- 그 다음 User.create({})를 이용해 table에 insert를 해주면 되고 성공한 것이기 때문에 응답으로 200 상태와 메세지를 보내준다.
- 그렇게 되면 exports 한 것을 라우터가 받아 맞게 요청이 들어오면 성공하게 된다.
4. postman을 이용한 요청과 결과
- postman을 이용해 req.body에 json을 형태로 보낸 결과
'FrontEnd > Node.js' 카테고리의 다른 글
[Node] 미들웨어, Mysql DB 연결(순수 쿼리문) (0) | 2022.12.22 |
---|---|
[Node] Project - Header, Home (0) | 2022.12.06 |
[Node] Project - Identify, DeleteUser (0) | 2022.12.03 |
[Node] Project - Login, Regist (0) | 2022.12.01 |
[Node] Project 구성 (0) | 2022.12.01 |