URL 재작성 모듈에서 재작성 맵 활용하기

등록일시: 2008-07-28 09:35,  수정일시: 2013-11-18 10:20
조회수: 7,386
이 문서는 IIS 기술을 널리 알리고자 하는 개인적인 취지로 제공되는 번역문서입니다. 이 문서에 대한 모든 저작권은 마이크로소프트에 있으며 요청이 있을 경우 언제라도 게시가 중단될 수 있습니다. 번역 내용에 오역이 존재할 수 있고 주석은 번역자 개인의 의견일 뿐이며 마이크로소프트는 이에 관한 어떠한 보장도 하지 않습니다. 번역이 완료된 이후에도 대상 제품 및 기술이 개선되거나 변경됨에 따라 원문의 내용도 변경되거나 보완되었을 수 있으므로 주의하시기 바랍니다.

본문에서는 URL 재작성 모듈이 제공하는 재작성 맵의 개념을 소개하고, 재작성 맵을 사용한 재작성 규칙을 생성하는 방법을 살펴봅니다.

배경

재작성 맵은 재작성 규칙이 URL을 재작성할 때, 대체 URL을 생성하기 위해서 참조할 수 있는 무작위적인 이름-값 쌍의 컬렉션입니다. 재작성 맵은 정적 문자열을 사용하는 대량의 재작성 규칙들이 필요한 경우에 특히 유용합니다. (즉, 패턴 매칭에 사용할 수 있는 일관된 규칙이 존재하지 않을 때) 이런 경우, 소모적으로 단순 재작성 규칙을 여러 개 작성하는 대신, 모든 입력 URL과 대체 URL의 맵핑을 재작성 맵에 키와 값으로 입력할 수 있습니다. 그런 다음에 입력 URL을 기반으로 대체 URL을 찾기 위해 재작성 맵을 참조하는 재작성 규칙을 생성할 수 있습니다.

전제조건

본문은 다음과 같은 조건들을 전제로 합니다:

  1. ASP.NET과 추적 역할 서비스가 설치된 IIS 7.0
  2. URL 재작성 모듈 CTP 버전 설치 *

* URL 재작성 모듈을 다운로드 받을 수 있는 경로는 이전 번역 문서에 소개되었습니다.

테스트 웹 페이지 설정하기

먼저 URL 재작성 모듈이 동작하는 방법을 자세하게 살펴보기 위한 용도로 사용될 간단한 테스트 ASP.NET 페이지를 작성할 것입니다. 이 페이지에서는 웹 서버 변수를 읽고 그 값을 브라우저에 출력합니다.

다음 ASP.NET 코드를 복사해서 %SystemDrive%\inetpub\wwwroot\ 폴더에 article.aspx라는 이름으로 파일을 만들어서 붙여 넣습니다:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>URL Rewrite Module Test</title>
</head>
<body>
    <h1>URL Rewrite Module Test Page</h1>
    <table>
        <tr>
            <th>Server Variable</th>
            <th>Value</th>
        </tr>
        <tr>
            <td>Original URL: </td>
            <td><%= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td>
        </tr>
        <tr>
            <td>Final URL: </td>
            <td><%= Request.ServerVariables["SCRIPT_NAME"] 
                + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
        </tr>
    </table>
</body>
</html>

파일을 생성했으면 웹 브라우저로 http://localhost/article.aspx 파일에 접근해보고 그 결과가 정상적으로 출력되는지 페이지를 점검해봅니다.

재작성 맵 생성하기

본문에서는 두 가지 재작성 맵을 생성해 볼 것입니다. 그 중 하나는 재작성 규칙에서 URL 재작성 작업에 사용될 것이고, 다른 하나는 재작성 규칙에서 URL 재전송 작업에 사용될 것입니다. *

다음의 내용을 복사해서 웹 사이트의 Web.config 파일에 붙여 넣어서 재작성 맵을 생성합니다. (가령, 만약 default web site를 사용하고 있다면 %SystemDrive%\inetpub\wwwroot 폴더의 Web.config에 다음 내용을 붙여 넣습니다):

