[javascript] Express.js에서의 인증 처리 방법

웹 개발을 할 때, 사용자의 인증 처리는 중요한 부분입니다. Express.js는 Node.js를 위한 강력한 웹 프레임워크로서, 간단하게 인증 처리를 구현할 수 있는 다양한 방법을 제공합니다. 이 문서에서는 Express.js에서의 인증 처리 방법에 대해 알아보겠습니다.

기본적인 사용자 인증

Express.js에서 가장 기본적인 사용자 인증 방법은 세션을 사용하는 것입니다. 사용자가 로그인을 하면 서버는 사용자의 세션을 생성하고, 이후에 요청이 오면 세션을 통해 사용자를 식별합니다.

const express = require('express');
const session = require('express-session');

const app = express();

// 세션 설정
app.use(session({
    secret: 'mySecret',
    resave: false,
    saveUninitialized: false
}));

// 로그인 처리
app.post('/login', (req, res) => {
    const { username, password } = req.body;
    
    // 인증 로직
    if (username === 'admin' && password === 'password') {
        req.session.loggedIn = true;
        res.redirect('/dashboard');
    } else {
        res.redirect('/login');
    }
});

// 인증된 사용자만 접근할 수 있는 페이지
app.get('/dashboard', (req, res) => {
    if (req.session.loggedIn) {
        res.send('Welcome to the dashboard!');
    } else {
        res.redirect('/login');
    }
});

위의 예시 코드에서는 Express.js에서 세션을 사용하기 위해 express-session 미들웨어를 사용합니다. 로그인 요청(/login)이 들어오면 인증 로직을 수행하고, 인증되면 req.session.loggedIn 값을 true로 설정하여 세션에 사용자가 로그인했음을 표시합니다. 이후 /dashboard 요청이 들어오면 세션에 로그인 여부를 확인하여 접근을 허용하거나 리다이렉트합니다.

JWT(JSON Web Tokens)를 통한 사용자 인증

더 강력하고 확장성 있는 사용자 인증 방법으로 JWT(JSON Web Tokens)을 사용할 수 있습니다. JWT를 사용하면 서버에 세션을 저장하지 않아도 되므로 스케일링이 쉽고 다른 서비스와의 통합이 용이합니다.

const express = require('express');
const jwt = require('jsonwebtoken');

const app = express();

// JWT 시크릿 키
const secretKey = 'mySecretKey';

// 로그인 처리
app.post('/login', (req, res) => {
    const { username, password } = req.body;
    
    // 인증 로직
    if (username === 'admin' && password === 'password') {
        const token = jwt.sign({ username }, secretKey);
        res.json({ token });
    } else {
        res.status(401).json({ message: 'Authentication failed' });
    }
});

// 인증된 사용자만 접근할 수 있는 페이지
app.get('/dashboard', (req, res) => {
    const token = req.headers.authorization.split(' ')[1];
    
    jwt.verify(token, secretKey, (err, decoded) => {
        if (err) {
            res.status(401).json({ message: 'Invalid token' });
        } else {
            res.send('Welcome to the dashboard!');
        }
    });
});

위의 예시 코드에서는 Express.js에서 JWT를 사용하기 위해 jsonwebtoken 패키지를 사용합니다. 로그인 요청(/login)이 들어오면 인증 로직을 수행하고, 인증에 성공하면 JWT를 생성하여 클라이언트에게 응답합니다. 이후 /dashboard 요청이 들어오면 클라이언트가 전달한 JWT를 헤더에서 추출하여 검증합니다. JWT가 유효하면 접근을 허용하고, 그렇지 않으면 인증 실패 응답을 보냅니다.

결론

Express.js는 사용자 인증 처리를 위한 간편하고 다양한 방법을 제공합니다. 세션을 사용하는 기본적인 방법부터 JWT를 사용하는 보다 강력한 방법까지 웹 애플리케이션의 요구에 맞게 선택하여 사용할 수 있습니다. 각 방법마다 Vorname의 장단점을 고려하여 적절한 인증 처리 방법을 선택하는 것이 중요합니다.

참고 자료