이끌든지 따르든지 비키든지

Project/Node.js

[Node.js] 간단한 로그인 기능 구현하기

SeongHo5 2023. 9. 12. 11:59

로그인 / 회원가입은 웹 · 앱 서비스를 개발할 때 필수적으로 들어가야할 핵심 기능 중에 하나다.

 

Node.js 진영에서는 개발 편의성, 보안, 로그인 상태 관리를 위해 Passport, JWT, Bcrypt, OAuth 등등 많은 미들웨어와 라이브러리를 사용하는데, 오늘은 이러한 기능의 사용 없이 Express.js만으로 로그인 요청을 처리하는 로직을 구현해본다.

 


Controller 코드 작성

export default class AuthController {
  
  login = async (req, res) => {
  	const { username, password } = req.body;

	// 원래는 DB에 보관된 사용자 정보와 비교하는 검증 로직이 들어가야함!
	const isValid = if (username === "user" && password === "1234");

  	if (isValid) {
    	return res.status(200).json(Result.fail({message: '로그인 성공'}));
  	} else {
    	res.status(401).json({ message: '로그인 실패' });
  	}
}

 

우선, 로그인 처리를 위해 필요한 로직을 작성하기 위해 AuthController 클래스를 정의하고, login 메서드를 작성해준다.

로그인은 입력값과 DB에 저장된 사용자의 ID와 비밀번호가 일치하는지 비교해야하지만, DB와 연결 설정을 따로 하지 않았으므로 간단하게 ID가 user이고, 비밀번호가 "1234"인지 비교하는 것으로 대체했다.

 

isValid의 값에 따라 로그인 성공 / 실패 여부를 HTTP 상태 코드, 메세지를 포함해 response로 반환할 수 있도록 했다.

 

(※ export default를 통해 AuthController를 모듈로 내보내줘야 다른 코드에서 이 코드를 사용할 수 있음!)

 

// router.ts
import { Router } from 'express';
import AuthController from './auth_controller';

export const path = '/api';

export const router = Router();

router.get('/login', new AuthController().login);

 

로그인 요청을 라우팅해주기 위해 express의 Router를 가져오고, 엔드포인트를 설정해준다.

 

위 코드와 똑같이 작성했다면, GET 메서드를 사용한 [서버IP주소:포트번호]/api/login 요청을 AuthController로 적절히 라우팅할 수 있다.

 

// app.ts
import express from 'express';

const app = express();

app.use(api.path, api.router);

app.listen(process.env.port, async function app() {

    console.log('--------------------------------------------');
    console.log(`Server is listening on PORT : ${process.env.port}`);
    console.log('--------------------------------------------');

});

 

마지막으로 위 코드를 통해 Express 애플리케이션을 설정하고 서버를 실행하면, "/api/*"로 들어오는 요청을 router.ts에서 설정한 라우터로 넘겨줄 수 있다.


결과 확인하기

HTTP 요청에 사용할 메서드를 GET 메서드로 설정해두었기 때문에, 특별한 도구 없이 로컬 환경에서 브라우저만으로도 API가 작동하는지 테스트해볼 수 있다.

 

서버를 실행하고, 브라우저를 연 뒤, 검색창에 " [서버주소:포트번호]/api/login?id=user&password=1234 "을 입력해보자.

로컬 환경이고 포트번호를 임의로 수정하지 않았다면 "http://localhost:3000/api/login?id=user&password=1234"을 입력하면 된다.

 

"로그인 성공"이라는 메세지를 출력했다면 성공!

 

Postman이라는 툴을 사용하면 더 편리하고 간편하게 API를 테스트해볼 수 있다.

 

Postman API Platform | Sign Up for Free

Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can create better APIs—faster.

www.postman.com