Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

웹개발

이제 웹 기반 응용개발 지식은 거의 필수적으로 요구되는 시대입니다. 구체적인 웹 사이트 개발은 아니더라도 거시적인 웹 기반 서비스에 대한 지식 배양을 위해 할 것이 참 많네요 ^^

Fancy Url? Url Rewriting? Url Routing!

작성자 : 강준석
최초 작성일 : 2009-10-07 (수요일)
최종 수정일 : 2009-10-07 (수요일)
조회 수 : 5361

이 글은 바투 핵심 웹 개발자인, '강준석'님이 팬시(Fancy) URL 에 대해 정리해 주신 글입니다 

----------------------------------------------------------------------------------

 

Fancy Url?  Url Rewriting?  Url Routing!

웹 응용프로그램 구조(일반적으로 디렉터리)에 의존되어 있는 URL을 사용자에게 의미 있고 기억하기

쉽게 제공하거나 또는 개인화 주소를 제공(대표 적인 예가 블로그 이다)하고자 할 경우 URL을 재 작성 하는

여러 가지 방법들을 살펴 보고 각각의 장단점에 대하여 알아 보도록 하자.

 

1. Fancy Url

[IT용어]

Fancy URL[ Fancy URL ]

복잡하고 기억하기 어려운 인터넷 위치(URL)를 보다 짧고, 기억하기 쉬운 URL로 바꾸어 표현하는 것. Mod_rewrite()와 같은 서버의 프로그램이나 상업적으로 제공되는 서비스에 의하여 원래의 URL로 변환되어 연결(redirect)된다.


ASP PHP등으로 작성 된 응용 프로그램은 아래처럼 개인화 주소를 구현 하거나 URL을 재 작성해

주는 모듈을 사용 하기도 하였다.

 

구현 방법:

IIS에서 404에러일 경우 특정 페이지로 리디렉션하여 서버에서 처리를 하게 한다.

주소창의 주소유지를 위해 frameset 이나 iframe 등으로 처리하여 웹 페이지에 보여준다

아래 소스는 현재 요청 URL 을 분석하여 pathList 라는 배열리스트에 FancyUrl 구조를 담는다

ArrayList pathList = new ArrayList();

string path = Request.RawUrl;

string[] arrayPath = path.Split('/');

for (int i = arrayPath.Length - 1; i >= 0; i--)

{   //디버그 모드일 경우 무시

if (arrayPath[i] != string.Empty && arrayPath[i] != "디버그 URL"){

if (arrayPath[i].IndexOf(".") == -1 && arrayPath[i] != "jsdebug"){

pathList.Add(arrayPath[i]);

}

else{

break;

}

}

}

 

그리고 아래 소스는 블로그 Fancy Url을 처리하는 코드 블럭이다. 블로그 아이디를 얻어와서 DB에 해당 블로그의 아이디가 있는지 검사한다. 만일, 존재한다면 StringBuilder 객체로 html 코드를 생성하여 반환한다

Frameset을 이용했는데 이를 이용함으로써 주소창의 주소가 계속 유지할 수 있다.


만일 블로그 아이디가 없다면 404에러 페이지로 리디렉션 시킨다. Frameset을 이용했는데 이를 이용함으로써 주소창의 주소가 계속 유지될 수 있다.
만일 블로그 아이디가 없다면 404에러 페이지로 리디렉션 시킵니다.

