Authentication2
Middleware
Middleware는 요청과 응답 사이에서 동작하는 코드 또는 소프트웨어의 한 부분으로, 요청이 최종 목적지(예: 컨트롤러, 서비스 등)에 도달하기 전에 중간에서 여러 작업을 수행한다. 이를 통해 요청을 필터링하거나, 요청에 대한 추가 처리를 수행하고, 라우팅 결정을 내리거나, 인증 및 로깅과 같은 일반적인 기능을 중앙에서 관리할 수 있다. 예를 들어, 사용자 인증, 요청 로깅, CORS 설정, 요청 데이터의 사전 처리 등이 이에 해당한다.
- app내부가 아니라 같은 라인에 생성
Matcher
Next.js의 미들웨어에서 사용되는 구성 옵션으로, 특정 요청 경로에 대해 미들웨어가 실행되어야 할지를 결정하는 패턴 또는 경로 배열을 지정한다. 이 설정을 통해 미들웨어가 적용될 특정 URL 패턴을 세밀하게 제어할 수 있다.
import { NextRequest } from "next/server";
export async function middleware(request: NextRequest) {
console.log("hello");
}
export const config = {
matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"],
};
?!
: 정규 표현식에서 사용되는 Negative Lookahead라는 특수 구문의 일부
?! 다음에 오는 패턴이 해당 위치에서 일치하지 않아야 Lookahead가 참(true)을 반환한다. => URL 경로가 “api”, “_next/static”, “_next/image”, “favicon.ico”를 포함하지 않을 때 매치된다. 즉, 이 경로들을 제외한 모든 요청에 대해서 매치되어 미들웨어에서 처리됨
Edge Runtime
middleware는 node.js runtime 내에서 실행되지 않는다. node.js의 경량화 버전인 Edge runtime에서 실행됨
Next.js에서 제공하는 런타임 환경으로, 서버 사이드 기능(특히 미들웨어)을 실행하기 위해 사용된다. Edge Runtime은 V8 엔진을 기반으로 하며, 클라우드 상의 Edge 네트워크에서 작동하므로 전 세계 어디에서나 낮은 지연 시간과 높은 처리량을 제공할 수 있다.
Edge Runtime의 주요 특징
- 분산 처리:
전 세계 여러 지역에 분산된 서버에서 실행되므로 사용자에게 더 가까운 위치에서 요청을 처리할 수 있다. 이는 네트워크 지연 시간을 크게 줄이고, 웹 애플리케이션의 반응 속도를 향상시킨다. - 고성능:
V8 자바스크립트 엔진을 기반으로 하기 때문에, 매우 빠른 실행 속도를 자랑한다. 또한, 최적화된 자바스크립트 실행을 위해 설계되었으므로 서버리스 환경에서도 높은 성능을 제공한다. - 보안성 강화:
요청 처리를 사용자와 더 가까운 지점에서 수행함으로써 중앙 서버에 대한 부하를 줄이고, 보안 위협에 대응하는 능력을 강화한다. - 자동 확장:
트래픽이 증가하거나 감소하는 상황에 맞춰 자동으로 리소스를 조정한다. 이는 서비스의 가용성을 높이고, 비용 효율성을 개선한다.
Edge Runtime에서 실행할 수 있는 기능
- 미들웨어: 사용자의 요청을 가로채어 사전에 처리할 수 있다. 예를 들어, 인증, 로깅, 요청 수정, 리다이렉션 등의 작업을 수행할 수 있다.
- API 라우트: API 요청을 처리하기 위한 라우트를 구성할 수 있다. 이는 서버리스 함수로 실행되며, 각종 API 요청에 대한 로직을 처리한다.
- 정적 파일 처리: 캐싱 정책이나 파일 압축 등의 작업을 통해 정적 파일 서비스를 최적화할 수 있다.
사용 사례
예를 들어, 글로벌 이커머스 플랫폼에서 사용자가 제품 페이지를 요청할 때, Edge Runtime을 활용하면 사용자와 가장 가까운 서버에서 요청을 처리하여 페이지 로딩 시간을 줄일 수 있다. 또한, 사용자가 로그인할 때 보안성을 강화하기 위해 미들웨어를 통해 요청을 검증할 수 있다.
Authentication Middleware
object 내에서 뭔가를 포함하고 있는지 검색하는 게, Array 내에서 뭔가를 포함하고 있나 검색하는것 보다 약간 더 빠름