강의를 듣는데 node.js 서버를 만들때 app.use(~~) 이런 형태의 코드를 미들웨어라고 부르는 것 같았다.
느낌은 알겠는데 쓰임을 정확하게 이해하지 못한 것 같아 검색을 해보았다.
일단 node express의 개념을 집고 넘어가야 되겠다.
express는 node.js 위에서 동작하는 웹프레임워크라고 한다.
참고로 프레임워크랑 라이브러리 개념이 헷갈려서 비교하는 내용을 알아보았다.
1) 프레임워크란? 애플리케이션 개발 시 필수적인 코드, 알고리즘, DB 커넥션 등의 기능들을 위해 뼈대(구조)를 제공한다. 예를 들어 Java의 Spring이나 Python개발에서 쓰이는 Django, node.js 의 express 등이다.
2) 라이브러리란? 라이브러리는 개발에 필요한 것들을 미리 구현해놓은 도구라고 할 수 있다. 재사용이 가능한 기능을 미리 구현해놓고 필요한 곳에서 호출하여 사용 가능하도록 만들어진 집합이다. 자바스크립트 관련된 라이브러리를 예로들면 react, jquery, axios 등이 해당된다.
이렇게 예시로 드니 조금더 이해가 됬다. 큰 차이점이라고 하면 '제어흐름'이 어디에 있는가? 인데 프레임워크의 경우 코드가 프레임워크에서 짜놓은 틀 안에서 수동적으로 동작하기 때문에 프레임워크에 제어권이 있고 라이브러리의 경우 개발자가 라이브러리를 가져다 필요에 맞게 수정하며 사용하므로 제어권이 개발자에게 있다.
node.js 개발시 개발을 쉽게 할 수 있게 도와준다. (미들웨어 구조로 인함) 하여 개발자가 필요한 것만 선택해 express와 결합하여 사용 가능하다.
클라이언트로부터 요청이 오면 그에 대한 응답을 보내기 위해 중간에 목적에 맞는 처리를 위해 거쳐가는 함수들
요청 - 응답 사이클 도중 그 다음의 미들웨어 함수에 대한 엑세스 권한을 갖는 함수이다.
미들웨어 함수는 주로 아래와 같은 작업을 수행한다.
1) 요청 전처리: 요청 객체의 데이터를 검사하고 필요한 작업을 수행하여 요청을 전처리한다.
2) 응답 전송: 응답 객체를 사용하여 클라이언트에게 데이터를 전송하고, HTTP 응답 코드와 헤더를 설정한다.
3) 다음 미들웨어로 제어 전달: next 함수를 호출하여 제어를 다음 미들웨어로 전달한다 (next 함수 호출 필수!)
아래는 chatGPT가 알려준 미들웨어 예시 코드
const express = require('express');
const app = express();
// 미들웨어 함수
function customMiddleware(req, res, next) {
console.log('This is a custom middleware.');
next(); // 다음 미들웨어로 제어 전달
}
// 미들웨어 함수를 사용하는 라우트 핸들러
app.use(customMiddleware);
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
위 코드를 보면 customMiddleware 함수는 미들웨어로 사용되고 있고, app.use() 메서드를 통해 모든 요청에 대해 이 미들웨어 함수가 실행되게 설정되었다. 요청이 오면 이 함수를 실행한 후 next() 호출을 통해 다음 미들웨어나 라우트핸들러로 전달한다.