개발공부

미들웨어 : "도우미 필요하신 분?" 익스프레스 : "하잇!"(미완성)

아리단길아조씨 2024. 1. 25. 00:54
728x90

익스프레스의 미들웨어는 요청(req)과 응답(res) 사이에서 중간 역할을 하는 함수임.


미들웨어(middleware) : 요청과 응답 사이에서 요청을 처리하고, 원하는 형태로 응답을 수정하는 함수
파싱(parsing) : 요청 안에 포함된 데이터 값을 애플리케이션에서 읽을 수 있는 형태로 변환하는 것(파파고)

미들웨어 ㅋㅋㅋㅋㅋㅋ


미들웨어의 역할
요청과 응답을 주고받을 때 많은 처리를 하는데 그때 미들웨어를 사용함.

1. 요청 전처리 : 요청이 서버에 도착하기 전에 실행하는 작업 담당.
2. 라우팅 처리 : 라우트 코드를 좀 더 읽기 쉽고 관리하기 쉽도록 모듈화한다.
3. 응답 처리 : 클라이언트에 응답을 할 때 자료를 적절한 형태로 변환, 오류를 처리하는 작업 담당.
** 라우트와 관련된 미들웨어를 가장 많이 사용한다고 한다 **

애플리케이션 레벨 미들웨어(Application Level Middleware)
애플리케이션 단계에서 사용하는 미들웨어

애플리케이션 자체에 get이나 post 함수를 사용해서 미들웨어를 처리하면 애플리케이션 레벨 미들웨어라고 한다.


라우터 미들웨어(Router Middleware)
라우터 객체
를 사용한 것 = 라우터 미들웨어

익스프레스
에서는 라우터(Router) 객체를 통해 라이터 코드를 정리할 수 있다.
(코드 가독성이 올라가고, 관리가 용이해진다.)
라우터 미들웨어는 요청이 오면 응답할 때 까지의 중간 처리를 맡은 함수.

라우터 미들웨어를 사용하기 위해서는 인스턴스 객체를 만들고, router 객체를 사용하겠다고 알려준다.
=> const router = express.Router(); // router 객체는 Router 객체의 인스턴스이므로 Router 객체의 속성이나 함수를 그대로 사용가능하다.
=> app.use(router)




미들웨어를 사용해 오류 처리하기

미들웨어 함수를 사용해서 상태 코드에 따라 오류를 처리할 수 있다!

오류 발생 시 가장 많이 사용하는 오류 상태 코드 5종 세트
1. 400 Bad Request => 클라이언트 요청이 잘못되었거나 유효하지 않음
2. 401 Unauthorized => 권한이 없어 거절되었지만 인증을 다시 시도할 수 있음
3. 403 Forbidden => 권한이 없어 거절되었고 인증을 재시도 하면 계속 거절함
4. 404 Not Found => 해당 데이터를 찾을 수 없음
5. 500 Internal Server Error => 서버에서 요청을 처리하는 동안 오류가 발생함

오류 처리를 위한 미들웨어 함수는 항상 4개의 인자가 필요하다.
기본 형태 : const errorhandler = (err, req, res, next) =>{...}
err 
1. err.message : 어떤 오류인지 간단히 설명해줌
2. err.name : 오류 이름을 나타냄
3. err.stack : 오류가 발생한 위치를 알려줌
4. err.status : 오류 상태 코드를 보여줌
req : 요청 객체
res : 응답 객체
next : 다음 미들웨어를 호출함.

에러 핸들러 미들웨어 만들어보기
1. middleware 폴더를 생성한 후 그 안에 errorhandler.js 파일을 만들어 줌
2. app.js 파일에서 임포트를 할 수 있게 module.exports = errorhandler 를 입력함
3. 본격적인 에러 핸들러 미들웨어를 만든다.
vs코드 복붙

4. app.js 파일에서 미들웨어를 등록한다
주의! 코드 맨 앞에 에러 핸들러 모듈을 임포트 한 후 미들웨어를 동록한다.
=> 오류 처리를 위한 미들웨어는 라우터가 실행된 후 추가를 해야한다고한다.

오류 처리 미들웨어 동작확인


일반적인 미들웨어 등록 순서
1. express를 비롯한 필요한 패키지 임포트
2. express 인스턴스 생성
3. 라우트, 오류 처리 이외의 미들웨어 등록
4. 라우트 코드, 라우터 미들웨어 등록
5. 오류 처리 미들웨어 등록
6. 서버 시작