로그인 시스템 구현하기. A
이번엔 지난 프로젝트에서 하지 못했던 아쉬운 부분들을 보강하고, 더 나은 개발자가 되기 위하여 여러 방법을 시도할 것이다. 이번엔 로그인 시스템을 구현하는데 완성은 못했지만 어떻게 실패했는지 작성하려고 한다.
저번시간엔 https 프로토콜을 사용하기 위해 ssl인증까지 받았었다. 이번엔 JWT(Json Web Token)와 pas
sport 라이브러리를 활용해 로그인, 회원가입을 제작하려한다. 환경은 MySQL
, sequelize
, NodeJS
, express
,passport
등을 사용한다.
A. 헛발질 시작
로그인 시스템을 구현하기 위해 정보를 찾아보며 기존 프로젝트 작업물과 비교해 이렇게 모듈로 쪼개는 방식을 선택했다. 작업할때 이리저리 왔다갔다 해야되서 불편하지만 그래도 내 입장에선 보기엔 좋다.
B.package.json
로그인을 구현하기 위해선 설치할 라이브러리들이 참 많았었다. 종속성으로 적용된 package.json을 공개하면 다음과같다.
"dependencies": {
"bcrypt": "^5.0.1",
"cookie-parser": "^1.4.5",
"cors": "^2.8.5",
"dotenv": "^10.0.0",
"express": "^4.17.1",
"jsonwebtoken": "^8.5.1",
"morgan": "^1.10.0",
"mysql2": "^2.2.5",
"nodemon": "^2.0.7",
"passport": "^0.4.1",
"passport-jwt": "^4.0.0",
"passport-local": "^1.0.0",
"sequelize": "^6.6.4",
"validator": "^13.6.0"
},
데이터베이스 관련 정보라던지 jwt키를 공개하고 싶지않아 env
환경변수 파일로 담아줬다. .gitignore
가 편한게 중요한 녀석들을 걸러서 push origin [branch]
할때 필터링 해준다.
C. sequelize
저번시간에 기초적인 서버를 제작했으면 이제 회원가입 및 로그인에 필요한 스키마(Schema
)를 작성해줘야한다. 우선 sequelize로 DB와 이주하기 위해선 다음과 같이 입력해 줘야한다.
npx sequelize-cli init
그러면 config
, models
, migrations
, seeders
4가지 폴더가 생성된다. 각 폴더의 역활은 다음과 같다.
config
: DB에 연결하기 위한 정보들을 저장하는 곳이다.
models
: DB 모델 정의를 저장한다.
migrations
: 루트내의 모델들을 데이터베이스로 이주하기 위한 폴더이다.
seeders
: 테스트에 필요한 데이터를 정의한다.
mongoDB는 나중에 학습할 예정이며 현재는 MySQL를 쓰기때문에 sequelize로 아래와 같이 작성해줬다.
npx sequelize model:generate --name User --attributes username:string,email:string,password:string
이렇게 User
라는 테이블을 생성해줬다.
--attributes
를 작성할때 필드 명을 ,로 구분지어 추가하는데 사이에 띄울경우 에러가 발생한다.
처음 생성할 때 이런 실수를 저질러 버렸다.
암튼, 성공하면 models/user.js
가 생길 것이고, 확인하면 아래와 같다.
"use strict";
const { Model } = require("sequelize");
module.exports = (sequelize, DataTypes) => {
class User extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
}
}
User.init(
{
username: {
type: DataTypes.STRING,
},
email: {
type: DataTypes.STRING,
},
password: {
type: DataTypes.STRING,
},
},
{
sequelize,
modelName: "User",
}
);
return User;
};
C-1. migrations
테이블을 생성 해 줬으니 DB로 이주를 시켜야한다. 우선 터미널을 열어 mysql -u root -p
를 입력한다.
패스워드를 입력하고 접속에 성공하면, 위에서 생성된 모델이 자리잡을 DB를 생성해줘야한다.
mysql 비번이 기억이 안나요 ㅠㅠ
- 접속 하기전 비번이 기억이 안나는 경우
root 패스워드를 잊으면 초기화를 한번 해줘야한다.
Linux
터미널을 열어 다음과 같이 입력한다.
killall mysqld
MySQL 데몬을 종료하고, 다시 켰을때 승인 절차를 걸치지 않도록 아래와 같이 입력한다.
safe_mysqld --skip-grant &
그리고 mysql 접속은 했는데 비번을 어떻게 바꿔요?
를 따라하면된다.
- 접속 후 현재 비번 보는 방법
use mysql;
입력 후 아래와 같이 작성한다
select host, user, plugin, authentication_string, password_last_changed from user;
mysql 접속은 했는데 비번을 어떻게 바꿔요?
alter user 'root'@'localhost' identified with mysql_native_password by '1234';
C-2. DB 이주
sequelize-cli init
로 config
가 생성되는데 여기서database
에 원하는 이름을 지어주고 아래의 명령어로 이주시켜버린다.
npx sequelize db:migrate
아래와 같이 뜨면서 DB로 이주성공했다.
C-3. DB확인
다시 터미널로 들어가 mysql에 접속한다.
show databases
를 입력해주면 아래와 같이 db가뜬다. 이중에 방금 이주시킨 db가 있다.
DB안에 테이블이 잘 적용됬는지 확인해보기 위해 db를 선택하고 테이블들을 보면된다
select dbname
이후
show tables
뭔가 이상한게 하나 있지만 아무튼 잘됬다.
?
대충 잘 들어간 짤(DBeaver)
Author And Source
이 문제에 관하여(로그인 시스템 구현하기. A), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pixelstudio/로그인-시스템-구현하기.-A저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)