안녕하세요. 코난 김대우 입니다.
지난 2011년 1월 14일에 WebMatrix 정식버전(RTW)이 발표되었으며, 이 문서의 내용은 최신의 WebMatrix 정식버전에 맞춰 수정 되었습니다. 감사합니다.
- 최종 수정일 : 2011년 1월 19일

================================================================================


안녕하세요. SQLER의 김대우 입니다.

 

코난이와 함께하는 Razor & WebMatrix 시리즈 강좌리스트

(1) WebMatrix와 Razor! 이제 시작합니다.

(2) WebMatrix 설치부터 Hello World까지

(3) Razor 강좌 - 기본 구문 및 주석 처리

(4) Razor 강좌 - 코드 블록과 POST 처리

(5) Razor 강좌 - 재사용 가능한 코드 생성

(6) Razor 강좌 - 레이아웃 페이지 구조 처리

(7) Razor 강좌 - 파일처리, 파일 업로드

(8) Razor 강좌 - 데이터베이스 처리

(9) Razor 강좌 - Helper 소개(이미지, 비디오)

(10) Razor 강좌 – 디버깅

(11) Razor 강좌 - 캐시 처리

(12) Razor 강좌 – SMTP 메일전송(Live메일과 Gmail지원. SSL지원)

(13) Razor 강좌 – 웹사이트 전체, 또는 폴더 내 파일 요청 시 항상 실행 되는 모듈

(14) Razor 강좌 - URL 라우팅(Routing) 으로 SEO 최적화 구현 (지금 보시는 내용)


이번에 소개해 드릴 내용은, Razor의 URL 라우팅 관련 내용입니다. 아마 블로그나 최신의 오픈 소스 CMS를 이용해 보신 분들은 이런 SEO와 Fancy URL이나 Permanent URL에 대해서 잘 아실 겁니다. 복잡하고, 프로그래밍 친화적인 URL보다는 사용자와 검색엔진에 친화적인 URL을 이용하는 방법을 의미합니다.


특히, 콘텐트 사이트 트래픽 유입에 가장 큰 기여를 하는 녀석인 검색엔진이 이런 SEO(Search Engine Optimizer)차원에서 URL에 높은 가중치를 두고 있기 때문에 최근 웹사이트 제작에 기본 요소이기도 합니다.

image

Razor는 가장 최신의 웹 개발 방식입니다. 당연히 기본 이런 SEO제공을 위한 Fancy & Permanent URL을 이용하는 기능을 기본 제공합니다. 바로 “URL 라우팅” 기능입니다. – 바로 상세히 알아 보도록 하지요.

먼저 예제를 실행해 보도록 하겠습니다.

 

@{
    var FruitName = UrlData[0].ToString();
}

<!DOCTYPE html>
<html>
    <head>
        <title>URL 라우팅</title>
    </head>
    <body>
      @FruitName
    </body>
</html>

루트 폴더에 fruit.cshtml 파일을 만들고, 아래 링크와 같이 URL을 만들어 실행합니다.
http://localhost:8080/fruit/사과  (링크로 사용하는 서버나 포트가 저와 다를 수 있습니다. 조절해 넣으세요.)
그럼 결과가 보이실 겁니다. "사과"가 잘 찍혀 나오시지요. ^_^

제가 만든 파일은 분명 fruit.cshtml 파일이고, 라우팅을 위한 아무 처리를 안 해도 자동으로 URL 라우팅을 해 줍니다. 이럴때 ASP.NET Web Pages와 Razor 참 땡큐하죠. 다른 기술이라면 라이브러리를 만들어 쓰거나, 라우팅을 웹 서버 플러그인 – rewrite 모듈로 구현해야 하는데, 이걸 그냥 쉽게 종속성이나 귀찮은 거 없이 자체 해결해 줍니다. 그리고, 파라미터 값 처리를 위해 UrlData만 쓰면 땡이죠.

그런데, 만약, 진짜 http://localhost:8080/fruit/사과/default,cshtml 과 같은 파일이 존재한다면 어떻게 될까요? UrlData가 어떻게 도움을 주는 건지?

그렇다면, 이런 자동 라우팅이 어떤 우선 순위에 의해 동작하는지 이해할 필요가 있습니다.

아래 라우팅 우선순위를 참고하세요.


[image]

이런 살짝 아리까리한 폴더와 파일들이 위치하고 있다고 가정해 보세요. 폴더 이름과 파일 이름에 주의하셔야 할겁니다.

http://www.SQLERTEST.com/a/b/c URL요청이 들어올 경우에 다음과 같은 순서로 라우팅이 처리합니다.  해당 단계에 맞는 파일이 없다면 이어서 아래 파일을 찾는 절차를 진행하게 됩니다.

(1) /a/b/c.cshtml 파일이 존재하면 실행되고, 아무 값도 전달되지 않습니다.
(2) /a/b.cshtml 파일이 존재하면 실행되고 "c" 값이 전달됩니다.
(3) /a.cshtml 파일이 존재하면 실행되고 "b/c" 값이 전달됩니다.
cshtml 파일 매칭이 없을 경우 다음 순서로 파일을 찾게 됩니다.
(4) /a/b/c/default.cshtml 파일을 찾게 됩니다.

(5) /a/b/c/index.cshtml 파일을 찾게 됩니다. 

이렇게 간단히 URL 라우팅 기능을 알아보았습니다. Razor의 URL 라우팅 기능, 어떠세요? 깔끔하게 느껴 지시나요? 앞으로도 많은 좋은 내용으로 인사 드리겠습니다.

좋은 하루 되세요~

 

전문 개발자를 위한 참고

