여러분 대부분은 아마 절대 경로와 상대 경로의 차이점을 알고 있을 것이다.
이 글은 ASP와 W2K를 기준으로 하지만, HTML등의 상대 경로는 대부분의 플랫폼에서 동일하다.

아래와 같은 디렉토리 구조가 있다고 해보자.

/
->img
->include
->bbs
->gallery
->etc

bbs 디렉토리에 있는 list.asp에서 이미지 및 include 디렉토리의 파일을 첨부시켜야 할때,
대개는 상대 경로를 사용할 것이다. 이때 무심결에 아래와 같은 코드를 쓰는 경우가 많다.

<!--#include file = "../include/init.asp" --->

...중략...

<a href="../gallery/list.asp"><img src="../image/button/gallery.gif"></a>

이와 같은 상대경로는 별로 바람직하지 않다. 예컨대 어떤 이유로 bbs 디렉토리를 etc 아래로 옮긴다고 하면, 이 스크립트는 제대로 동작하지 않을 뿐더러 링크와 이미지가 모두 깨져서 보여지게 된다. 물론 이렇게 디렉토리를 옮기는 일은 흔치 않을 것이다. 하지만 이렇게 만들 경우 현재 위치를 파악하지 않고는 접근하려는 객체의 정확한 경로를 알기 힘들다는 단점 또한 가지고 있다. 언제나 현재 위치에서 사이트 전체의 디렉토리를 유추해야 하기 때문이며, ASP와 IIS 5의 경우 이렇게 해서 가상의 사이트 밖의 물리적 위치의 객체까지 접근 가능하므로 향후 유지 보수에 심각한 문제를 발생시킨다.

사이트 외부의 요소에 접근 :
<!--#include file = "../../another_site/include/another_init.asp" --->

혼란스러운 링크 :
<img src="../image/button/gallery.gif">
<img src="image/btn1.gif">
<img src="../bbs/image/btn1.gif">

위의 예제 중 마지막 이미지 링크는 무척 바보스럽지만 실제로 이렇게 사용해서 혼란을 야기하는 경우를 심심찮게 보아 온 필자다.(이해가 안 간다면 현재 디렉터리는 /bbs라는 것을 떠올리도록.)

처음에 디렉토리 구조를 신경써서 잘 정의해 놓았다면, 다음과 같은 직관적인 방법을 사용하고, 사이트 외부의 요소(다른 디렉토리 및 드라이브)에 접근할 경우에는 하나의 파일에 변수로써 정의해서 사용하는 등 향후 위치에 변동이 있을 경우 수정을 최소화할 수 있도록 대비한다.

<!--#include virtual = "/include/init.asp" --->

...중략...

<a href="/gallery/list.asp"><img src="/image/button/gallery.gif"></a>
powered by Moniwiki | themed by clockoon
last modified 2008-12-30 10:44:13
Processing time 0.0107 sec