[javascript] Express.js의 동작 원리

Express.js는 Node.js를 기반으로 한 웹 애플리케이션 프레임워크입니다. 이 프레임워크는 HTTP 요청과 응답을 처리하고 라우팅, 미들웨어, 뷰 엔진 등을 제공하여 웹 서버를 빠르고 효율적으로 구축할 수 있게 해줍니다.

핵심 개념

라우팅

라우팅은 클라이언트의 요청에 따라 서버에서 처리할 핸들러 함수를 결정하는 과정입니다. Express.js에서 라우팅은 app.get(), app.post(), app.put()과 같은 메서드를 사용하여 URL 패턴과 핸들러 함수를 매핑합니다. 예를 들면 다음과 같습니다.

app.get('/users/:id', (req, res) => {
  const userId = req.params.id;
  // 사용자 ID를 사용하여 데이터베이스에서 사용자 정보를 조회하고 응답 처리
});

이 경우, GET /users/1 요청은 /users/:id 패턴에 일치하여 라우팅되고, 해당 핸들러 함수가 실행됩니다.

미들웨어

미들웨어는 Express.js에서 중간에 실행되는 함수로, 요청과 응답 사이에서 작업을 수행합니다. 예를 들면 로깅, 인증, 데이터 파싱 등의 작업을 미들웨어로 처리할 수 있습니다. Express.js에서 미들웨어는 app.use() 메서드를 사용하여 추가할 수 있습니다. 예를 들면 다음과 같습니다.

app.use((req, res, next) => {
  console.log('요청이 들어왔습니다.');
  next();
});

이 경우, 모든 요청에 대해 미들웨어 함수가 실행되고, 로그를 출력한 후 next()를 호출하여 다음 미들웨어로 넘어갈 수 있도록 합니다.

뷰 엔진

뷰 엔진은 Express.js에서 템플릿을 사용하여 동적인 HTML을 생성하는 역할을 합니다. 템플릿 엔진은 Express.js와 함께 설치되고, app.set('view engine', 'ejs')와 같은 메서드를 사용하여 설정할 수 있습니다. 예를 들면 다음과 같습니다.

app.set('view engine', 'ejs');

app.get('/users', (req, res) => {
  const users = ['Alice', 'Bob', 'Charlie'];
  res.render('users', { users });
});

이 경우, users.ejs라는 템플릿 파일을 사용하여 users 변수를 전달하여 동적인 HTML을 생성하고 응답으로 전송합니다.

요청 처리 흐름

  1. 클라이언트는 HTTP 요청을 서버로 보냅니다.
  2. Express.js는 요청에 대해 라우팅을 수행하여 해당 핸들러 함수를 실행합니다.
  3. 핸들러 함수에서는 요청에 따른 작업을 수행하고, 필요에 따라 다른 미들웨어를 호출하여 추가 작업을 수행합니다.
  4. 응답을 생성하여 클라이언트에게 반환합니다.

이와 같은 흐름을 통해 Express.js는 웹 애플리케이션을 효율적으로 처리하고 응답합니다.

더 자세한 내용은 Express.js 공식 문서를 참조하시기 바랍니다.