Dev

node.js 회원가입 로직 구현

Wermut 2025. 2. 27. 02:21

 

 

회원가입 로직?

 

회원가입 페이지

 

회원가입 로직이란 결과적으로 MySQL 외의 DB를 쓰지 않는 이상 

유저가 입력한 값을 INSERT 쿼리문을 통해  서버의 DB에 저장하는 것이다. 

 

따라서 코드 내의 로직은 최종적으로 유저가 입력한 값을 받아와서 INSERT 쿼리문에 삽입해

서버의 DB에 유저의 입력값이 저장되면 회원가입 로직이 완성되는 것이다.

 

보안을 위해 유저가 입력한 값의 길이나 특수문자 등등을 한번 필터링할 필요는 있지만 일단

기본적인 회원가입 로직을 구현해 보는 것을 우선적으로 시도하였다.

 

 

회원가입 로직 구현

 

프로젝트의 디렉터리 구조

 

일단 구현하려는 프로젝트의 디렉터리 구조는 위 사진과 같이 구성되어 있고 전반적으로 MVC 구조로 설계 중에 있다.

여기서 회원가입 로직을 디렉터리의 구조와 함께 설명해 보겠다.

 

//signup.ejs
<html>
<head>
    <title>signup</title>
</head>
<body>
    <h1>signup page</h1>
    
    <form method="post" action="/signup">
        <h2>ID</h2>
        <input type="text" name="id"><br>
        <h2>PW</h2>
        <input type="password" name="pw"><br>
        <h2>E-mail</h2>
        <input type="email" name="email"><br>
        <button type="submit">submit</button>
    </form>

</body>
</html>

 

  1. signup.ejs 파일에서 post 메서드를 통해 가장 먼저 유저의 입력을 받음
  2. model 파일에서 입력받은 값들을 DB에 삽입해 주는 함수 작성
  3. controller 파일에서 req.body를 통해 입력받은 값들을 model에서 작성한 함수를 사용해 회원가입하는 함수를 만듦
  4. route 파일에서 post로 입력을 받을 때 controller 파일에서 정의한 함수를 사용하는 코드를 작성함

위 과정을 통해 기본적인 회원가입 로직을 구성 가능하다.

 

또한 비밀번호 그 자체를 DB에 넣어두는 것은 SQL 인젝션에 몹시 취약하므로 

md5, SHA-256 등의 단방향 암호화 함수를 통해 해싱하여 입력해 두면 SQL 인젝션 공격이 성공하더라도

공격자는 사용자의 PW를 알아낼 수 없다.

 

npm install md5

 

그중 md5를 통해 비밀번호를 해싱하려면 위 명령어를 입력해 서버에 md5를 설치해 주고

 

const md5 = require('md5');

 

md5를 사용하겠다는 코드를 삽입해 주어야 md5를 사용할 수 있다.

 

exports.signupUser = (userData, callback) => {
    const signup_query = 'INSERT INTO users (id, pw, email, class, flag) VALUES (?, ?, ?, 0, NULL);';

    conn.query(signup_query, [userData.id, md5(userData.pw), userData.email], (err, results) => {
        if (err) {
            return callback(err); 
        }
        callback(null, results);
    });
};

 

위 코드처럼 md5()를 통해 pw를 해싱하고 INSERT 문을 사용하면 DB엔 해싱된 값만이 담기게 된다.

 

pw가 해싱되어 입력된 모습

 

DB를 확인하면 md5 함수가 정상적으로 작동하여 pw가 해싱하여 입력된 모습을 확인 가능하다.