[Tomcat] 심볼릭 링크의 경로를 톰켓(웹)으로 서비스하는 방법

2011. 3. 30. 10:23Was/Tomcat

AIX에서 심볼릭 링크(소프트링크)를 이용하여 웹으로 접근 할 수 있는 context아래로 경로를 생성했다.

작업 후 java의 IO로는 해당 파일을 접근 할 수 있으나 브라우저에 해당 파일의 경로를 열심히 타이핑 했으나 404에러를 뿜는다. 즉. 톰켓으로는 심볼릭 링크 상에 존재하는 파일을 서비스 할 수 없었다.

이 상황을 알기쉽게 예로 들어보자.

 

root/a 경로에는 100개의 jpg 파일이 있다고 하자.

그리고 root/tomcat/b 라는 경로는 톰켓의 컨텍스트로 설정되어 서비스 되고 있다. 즉 root/tomcat/b 하위에 위치한 파일들은 브라우저에서 http://localhost/b/파일명 형식으로 접근하면 파일을 볼 수 있다.

이런 환경에서 root/a  하위의 이미지를 http://localhost/b/a/이미지명.jpg와 같은 주소로 보여주고싶다.

 

그래서 나는 단순하게 root/a를 바라보는 심볼릭 링크를 root/tomcat/b/a 라고 생성했다.

콘솔이나 ftp로 붙어보면 정확하게 root/tomcat/b의 하위로 a라는 디렉터리가 존재하며 하위에 이미지파일이 보인다. java의 File 객체의 생성에도 문제가 없다. 즉 OS 차원의 IO는 문제가 없었다. 그러나 내가 원하는 브라우저 주소창에 http://localhost/b/a/이미지명.jpg 를 실행하면 파일이 열리는 것은 불가능 했다. 자랑스럽게 404에러를 뿜어댄다. (404를 계속 만나다보면 좀 머슥 해 지는 것은 wake 뿐일까요? )

 

먼가 이상하다.

검색 해 보니 톰켓에서 심볼릭 링크를 디렉터리나 파일로 인식이 안된다고 한다.

(이런 웃다가 뒷통수 맞을 일이 있나. 해당 정보의 출처는 프라이버시?상 묻어 두겠다.)

 

그래 어쩔 수 없는 거구나! 바로 root/a 의 경로를 톰켓에서 별도의 컨텍스트로 잡아 띄워 버렸다.

<Context path="/b/a" docBase="/root/a" crossContext="false" debug="0" reloadable="true">
  </Context>

(위의 설정은 서버의 /root/a 경로를 /b/a의 웹 컨텍스트로 띄운다는 말이다. 용어로는 가상링크라고 한단다.)

 

멋진가?

하나의 심볼릭 링크를 서비스하기 위해 이런 엄청난 일을 벌여버렸다. 훗 = ㅠ =

 

그래도 이건 아니다..

결국 머리 식히고 다시 네이버질을 시작한다.

역시! 방법은 있었다.

오늘도 나의 얄팍한 네이버 검색실력에 낚인 게다... - ㅁ -;;;

 

잘 찾아보니 네이버의 다른 곳에는 이런 귀중한 정보가 있었다.

톰켓에서 심볼릭 링크 인식하도록 하기

하하하.. 어이없다.. 그냥 b를 서비스하고 있던 컨텍스트에 allowLinking="true" 속성 하나 추가 하면 되는 거 였다.. 이 자리를 빌려 지원아빠님께 감사를.. ㅠㅠ

 

머 어찌되었던 방법은

1. 심볼릭 링크를 서비스할 전용 Context를 하나 더 잡는다.(가상링크)

2. 심볼릭 링크를 서비스할 Context에 allowLinking="true" 속성을 설정한다.

    ex) <Context  ... 중략 allowLinking="true"></Context>

주의 할 점으로 윈도우 환경에서는 사용하지 말라고한다.(경험이지만 설정 없이 돌아간다.)

방법에 대한 선택은 여러분에게.. = ㅠ =;