if (pathList.Count == 1){

// FancyUrl

            

string bno = “요청 파라미터를 검사 하여 블로그 번호를 가져 온다;

 

if (lno != string.Empty){

StringBuilder retHtml = new StringBuilder();

retHtml.Append("<html xmlns='http://www.w3.org/1999/xhtml' >\n");

retHtml.Append("\t<head>\n");

retHtml.Append("\t\t<title>" + pathList[0].ToString() + " 블로그</title>\n");

retHtml.Append("\t\t<frameset rows='0,*' border=0>\n");

retHtml.Append("\t\t\t<frame src='#' name=main>\n");

retHtml.Append("\t\t\t<frame src='Mapping될 페이지 주소? bno =" + bno + "'>\n");

retHtml.Append("\t\t</frameset>\n");

retHtml.Append("\t</head>\n");

retHtml.Append("\t<noframes>\n");

retHtml.Append("\t\t<body>\n");

retHtml.Append("\t\t\t<div></div>\n");

retHtml.Append("\t\t</body>\n");

retHtml.Append("\t</noframes>\n");

retHtml.Append("</html>\n");

Response.Write(retHtml.ToString());

Response.End();

}

else{

if (path.IndexOf(".asmx") == -1){

             Response.Redirect("~/Error/404.html");

}

}

}

 

 

2.Url Rewriting

ASP NET HTTP Module이나 HTTP Handler를 작성 하여 URL 재 작성을 가능 하게 해 준다.

기본 원리는 Form 인증을 사용 할 경우 AuthorizeRequest 이벤트 핸들러에 URL 재 작성을 연결 하는 것이며

URL 재 작성은 단지 System.Web.HttpContext 클래스의 RewritePath() 메소드를 사용 하는 것이다.

 

자세한 내용은 URL Rewriting in ASP.NET http://msdn.microsoft.com/en-us/library/ms972974.aspx 을 참고

하기 바란다.

 

구현>>

Url 재 작성 모듈은 URL Rewriting in ASP.NET에 제공 되는 테스트 코드를 다운로드 받아 사용 하였다.
웹 사이트를 생성 하고
URLRewriter를 프로젝트 참조 한다. Web.config 파일에 아래처럼 HttpModule로써 등록 한다

 <httpModules>

             <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />

</httpModules>


Url 재작성 Mapping Rule로 사용할 사용자 정의 Section Web.config 파일에 추가 하고 아래처럼 Mapping Rule

도 추가 한다

<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/>

 

<RewriterConfig>

               <Rules>

                             <RewriterRule>

                                          <LookFor>~/No1Item</LookFor>

                                          <SendTo>~/URLMappingTest.aspx?param=1</SendTo>

                             </RewriterRule>

                             <RewriterRule>

                                          <LookFor>~/No2Item</LookFor>

                                          <SendTo>~/URLMappingTest.aspx?param=2</SendTo>

                             </RewriterRule>

               </Rules>

  </RewriterConfig>

 

테스트로 사용 할 URLMappingTest.aspx 페이지는 단지 아래처럼 전달 받은 파라미터 값을 표시 한다

protected string param = string.Empty;

protected void Page_Load(object sender, EventArgs e){

      param = (Request["param"] != null) ? Request["param"] : string.Empty;

      Response.Write(param);

}


아래처럼 웹사이트를 실행 하고

http://도메인/UrlRewriteWeb/No1Item http://도메인/UrlRewriteWeb/No2Item

를 브라우저 주소 창에 입력 한다

Fancy Url과 동일 하게 주소가 유지 되며 특정 페이지 처리 또한 가능하다는 것을 알 수가 있다.

예제 코드: UrlRewrite.zip

 



3.Url Routing

Microsoft .NET Framework 3.5 서비스 팩 1에서는 ASP.NET 런타임에 라우팅 엔진이 새로 추가되었다

이 라우팅 엔진은 들어오는 HTTP 요청의 URL을 요청에 응답하는 실제 Web Form과 분리하여 웹 응용 프로그램에 사용할 알아보기 쉬운 URL을 작성할 수 있도록 해준다. 이전 버전의 ASP.NET에서도 알아보기 쉬운 URL을 사용할 수는 있지만 라우팅 엔진은 보다 쉽고 깔끔하며 테스트하기 용이한 사용 방식을 제공한다. (MSDN)

라우팅이란?

