본문 바로가기

Programming/etc

etc, java : freemarker template을 사용시 server side 변수 접근에 제한이 있습니다. (exception클래스)

제목이 좀 이상하네여 ㅎㅎ

풀어서 말하자면
exception 객체를 collection type에 담아서 server side에 생성한 후
freemarker에서 그 collection type에 접근하면 안된다는 것입니다.
접근까지는 가능하겠지만, list로 뿌릴경우엔 프리마커 에러가 발생하게 됩니다.

풀이해서 적었지만 그래도 좀 이상하네여. 예를 들어보겠습니다.
open api를 활용할 때엔 다양한 exception을 핸들링해야합니다.(어느 로직에서든 마찬가지겠죠^^;;)
그렇게 exception을 핸들링할 때엔 client side에 어떠한 문제점이 있는지 사용자에게 알려줄 필요도 있습니다.
예를 들어 open api 사용시에 적합하지 않은 쿼리가 들어왔다면 사용자에겐 input data를 보다 명확하게 해달라고
alert창을 띄울 수도 있겠고, 일일 질의 한계가 왔다면 그 날은 더이상 해당 서비스가 불가능하니 사용자에게
금일은 서비스에 제한이 있다며 알릴 수도 있습니다.
이렇게 client side에 직접 exception 성격의 message를 보내야할 때에는
예외 코드와 메시지 등을 enum으로 선언하고 그 enum을 가지는 exception 클래스를 작성할 필요가 있겠죠.
그렇게 된다면 그 하나의 클래스로 client side와 server side 에서 예외처리등를 좀 편리하게 할 수 있을것입니다.

이번에 제가 작성한 로직에서는 그러한 예외처리들을 하나의 클래스로 작성하여 예외가 발생할 때마다
list에 담았습니다.
그리고 freemarker에서 예외객체들을 담아놓은 list를 접근하여 모든 예외상황을 출력하려 하였었죠.
그러자 프리마커 에러가 계속 나더군요.

<#if list?has_content>
<#list list as exception>
</#list>

등으로 작성하였는데 if문에 들어가지도 않고 if 문을 삭제하면 list에서 에러가 나고 하였습니다.
계속 고민하고 여러 경우의 테스트를 해본 결론은
프리마커에서는 접근하려는 collection type의 객체에 담긴 object가 exception 객체일 경우에는
이를 object로 이해하지 못한다는 것입니다.

아마 이 글을 보시는 모든 분들은 애초에 저런 로직이 필요하나 싶으실듯하네요.
저도 시범삼아 작성한 로직이었는데 이러한 경우의 프리마커에러를 받으니
새삼 또 하나 배우는 기분이 드네여.
왜 프리마커의 리스트 핸들링 메소드들(?)은 익셉션 타입의 리스트 객체를 다루지 못하게 했는지
고민이 되는데 오늘은 여기까지만 생각하고 싶네여.