node.js + mysql로 로그인 서비스 구현하기 (1)

오버·2022년 8월 31일
0

Node.js Study

목록 보기
22/22

시작하기

오늘은 약 3편에 걸쳐서 포스팅을 진행할 노드와 mysql을 이용한 로그인 API 제작이다.

1편에서는 기본적인 설정 + 밑준비를 하고 마칠 셈이다. 구현 부분은 2편에서 진행해보겠다.

설계

우선 설계를 해보자. 복잡한 로그인 시스템을 구현하지는 않을 것이다. 이번에 들어갈 api 목록은 이렇다.

  1. 회원가입
    • 이름 중복 확인
    • 이메일 인증
    • 인증 번호 체크
  2. 로그인
  3. 로그아웃

이렇게 구성된 api를 총 3편에 걸쳐서 구축해보겠다.

이 곳에서 사용할 모듈들은 대부분 내가 포스팅 했거나 다룬 내용이다. 그러므로 모듈에 대한 추가적인 설명은 생략하고 진행하겠다.

기본 세팅

사실 mysql 연동 부분도 내가 이미 포스팅을 했었다. 하지만 그럼에도 불구하고 refresh한 기분으로 다시 시작해보도록 하자.

일단 vscode를 키자

그리고 node 모듈을 설치해주자.

npm init -y

-y는 내가 설명하지 않았었다. -y가 뭐냐면 yes를 미리 입력해뒀다고 생각하면 된다. 근데 모듈명이 한글로 되어있으면 생성이 안되기 때문에 파일 이름은 되도록 영어로 만들도록 하자.

여기까지 잘 따라왔다면 package.json이 생성되었을 것이다.

그럼 js파일을 생성하기 전에 터미널을 열어서 필수 모듈을 깔아주도록 하자.

npm i express mysql bcrypt jsonwebtoken nodemailer cookie-parser dotenv --save

정말 많은 모듈들이 로그인 api를 구축하기 위해서 필요하다. 이 모듈들을 다 다운 받아주도록 하자.

그럼 이제는 js파일을 생성할 차례다.

그... 전에 파일을 분리 해보겠다. 나는 config 폴더와 config 파일을 만들어서 이 안에 연결하는 코드를 넣어 분리할 것이다.

require("dotenv").config();
const mysql = require('mysql');
const conn = mysql.createConnection({
    host: '호스트,
    port: '3306',
    user: '유저 이름,
    password: '비밀번호',
    database: 'userDB'
})
conn.connect((err) => {
    if (err) {
        console.log(err)
    }
    else {
        console.log('mysql connecting...')
    }
})
module.exports = conn

이렇게 config 파일로 따로 관리할 것이다.

이제야 메인 파일을 생성 할 것이다.

나는 server.js라는 파일을 생성하겠다.

메인 파일에서 해줄 일은 무엇이 있을까?

메인 파일에서는 간단하게 라우팅을 해줄 거다.

만들어야 할 api가 꽤나 많아서 메인 파일에서 처리하지 않고 라우터 파일에서 처리할 것이다.

const express = require('express');
const app = express();
const loginRouter = require('./router/LoginAPI');
const cookieParser = require("cookie-parser");
app.use(express.urlencoded({ extended: false }))
app.use(express.json())
app.use('/static', express.static('public'));
app.use(cookieParser());
app.get('/', (req, res) => {
    res.status(200).json({
        massage: "인덱스 화면과 연결 잘 됨."
    });
});
app.use('/login', loginRouter);
let port = 8888;
app.listen(port, () => {
    console.log('server on! http://localhost:' + port);
});

메인 파일이다. 정말 간략하지 않은가?

작업을 처리할때는 라우터를 이용하는 것이 좋다. 메인에 다 때려박아도 좋지만
그러면 절대 가독성 좋은 코드는 나오지 않을 것이다.

그럼 mysql 연결에 들어가보자.

router 폴더를 생성하고 그 안에다가 LoginAPI.js 파일을 생성해준다.

그 다음에는

const express = require('express');
const router = express.Router();
const nodemailer = require('nodemailer');
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const conn = require("../config/config");

이 코드를 넣어주자. 한글로 적혀있는 부분을 mysql에 맞게 적용해주면 된다.

여기까지 잘 따라왔으면 아마 10에 9는 오류에 직면했을 것이다.
mysql에 연동을 하기 위해서는 한 가지 처리해줘야하는 사항이 더 있다.

https://velog.io/@nari120/MySQL-ERNOTSUPPORTEDAUTHMODE-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0

나는 이 velog를 보고 문제를 해결할 수 있었다. 저 글에 해결책이 적혀있을 것이라고 장담할 수 있다.

저 프로세스를 처리했다면 아마도 문제없이 연결이 잘 될 것이다!

콘솔 창에 mysql connecting...이 뜬다면 당신은 node와 mysql의 연동을 올바르게 한 것이다.

축하한다! 기본 설정을 끝냈다. 이제 남은 것은 구현이다. 그리고 구현은 2편에서 마저 할 것이다.

마무리

다음 2편에서는 회원가입과 로그인을 구현해볼 것이다. 처음 접한다면 매우 어려울 수도 혹은 쉬울지도 모르겠다. 어려운 개념을 설명하지도 않을 것이고 이해하기 쉽게 간단하게 설명하는 것이 내 목표이다. 그럼 다음 포스팅으로 찾아뵙겠다.

profile
개발자

0개의 댓글