라우팅은 URL 끝점을 여러 매개 변수로 분할한 다음 해당 매개 변수를 사용하여 특정 구성 요소로 HTTP 요청이 처리되도록 지시하는 프로세스라고 할 수 있다. 이 경우 URL은 더 이상 실제 경로를 나타내지 않습니다.

 

http://aspnet.4guysfromrolla.com/articles/011007-1.aspx

 

구현>>>

ASP.NET 웹 사이트 또는 웹 응용 프로그래밍의 라우팅을 구성하려면 먼저 System.Web.Routing 어셈블리에 대한 참조를 추가해야 한다. .NET Framework 3.5 SP1을 설치하면 전역 어셈블리 캐시에 이 어셈블리가 설치되고

표준 "참조 추가" 대화 상자에서 이 어셈블리를 찾을 수 있다.

 

ASP.NET 파이프라인에 라우팅 모듈도 구성해야 한다. 라우팅 모듈은 표준 HTTP 모듈이다. IIS 6.0 이전 버전과

Visual Studio 웹 개발 서버의 경우 다음과 같이 web.config <httpModules> 섹션을 사용하여 라우팅 모듈을 설치한다.

 

<httpModules>                                  

      <!-- URL Routing Module -->

             <add name="RoutingModule"

           type="System.Web.Routing.UrlRoutingModule,

                 System.Web.Routing,

                 Version=3.5.0.0, Culture=neutral,

                 PublicKeyToken=31bf3856ad364e35"/>     

      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

                           </httpModules>

 

그 외의 경로 구성 및 작성법 라우팅 처리기, 라우팅과 보안, URL 생성 등에 관한 내용은 다음 기사를 참고

하기 바란다.

-> http://msdn.microsoft.com/ko-kr/magazine/2009.01.extremeaspnet.aspx

 

아래처럼 첨부 된 RoutingDemo_4guys 웹 프로젝트를 실행 하고 URL을 입력 한다.

첨부된 웹 프로젝트는 Using ASP.NET Routing Without ASP.NET MVC

(http://aspnet.4guysfromrolla.com/demos/printPage.aspx?path=/articles/051309-1.aspx)

에서 코드를 가져 왔다.

 

http://도메인/RoutingDemo/Categories/Beverages

 

 

 

아래 솔루션 탐색기를 살펴 보면 해당 디렉터리나 파일이 없음에도 의미있는 형태의 주소로 페이지가 표시 됨을

알 수 있다

 

 

 

예제 코드: RoutingDemo_4guys.zip

URL 라우팅 엔진은 URL 패턴 검색 및 URL 생성과 관련한 모든 번거로운 작업을 대신 해준다. 개발자는 경로를 구성하고 경로 처리기를 구현하기만 하면 된다. 라우팅 기능을 사용하면 파일 확장명이나 파일 시스템의 실제 레이아웃에 대해 고민할 필요가 없고 URL 재작성기를 사용하는(2. Url Rewriting 에서 살펴 보았다.) 번거로움이 해소된다. 따라서 최종 사용자와 검색 엔진을 위한 최적의 URL 설계를 개발하는 데 집중할 수 있다.

 

Reference:::

ASP.NET Web Forms를 사용한 라우팅

http://msdn.microsoft.com/ko-kr/magazine/2009.01.extremeaspnet.aspx

 

Intercept, Monitor, and Modify Web Requests with HTTP Filters in ISAPI and ASP.NET

http://msdn.microsoft.com/ko-kr/magazine/cc301704(en-us).aspx

Protect Your Site With URL Rewriting

http://msdn.microsoft.com/ko-kr/magazine/dd458793(en-us).aspx

 

URL Rewriting in ASP.NET

http://msdn.microsoft.com/en-us/library/ms972974.aspx

 

Using ASP.NET Routing without ASP.NET MVC
http://aspnet.4guysfromrolla.com/demos/printPage.aspx?path=/articles/051309-1.aspx

 

 

* 이 글에 사용된 예제 아래 첨부파일을 참고해 주세요

이름
비밀번호
홈페이지
EI <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요