ASPX 확장자 바꾸기
 
ASP.NET 을 하다 보면, 죄다 사이트의 URL 확장자가 .ASPX 인 것을 알 수 있습니다. 그래서 이 .ASPX 확장명을 변경할 수 있도록 다음의 포스팅을 통해서 확장명을 바꾸는 방법도 알아본 적이 있습니다.

 
[.NET/ASP.NET] - 너 ASPX 웹폼 확장자를 바꿔봤니? 난 해봤~어!


제목부터 정말 유치 찬란하네요 ^^ 위의 포스팅의 핵심은 IIS 의 ISAPI 와 .NET Framework 의 HttpHandler, 그리고 Build Provider 입니다.
 
그런데, 이렇게 확장명을 바꾸게 되면 문제가 생기게 됩니다.
 
 
바로, 위와 같이 .umcx 확장명의 웹 페이지는 태그의 컬러가 모두 시커멓게 변하고, 자동완성 기능도 사용할 수 없다는 겁니다.
 
개발자는 바로 비명을 지르겠죠? “도대체 시커먼 편집기에서 어떻게 개발을 하라는 겁니까!!
 
 

Visual Studio 가 제공하는 확장자 추가 기능
 
이 기능은 이미 Visual Studio 2005 부터 제공이 되고 있었습니다. ( 2003 버전은 확인해 보지 못해서, 설치되신 분 알려주세요.. )
 
아래와 같이, Visual Studio 의 도구->옵션->텍스트 편집기->파일 확장명 에서 추가할 수 있습니다.
 
 
위와 같이 원하는 확장명을 입력하고, 다시 .umcx 페이지를 열게 되면, 아래와 같이 일반적인 웹페이지를 작성하는 것과 같이 이쁜 컬러와 자동완성 기능을 사용할 수 있습니다.
 
 
하지만, 잘 보시면 1 Line 에 파란 밑줄이 그어져 있는데, 저 오류는 Build Provider 가 등록되지 않았기 때문입니다. 해결방법은 이미 위에 링크한 포스팅 본문에 잘 나와있기 때문에 Build Provider 를 web.config 에 등록해 주시면 된답니다.
 
위와 같이 파일 확장명을 추가해 주게 되면, 다음과 같이 레지스트리에 변화가 생깁니다.
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Default Editors
( Visual Studio 2005 버젼은 8.0 노드에 있습니다 )
 
 
확장자 별로 노드가 생기게 되고, 편집기 타입에 따라 Custom 의 값이 설정됩니다. 이 Custom 값을 정리해 보면,
 
리소스 편집기
{177559E0-D141-11D0-92DF-00A0C9138C45}
바이너리 편집기
{25834150-CD7E-11D0-92DF-00A0C9138C45}
사용자 정의 컨트롤 편집기
{F390D63C-F7D8-4E74-AA04-57C1ECF53D4D}
사용자 정의 컨트롤 편집기(인코딩 사용)
{25B02EE5-DB4E-48BD-A9BB-4FD280EB058B}
소스 코드(텍스트) 편집기(인코딩)
{C7747503-0E24-4FBE-BE4B-94180C3947D7}
스크립트 편집기
{A52A054C-5228-4819-B568-E5B8040801B5}
스크립트 편집기(인코딩 사용)
{29947C11-E110-4596-85B8-42A21EF46F6B}
웹서비스 편집기
{FB9167C9-D3B8-4EDA-8083-9AF6B6F6DA62}
웹서비스 편집기(인코딩 사용)
{80323CE9-9455-4F20-8F50-DC4916F5BF9E}
C#
{8B382828-6202-11D1-8870-0000F87579D2}
C++
{8B382828-6202-11D1-8870-0000F87579D2}
Crystal Reports
{FF14D5B3-1718-4071-9306-3B9B80BBB36A}
HTML 편집기
{C76D83F8-A489-11D0-8195-00A0C91BBEE3}
HTML 편집기(인코딩 사용)
{8281C572-2171-45AA-A642-7D8BC1662F1C}
HTTP 처리기 편집기
{DAB1E6DB-4119-49A3-ACE3-0FE8F3E0669F}
HTTP 처리기 편집기(인코딩 사용)
{5FA86C67-6204-4EED-81DE-E9A98BD4E207}
Web Form 편집기
{57312C73-6202-49E9-B1E1-40EA1A6DC1F6}
Web Form 편집기(인코딩 사용)
{D704C95A-F138-4C97-8B90-AE8287758DD1}
Windows Scripting Host파일편집기
{D411C4AC-FCFD-49BF-8D63-B94E075023F2}
Windows Scripting Host파일편집기(인코딩 사용)
{CBA754F9-4BE6-437B-9FFD-4336DDAB8621}
XML 편집기
{FA3CD31E-987B-443A-9B81-186104E8DAC1}
XML 편집기(인코딩 사용)
{412B8852-4F21-413B-9B47-0C9751D3EBFB}
 
만약, 웹 개발 프로젝트에서 확장명을 변경해서 개발해야 할 경우, 개발자들에게 다음과 같은 .REG 파일을 배포하면 되겠네요.
 
UMCX.REG
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Default Editors\umcx]
"Custom"="{57312C73-6202-49E9-B1E1-40EA1A6DC1F6}"
"Type"=dword:1
 
 
닷넷 웹 프로젝트 = .ASPX ???
 
 
“왜 닷넷 마스터페이지 확장자는 .master 이죠? 못바꾸나요?”
“왜 닷넷 XML 웹서비스 확장자는 .asmx 이죠? 못바꾸나요?”
“왜 닷넷 WCF 의 확장자는 .svc 이죠? 못바꾸나요?”
등등… 신입사원이 묻는다면, 몇 가지 알 수 없는 용어들과 섞어서 “할 수 있단다” 라고 말해 주세요.
 
