서블릿은 WAS 에서만 작동한다. 그렇기 때문에 WAS 에 제한적으로 초기화 할 수 밖에 없다.
그렇지만 제한적이라는 표현을 쓰기에는 역시나 많은 방법이 있을수 있다.
지금 말해보고자 하는건 서블릿이 수행되는 init( ServletConfig config) 함수를 이용한 초기화 방법이다.
말하지 않아도 작업을 좀 해본 사람이라면 기본적인 방법은 다 알고 있다.
큰 맥락은 너무 나도 간단하다. 그렇지만 여기서 읽어들인 값들을 어떻게 보관할건인지 고민을 하게 된다.
1. web.xml 에 init-param 에 환경 설정에 해당하는 변수를 설정한다.
2. init( ServletConfig config) 함수를 오버라이딩 하여 config 객체로부터 그 값을 가져와 사용한다.
2. init( ServletConfig config) 함수를 오버라이딩 하여 config 객체로부터 그 값을 가져와 사용한다.
큰 맥락은 너무 나도 간단하다. 그렇지만 여기서 읽어들인 값들을 어떻게 보관할건인지 고민을 하게 된다.
그리고 모든 초기화 속성 값을 web.xml 에 전부 나열할 것인지도 고민해봐야 한다.
결론부터 이야기 하자면, 당연히 web.xml 에는 나열하지 않는다는 것이다.
물론 설정해야 할 초기변수가 양이 작다면 나열해도 되지만 대부분의 개발에서 환경값은 그리 적지 않은게
사실이다.
이때에 대부분 환경설정값을 properties 파일이나 xml 에 별도로 보관하고자 한다.
그리하여 결국 web.xml 에 정의하는 초기변수는 그 환경 변수값이 들어있는 파일의 경로를 설정하고,
설정된 파일 경로를 이용해 그 파일의 환경 변수값을 읽어들이게 된다.
<servlet>
<servlet-name>ConfigLoader</servlet-name>
<servlet-class>com.dnt.common.webs.ServerConfig</servlet-class>
<init-param>
<param-name>config_path</param-name>
<param-value>d:/workspace/conf/DntWebServer.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
위와 같은 정도가 될 것이다. 이또한 너무 많이들 알고 있는 아주 평이한 방법이다.
그럼 더 깊은 곳을 알아보도록 하자.
서블릿은 WAS 에서 작동한다. 초기화된 변수는 어떻게 들고 보관해야 할까.
내가 들어 알고 있는 방벙 중 하나는 static 한 pool 을 이용하여 각 속성값을 가지고 있게 하는 것이다.
그럼 static 하게 가지고 있다는건 static 변수를 가지고 있다는 뜻이 될 것이다.
HashTable 이나 HashMap 등, Map이나 List 등에 담아둔다는 것인데.
이녀석들을 초기화하는 방법에 영 떠오르지 않는다.
(어디까지나 난 초보이기 때문에..;)
static 하게 만드는 이유는 속성값이니 한번 로딩된 값을 계속 가지고 있게 하기 위함이다.
그리고 이제는 어떤 static 클래스에 getProperty 라는 함수를 이용하여 어디서든 가져오게 하고싶다.
그런데 그렇게 하자니 클래스만 알면 어디서든 접근이 가능하므로 파일을 읽기도 전에 getProperty 를 가져다
쓸수 있게 된다. 개발자가 잘 쓰면 문제가 없지만 잘못쓰면 큰 낭패다.
그럼 환경변수는 static 하게 담아야 하고 그걸 이용하는 getProperty 는 일반 멤버함수로 사용하게
하려면 어떻게 해야 할까.
다시 말하면 순서를 착각하지 않도록 객체를 생성하는 과정에서 반드시 처음에는 파일을 읽게 하고 그다음에야 함수를 쓰게 하려면 어떻게 해야 할지를 고민해야 한다는 것이다.
하지만 결국 결심한것은 어차피 서블릿은 라이프 사이클이 있기에 로딩시 초기화하면 되므로 순서상 문제가 없으니 정적인 핸들러를 이용하기로 한다.
그냥 파일 읽어서 어디서나 쓰게 하려는의도가 은연중에 들어가버린건데 할게 많아진다.
어찌보면 굵게 마크한 부분을 강조하고자 이글을 썼는지 모르겠다.
'객체를 생성하는 시점에 파일을 읽을수 있도록 한다' 별생각없이 객체를 만들어내던 나에게 생각의 전환을 가져다준 아이디어이다.