프로그래밍 156

MVC 프레임웍의 선택

OK JSP에서 글을 읽다가 재미난 글이 하나 있어서 첨부한다. http://raibledesigns.com/rd/entry/comparing_jvm_web_frameworks_presentation 재미있는 조사 결과인데, 한국에서는 Struts가 압도적인 지지자층을 가지고 있는것과는 달리 전세계적인 추세는 JSF가 추세이다. WLS에 JSF가 포함된지도 오래되었는데, 국내에 케이스가 안올라오는 것을 봐서, 그다지 많이 사용하지 않는 것으로 추측되는데, 이런 추세라면 아마도 JSF가 주류로 따라 가지 않을까? 아마도 OKJXX 아저씨들이 JSF에 대한 관심을 기울여주지 않아서 일까? 나름 재미있는 결과 였음. 그리고 또하나 Spring MVC가 점점 그 세를 확장한다는것이 주목할만한것 같다. 요즘 왠만..

프로그래밍/MVC 2007.11.19

XDoclet 간단 예제..

반복되는 코딩이나 코드 자동화에 유익하게 사용할 수 있음 http://www.liuzehua.com/xdoclet_tutorial/ JDK 1.5의 Annotation을 지원하는 버전이 있음 참고하기 바람. == XDoclet provides a powerful mechanism for attribute-oriented and template-based code generation. As illustrated in this tutorial, it could be used to help reduce the amount of copy-and-paste work (or sometimes called "no-brain" work) that programmers have to perform from time to..

Java Application의 Locking 처리문제

Java AP에서 Locking처리 방법은 Synchronized 를 사용하는 방법이 대표적인데 이 경우에는 하나의 JVM Instance 내에서만 동기화 처리가 가능하다. 시스템을 설계할때, 다중 인스턴스 구조의 부하 분산 환경을 고려한다면, 인스턴스내의 Locking 처리인지 아니면 인스턴스간의 Locking처리가 필요한지를 먼저 결정해야 하고, 인스턴스간의 Locking처리인 경우에는 DB나 아니면 기타 (RMI,JMS등) 방법을 사용하는 방식이 있다. 특히 DB의 Lock 처리 메커니즘을 생각할때 고려할 부분은 보통 다음과 같은 구조로 만드는 경우가 많다. 1: select LOCK 2: if( unlocked){ 3: update set LOCK 4: }else { return "Lock이 걸려..

업그레이드된 개발자 되기

월간 마이크로소프트웨어 9월에 기고한글 짧은 시간에 작성해서 완성도는 낮지만 고려해서 읽어주세요. == 시점의 변화 소프트웨어 개발은 컴퓨터를 가지고 개발자가 하는 작업이다. 그러나 좀더 깊게 생각해보면 소프트웨어 개발은 결국 사람과 사람이 하는 작업이다. 소프트웨어 개발 작업을 하는 데 있어서, 기술적인 면이 아닌 생각하고 일을 하는 면에서 조금 관점을 변화시켜야 할것들을 살펴보자. 1. 지금 무엇을 하고 있는가? 소프트웨어 개발 프로젝트뿐만 아니라, 지금 하고 있는 일의 의미와 목적에 대해서 생각해 본적이 있는가? 모든 일에는 그 목적을 위해서 제때 적절한 사람이 해야 할 일이 있기 마련이다. 일을 하다 보면, 일에 대한 목적과 원래 의미는 잊혀지고 전혀 엉뚱한 이슈에 많은 시간을 낭비하는 경우가 많..

LinkedHashMap을 이용한 간단한 Cache 만들기..

final static int MAX_CACHE_SIZE=20; static Map cache = new LinkedHashMap(MAX_CACHE_SIZE,0.75f,true){ private static final long serialVersionUID = 1; @Override protected boolean removeEldestEntry (Map.Entry eldest) { return size() > MAX_CACHE_SIZE; } }; private synchronized void putCache(String userId,List list){ cache.put(userId, list); } private synchronized List getCache(String userId){ return..