반응형

현대적인 RESTful API에서는 **JWT(JSON Web Token)**를 사용해 사용자 인증을 구현하는 것이 일반적입니다. 이번 글에서는 Express API에 JWT를 사용해 로그인 기능을 구현하고, 보호된 라우트를 설정하는 방법을 배워보겠습니다.

 

1. JWT란 무엇인가?

JWT는 JSON 데이터를 기반으로 한 토큰 형식으로, 클라이언트와 서버 간의 신뢰성을 유지하며 인증 정보를 전달하는 데 사용됩니다.

JWT 구조

JWT는 크게 3가지로 구성됩니다:

  1. Header: 토큰 유형과 알고리즘 정보.
  2. Payload: 사용자 정보(예: id, email)를 포함.
  3. Signature: 비밀키로 서명하여 데이터 무결성 보장.

예시 JWT:

text
 
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsImVtYWlsIjoiam9obkBleGFtcGxlLmNvbSIsImlhdCI6MTY3MTM1MjYyMX0.KzZVgS2L3kJtGzWY9D1f3ShV7A91ZhdC82Iq6D-LPBM

2. JWT 설치 및 설정

1) jsonwebtoken 설치

JWT를 생성하고 검증하기 위해 jsonwebtoken 라이브러리를 설치합니다.

bash
 
npm install jsonwebtoken

2) 비밀키 설정

토큰의 무결성을 검증하기 위한 비밀키를 설정합니다. 환경 변수로 관리하는 것이 안전합니다.

.env 파일:

env
 
JWT_SECRET=your_secret_key
JWT_EXPIRES_IN=1h

server.js에서 dotenv 패키지를 사용하여 환경 변수를 로드:

javascript
 
require('dotenv').config();
const jwtSecret = process.env.JWT_SECRET;

3. 로그인 API에 JWT 발급 추가

1) 로그인 API 생성

사용자가 로그인을 요청하면, ID와 비밀번호를 확인하고 JWT를 생성해 반환합니다.

javascript

jconst jwt = require('jsonwebtoken');

// 로그인 라우트
app.post('/login', async (req, res) => {
    const { email, password } = req.body;

    // 예시: 사용자 인증 (실제 구현 시 데이터베이스 확인 필요)
    const user = { id: 1, email: email }; // 가짜 사용자 데이터
    if (password === '123456') { // 예제용 비밀번호 검증
        const token = jwt.sign(
            { userId: user.id, email: user.email },
            jwtSecret,
            { expiresIn: '1h' }
        );
        return res.json({ token });
    } else {
        return res.status(401).json({ error: '인증 실패' });
    }
});


4. JWT 인증 미들웨어

1) 인증 미들웨어 생성

JWT를 검증하는 미들웨어를 만들어 보호된 라우트에서 사용합니다.

javascript
 
const authenticateToken = (req, res, next) => {
    const token = req.headers['authorization']?.split(' ')[1]; // 'Bearer TOKEN' 형식
    if (!token) return res.status(401).json({ error: '토큰이 필요합니다.' });

    jwt.verify(token, jwtSecret, (err, user) => {
        if (err) return res.status(403).json({ error: '유효하지 않은 토큰입니다.' });
        req.user = user;
        next();
    });
};

5. 보호된 라우트 생성

1) 인증된 사용자만 접근 가능하도록 설정

미들웨어를 사용하여 특정 라우트를 보호합니다.

javascript
 
app.get('/protected', authenticateToken, (req, res) => {
    res.json({ message: '보호된 데이터에 접근했습니다.', user: req.user });
});

6. Postman으로 테스트

  1. 로그인 요청:
    • POST /login으로 이메일과 비밀번호 전송.
    • 응답에서 JWT를 확인.
  2. 보호된 라우트 접근:
    • GET /protected 요청 시, Authorization 헤더에 Bearer TOKEN 형식으로 JWT 추가.

7. 결론

JWT를 사용하여 인증 기능을 구현하면 RESTful API의 보안과 확장성을 강화할 수 있습니다. 더 나아가 다음 기능을 추가해보세요:

  • Refresh Token: 세션 유지를 위한 Refresh Token 발급.
  • Role-based Access Control: 관리자와 일반 사용자를 구분하여 권한 부여.

다음 글에서는 Refresh Token을 활용해 세션을 유지하고 만료된 Access Token을 갱신하는 방법을 다룰 예정입니다. 많은 관심 부탁드립니다!

반응형
반응형

RESTful API는 웹 애플리케이션 개발의 핵심 요소입니다. 오늘은 Node.jsExpress를 사용하여 간단한 API 서버를 만드는 방법을 소개합니다. 초보자도 따라 할 수 있는 단계별 가이드를 준비했으니, 함께 시작해보세요!

 

1. 환경 설정

  1. Node.js 설치 확인: 터미널에서 다음 명령어로 Node.js가 설치되어 있는지 확인하세요.
  2. bash
    코드 복사
    node -v npm -v
  3. 새 프로젝트 생성:
  4. bash
    코드 복사
    mkdir rest-api-demo cd rest-api-demo npm init -y
  5. Express 설치:
  6. bash
    코드 복사
    npm install express

2. 기본 API 서버 작성

  1. server.js 파일 생성: 프로젝트 루트 디렉터리에 server.js 파일을 생성합니다.
  2. 코드 작성:
  3. javascript
    코드 복사
    const express = require('express'); const app = express(); const port = 3000; app.use(express.json()); // 기본 라우트 app.get('/', (req, res) => { res.send('Hello, RESTful API!'); }); // 예제: 사용자 데이터 반환 const users = [ { id: 1, name: 'John Doe' }, { id: 2, name: 'Jane Doe' }, ]; app.get('/users', (req, res) => { res.json(users); }); app.post('/users', (req, res) => { const newUser = req.body; users.push(newUser); res.status(201).json(newUser); }); app.listen(port, () => { console.log(`Server running at http://localhost:${port}`); });

3. 서버 실행 및 테스트

  1. 서버 실행: 터미널에서 다음 명령어를 실행하세요:
  2. bash
    코드 복사
    node server.js
  3. API 테스트:
    • 브라우저 또는 Postman에서 다음 경로를 테스트하세요:
      • GET http://localhost:3000/ (환영 메시지 반환)
      • GET http://localhost:3000/users (사용자 목록 반환)
      • POST http://localhost:3000/users (새 사용자 추가)

4. 추가 기능 구현

  • PUT 요청: 사용자 정보 업데이트.
  • DELETE 요청: 사용자 삭제.
  • 미들웨어 추가: 인증 또는 로깅 기능 구현.

결론

이제 간단한 RESTful API 서버를 구축하는 방법을 배웠습니다. 이 서버는 더 복잡한 애플리케이션으로 확장 가능하며, Express의 유연성을 통해 다양한 기능을 추가할 수 있습니다. 다음 글에서는 MongoDB를 연동하여 데이터베이스를 사용하는 방법을 다뤄보겠습니다.

유용했다면 댓글로 의견을 공유해주세요!

반응형
반응형

CREATE OR REPLACE PROCEDURE TEST_PROCEDURE//프로시저명

IS exVar varchar2(100) := 'test111'; //변수명
BEGIN 

//실행할 query
     select cnt(*) from test1
COMMIT;   

END TEST_PROCEDURE;

반응형

+ Recent posts