Express 애플리케이션의 실행 구조 보고서
Express의 실행 구조
Express 애플리케이션은 미들웨어(Middleware)의 연속적인 체인으로 구성되며, 클라이언트가 요청을 보냈을 때 요청이 처리되는 방식은 단계별로 명확하게 정의되어 있다. 클라이언트 요청은 app.js 파일에 정의된 미들웨어 스택을 순차적으로 통과하며, 최종적으로 응답을 반환한다.
실행 과정
HTTP 요청 수신 및 미들웨어 스택 시작:
- 클라이언트의 요청이 Express 애플리케이션으로 전달된다.
최상단 미들웨어의 순차적 실행:
app.use()로 등록된 미들웨어가 순차적으로 실행된다. 이 과정에서 요청의 데이터를 전처리하거나 특정 조건을 확인한다.주요 미들웨어:
app.use(logger("dev")); // → 요청이 들어올 때마다 로그를 출력 app.use(express.json()); // → 요청의 body가 JSON이면, req.body에 파싱된 객체로 넣어줌 app.use(express.urlencoded({ extended: false })); // → 폼 데이터(body에 key=value&...)를 req.body에 객체로 넣어줌 app.use(cookieParser()); // → 요청의 쿠키를 쉽게 쓸 수 있도록 req.cookies에 객체로 넣어줌 app.use(express.static(path.join(__dirname, "public"))); // → public 폴더 안의 파일을 정적 파일(이미지, CSS 등)로 제공
라우팅 미들웨어 실행:
클라이언트 요청이 정적 파일 요청이 아닌 경우, 라우팅 미들웨어로 전달된다.
라우팅 설정:
app.use("/", indexRouter); // → "/" 경로로 요청하면 indexRouter로 처리 app.use("/users", usersRouter); // → "/users" 경로로 요청하면 usersRouter로 처리 app.use("/channels", youtubeRouter); // → "/channels" 경로로 요청하면 youtubeRouter로 처리
routes폴더 내 라우터 핸들러 호출:routes폴더의 각 파일(index.js,users.js,channels.js)은 특정 경로에 대한 라우팅 규칙을 정의한다.- 라우터는 요청 경로와 HTTP 메서드에 따라 적절한 핸들러를 호출하여 비즈니스 로직을 처리한다.
- 예:
routes/users.js에서GET /users요청 처리:router.get("/", function (req, res, next) { res.send("respond with a resource"); });
404 에러 처리:
- 요청 경로와 일치하는 정적 파일이나 라우팅 규칙이 없으면 404 에러를 생성하고 다음 미들웨어로 전달한다.
app.use(function (req, res, next) { next(createError(404)); });
- 요청 경로와 일치하는 정적 파일이나 라우팅 규칙이 없으면 404 에러를 생성하고 다음 미들웨어로 전달한다.
최종 에러 핸들러:
모든 에러는 최종 에러 핸들러에서 처리된다. 에러 상태 코드와 메시지를 설정하여 클라이언트에게 응답을 반환한다.
app.use(function (err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get("env") === "development" ? err : {}; // render the error page res.status(err.status || 500); res.render("error"); });
routes 폴더의 역할
routes 폴더는 특정 경로와 관련된 라우팅 로직을 정의하고 관리하는 역할을 한다. 이는 Express 애플리케이션의 라우팅 로직을 모듈화하여 코드의 가독성과 유지보수성을 높이는 데 기여한다.
주요 파일과 역할 (프로젝트 내에서의 예시)
routes/index.js:/경로에 대한 요청을 처리한다.- 예: 메인 페이지의 데이터 렌더링 또는 간단한 응답 반환.
routes/users.js:/users경로에 대한 요청을 처리한다.- 사용자 관리와 관련된 라우팅 규칙(예: 사용자 조회, 등록, 수정, 삭제)을 정의한다.
routes/channels.js:/channels경로에 대한 요청을 처리한다.- 채널 관리와 관련된 라우팅 규칙(예: 채널 목록 조회, 등록, 수정, 삭제)을 정의한다.
실행 흐름 요약
실행 흐름
app.js에서 미들웨어 실행:- 요청 데이터를 처리하거나 전처리하는 미들웨어가 순차적으로 실행된다.
- 정적 파일 요청(
/public)인 경우, 해당 파일을 바로 제공하고 요청-응답 주기를 종료한다.
- 라우터 호출:
- 요청 경로에 따라 적절한 라우터가 호출된다:
/→routes/index.js/users→routes/users.js/channels→routes/channels.js
- 요청 경로에 따라 적절한 라우터가 호출된다:
- 라우터 내 핸들러 실행:
- 라우터는 요청 경로와 HTTP 메서드에 따라 적절한 핸들러를 호출하여 비즈니스 로직을 처리한다.
- 404 처리 및 에러 핸들러 실행:
- 일치하는 경로가 없으면 404 에러를 생성한다.
- 발생한 에러는 최종 에러 핸들러에서 처리된다.
결론
Express 애플리케이션의 실행 구조는 클라이언트 요청을 처리하는 명확한 흐름을 가진다. app.js는 미들웨어 체인과 라우팅 로직의 진입점 역할을 하며, routes 폴더는 각 경로에 대한 라우팅 규칙을 모듈화하여 코드의 유지보수성을 높인다. 이러한 구조는 Express 애플리케이션의 확장성과 관리 효율성을 극대화하는 데 기여한다.
'배우는거끄적이기' 카테고리의 다른 글
| Props와 Redux: 개념부터 코드까지 종합 비교 (0) | 2025.11.18 |
|---|---|
| [독학]Nest.js 대비 정리 (0) | 2025.09.27 |
| [과제] Node.js 기본 생태계(패키지 매니저, NPM 등) 정리 및 업로드 (0) | 2025.09.15 |
| [번외] Next.js와 Node.js (0) | 2025.09.05 |
| [번외]JS로 Node.js를 만든 이유 (0) | 2025.09.05 |