여기까지 마치도록 하고, 이번 주말은 너무 빨리 지나갔습니다. ㅡ,.ㅡ;; 새로운 한 주를 위해 푹 쉬세요..
Posted by 땡초 POWERUMC

댓글을 달아 주세요

기본적으로 웹폼을 생성하면 확장자는 ASPX 가 됩니다.
이와 달리 JSP 나 ASP 로 개발된 웹페이지는 여러확장자를 쓸 수 있지요.
가령 .html, .do, 등등.. 하지만 닷넷의 웹폼에선 확장자를 바꾸면 페이지가 동작하지 않습니다.
악의적인 목적으로 게시판이나 자료실 등 ASP 등으로 작성된 페이지를 업로드 하여, 다운로드 경로로 접근하여 페이지를 실행시킬 경우, 보안에 상당히 취약한 부분도 있었습니다.
하지만 언제나 .ASPX 확장자는 이제 식상할 때가 되지 않았습니까!
그럼 어디한번 바꾸어 봅시다.
 
우선 원하는 확장자를 IIS 에서 확장자 매핑 시키고 web.config 의 httpHandlers 에 등록해 보겠습니다.
여기에선 .umcx 라는 확장자를 사용하기로 합니다.
 
 
그다음은 web.config 의 httpHandlers 섹션에 다음과 같이 작성합니다.
<httpHandlers>
         <add path="*.umcx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true" />
</httpHandlers>
 
여기에서 위의 Type 에 등록된 클래스를 조금 짚고 넘어 가겠습니다.
PageHandlerFactory 는 IHttpHandlerFactory 를 구현한 클래스 입니다.
이 인터페이스는 IHttpHandler 를 리턴하는 GetHandler 메서드를 구현하기만 하면 됩니다.
public IHttpHandler GetHandler(HttpContext context,
        string requestType, String url, String pathTranslated)
 
이 인터페이스를 구현한 클래스를 web.config 의 httpHandlers 에 등록하게 되면 좀더 유연하게 가령, 요청이 get , post 방식에 따라 서로 다른 HttpHandler 를 반환 할 수 있습니다.
IIS 에서 확장자 매핑하면서 get,post 등 요청 방식을 지정할 수 있게 되어있습니다.
하지만 위 인터페이스를 활용하여 요청방식에 따른 각기 기능을 하나의 클래스에 넣을 수 도 있구요, 페이지 요청 방식에 따라 서로 상이한 페이지를 보여 줄 수 도 있습니다.
다음 기회 언젠가 좀 더 자세히 파 보도록 하겠습니다.
 
다시 원점으로 돌아와서,
하지만 이것만으로 끝이 아니랍니다.
우라가 작성한 페이지를 컴파일하고 컴파일 하는 동안 코드를 생성하는데 사용되는 빌드 공급자를 정의해 주어야 합니다.
 
이것또한 최상위 web.config 에 다음과 같이 정의되어 있지요
<buildProviders>
        <add extension=".aspx" type="System.Web.Compilation.PageBuildProvider" />
        <add extension=".ascx" type="System.Web.Compilation.UserControlBuildProvider" />
        <add extension=".master" type="System.Web.Compilation.MasterPageBuildProvider" />
        <add extension=".asmx" type="System.Web.Compilation.WebServiceBuildProvider" />
        <add extension=".ashx" type="System.Web.Compilation.WebHandlerBuildProvider" />
        <add extension=".soap" type="System.Web.Compilation.WebServiceBuildProvider" />
        <add extension=".resx" type="System.Web.Compilation.ResXBuildProvider" />
        <add extension=".resources" type="System.Web.Compilation.ResourcesBuildProvider" />
        <add extension=".wsdl" type="System.Web.Compilation.WsdlBuildProvider" />
        <add extension=".xsd" type="System.Web.Compilation.XsdBuildProvider" />
        <add extension=".js" type="System.Web.Compilation.ForceCopyBuildProvider" />
        <add extension=".lic" type="System.Web.Compilation.IgnoreFileBuildProvider" />
        <add extension=".licx" type="System.Web.Compilation.IgnoreFileBuildProvider" />
        <add extension=".exclude" type="System.Web.Compilation.IgnoreFileBuildProvider" />
        <add extension=".refresh" type="System.Web.Compilation.IgnoreFileBuildProvider" />
</buildProviders>
자주 보던 확장자들이 많이 있지요?
 
<compilation>
</compilation>
Web.config 의 위 섹션이 응용 프로그램의 컴파일을 담당하는 섹션입니다.
우리가 웹사이트를 작성하고 이후 수정된 사항을 복사만 하더라도 컴파일 되어 자동으로 적용되어 지는 미리 컴파일 기능 또한 위 섹션에서 담당하게 되지요~
 
이제 감이 오셨나요?
그럼 우리가 만든 페이지가 컴파일 되도록 하기 위해선 다음과 같이 섹션을 추가해 줍니다
<compilation debug="false">
         <buildProviders>
                  <add extension=".umcx" type="System.Web.Compilation.PageBuildProvider" />
         </buildProviders>
</compilation>
 
이제 모든 설정이 끝났습니다.
 
// 2009-06-20 아래의 주소는 더이상 접속할 수 없습니다.
자신이 만든 웹페이지의 확장자를 .umcx 로 바꾸어 보십시오.
위 예제 페이지는 제 블로그의 접속 차단 IP 를 위해 작성한 페이지 입니다.
 
실행결과
 
 
이번 한 주도 행운만이 가득한 한 주가 되세요~ ^^//

Posted by 땡초 POWERUMC

댓글을 달아 주세요