시대착오적인 설정 파일 *.properties를 버리자
Eclipse의 파일 Lock 문제를 찾으면서 처음에는 Properties Editor Plugin을 원망했다.
게다가 대체품으로 선택한 Eclipse-RBE는 다소 불편한 인터페이스에 자꾸
NullPointerException을 떨궈서 사람 짜증나게 만들기 까지.
하지만 그러다가 곧 생각이 바뀌어 버렸다.
진짜 문제는 우리가 설정 파일로 시대착오적인 *.properties를 사용하고 있다는 그 사실이다.
자바의 *.proerties 파일은 텍스트 파일을 가장한 바이너리 파일이라고 보면 된다.
특수한 편집기나 변환기가 없으면 비영문권 사용자에게는 결코 텍스트 파일로써 다뤄질 수 없는 설정 파일 형식이다.
이런 것을 사용하면서 이를 편집하게 도와주는 플러그인을 탓한 것이다.
지금은 XML이나 YML 같은 잘 정형화되어있고 어느 편집기에서나 열어서 볼 수 있는 훌륭한 설정 파일 포맷이 나온지
이미 몇 년이 지난 시점이다. 그런 와중에 properties를 사용하는 나 자신을 탓하지 않고 플러그인을 탓하다니. 습관이 무섭다.
Java도 또한 이 문제점을 인지하고 Properties 객체를 XML 파일을 통해서 생성할 수 있게 만든지 이미 오래전이다.
Properties XML은 형식도 매우 직관적이다. http://wiki.kwonnam.pe.kr/java/properties 를 참조하자.
게다가 더욱 훌륭한 것은 Spring Framework를 사용할 경우 <context:property-placeholder/>, <util:properties/>,
그리고 메시지 Resource Bundle 등이 모두 다 이 XML 형식의 프라퍼티를 완벽하게 지원한다는 것이다.
추가(2013/02/06) : XML 프라퍼티 형식을 사용하면 국제화지원이 안된다는 댓글이 있는데,
Spring의 Resource번들은 이를 잘 지원하며 JDK 6 기본 ResourceBundle의 경우
Using Java 6 to Access Translatable Text in XML Files를 참고해보시기 바랍니다.
그래서 오늘은 특정 디렉토리의 모든 *.properties를 XML Properties로 변환해주는 간단한 툴을 만들고,
Spring Bean 설정 파일에서 properties를 사용하는 부분들을 모두 XML 파일을 가리키도록 고쳐서
팀 프로젝트의 모든 *.properties 파일을 없애버렸다. 생각보다 오래걸리지도 않았다.
그리고 log4j.properties도 삭제해 버리고 log4j.xml로 전면 교체해 버렸다.
다른 Java 개발자들에게도 꼭 권한다. 프로젝트에서 *.properties를 삭제해 버리자.
어렵고 복잡한 일도 아니면서 설정 파일 읽기와 편집 효율성이 훨씬 더 증대된다.
그리고 하면서 느끼게 된 사실이 또 있는데, Spring의 <context:property-placeholder/>
사용하지 말자. 이일민씨의 블로그 글에도 보면 되도록 <util:properties/>와 SpEL을 사용하자는 것이 있는데.
이번에 수정하면서 약간은 다른 이유로 매우 동감하게 되었다.
properties-placeholder는 부모 자식 관계에 있는 Application Context XML 설정파일들의 경우에도
동일한 properties 파일임에도 모든 Bean 설정 파일에 property-placeholder를 명시해줘야 하는 문제가 있다.
하지만 <util:properties/>를 사용하게 되면 부모 컨텍스트에 딱 한번만 설정하고 그 외에는 SpEL로 명시해주면 된다.
그 외에도 SpEL을 쓰게 되면 어노테이션 기반 객체 주입시에도 사용이 가능하지만 properties-placeholder는
억지로 String 등의 Bean 객체로 생성하지 않는 이상 어노테이션에서 직접 읽을 방법이 없다
따라서 나는 <context:property-placeholder/>를 버리고 <util:properties/>와 SpEL 사용을 강력하게 권한다.
출처 : http://kwon37xi.egloos.com/4665590
'Programming > Spring' 카테고리의 다른 글
[Spring] Spring Ajax를 이용한 file upload (0) | 2014.09.02 |
---|---|
[Spring] REST API 구성시 Spring Security 구현 (0) | 2014.09.02 |
[Spring] util:properties, properties.xml 사용하기 (1) | 2014.07.23 |
[Spring] spring기반 web.xml 설정 (0) | 2014.03.26 |
[Spring] spring AOP Pointcut 표현식 (0) | 2014.03.24 |