ExceptionResolver에 대한 질문입니다.(에러페이지 팝업창은 어떻게???)

691 views
Skip to first unread message

박창준

unread,
Oct 9, 2009, 2:51:53 AM10/9/09
to Korea Spring User Group
안녕하세요.
최근 계속 질문만 하는 박창준입니다.
오늘은 ExceptionResolver에 대한 질문입니다. ^^;;

ExceptionResolver을 설정해서 예외가 발생하면 에러페이지로 이동해서 해당 에러메시지를 보여주도록 하는데 해당 에러페
이지를 팝업으로 보여줄수는 없나요??
팝업창으로 띄워야 하는데 어떻게 해야 하는지 잘 모르겠네요.
도움 부탁드리겠습니다...

박성철

unread,
Oct 9, 2009, 6:33:04 AM10/9/09
to Korea Spring User Group
왜 팝업창으로 띄워야 하는 건지 말씀해주실 수 있나요?
일반적인 web 관례로는 예외만 popup으로 표시하는 것이 쉽지 않을 것 같습니다.
이런 저런 복잡한 트릭을 쓰면 되기는 하겠지만 그런 비용을 들일 가치가 있을지...

박성철

unread,
Oct 9, 2009, 6:34:41 AM10/9/09
to Korea Spring User Group
그리고 질문 올려주시는 것도 KSUG을 기름지게 만듭니다. 감사합니다. ^^
어서 운영진을 정비해서 활기찬 KSUG를 만들도록 하겠습니다.

On 10월9일, 오후3시51분, 박창준 <cinem...@naver.com> wrote:

안미라

unread,
Oct 11, 2009, 8:58:56 PM10/11/09
to ks...@googlegroups.com
오랜만입니다.
3개월간의 칩거생활을 마감하고 다시 현장으로 복귀했습니다.
그동안 운영진도 바뀌고, KSUG도 변화가 있었네요.
박성철회장님 늦었지만 축하드립니다.~

복귀작으로 질문하나 올립니다.
어떤 시스템이든 공통코드는 있기 마련인데,
제가 접했던 시스템에서는 그룹코드 테이블과 상세 테이블로 나뉘어 코드를
관리했으며,
A시스템은 매번 select를 통해서 필요한 공통코드를 가져왔고,
B시스템에서는 로그인시 한번에 가져와서 그때그때 필터링 해서 사용했었습니다.

그런데 이번에는 이에 대한 구현된 바가 없네요.
보통들 어떻게 사용하고 계시며, B형태로 구현한다면 spring에서는 어떻게
구현해서 쓰고 있나요?

그밖에 더 좋은 방식이 있다면 공유부탁드립니다.~

박성철

unread,
Oct 11, 2009, 9:18:29 PM10/11/09
to Korea Spring User Group
공통 코드 같은 것은 자주 바뀌지 않으면서 자주 참조되기 때문에 캐시해 놓는 것이 효과적이기는 합니다.
하지만 이걸 login 정보와 함께 저장하는 것은 좋아 보이지 않습니다.
종종 login 정보에 너무 많은 내용을 담아 놓는 프로젝트를 접하곤 하는데
객체의 역할과 책임을 분명히 하고 그에 맞게 운영하는 것이 중요하다고 생각하고요.
또 각 개인마다 서로 다른 코드를 가지고 있어야 하는 것도 아니니 login 정보에 두는 것은 적당해 보이지 않습니다.
차라리 A 처럼 공통 코드를 제공하는 service를 매번 사용하도록 하되 이 service가 코드 값을 캐시해서 가지고 있다
가 반환하도록 하는 게 좋을 것 같습니다.

손찬욱

unread,
Oct 11, 2009, 9:25:41 PM10/11/09
to ks...@googlegroups.com
SI프로젝트에서는 일반적으로 박성철님께서 제안하시는 방식으로 처리를 합니다.
단, 사용자가 많은 경우에는 서버 캐싱 뿐만아니라,
클라이언트 단에서도 캐싱기능을  사용합니다.
 
클라이언트에서 dom 형태로 element들을 캐싱합니다.
^^
2009년 10월 12일오전 10:18, 박성철 <gyu...@gmail.com>님의 말:

Sanghyuk Jung

unread,
Oct 11, 2009, 10:34:15 PM10/11/09
to ks...@googlegroups.com
저도 이 부분이 매번 프로젝트 할 때마다 뭔가 불만족 스러운 부분이였는데,
 
 expired time이 지정된 캐슁 + Custom tag 지원
 
이면 성능 + 개발편의성 + 코드 변경시의 유연성을 다 충족시킬수 있지 않을까 합니다.
 
캐슁 + 코드조회용 커스텀 태그를 쓰는 것까지는 해봤는데, 별도의 캐슁솔류션을 쓴 것이 아니고 map같은 객체에 넣어서 캐슁을 넣어두는 수준이여서, 코드 추가할 때마다 서버 재시작을 해 주었었던 적이 있습니다. 지금 생각하면 엄청난 삽질이였죠; 그래도 커스텀 태그로 코드이름을 찍을 수 있게 하니, jsp에서 몇글자 추가로 코드관련 처리가 다 되어서 개발할 때는 엄청 편했었습니다. option, checkbox와 같이 리스트를 가지고 오는 경우도 다 나름대로의 커스텀태그를 만들었었는데, 스프링Mvc에 다 비슷한 것들이 나중에 보니 있더군요; 


 
2009년 10월 12일오전 10:25, 손찬욱 <scu...@gmail.com>님의 말:

