1. 라우트 등록 시 정적 경로와 동적 경로 구분

라우트를 등록할 때, 정적 경로는 그대로 저장하고, 동적 경로는 변수를 추출해 정규 표현식으로 변환하여 처리

// 예시: 라우트 등록
router.get("/user/", staticHandler);  // 정적 경로
router.get("/user/:name/", dynamicHandler);  // 동적 경로

2. 동적 경로 처리: 변수명 저장 및 정규식 변환

동적 경로는 :name이나 :id와 같은 변수 부분을 정규 표현식으로 변환.

이때 변수 이름을 추출해 저장한 후, 정규식과 함께 관리

예를 들어, /user/:name/ 경로는 /user/([^/]+)/ 정규식으로 변환 → ([^/]+)는 슬래시(/)를 제외한 문자열을 매칭하는 패턴

// 동적 경로 등록 시 처리 예시
router.get("/user/:name/", dynamicHandler);
// "/user/:name/" -> "/user/([^/]+)/" 정규식으로 변환

3. 요청 처리 시: 정적 경로 우선 매칭

클라이언트 요청이 들어오면, 라우터는 먼저 정적 경로를 우선적으로 매칭

예를 들어, /user/testname/ 요청이 들어오면 서버는 먼저 /user/ 정적 경로를 매칭 시도 → 정적 경로에서 매칭되지 않으면 동적 경로로

// 요청이 들어오면 정적 경로 먼저 매칭 시도
router.matchRoute("/user/testname/");  // 정적 경로 `/user/` 매칭 안됨

4. 동적 경로 매칭: 정규식 패턴 매칭 및 변수 추출

정적 경로 매칭에 실패하면, 동적 경로를 확인

등록된 동적 경로의 정규식을 사용해 요청 URL과 비교하고, 매칭되면 동적 변수 값을 추출

예를 들어, /user/testname/ 요청이 들어오면, 동적 경로 /user/:name/의 정규식 /user/([^/]+)/와 매칭 → testname 값을 name 변수에 할당

// 동적 경로 정규식 매칭 시도
const match = "/user/testname/".match("/user/([^/]+)/");
if (match) {
  const params = { name: match[1] };  // 추출된 변수 값: { name: "testname" }
  dynamicHandler(params);  // 핸들러에 변수 전달
}