Express

김형진·2024년 2월 19일

Node.js

목록 보기
4/17
post-thumbnail

개념

Node.js를 위한 간편하고 유연한 웹 애플리케이션 프레임워크입니다. Express를 사용하면 더욱 쉽고 빠르게 웹 서버와 웹 애플리케이션을 개발할 수 있습니다.

특징

  • 미들웨어 지원
    Express는 미들웨어를 사용하여 요청과 응답을 처리하고 조작할 수 있습니다. 이를 통해 요청을 처리하는 과정을 모듈화하고 재사용할 수 있습니다.

  • 라우팅
    Express는 간단하고 유연한 라우팅을 제공하여 URL에 따라 적절한 핸들러 함수를 실행할 수 있습니다. 이를 통해 웹 애플리케이션의 라우팅 로직을 쉽게 관리할 수 있습니다.

  • 템플릿 엔진
    Express는 다양한 템플릿 엔진과 함께 사용할 수 있습니다. 이를 통해 서버 측에서 동적으로 HTML을 생성하고 렌더링할 수 있습니다.

  • HTTP 유틸리티
    Express는 HTTP 요청과 응답을 처리하기 위한 다양한 유틸리티 함수를 제공합니다. 이를 통해 HTTP 요청과 응답을 쉽게 다룰 수 있습니다.

// express example
const express = require('express');
const app = express();

// 라우트 정의
app.get('/', function(req, res) {
  res.send('Express 애플리케이션에 오신 것을 환영합니다!');
});

// 서버 시작
const port = 3000;
app.listen(port, function() {
  console.log(`서버가 http://localhost:${port} 에서 실행 중입니다.`);
});

미들웨어

Express 미들웨어는 Express.js 프레임워크에서 HTTP 요청과 응답을 처리하는 중간에 위치하는 함수입니다. 미들웨어 함수는 요청 객체(request), 응답 객체(response), 그리고 애플리케이션의 요청-응답 주기를 제어하는 next 함수에 대한 액세스 권한을 갖습니다. Express 애플리케이션은 미들웨어를 사용하여 라우팅, 오류 처리, 로깅 등의 다양한 기능을 추가할 수 있습니다.

미들웨어 종류

  • 내장 미들웨어: Express에 기본적으로 내장된 미들웨어로, 별도의 설치 없이 사용할 수 있습니다. 대표적인 내장 미들웨어로는 express.static, express.json, express.urlencoded 등이 있습니다.

  • 서드 파티 미들웨어: 개발자들이 만든 미들웨어로, Express 애플리케이션에 추가하여 사용할 수 있습니다. 대표적으로는 body-parser, morgan, cors 등이 있습니다.

  • 사용자 정의 미들웨어: 개발자가 직접 만든 미들웨어로, Express 애플리케이션에서 필요에 따라 추가할 수 있습니다. 사용자 정의 미들웨어는 요청과 응답을 조작하거나 특정 작업을 수행할 때 사용됩니다.

Express 미들웨어 사용법

  • 내장 미들웨어 사용: 내장된 미들웨어는 app.use() 메서드를 사용하여 Express 애플리케이션에 추가됩니다.
const express = require('express');
const app = express();

// 정적 파일 제공 미들웨어
app.use(express.static('public'));

// JSON 파싱 미들웨어
app.use(express.json());

// URL 인코딩 미들웨어
app.use(express.urlencoded({ extended: true }));
  • 서드 파티 미들웨어 사용: 서드 파티 미들웨어는 npm 등의 패키지 매니저를 통해 설치한 후 require() 함수를 사용하여 Express 애플리케이션에 추가합니다.
const express = require('express');
const app = express();
const bodyParser = require('body-parser');

// 서드 파티 미들웨어 사용법
app.use(bodyParser.json());
  • 사용자 정의 미들웨어 사용: 개발자가 직접 만든 미들웨어는 함수로 정의한 후 app.use() 메서드를 사용하여 Express 애플리케이션에 추가합니다.
const express = require('express');
const app = express();

// 사용자 정의 미들웨어
function customMiddleware(req, res, next) {
    // 미들웨어 로직 작성
    console.log('사용자 정의 미들웨어 동작');
    next(); // 다음 미들웨어로 제어를 넘깁니다.
}

// 사용자 정의 미들웨어 사용법
app.use(customMiddleware);

주로 사용하는 미들웨어

  • body-parser
    • 클라이언트로부터 전송된 JSON, URL-encoded 및 기타 형식의 요청 본문(body)을 파싱하기 위한 미들웨어입니다.
// body-parser
const express = require('express');
const bodyParser = require('body-parser');

const app = express();
app.use(bodyParser.json()); // JSON 형식의 요청 본문 파싱
app.use(bodyParser.urlencoded({ extended: true })); // URL-encoded 형식의 요청 본문 파싱
  • cors
    • Cross-Origin Resource Sharing(CORS)를 활성화하여 다른 도메인에서의 클라이언트 요청을 허용하는 데 사용됩니다.
// cors
const express = require('express');
const cors = require('cors');

const app = express();
app.use(cors());
  • morgan
    • HTTP 요청에 대한 로깅을 수행하는 미들웨어로, 요청에 대한 정보를 콘솔이나 파일에 기록할 수 있습니다.
// morgan
const express = require('express');
const morgan = require('morgan');

const app = express();
app.use(morgan('dev')); // 개발용 로깅 설정
  • helmet
    • Express 애플리케이션의 보안을 강화하기 위한 미들웨어로, 다양한 HTTP 헤더를 설정하여 보안 취약점을 최소화합니다.
// helmet
const express = require('express');
const helmet = require('helmet');

const app = express();
app.use(helmet());
  • express-validator
    • 클라이언트로부터 전송된 데이터를 유효성 검사하기 위한 미들웨어로, 간단한 방식으로 데이터를 검증할 수 있습니다.
// express-validator
const express = require('express');
const { check, validationResult } = require('express-validator');

const app = express();
app.post('/user', [
    check('username').isEmail(),
    check('password').isLength({ min: 5 })
], (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
        return res.status(400).json({ errors: errors.array() });
    }
    // 유효성 검사 통과 시 처리
});
  • express-jwt
    • JSON Web Token(JWT)을 사용하여 인증된 사용자를 확인하기 위한 미들웨어로, 토큰을 검증하여 요청을 인증합니다.
// express-jwt
const express = require('express');
const jwt = require('express-jwt');
const secret = 'your-secret-key';

const app = express();
app.use(jwt({ secret: secret }).unless({ path: ['/login'] }));

app.get('/protected', (req, res) => {
    // 인증된 요청에만 접근 가능한 경로
});

0개의 댓글