까오기

unread,
Oct 11, 2009, 10:37:16 PM10/11/09
to ks...@googlegroups.com
저희도 공통코드 서비스 만들고 ehcache써서 처리하고 있습니다. 
이게 가장 쉽고 편한거 같습니다. ^^ 


2009/10/12 안미라 <aclim...@gmail.com>

안미라

unread,
Oct 12, 2009, 4:29:26 AM10/12/09
to ks...@googlegroups.com

모두 감사드립니다.

Spring in Action에 보니 ehcache라는 것이 있네요.

처음 공부할때는 그냥 지나쳤었는데, 관심있게 봐야겠어요

안미라

unread,
Oct 12, 2009, 4:37:25 AM10/12/09
to ks...@googlegroups.com

공통코드 관련 질문 2탄입니다.

 

검색조건에 대한 검색 리스트를 표시하는 화면이 있습니다.

내역을 가져오는 쿼리에는 공통 코드값이 있으므로, 이 값을 코드명으로 치환을 해주어야하잖아요.

A는 쿼리문 작성시 공통코드테이블과 조인을 걸어 처음부터 코드명을 가져오는 방법이 있겠지요.
      
문제는 리스트에서 사용하는 공통코드의 종류가 많은 경우는 복잡한 조인이 발생하게 되겠네요.

B jsp단에서 공통코드key,와 공통코드명으로 구성된 Map객체로부터 코드명을 뽑아내는 방법도 있을 듯 합니다.

 

여기서 질문은 B의 경우 라고 했을 때 이게 JSTL을 쓰고 있어 예전에 쓰던 방식처럼 녹녹치가 않네요.

MapUtil.getCodeNm(Map map, String key) Method가 있다하면

 

<c:choose>
<c:when test="${!empty paginationInfo.dataList}"> 
<c:forEach var="item" items="${paginationInfo.dataList}"  varStatus="status">
           <tr>
                     <td><input style="border-style:none" type="checkbox" name="cbxClass" id="cbxClass" value="${item.contsDivId}"></td>
                     <td><c:out value="${item.contsDivId}"/></td>
           </tr>
</c:forEach>
</c:when>
</c:choose>

안미라

unread,
Oct 12, 2009, 4:45:24 AM10/12/09
to ks...@googlegroups.com

아 쓰던 메일이 날라갔어요.

 

공통코드가 포함된 조회목록을 표시하는 경우 공통 코드명은 어떻게들 표현하시나요?

A 공통코드 테이블을 조인해서 select 하는 험난한 방법이 1안이고
  
이부분은 공통코드의 종류가 많은 경우 상당한 조인쿼리가 예상됩니다.

B jsp단에서 공통코드가 포함된 Map을 통해 치환하는 방법이 2안입니다.
 
예를 들면 <%= MapUtil.checkNull(priceplanAllMap, (String) row.get("priceplan"))%> 이런 방식입니다.

C 혹은 다른 방법^^

 

저는 B의 방식으로 구현을 해보고자 하는데 JSTL과 섞여 있어 에고고  뜻대로 되질 않아요.

 

<c:choose>

<c:when test="${!empty paginationInfo.dataList}"> 

<c:forEach var="item" items="${paginationInfo.dataList}"  varStatus="status">

           <tr>

                     <td><input style="border-style:none" type="checkbox" name="cbxClass" id="cbxClass" value="${item.contsDivId}"></td>

                     <td><c:out value="${item.contsDivId}"/></td>

                     <td>여기에 MapUtil.checkNull Method를 이용하여 표현하려면 어떻게 해야할까요???</td>

           </tr>

</c:forEach>

</c:when>

</c:choose>     

 

고수님들의 도움 부탁드립니다.~

Sanghyuk Jung

unread,
Oct 12, 2009, 6:13:32 AM10/12/09
to ks...@googlegroups.com
되도록이면 별도의 커스텀 태그를 만드시는 것이 앞으로 더 편하실 것 같네요.

이전에 저는 <f:code name="row" property="priceplan" cd_type="AS30"/> 같은 형식으로 커스텀 태그를 만들었었습니다. (그 당시 Sturts를 쓰고 있어서 bean:write 태그와 비슷하게 ^^;) 코드태이블의 코드구분값을 cd_type이라는 파라미터로 넘겨서 미리 캐쉬되어 있는 코드값-이름 짝에서 찾도록 했는데, 이렇게 하니까 코드값이 있는 테이블을 읽어와도 jsp에서만 한줄 넣어주면 되니 무척 편하더군요.


아니면 바로 쓰셔야 한다면, static 메소드를 바로 선언만으로 커스텀 태그를 연결할 수도 있는데, 아래 링크를 참조하시기 바랍니다.


http://blog.naver.com/haruma95/80009565986


MapUtil.checkNull 을 code:chekcNull 이라는 커스텀 태크로 연결시킨다고 하면

${code:checkNull(priceplanAllMap, row.priceplan)} 쯤이 될 것 같네요.

row.get("priceplan")은 row.priceplan, 혹은 row['priceplan']으로도 잘 먹히더군요.




2009년 10월 12일오후 5:45, 안미라 <aclim...@gmail.com>님의 말:
Reply all
Reply to author
Forward
0 new messages