컨트롤러란 소프트웨어 개발에서 사용되는 디자인 패턴 중 하나입니다. 일반적으로 MVC(Model-View-Controller) 아키텍처에서 사용됩니다. 여기서 컨트롤러는 모델과 뷰 간의 상호 작용을 조정하는 중간 계층입니다.
컨트롤러 함수는 클라이언트의 요청에 대한 응답을 처리하는 역할을 합니다. 일반적으로 미들웨어는 요청을 처리하기 전에 실행되는 함수이며, Express 애플리케이션에서 요청에 대한 사전 처리나 로깅 등을 담당합니다. 컨트롤러는 미들웨어와 달리, 요청에 대한 실제 작업을 수행하고 그 결과를 반환합니다. 각각의 역할과 책임은 다음과 같습니다.
미들웨어 (Middleware):
app.use() 메서드를 사용하여 등록되며, 전역적으로 또는 특정 경로에 대해 등록될 수 있습니다.컨트롤러 (Controller):
미들웨어는 주로 요청의 전처리나 후처리 작업에 사용되며, 애플리케이션의 모든 요청에 적용될 수 있습니다. 반면에 컨트롤러는 특정 경로에 대한 요청을 처리하고 그에 따른 응답을 생성하는 데 사용됩니다. 따라서 미들웨어와 컨트롤러는 서로 다른 역할을 수행하며, 애플리케이션의 다른 부분에서 사용됩니다.
핸들러와 컨트롤러는 비슷한 역할을 수행하는 용어로 사용되기도 하지만, 일반적으로 다음과 같은 차이가 있습니다:
역할과 책임
사용되는 컨텍스트:
컨텍스트 종속성:
요약하자면, 컨트롤러는 MVC 아키텍처에서 비즈니스 로직을 처리하는데 사용되고, 핸들러는 주로 웹 프레임워크에서 특정 요청에 대한 처리를 담당하는데 사용됩니다.
라우팅 설정: 먼저 Express 애플리케이션에서 요청 경로에 대한 라우팅을 설정해야 합니다. 이 라우팅 설정에서 특정 URL에 대한 요청이 들어왔을 때 어떤 컨트롤러 함수를 호출할지를 정의합니다.
컨트롤러 함수 정의: 해당 라우팅에 대한 요청이 들어왔을 때 실행될 컨트롤러 함수를 정의합니다. 이 함수는 요청 객체와 응답 객체를 매개변수로 받아서 요청을 처리하고 응답을 생성합니다.
라우터에 컨트롤러 함수 연결: 앞서 설정한 라우팅 경로에 대해 컨트롤러 함수를 연결합니다. 이것은 Express의 라우터 객체를 사용하여 수행됩니다. 예를 들어, router.get('/', controllerFunction)과 같이 사용될 수 있습니다.
Express 애플리케이션에 라우터 등록: 설정한 라우터를 Express 애플리케이션에 등록합니다. 이것은 애플리케이션의 주요 파일에서 수행됩니다. 예를 들어, app.use('/api', router)와 같이 사용될 수 있습니다.
Express 애플리케이션 실행: 마지막으로 Express 애플리케이션을 실행하여 서버를 시작합니다. 이제 설정된 라우팅에 따라 요청이 들어오면 컨트롤러 함수가 실행되어 요청을 처리하고 응답을 반환합니다.