Korea Evangelist

Developer & Platform Evangelism, Microsoft Korea

October, 2009

  • Korea Evangelist

    웹서버 관리 자동화에 대한 단상 - 명령 프롬프트, 파워쉘 스크립팅과 WMI & MWA

    • 0 Comments

    안녕하세요. IISKOREA 팀블로그의 김대우 입니다. 이번에 같이 고민해 보고 싶은 내용은 지난번의 포스팅에 이어서 두번째, 바로 “웹서버 관리 작업 자동화”에 대한 내용으로 포스팅을 풀어 보려고 합니다.
    지난 포스트를 통해 IIS7의 다양한 설치/구성/관리/배포 기능 및 도구 소개 - 관리 및 배포 툴에 대해서 이야기를 드렸는데요. 이번에는 관리 자동화 툴에 대해 초점을 맞춰 단상을 정리해 보려고 합니다.

    IIS는 이러한 관리작업 자동화를 위해 여러가지 도구들을 제공하는데요. – 당연히 IIS 관리자는 GUI툴이니 자동화 도구라고 할 수 없겠죠?(설마, 현업에서 말하는 인간 자동화???) ^_^;;;

    image 
    이렇게 IIS의 구성 정보를 담고있는 XML 파일을 수정하는 방법이지요. 특히, 자동화를 위해서는 파워쉘과 명령 프롬프트의 AppCmd를 이용하는 것이 하나의 방법이 되실 겁니다.

    IIS의 자동화를 위해서는 크게 세가지를 보시면 될 것 같습니다.
    (1) 파워쉘(Power Shell)
    (2) AppCmd 명령 프롬프트 처리
    (3) WMI(Windows Management Instrumentation)와 MWA(Microsoft.Web.Administration) API

    GUI 관리 툴일 경우 여러 단계를 거쳐야 하는 작업들을 이 자동화 툴들을 이용하면 스크립트화 시켜주기 때문에 유용한데요. 조금만 더 알아 보도록 하면

    (1) 파워쉘 – IIS 7용 파워쉘 스냅인을 이용 가능합니다.
    image
    - 강력하고 심플함 : 매우 복잡한 관리 작업들을 키워드 기반 프로그래밍 명령어들로 자동화 시킬 수 있음
    - 오브젝트 기반 : 여러 오브젝트들을 호출해 스크립트에서 작업 가능
    - 심플하고 강력한 명령줄 기반 인터페이스 : 복잡한 스크립트를 명령줄 기반으로 제작해 안전하게 테스트도 가능
    - 시스템 통합 : .NET Framework나 WMI 확장기능, 레지스트리 등에 대한 호출 및 처리가 가능
    - 안전 최우선 작업 가능 : 인승서 기반의 사인된(Signed) 스크립트를 지원해 안전하게 여러 작업을 제한 가능함

    참고자료 :
    Managing IIS with the IIS 7.0 PowerShell Snap-in
    Windows PowerShell Snap-In

    (2) AppCmd 명령 프롬프트
    image 
    이 AppCmd가 생소한 분들도 계실 것 같은데요. 이런 형태의 명령 프롬프트에서 수행하는 작업으로 웹사이트 제작, 응용프로그램 풀 바인딩 등의 작업을 손쉽게 처리 가능합니다. 이녀석은 어떤 장점이 있을까요?
    - 웹사이트, 웹 어플리케이션, 응용프로그램 풀, 가상 디렉토리를 생성하고 구성할 수 있음
    - 웹사이트 시작, 중지 명령을 수행 가능하며, 응용프로그램풀을 리사이클링 시킬 수 있음
    - 수행중인 작업자 프로세스에 대한 리스트와 현재 실행중인 요청에 대해서 조회 가능
    - IIS와 ASP.NET 구성 정보에 대해서 조회, 출력, 내보내기(Export), 가져오기(Import)를 수행 가능

    참고자료 :
    AppCmd.exe 소개
    ABC's of Appcmd (command line administration in IIS7)

    AppCmd도 이렇게 여러가지 명령줄 기반 자동화 작업을 수행이 가능합니다. 그렇다면 갑자기 드는 생각인데요. 파워쉘과 AppCmd의 차이는 어떻게 설명이 가능할까요?
    - 파워쉘은 오브젝트 기반으로 더욱 유연하고 복잡한 관리 작업들을 수행 가능합니다. 또한 파워쉘은 .NET Framework나 WMI 확장 API를 접근 가능하고 높은 보안성을 요구하는 복잡한 스크립트 작업을 실행 가능합니다.
    - AppCmd는 파워쉘에 비하면 심플하고, IIS 관리를 위한 기능들에 초점을 맞춰 실행이 가능합니다. 바꿔말하면, 파워쉘과 같은 강력하고 복잡합 스크립트 기능은 이용이 불가능합니다.

    이렇게 두가지, 관리자 분들이 선호하시는 자동화 관리 툴에 대해서 알아 보았습니다. 개인적인 소견으로 파워쉘이나 AppCmd는 개별 서버 기반에서 작업하거나, 관리하는 서버의 수가 5~10대 미만이라면 이용 가능하겠으나, 수십 수백대의 서버를 유지 관리해야 하는 호스팅회사와 같은 경우에는 관리 작업이 쉽지 않을 겁니다. 이럴때 이용하는것이 바로 MWA와 WMI를 이용해 직업 각 회사에 맞는 작업을 처리 가능한 관리 프로그램을 제작하는 것이지요. 왜 MWA와 WMI가 필요한지는 감 잡으셨는지요? 그렇다면, MWA와 WMI와 같은 관리 프로그램 제작을 위한 API들에 대해서 알아 보도록 할까요?

    (3)  WMI(Windows Management Instrumentation)와 MWA(Microsoft.Web.Administration) API
    먼저 WMI를 소개해 드리고 이어서 MWA를 이야기 드리려고 합니다.
    WMI로 수행할 수 있는 작업
    - 웹사이트 생성
    - 전체 웹사이트 조회
    - 웹사이트 중지, 시작
    - 웹사이트 삭제
    - 웹사이트 인스턴스 및 어플리케이션 인스턴스 관리
    - 어플리케이션 도메인 관리 및 작업자 프로세스 관리
    즉, IIS와 관련된 다양한 작업들을 이 WMI를 이용해 모두 프로그래밍적으로 자동화 처리가 가능합니다.
    참고자료 : Managing Applications and Application Pools on IIS 7.0 with WMI

    그렇다면 MWA는 어떨까요?
    MWA를 보시기 전에 - IIS는 XML 구성 파일(applicationHost.config 파일과 web.config 파일)에 대해서 개발사가 자신의 커스텀 구성 섹션을 이용 가능하도록 허용하고 있습니다. 개발사는 이 영역에 기술된 구성 정보를 프로그래밍적으로 가져와 처리할 필요가 있을 수 있는데요, 이때 사용 가능한것이 바로 MWA API입니다.
    참고자료 : Overview of MWA and MWM for IIS 7.0
    참고로, 파워쉘을 이용해 WMI나 MWA 오브젝트를 호출해 속성 등을 불러와 파워쉘 스크립트로 처리하는 작업도 가능합니다.

    이렇게 간단히, 웹서버 관리 자동화에 대한 내용을 정리해 보았습니다. 개인적으로는 좀더 욕심이 있어서, 호스팅회사가 처리해야할 자동화 작업 목록이나 기술 명세가 있다면 한번 마음 맞는 분들끼리 관리 툴을 오픈소스로 만들어 보는 것도 하나의 좋은 시도가 아닐까 생각됩니다. ^_^

    감사합니다.

    참고자료 : Provisioning Options in IIS 7.0

  • Korea Evangelist

    IIS의 다양한 구성/관리/배포기능 소개

    • 0 Comments

    안녕하세요. IISKOREA 팀블로그의 김대우 입니다. 이번에 소개해 드릴 내용은 어플리케이션 개발자 / 관리자 분들이라면 모두가 고민하는 웹 어플리케이션의 구성/관리/배포에 대한 내용입니다.

    단순히, 웹사이트 설치나 웹사이트 이전, 백업 하는 정도라고 생각하기 쉽습니다만, 웹사이트 및 응용프로그램들이 가지는 다양한 종속성(Dependency)등에 대한 고려와 시스템 / 웹사이트에 대한 설정까지 다양한 환경이 정확히 생성/관리/배포 되어야 하기 때문에 관리 작업에서 가장 어렵고 시간이 많이 소요되는 힘든 과정이 바로 이 구성/관리/배포가 아닐까 생각합니다.

    또한, 한 두대의 웹서버를 관리하시는 분들부터, 5~10대의 서버를 관리해야 하는 경우, 또는 수백대의 웹서버를 자동화 기능들을 통해 관리해야 하는 호스팅사까지 다양한 환경에 맞는 스크립트나 배포 도구, 또는 필요할 경우 배포나 유지관리를 위한 툴을 직접 제작해야 하는 경우까지, 다양한 환경에 맞는 기능을 선택하는 것도 필요하실 겁니다. 이런 비지니스 구조, 환경에 맞는 툴들이나 방법은 어떻게 선택해야 할까요?

    예를 들어, 한 서버에서 대략 300개 정도의 운영 중인 웹사이트에 하드웨어 적인 장애가 발생해 다른 시스템으로 이전해야 하는 상황이 발생하는 (웹호스팅) Shared Hosting 환경이라면 어떨까요? 더더욱 자동화된 배포나 이전, 백업 등에 대해서 고민하시게 될겁니다.

    이 복잡한 작업들을 어떻게 쉽고 빠르게 해결 가능할까요?
    IIS7은 여려 배포를 위한 훌륭한 기능들을 제공하고 있는데요. 그 배포 기능들을 차례대로 소개해 드리려고 합니다. ^_^

    IIS의 다양한 배포 도구

    (1) 웹 플랫폼 설치 관리자 – WPI
    image
    웹플랫폼 설치 관리자는 설치 과정을 GUI로 쉽게 구성 가능하도록 돕는 도구 입니다. 특히, Dependency가 있는 웹 어플리케이션을 자동으로 설치하거나, 관리툴, 개발도구, 다양한 확장기능들을 설명과 함께 선택이 가능하기 때문에 유용한 도구 입니다.
    - 가장 손쉽고 자동화된 설치 환경 제공
    - 국내&전세계의 다양한 웹 어플리케이션 기본 탑재
    - 웹서버/데이터베이스서버/프레임워크/도구들을 설치 가능
    - 웹 어플리케이션 설치시 종속적인 웹서버 기능이나 데이터베이스 기능들을 자동 설치
    WPI 기술소개 링크 : http://www.iis.net/webpi 
    WPI 다운로드 : http://www.microsoft.com/web/downloads/default.aspx
    웹플랫폼 설치 관리자는 단순한 배포 도구를 넘어선, 훨씬 중요한 역할을 Microsoft 웹 플랫폼 아키텍쳐와 관련해 수행하게 되는데요. 관련해서는 따로 상세하게 소개해 드릴 예정이니 도움 되시길 바랍니다.

    (2) 웹 배포 도구 – Web Deployment Tool
    image
    웹 배포 도구는 웹사이트나 웹서버에 대해서 배포를 가능하게 돕는 IIS7의 확장기능(Extension)입니다. 특히, IIS6에서 IIS7으로의 마이그레이션이나 구성파일 패키징 기능을 지원하기 때문에 다양한 웹사이트 구성을 쉽게 이전이 가능한 특징이 있습니다. 여러대의 서버를 관리하는 경우라면 이 웹 배포 도구가 많은 도움이 되실 겁니다.
    링크 : http://www.iis.net/extensions/WebDeploymentTool
    - 패키징 기능으로 전체 웹사이트 파일, 포함된 데이터베이스, 권한 및 레지스트리정보 등을 패키지 가능
    - IIS6를 IIS7으로 손쉽게 마이그레이션 가능
    - 서버간 동기화(Synchronization) 가능
    - IIS Manager와 연계해 이용 가능
    웹 배포 도구 관련된 내용 역시 곧 포스트를 통해 상세히 전달해 드릴 예정입니다.

    (3) IIS7의 파워쉘(Power Shell) 부가기능
    파워쉘은 윈도우��버에 대해서 관심있는 분들은 잘 알고계시는 기능일텐데요. 윈도우 서버의 다양한 작업들을 파워쉘을 이용하면 모두 스크립트로 자동화가 가능한 것처럼, IIS7도 파워쉘을 이용해 모든 기능들을 스크립트화 시킨 후 웹사이트 생성부터 유지관리까지의 작업을 스크립트로 자동화시켜 실행 가능합니다. 다수의 웹서버를 관리하실 경우에 유용하며, 호스팅 환경 등에서도 활용 가능합니다.
    - IIS7의 구성 정보들을 파워쉘 스크립트로 관리
    - 웹사이트, 응용프로그램 풀, 웹응용프로그램, 가상디렉토리, 작업자 프로세스 등을 관리 가능
    - 파워쉘의 다양한 스크립팅 기능으로 대규모의 복잡한 IIS 관리 기능을 처리 가능
    - 파워쉘 2.0의 원격 기능을 이용해, 원격 서버를 파워쉘로 제어 가능
    마찬가지로, IISKOREA 팀블로그에서 이 파워쉘을 이용한 유지 관리도 준비하고 있으니 기대해 주세요.

    (4) 프로그래밍 API를 이용한 사용자 정의(Custom) 배포/관리툴 제작을 위한 기능
    API를 이용한 방법은 자신이 소속된 회사에 적합한 패턴의 웹서버 생성, 관리 및 배포를 위한 프로그램을 직접 제공되는 기능을 이용해 제작 가능하게 합니다. 즉, 수백대가 넘는 호스팅사와 같은 IIS 웹서버 관리에 필요한 기능들을 이 제공되는 프로그래밍을 위한 API로 제작해 회사에 맞는 관리/배포를 위한 프로그램 직접 생성 가능하게 합니다. – 이미 나와있는 관리 솔루션들도 있지요.
    WMI(Windows Management Instrument)
    http://learn.iis.net/page.aspx/163/managing-applications-and-application-pools-on-iis-7-with-wmi/
    Microsoft.Web.Administration
    http://learn.iis.net/page.aspx/165/how-to-use-microsoftwebadministration/

    자~ 이렇게 IIS는 비지니스 방식과 운용 규모 등에 맞는 다양한 관리/배포 도구를 제공하고 있습니다. 각각의 기능들에 대해서는 차후에 IISKOREA의 팀블로그를 통해 계속 소개해 드리도록 하겠습니다.
    감사합니다.

  • Korea Evangelist

    PHP 삽질그만 #1 - MySQL & MSSQL DB를 GUI와 IIS7로 빠르게 개발

    • 8 Comments

    안녕하세요, IISKOREA 팀블로그의 김대우 입니다. 이번에 소개해 드릴 내용은 살짝 도발적이기도 할 것 같은데요. 당연히 IIS와 관련된 내용이기도 합니다. 혹시, SQL서버의 쿼리 툴을-정확히는 GUI기반 툴을- 사용해본 경험이 있으신지요?
    image 
    SQL2008의 GUI 관리 툴인 SQL Server Management Studio

    SQL2000 시절에는 GUI 툴의 쌍두마차인, 엔터프라이즈 관리지와 쿼리 분석기가 있었지요. GUI로 편리하게 쿼리를 작성 가능하고, 데이터 조회, 프로시져 생성 등의 개발과정에 필수적인 쿼리 작성에 꼭 필요한 여러 기능들을 모두 담고 있는 유용한 녀석입니다. 특히, 조회한 결과를 그리드(표형식)로 볼 수 있고 쿼리 제작과 수정도 용이하기 때문에(vi 쓰시는 분들 말고 ^^;;) 개발 시간을 엄청나게 단축해 주는 녀석이기도 하지요. 하지만, 웹서버에 이 툴들을 설치하기도 애매한 노릇이고, DB서버마다 원격 접속하기도 쉽지 않지요. 특히, 여러 DB를 다루면서 개발과 관리를 동시에 해야 하는 PHP 개발자 분들은 시간이 많이 소요되는 작업이실 겁니다. - DB도 MySQL만 하는게 아니라 MSSQL도 같이 관리 하신다면? 가히 서버 관리 때문에 머리가 터져버릴지도…

    IIS7는 PHP를 위한 최고의 개발 / 서비스 환경입니다.
    IIS7은 윈도우 기반으로 Vista 및 Win7, Windows Server 2008에서도 이용 가능합니다. 즉, 주로 개발을 진행하시는 윈도우 환경에서 쉽게 구축이 가능하며, FastCGI를 통해 PHP를 아주 깔끔하게~ 지원합니다. 이런 개발용 PC에서 원격지의 SQL서버나 MySQL DB 처리, 또는 개발을 쉽게 할 수는 없을까요?

    특히, PHP 개발 과정에서 주로 사용하는 + MySQL 또는 MSSQL은 DB에 접속해 개발하시기 어떤가요? – 쓸만한 GUI 쿼리 툴?
    MySQL GUI 툴들 세트가 있긴 하지만 2%가 아닌 20% 넘게 부족한 느낌입니다. 또한, 한 PHP 하시는 분들께 비교적 잘 알려진 SQLyog라는 녀석이 있긴 합니다만, 유료라는게 좀~ 부담스럽습니다. 무료에 깔끔한, PHP 개발에 이용 가능한 그런 녀석은 없을까요? 있습니다. 바로, IIS 데이터베이스 관리자(Database Manager) 입니다.

    IIS 데이터베이스 관리자로 MySQL과 MSSQL 웹 개발을 더욱 더 편리하게~
    image
    IIS의 기능 설치 관리를 위한 핵심 툴인 웹 플랫폼 설치 관리자를 실행 하시고, 웹플랫폼 – 웹서버 – 관리 항목에서 “데이터베이스 관리자”를 선택 가능합니다. 이어서 설치를 진행하시면 몇몇 종속성 기능들과 함께 설치가 완료됩니다.
    참고 정보 : IIS Database Manager

    Database Manager가 제공하는 기능
    - 로컬 또는 원격지의 MSSQL, MySQL 데이터베이스를 관리 가능합니다.
    - 테이블 추가, 수정, 삭제, 이름바꾸기 가능
    - View 및 테이블 개체(PK, FK, 색인) 등을 관리 가능
    - 테이블의 데이터를 GUI로 손쉽게 수정 가능
    - 쿼리 제작 및 실행 가능
    - 저장 프로시져 및 View 생성,수정,삭제 가능
    - MSSQL 서버에 대해 백업과 복구 가능
    - MSSQL과 MySQL을 제외한 다른 DBMS에 대해 관리 기능 확장을 위한 API 제겅(즉, 타 DB도 개발해 IIS 모듈로 추가 가능)
    이렇게 흥미로운 기능들을 Database Manage가 제공합니다. 그럼, 실행하고 직접 DB에 붙어 볼까요.

    Database Manager 실행
    설치가 완료되면 IIS7의 관리 툴에서 Database Manager를 실행합니다.
    image 
    이어서 MSSQL이나 MySQL 연결을 추가합니다.


    Add connection을 클릭히고


    Connection을 추가합니다. 물론, MySQL을 선택 하고 연결 정보를 입력하시면 물론 MySQL에 연결 가능합니다.

    image 
    데이터를 그리드에서 조회가능하며, 다양한 작업을 수행 가능합니다.

    image 
    테이블 스키마 정보도 확인 가능하며

    image
    PHP 개발 과정에서 꼭~ 필요한 쿼리 제작 및 수행도 손쉽게 처리 가능합니다.이렇게 데이터베이스를 쉽게 IIS에서 조회 가능하고, 쿼리 수행도 가능하며 원격 서버 관리 기능도 포함되기 때문에 개발하실때 유용할 것 같네요. 개인적인 생각에 MSSQL과 거의 동일한 인터페이스이기 때문에 MSSQL에 약간이라도 경험이 있다면 도움말이나 설명 없이도 슥슥~ 사용 가능하실 것 같습니다.

    이렇게 간단히 IIS7의 Database Manager에 대해서 알아 보았습니다. IIS7은 PHP 개발과 배포에도 좋은 환경입니다. – 특히 관리 및 보안에 장점이…. 이런 여러 좋은 장점들에 대해서도 차근차근 풀어 보도록 하겠습니다. 감사합니다.

    더 많은 IIS관련 정보는 IISKOREA 팀블로그를 참고하세요.
    IISKOREA 팀블로그 : http://www.iiskorea.net

    참고자료
    IIS Database Manager
    Using the IIS Database Manager
    Basics of the IIS Database Manager

  • Korea Evangelist

    드디어 Visual Studio 2010 베타2를 발표하다!

    • 0 Comments

    윈도우7 출시 쯤에 맞이하여 드디어 Visual Studio 2010 베타2가 공개 되었습니다. 10월 21일부터 MSDN에 영문버전이 공개 될 예정인데, 이번 Visual Studio 2010 베타2는 .NET Framework 4의 베타2 버전이 포함되어 있습니다.

    이미 지난 베타1 버전을 테스트 해 보았던 분이라면, 이번 베타2에서는 더 안정적이고 빠른 속도를 만 깃 할 수 있을 겁니다. Visual Studio 개발 팀에서 베타1 보다 23배 더 빠르게 향상시키는 데 중점을 두었다고 하네요. 한편, 지난 베타1에서 일주일 동안 약 500명의 개발자들이 베타 테스트(DogFood)에 참여 했으며, 내부적으로 TFS 서버를 .NET 4 으로 적용되었으며 Visual Studio 팀의 87% 정도의 2,500명이 이를 이용하여 현재 쓰고 있다고 합니다.

    VS2010

    또 한 가지 흥미로운 점은 이와 더불어, Visual Studio 브랜드 로고가 코발트 빛으로 좀더 모던한 느낌으로 바뀌었습니다. 이미 알고 계셨나요?

    그렇다면, 이번 Visual Studio 2010이 무엇이 바뀌었나 살펴보자면 뭐니 뭐니 해도 세 가지 형태의 라인업을 가지고 가는 것에 대해 변경되었습니다. 다음의 도표를 상세한 내용은 다음 도표를 봐 주세요! 

    VS 2010 새로운 라인업 기존 제품과의 연간 관계 제품 설명
    Visual Studio 2010 Ultimate Visual Studio Team System Team Suite

    Visual Studio 2010 Ultimate는 솔루션 개발을 간소화하고 위험을 낮추며 수익을 높여 줍니다. 설계 및 개발에서 테스트 및 배포에 이르기까지 Application Life Cycle Management 의 모든 단계를 위한 도구를 제공하여 개발자 여러분들과 개발 팀이 자유롭게 상상력을 발휘하고 유용한 솔루션을 개발할 수 있도록 지원합니다. 기존 Visual Studio Team System Team Suite 급의 제품입니다.

    Visual Studio 2010 Premium

    Visual Studio Team System Role Edition Development Edition / Database Edition / Architect Edition / Test Edition

    Visual Studio 2010 Premium은 응용 프로그램 개발 작업을 간소화하는 완벽한 개발 도구 집합입니다. 개발자 여러분들과 개발팀은 보다 강력해진 코딩, 디버깅, 데이터베이스 및 테스트 도구를 사용하여 확장 가능한 고품질 솔루션을 개발할 수 있습니다. 기존 Visual Studio Team System Role Edition 급의 제품으로 주로 Development Edition 과 Database Edition 의 기능들이 포함되어 있는 제품입니다.

    Visual Studio 2010 Professional Visual Studio 2010 Professional

    Visual Studio 2010 Professional은 기본적인 응용 프로그램 작성, 디버깅 및 배포 작업을 간소화하는 통합 환경입니다. 개발자 여러분들은 Visual Studio 2010 Professional을 통해 자유롭게 상상력을 발휘하고 아이디어를 손쉽게 구현할 수 있습니다. 기존 Visual Studio Professional Edition 급의 제품입니다.

    Visual Studio 2010 정식 버전은 3월 24일에 미국부터 시작하여 발표될 예정이며, 한국어 버전은 4월 초순쯤이면 여러분들과 만날 것으로 예상됩니다.

    한편, Visual Studio 2010 베타2에 맞추어서 Silverlight 으로 이쁘게 꾸며진 웹 사이트를 개봉하였네요! 국내에서 어떤 기업이 Visual Studio 와 .NET 프레임워크를 도입했는지 한 번 살펴보시는 것도 재미있을 것이며, 국내 주요 .NET 컨설팅 파트너들도 있으니 필요하신 프로젝트가 있다면 요청 주시기 바랍니다. 또한 이와 맞물려, 새롭게 한글 MSDN 사이트도 이쁘게 바뀌었답니다. 개인적으로 저는 파란색을 좋아하는 지라 왠지 더 깔끔하게 느껴집니다.

    아래의 사진을 클릭하시면 각각 해당 사이트로 방문합니다!

    VSWeb msdn

    끝으로, 채널9에서 Visual Studio 2010에 대한 에피소드가 시리즈로 33번째 올라오고 있습니다. 이번 연재는 Visual Studo 2010 베타2를 어떻게 다운로드 받고 설정하는 지에 대한 소개가 올라와져 있습니다!

    - Download instructions for all files in this video
    - Compatibility hotfix for Team Explorer 2008 connecting to Team Foundation Server 2010
    - More information about the Windows Server 2008 VHD
    - Beta 2 home on MSDN
    - Information on "Go Live" license
    - MSDN Forums
    - Visual Studio Connect site (버그 리포트 및 제안)
    - Team Foundation Server 2010 Deployment Guidance
    - Visual Studio 2010 and .NET Framework 4 Training Kit

  • Korea Evangelist

    URL Rewrite 1.1 (URL 재작성) - (6) Rewrite Map 사용

    • 0 Comments

    지난 포스트 링크
    URL Rewrite 1.1 (URL 재작성) - (1) 소개 및 설치
    URL Rewrite 1.1 (URL 재작성) - (2) URL 재작성
    URL Rewrite 1.1 (URL 재작성) - (3) 요청 필터링과 URL Rewrite
    URL Rewrite 1.1 (URL 재작성) - (4) ASP.NET 라우팅과 URL Rewrite
    URL Rewrite 1.1 (URL 재작성) - (5) Apache의 mod_rewrite 규칙 가져오기(import)

    안녕하세요. IISKOREA의 김대우 입니다. 이번에 소개해 드릴 내용은 Rewrite Map에 대한 내용인데요.

    간단히 말씀 드리자면, 모든 URL 변환 처리를 패턴을 이용해 프로그래밍적으로 처리 가능하다면 행복할 겁니다. 하지만, 모든 URL 처리가 이렇게 패턴에 매핑 가능한 것은 아닐겁니다. 바로 이럴 경우, URL 처리를 위한 패턴매칭 규칙(Rule)을 적용하기 어려운 여러 URL들에 대해 새로운 URL로 정의하려 할 경우에 Rewrite Map을 이용해 1:1로 매핑하는 처리를 이용하면 유용합니다. 즉, 단순 URL Rewrite Rule이 생성되는 것은 줄이면서 효율적으로 Rewrite 처리가 가능해지는 장점이 있는 것이지요. 물론 Rule의 수가 줄어들게 되니 정규표현식 처리가 줄게되고 이어서 시스템리스소도 적게 사용할 수 있을 겁니다.

    Rewrite Map 제작
    마찬가지로, 테스트를 위해 예전 포스트에서 작성한 심플한 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 링크를 접속해 보면 아래와 같은 결과를 보실 수 있을 겁니다.
    (만약 안 나오신다면 ASP.NET 서비스를 설치해 주세요.)


    Rewrite Map 생성
    그렇다면, 본격적으로 Rewrite Map을 생성해 보겠습니다.

    URL Rewrite를 선택해 주세요.


    Manage rewrite map을 선택해 Rewrite Map을 생성합니다.


    이렇게 이름을 “StaticRewrite”로 설정하고 “Add Mapping Entry”를 선택해 다음 Entry들을 넣습니다.


    각각 값을 “/article1” 그리고 New Value를 “/article.aspx?id=1&title=some-title” 으로 지정합니다. 즉, /article1 요청이 들어오면 뒤에 나오는 URL로 rewrite 하라는 의미이지요.

    Original URL New URL
    /some-title /article.aspx?id=1&title=some-title
    /post/some-title.html /article.aspx?id=1&title=some-title

    이런 형태로 값을 넣어 줍니다. 이어서 확인할 내용! 과연 이 매핑 정보는 어디에 저장될까요? 넵! 바로 web.config에 저장되게 됩니다. 어떻게? XML 형태로요.

       1: <rewrite>
       2:     <rewriteMaps>
       3:         <rewriteMap name="StaticRewrites" defaultValue="">
       4:             <add key="/article1" value="/article.aspx?id=1&amp;title=some-title" />
       5:             <add key="/some-title" value="/article.aspx?id=1&amp;title=some-title" />
       6:             <add key="/post/some-title.html" value="/article.aspx?id=1&amp;title=some-title" />
       7:         </rewriteMap>
       8:     </rewriteMaps>
       9: </rewrite>

    이렇게 보시는 것처럼 web.config에 차곡차곡 저장되게 됩니다. 주의해서 보실 것은 Rewrite Rule이 아니라 rewriteMap 하위에 저장된다는 것이지요.

    그렇다면, 이 Rewrite Map을 어떻게 Rewrite Rule에 매핑 시킬까요? 바로 새로운 Rule을 만들고, 그 Rule에 이 Map을 걸어 주는 형태로 완성됩니다. 
    image

    ”Add Rule”을 실행하고, Rule with rewrite map을 선택합니다. 

    image 
    이어서 Rule Action은 “Rewrite”, rewrite map은 당연히 조금 전에 위에서 생성한 “StaticRewrite”를 선택 가능합니다.

    그렇다면 확인을 위해 web.config를 열어 볼까요?

       1: <rewrite>
       2:     <rewriteMaps>
       3:         <rewriteMap name="StaticRewrite">
       4:             <add key="/article1" value="/article.aspx?id=1&amp;title=some-title" />
       5:             <add key="/some-title" value="/article.aspx?id=1&amp;title=some-title" />
       6:             <add key="/post/some-title.html" value="/article.aspx?id=1&amp;title=some-title" />
       7:         </rewriteMap>
       8:     </rewriteMaps>
       9:     <rules>
      10:         <rule name="Rewrite rule1 for StaticRewrite">
      11:             <match url=".*" />
      12:             <conditions>
      13:                 <add input="{StaticRewrite:{REQUEST_URI}}" pattern="(.+)" />
      14:             </conditions>
      15:             <action type="Rewrite" url="{C:1}" appendQueryString="false" />
      16:         </rule>
      17:     </rules>
      18: </rewrite>

    10번 라인부터 16번 라인까지 보시면 Rewrite Map을 처리하는 Rule을 확인 가능하지요.
    11번 라인의 “<match url=".*" />”은 모든 인입되는 URL에 대해서 동작한다는 의미 입니다.
    13번 라인의 내용은 StaticRewrite Map에서 리턴되는 값이 빈 문자열이 아니라는 조건 처리 입니다.
    15번 라인의 Action은 이 Rewrite Map에서 나온 결과값으로 URL을 Rewrite하는 동작을 수행하라는 의미 입니다.

    그렇다면, 우리가 만든 Rewrite Map이 잘 동작하는지 확인을 위해 테스트를 해 볼까요.
    http://localhost/article1
    http://localhost/some-title
    http://localhost/post/some-title.html

    위의 테스트 작업을 수행하면 아래처럼 결과가 잘 나오는 것을 확인 가능할 것입니다.


    그렇다면, “Redirect”는 어떻게 처리 가능할까요? Rewrite와 같습니다. 

    image 
    Rewrite Map을 Rule에 매핑하던 화면 기억 나시는지요? 여기에서 Rewrite 대신 Redirect를 선택하시면 됩니다.

    마침 - Rewrite Map을 왜 사용하는가?
    모든 URL 처리가 패턴 규칙으로 매핑 가능하지는 않습니다. 이렇게, URL 처리를 위한 패턴매칭 규칙(Rule)을 적용하기 어려운 여러 URL들에 대해 새로운 URL로 여럿 정의하려 할 경우에 Rewrite Map을 이용해 1:1로 매핑하는 처리를 이용하면 유용합니다. 단순 URL Rewrite Rule이 생성되는 것은 줄이면서 효율적으로 Rewrite 처리가 가능해지는 장점이 있는 것이지요. 물론 단순 Rule들을 나열하는 것보다 부하를 줄일 수도 있다고 합니다.

    이렇게 해서 전반적인 URL Rewrite 기능에 대해 알아 보았습니다. URL Rewrite만 해도 유용한 Fancy URL 제작 기능부터 보안 기능 등 다양한 내용이 포함되어 있는 것 같습니다. 이 외에도 IIS에 대한 수많은 유용한 기능들이 있는데요, IISKOREA 팀분들과 차근차근 좋은 내용으로 풀어 나가 보도록 하겠습니다. 감사합니다.

    지난 포스트 링크
    URL Rewrite 1.1 (URL 재작성) - (1) 소개 및 설치
    URL Rewrite 1.1 (URL 재작성) - (2) URL 재작성
    URL Rewrite 1.1 (URL 재작성) - (3) 요청 필터링과 URL Rewrite
    URL Rewrite 1.1 (URL 재작성) - (4) ASP.NET 라우팅과 URL Rewrite
    URL Rewrite 1.1 (URL 재작성) - (5) Apache의 mod_rewrite 규칙 가져오기(import)

    참고자료
    서버주무르기 - IIS 7, URL Rewrite Module (URL 재작성 모듈)
    Using Rewrite Maps in URL Rewrite Module
    Using URL Rewrite Module

Page 1 of 3 (12 items) 123