Apache mod_rewrite를 이용한 웹페이지 리뉴얼 사례 소개

Flex 한글문서 웹페이지(http://flexdocs.kr)는 frame방식으로 운영하고 있었다.
frame방식으로 구성된 웹사이트는 여러가지 문제점을 가진다. (그 문제는 아래에 더 자세히 설명하겠다.)

여러 문제점이 있는 frame방식을 굳이 운영했던 이유는 기존에 3003개나 되는 문서를 전부 수정하는 것은 약간 무리가 있을 뿐 아니라 기존 문서 URL이 구글등과 같은 검색엔진에 등록되어 있었기 때문이다. 그러나 apache의 rewrite 모듈을 이용해 통프레임 방식의 웹사이트를 리뉴얼하면서 앞서 말한 문제점을 해결할 수 있었다.

frame방식으로 구성된 웹사이트의 문제점을 살펴보자.

먼저 frame방식으로 구성된 웹사이트의 문제점을 살펴보자.

첫째로, frame방식의 웹사이트는 검색엔진을 통한 웹사이트 접속시 문제가 있다.
아래 그림을 보자. 이 화면은 예전 frame방식으로 구축된 웹페이지 이다. 만약 검색엔진이 웹페이지를 등록할때는 각 frame의 내용만 등록된다. 즉, 2번 frame의 flex/air docs 한글화 페이지만 등록되므로 1번 frame의 메뉴가 제외되는 문제가 발생한다.

둘째로, 검색을 통해 들어온 사용자에게 불편함을 줄 수 있다.
위와 같이 검색을 통해 검색된 경우 다른 참조페이지로 갈때에 주메뉴부분이 보이지 않기 때문에 전체 웹사이트를 볼 수 없는 문제점이 발생할 수 있다.

사용자 삽입 이미지

기존 flexdocs.kr 모습


하지만 아래 그림과 같이 하나의 frame으로 구성된 웹사이트는 위와 같은 문제가 발생되지 않는다.

사용자 삽입 이미지



앞서 말했던 것과 같이 rewrite 모듈을 이용하면 기존 html문서로 접속했을때와 똑같은 URL로 접근이 가능하면서도 통프레임 방식을 취할 수 있다. 


전체동작방식을 살펴보자.

나는 위와 같이 기존 html문서(약 3003여개)를 전혀 건드리지 않고 rewrite 모듈을 이용해 통프레임 방식으로 웹사이트를 리뉴얼 할 수 있었다. 

먼저 아래 그림을 보면서 그 동작방식을 살펴보자. 가령, http://domain.com/docs/0001.html 로 접근한다고 가정하자. 기존방식은 빨간색화살표 표시처럼 0001.html을 Client에 보내게 된다. 
하지만 녹색화살표를 보듯이 같은 URL로 접근하지만 Apache서버는 0001.html을 직접 보내지 않고 PHP Script로 rewrite하여 PHP를 수행하여 그 결과를 Client로 보내게 된다. 0001.html안에는 <head><title>과 같은 태그들이 존재한다. <body>안에 있는 내용만 사용하고 나머지 앞뒤는 모두 잘라낸다음 내가 원하는 메뉴와 제목이 추가되거나 수정된 문서로 만들려고 한다. 이때 mod_rewrite를 이용하면 금방 접속한 URL이 수정없이 apache에서 http://domain.com/my.php?p=/docs/0001.html 로 rewrite할 수 있다. 그럼 myphp는 get방식으로 넘어온 문서의 경로 /docs/0001.html만 찾아서 <body>태그 안에 있는 내용만 추출하고 그 문서의 앞뒤에는 내가 원하는 것으로 채울 수 있다는 것이다. 

사용자 삽입 이미지

기존방법(빨간색화살표)과 mod_rewrite에 의한 방법(녹색화실표)



Apache rewrite 모듈을 이용해보자.


먼저 rewrite 모듈을 사용하기 위해 rewrite모듈을 다운받아 설치할 필요가 있다. 
나는 안녕리눅스를 설치할때 기본적으로 설치 되어 있어서 다시 설치할 필요가 없었다.

기본적인 사용방법은 아래 문서를 참고한다.
http://www.superuser.co.kr/apache/rewrite_Module/Apache_rewrite_Module.htm

이외에도 검색해보면 문서가 많다.

알고 있는 건지 모르겠지만 테터툴즈 설치용 블로그도 rewrite를 사용하고 있다.


보안에 신경쓰자.

rewrite를 사용하면서 항상 기억해야할 것은 보안이다. 
rewrite를 사용할 때 어떤 경로 또는 문서로 rewrite를 할 것인가 정확히 파악하고 필요한 쪽으로만 접근이 가능하도록 하는 것이 아주 중요할 것이다. 잘못 설정하면 중요파일을 건드릴 수 있지 않을까? 
또한 공격자가 임의의 경로로 접근하기 위해 “my.php?p=/원하는 경로 파일명” 을 URL에 입력했다고 가정해보자. 이때 Get방식으로 받는 p값의 경로명이 system파일이나 중요한 파일을 건드리지 않도록 p값을 꼭 필터링해야한다. 개발자는 항상 보안을 생각하면서 프로그래밍 해야겠다.


마무리

지금까지 Apache rewrite모듈을 이용한 웹사이트 구축 사례를 소개했다. 
rewrite모듈은 이 외에도 응용할 곳이 많기 때문에 공부해 볼 필요가 있다.
어떻게 보면 apache의 가장 중요한 기능 중 하나라고도 할 수 있겠다.

http://flexdocs.kr/에 apache의 rewrite 모듈을 이용해서 리뉴얼하여 얻은 이점은 다음과 같다.

  1. 기존 URL을 그대로 사용할 수 있으므로 이미 검색엔진에 등록된 URL이 계속 유효하다.
  2. 문서의 확장성을 증대시켰다. 가령, 웹페이지에 댓글을 달게하는 기능 또는 웹에서 문서 수정이 가능해졌다.


글쓴이 : 지돌스타(http://blog.jidolstar.com/204)