Razor는 ASP.NET Web Pages와 ASP.NET MVC의 View 엔진이며 ASP.NET Routing을 아무 전처리 없이 이용가능합니다. 여러번 말씀 드리지만, WebMatrix에서 사용되는 Web Pages와 Razor공부를 위해 ASP.NET이나 MVC를 모두 알 필요는 절대로 없습니다. 차근 차근 알아 가시면서 하나씩 배워 가시는게 최선이 아닐까 하네요.  IIS의 URL Rewrite와 ASP.NET Routing에 대한 내용은 예전에 제가 적은 강좌를 참고하세요.  URL Rewrite 1.1 (URL 재작성) - (4) ASP.NET 라우팅과 URL Rewrite   추가적으로, ASP.NET MVC의 라우팅에 대한 내용은 링크를 참고하세요. ASP.NET Routing

 

 

WebMatrix 자체 웹서버가 아닌 호스팅이나 IIS7 사내 서버(직접 구성한)에 배포할 경우에 URL 라우팅이 동작 안할 수 있음.

WebMatrix 어플리케이션 배포에 대한 내용은 여기를 참조 하시길 바랍니다. http://www.sqler.com/259937

"조씨아저씨"님이 본 이슈에 대해서 알려 주셨습니다. 감사합니다. http://www.sqler.com/259937#comment_264926 

 

iis7 에서 배포시 

저희 개발서버에서는

web.config에

<system.webServer> 
        <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer> 

를 추가해야지만 URL Routing 기능을 제대로 사용할 수가 있더라고요...

http://support.microsoft.com/kb/980368 

이걸 다운 받아도 된다고 나와 있네요...

 

혹시나 저같은 어려움을 갖고 계시는 분들께 참고되시길 하며 올립니다.(저는 3일 동안 해보다 찾았습니다.;;)

참조 경로 올립니다..

http://learn.iis.net/page.aspx/872/webmatrix-beta-release-readme/

 

 

IIS7이나 IIS7.5에 배포 해도 동작하지 않는 이슈의 원인은, IIS7이 기본적으로 URL 라우팅 기능을 포함하고 있지 않기 때문이라고 합니다. 따라서, 반드시 서버에 IIS의 URL 라우팅 기능이 먼저 동작하는지 여부를 확인 하셔야만 하니 도움 되시길 바랍니다.

아울러, 본 이슈는 IIS의 이슈이기 때문에 WebMatrix 정식버전(RTW)에서 같은 증상이 나타납니다.

WebMatrix 정식버전(RTW) 릴리즈 노트(영문) : http://www.asp.net/webmatrix/readme

 

참고자료 :
http://www.asp.net/webmatrix/tutorials/15-customizing-site-wide-behavior
URL Rewrite에 대한 SQLER의 IIS 강좌 링크 : http://www.sqler.com/bIISLec


 


Razor & WebMatrix 시리즈 강좌

(1) WebMatrix와 Razor! 이제 시작합니다.
(2) WebMatrix 설치부터 Hello World까지
(3) Razor 강좌 - 기본 구문 및 주석 처리
(4) Razor 강좌 - 코드 블록과 POST 처리
(5) Razor 강좌 - 재사용 가능한 코드 생성
(6) Razor 강좌 - 레이아웃 페이지 구조 처리
(7) Razor 강좌 - 파일처리, 파일 업로드
(8) Razor 강좌 - 데이터베이스 처리
(9) Razor 강좌 - Helper 소개(이미지, 비디오)
(10) Razor 강좌 – 디버깅
(11) Razor 강좌 - 캐시 처리
(12) Razor 강좌 – SMTP 메일전송(Live메일과 Gmail지원. SSL지원)
(13) Razor 강좌 – 웹사이트 전체, 또는 폴더 내 파일 요청 시 항상 실행 되는 모듈

(14) Razor 강좌 - URL 라우팅(Routing) 으로 SEO 최적화 구현



지난 동영상 참고 자료 :

[동영상 강좌] (1) WebMatrix 첫 실행 & Hello World까지 달려요~

[동영상 강좌] (2) WebMatrix 5분 리뷰~

[동영상 강좌] (3) Razor 강좌 - 기본 구문 및 주석 처리

[동영상 강좌] (4) Razor 강좌 - 코드 블록과 POST 처리

[동영상 강좌] (5) Razor 강좌 - 재사용 가능한 코드 생성
[동영상 강좌] (6) Razor 강좌 - 레이아웃 페이지 구조 처리

[동영상 강좌] (7) Razor 강좌 - 파일처리, 파일 업로드

[동영상 강좌] (8) Razor 강좌 - 데이터베이스 처리
[동영상 강좌] (9) Razor 강좌 - Helper 소개(이미지, 비디오)

[동영상 강좌] (10) Razor 강좌 – 디버깅

[동영상 강좌] (11) Razor 강좌 - 캐시 처리

[동영상 강좌] (12) Razor 강좌 – SMTP 메일전송(Live메일과 Gmail지원. SSL지원)

[동영상 강좌] (13) Razor 강좌 – 웹사이트 전체, 또는 폴더 내 파일 요청 시 항상 실행 되는 모듈

[동영상 강좌] (14) Razor 강좌 - URL 라우팅(Routing) 으로 SEO 최적화 구현





profile

부족하지만, SQLER의 누군가와 함께한 나눔을 통해 제가 더 많이 즐거웠습니다.
SQLER와 함께 즐거워 할수록, 그 나눔을 통해 더 많은 기회와 가치를 발견하게 되었습니다.
나눔의 생각이 앞으로도 계속, SQLER를 움직일 것입니다.

코난, 김대우 / SQLER 운영자 / 골라먹는 SQLER RSS 정보 구독 / 실시간 SQLER 소식 uxkorea 트위터