<rewrite>
  <rewriteMaps>
    <rewriteMap name="SimpleRewrites" defaultValue="">
      <add key="/article1" value="/article.aspx?id=1&amp;title=some-title" />
      <add key="/some-title" value="/article.aspx?id=1&amp;title=some-title" />
      <add key="/post/some-title.html" value="/article.aspx?id=1&amp;title=some-title" />
    </rewriteMap>
  </rewriteMaps>
</rewrite>

이 재작성 맵의 이름은 "SimpleRewrites"이며, (재작성 맵에 키로 정의되어 있는) 입력된 URL을 그에 대응하는 (재작성 맵에 값으로 정의되어 있는) 내부 대체 URL로 재작성하는 작업에 사용됩니다. 키와 그 값을 연관지어주는 명시적이고 일반적인 패턴이 존재하지 않는다는 점에 주목하십시오. 이는 정규 표현식이나 와일드 카드 같은 URL 변형 로직을 적용하는 것이 불가능하다는 뜻입니다. 만약, 재작성 맵을 이용하지 않으려면 세 개의 재작성 규칙을 제각각 생성해야만 합니다. 그러나, 재작성 맵을 도입함으로서 단 하나의 재작성 규칙만 생성해서 문제를 해결할 수 있게 된 것입니다. 다음 섹션에서는 이 재작성 맵을 사용하는 재작성 규칙을 생성하는 방법을 살펴보도록 하겠습니다.

* 민망하지만 이 설명과는 달리 원문에서는 단 하나의 재작성 맵만을 다루고 있습니다. 그냥 사소한 원문 작성자의 실수로 봐주고 넘어가주시기 바랍니다. (2013년 11월 현재, 원문의 내용이 상당 부분 보강된 상태입니다. 그리고, 이 주석을 포함한 번역문 자체는 약 5년 전인 2008년 7월에 번역되어 공개된 문서입니다.)

재작성 규칙에서 재작성 맵 참조하기

다음 XML 코드를 복사해서 웹 사이트의 Web.config 파일의 <rewrite> 섹션에 붙여 넣어서, 재작성 맵을 사용하는 재작성 규칙을 생성합니다.

<rules>
  <rule name="Rewrite Rule">
    <match url=".*" negate="false" />
    <action type="Rewrite" url="{SimpleRewrites:{R:0}}" />
  </rule>
</rules>

그러면, 이 재작성 규칙의 내용을 차근차근 살펴보도록 하겠습니다:

  • <match url="." /> - URL 재작성 모듈에게 모든 입력 URL을 허용하도록 지시합니다. (정규 표현식에서 모든 문자를 의미하는 "." 문자가 사용되었습니다.)
  • <action type="Rewrite" url="{SimpleRewrites:{R:0}}" /> - URL 재작성 모듈에게 현재 입력된 URL을 재작성 맵에서 추출한 값으로 대체해서 재작성하도록 지시합니다. 재작성 맵 참조에서 역참조 {R:0}가 사용되었다는 점에 유의하십시오. 이 역참조는 URL 재작성 모듈에 의해 항상 암시적으로 생성되며, 매칭된 전체 URL 문자열을 담고 있습니다. *

* 인덱스가 0인 이 역참조는 괄호를 사용해서 명시적으로 캡춰한 역참조가 아닙니다. 설명처럼 패턴과 일치하는 입력 URL의 전체 문자열을 담고 있으며, 패턴에 명시적으로 괄호를 사용하지 않더라도 항상 생성됩니다.

재작성 규칙 테스트

재작성 맵을 사용하는 재작성 규칙을 테스트 해보려면, 웹 브라우저를 실행하고 다음과 같은 URL들을 입력해봅니다:

  • http://localhost/article1
  • http://localhost/some-title
  • http://localhost/post/some-title.html

이 URL들 중에서 한 URL을 입력해보면 재작성 맵에 정의된 맵핑과 일치하는 URL로 재작성 될 것입니다. 그리고, 그 결과 화면은 다음과 비슷할 것입니다:

요약

본문에서는 재작성 규칙이나 재전송 규칙에서 사용 가능한 간단한 URL 맵핑들을 정의한 재작성 맵을 사용하는 방법을 살펴봤습니다. 재작성 맵은 재작성 및 재전송 될 URL들이 정적이면서 패턴 매칭 기술로 재작성 로직을 표현하는 것이 불가능한 경우, 생성해야 할 재작성 규칙의 갯수를 줄여줍니다.