Spring Framework 4.0 안내

스프링 프레임워크가 3.0이 출시되고 4.0으로 버전업 하기까지 4년 가까운 시간이 흘렀습니다. 스프링 프레임워크의 프로젝트 리더인 Juergen Hoeller는 그의 블로그를 통해 첫번째 마일스톤이 완성되었음을 알렸습니다.
첫번째 마일스톤의 결과물의 다운로드 링크는 아직 제공하지 않았습니다. 
스프링 4.0의 테마는 Java SE8(아마도 Open JDK 8 build 88 이후 버전을 base로 작업하고 있는듯) 과 Java EE 7의 지원과 몇가지 사용성 기능 추가로 보입니다.

Juergen는 JAVA SE 8에 대한 지원이 개발되고 있으며 JDK 8 developer preview의 출시에 맞춰 2013년 9월경에는 release candidate 출시를 예상하고있습니다. 올 9월에있을 SpringOne에서 소개할 예정입니다.

다음과 같은 Java se 8의 기능이 지원됩니다
JSR-335 Lambda expressions.
JSR-310 Date-Time value types for Spring data binding and formatting.
Support for the new 1.8 byte code format (람다 표현식 지원을 위해 필요).

다음 JEE 7 기능 지원도 포함됩니다.
JSR-343 JMS 2.0.
JSR-338 JPA 2.1.
JSR-349 Bean Validation 1.1.
JSR-236 Java EE 7 Enterprise Concurrency support.
JSR-356 Spring's WebSocket endpoint mode.


http://www.infoq.com/news/2013/06/Spring_Framework_4.0_Announced

2013/07/08 13:03 2013/07/08 13:03
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

Java EE 7 출시 이벤트 - 라이브 웹캐스트 등록

오라클이 Java EE 7 출시 준비를 마치고 오는 6월 13일 온라인 웹캐스트 이벤트를 진행한다고 합니다.
9 a.m. PT / 12 p.m. ET / 5 p.m. London or
9 p.m. PT / 12 a.m. ET (Thursday) / 2 p.m. Sydney (Thursday)
라고 하니 우리나라 시간으로는 6월 13일 목요일 오후1시입니다.

이번 온라인 이벤트에서는

  • Business Keynote (Hasan Rizvi and Cameron Purdy)
  • Technical Keynote (Linda DeMichiel)
  • Breakout Sessions on different JSRs by specification leads
  • Live Chat
  • Lots of Demos
  • Community, Partner, and Customer video testimonials
  • 들을 다룰 예정이라고 하며 온라인 사전 등록 페이지에서 자세한 내용을 확인하실 수 있습니다.
    관심있으신 개발자는 등록하시고 들어보시는것도 나쁘진 않을것 같습니다.

    저는 breakout session 에서 json, websocket 1.0 , servlet 3.1 에 눈길이 가네요.

    아래 배너 클릭 하시면 등록페이지로 이동합니다.  

    2013/05/23 14:35 2013/05/23 14:35
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    평등. 공정. 정의.



    기회는 평등할 것입니다.
    과정은 공정할 것입니다.
    결과는 정의로울 것입니다.

    [Flash]


    2012/12/18 16:32 2012/12/18 16:32
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    에바Q 예고

    드뎌~ 개봉하는구나!!! 11월까지 기다려주맛!!

    사용자 삽입 이미지


    [Flash]


    2012/07/01 22:36 2012/07/01 22:36
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
    1. 에바 Q 라는것도 나오나보네요. 서 -> 파 -> Q 순인가요? 서를 봤는지 기억이 가물가물하네요. 본거 같기도 한데.. 별 거없이 우려먹기 수준이었던거 같기도 하고...

    Hibernate의 generated query와 MSSQL의 nolock 힌트에 대한 고찰

    하이버네이트와 같은 OR매핑 도구를 이용하게되면 개발자가 SQL 를 작성할 필요가 없어지고 ( 물론, createSQLQuery() 메소드를 통해 native query를 작성할 수 있지만 이번글의 주제와는 조금 다른 이야기이니 제쳐두자. ) OR매퍼에서 생성된 쿼리가 실행되는데 MSSQL과 hibernate를 이용할때는 한 가지 특수한 상황에 맞딱드리게 된다.

    바로 select lock.
    MSSQL, Sybase, DB2는 여타 DBMS와는 달리 select 쿼리에도 row level lock ( 트랜젝션이 몰리면 이 lock도 에스컬레이션해서 row -> page -> table lock으로 범위가 확대 )을 거는데 일반적인 web application을 개발하는데 select lolock은 DB성능을 떨어트리는 원인이되기때문에 대게 select 쿼리에 각 테이블에 with(nolock) 힌트를 줘서 락을 걸지 않도록 처리한다.

    이제 Hibernate로 돌아와서, hibernate에 의해  generate된 쿼리에는 with(nolock) 옵션이 기본 적용이 되지 않는다.  MSSQL에서 그냥 이용해도 하이버네이트 캐시시스템의 덕으로 문제가 발생하지 않을 수도 있지만 쿼리 실행 시 부하를 줄일 수 있는 방안이 있다면 적용하지 않을 이유가 없다.

    이와 같은 내용은 검색 엔진에 hibernate mssql nolock 등의 키워드로 찾아보면 많은 결과를 확인할 수 있다. 그 중에 https://forum.hibernate.org/viewtopic.php?f=1&t=934158 의 쓰레드를 통해 확인한 방법은 다음과 같다.

    [code]
    session.connection().setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
    [/code]

    물론, MSSQL의 READ COMMITTED 격리수준 등 더 깊이있는 주제들도 있지만 내가 DB Geek도 아니고... 프로그래머 입장에서 요 정도까지만..
    2012/06/12 18:27 2012/06/12 18:27
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    메이븐으로 원격 디플로이하기

    메이븐 플러그인을 통한 빌드 후 원격 디플로이
    Tomcat 6
    http://stove99.tistory.com/71


    Tomcat 7
    http://dasida.tistory.com/1055951

    2012/06/08 16:30 2012/06/08 16:30
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    mod_jk와 mod_proxy 차이점.

    2009년 7월 기준 mod_jk , mod_proxy 의 장단점.

    mod_proxy

    * Pros:
          o No need for a separate module compilation and maintenance. mod_proxy,
            mod_proxy_http, mod_proxy_ajp and mod_proxy_balancer comes as part of 
            standard Apache 2.2+ distribution
          o Ability to use http https or AJP protocols, even within the same 
            balancer.
    * Cons:
          o mod_proxy_ajp does not support large 8K+ packet sizes.
          o Basic load balancer
          o Does not support Domain model clustering
    

    mod_jk

    * Pros:
          o Advanced load balancer
          o Advanced node failure detection
          o Support for large AJP packet sizes
    * Cons:
          o Need to build and maintain a separate module

    출처 : http://stackoverflow.com/questions/1081918/apache-to-tomcat-mod-jk-vs-mod-proxy
    2011/09/26 13:25 2011/09/26 13:25
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    우왕 갖고싶당.. Air Swimmer

    [Flash]



    공기 중을 부양하는 물고기 Air Swimmer.. 가격도 40불 정도로 저렴하던데....
    진짜 사구 싶당.. 문제는 헬륨은 별매입니당 고갱님. 이라는거.
    2011/08/16 00:23 2011/08/16 00:23
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    잘못 알려지거나 무용지물이 된 Java 상식들

    2011/08/07 00:16

    서비 JAVA

    Java에 대해 잘못 알려지거나 java 5.0 이전의 정보로 현재의 java에서는 무용지물인 상식들이 몇가지 있는데 그런 종류의 상식에 대해 올바른 답을 전달하는 글이 있어 정리합니다.
    원문은 http://java.dzone.com/articles/incorrect-core-java-interview 입니다.
     
    Java의 인자 전달 방식은?
    이 질문은 자바 태생과 함께해온 오랜 질문 중의 하나로 제 과거 포스팅 '자바는 call by value? call by reference?' 에서도 언급했던 내용입니다. 하나의 기능에서 또다른 기능, 혹은 subroutine으로 인자를 전달하는 방식은 pass by value와 pass by reference 두 가지 방식이 존재합니다만 java 세상에서는 pass by value 만이 존재할 뿐입니다. reference의 값(reference by value)을 전달할 순 있지만 reference 자체를 전달할 순 없습니다. java reference는 Call By Sharing 으로 설명되기도 하지만 일반적으로 쓰이는 용어는 아닙니다.

    Garbage collection이란 무엇이며 어떻게 동작하는가?

    일반적으로 알려진 바로는 '어떤 변수에도 할당되지 않은 Object를 가비지콜렉터가 메모리에서 정리한다' 이죠. 맞는말이긴 합니다만 조금 더 정확히 기술하자면 Root context로 부터 더 이상 strong reference 되지 않은 Object가 가비지콜렉터의 대상이 됩니다. weak reference 혹은 soft reference Object가 그 대상인거죠.

    또한 System.gc()는 Full GC를 수행하라고 VM에게 힌트를 주는것이지  System.gc() 호출 시점에 GC가 수행되는것은 아닙니다. ( finalize 메소드의 오버라이딩을 자제해야 하는 이유. )

    Transient 와 Volatile 접근 제한자는 무엇인가?
    알려진 내용은 다음과 같죠.
    Transient 접근 제한자는 Object를 직렬화(serialize)하여 다른곳으로 전송하거나 객체를 저장할 때 Transient 제한자가 적용된 변수는 저장되지 않는다.  Volatile 접근 제한자는 해당변수를 컴파일러에게 해당 변수가 다른 프로그램에 의해 불규칙하게 변경될 여지가 있음을 알려준다.
    사실은 이렇습니다.
    transient 접근제한자는 오직 feild (클래스변수)에만 적용할 수 있으며, 지역변수에는 적용할 수 없습니다. static 변수에도 적용할수는 있지만 그 기능은 무시됩니다. trensient가 적용된 변수는 serialized 되진 않지만 writeObject(), readObject() 같은 커스텀 serialization을 통해 직렬화 할 수 있습니다.
    volatile 접근 제한자 역시 feild에만 적용할 수 있으며, compiler가 아닌 JIT 쪽에 필드값을 참조할 때 메인 메모리상의 필드값이 캐시(CPU의 L1,L2캐시)에 복사하도록(캐시를 갱신) 명시하는 역할을 합니다. 멀티쓰레드 환경에서 서로 다른 쓰레드들이 갱신되지 않은 캐시로 프로그램이 오작동 할 수 있는 부분에 적용할 수 있습니다.

    Integer 클래스와 int 의 차이점은 무엇인가?
    Integer는 java.lang 패키지에 정의된 클래스이며 int는 Java 언어 자체에 정의되어 있는 primitive 데이타 타입이다.
    딱히 틀린말은 아니지만 조금 더 정확히 표현하면 Integer는 int를 싸는(wrap) 참조 객체(reference to an object) 이고 autoboxing, unboxing이 도입된 이후의 Integer와 int의 가장 큰 차이점은 Integer는 null일 수 있는것과 == 연산자에서 Integer는 reference를 비교하거나 warpping된 값(int) 를 비교하는것 입니다. 아래 코드를 보시죠
    [code]
    Integer i1 = 1;
    Integer i2 = 1;
    // autoboxing이 적용되어 int값 비교로 true 출력.
    System.out.println(i1 == i2);

    Integer i3 = 3000;
    Integer i4 = 3000;
    // autoboxing이 적용되지 않고 reference 비교를 하기때문에 false 출력.
    System.out.println(i3 == i4);
    [/code]
    신기합니다. 두 Integer 객체 비교에 어떤 경우엔 true가, 또 어떤 경우엔 false가 됩니다.
    이 문제의 비밀은 java실행 옵션에 있는데요. SUN/Oracle JVM의 경우 integer값을 캐시하는 기본 최대값은 127입니다. 즉 127이내의 Integer를 비교하면 autoboxing이 적용된 int를 비교하게됩니다. 물론 이 옵션은
     -XX:AutoBoxCacheMax= or -Djava.lang.Integer.IntegerCache.high=2000
    과 같은 방법으로 변경할 수 있습니다.

    Thread의 상태는?
    Thread는 ready, running, dead 의 상태를 갖는다고 일반적으로 알려져 있습니다만 java 5.0으로 넘어오면서 Thread.State enum이 추가되면서
    NEW : 쓰레드가 시작되지 않은 상태
    RUNNABLE : JVM에서 쓰레드가 동작중인 상태
    BLOCKED : block되어 monitor lock을 기다리는 상태
    WAITING : 다른쓰레드가 특정한 행위를 수행할때까지 기약없이 대기하는 상태.
    TIMED_WAITING : 다른쓰레드가 특정한 행위를 수행할때까지 약속된 시간까지 대기하는 상태.
    TERMINATED : 쓰레드가 종료된 상태.
    의 6가지 상태로 구분됩니다.

    모든 클래스의 base 클래스는?
    java.lang.Object
    아마 모든 Java 입문서에 나와있는 내용일겁니다. 물론 일반적인 자바객체는 java.lang.Object를 상속하고 있습니다.
    하지만 이는 custom class에만 적용되는 이야기입니다. int.class, void.class와 같은 primitive 타입과 Object 그 자체는 super class가 없습니다.
    [code]
    Class parent = boolean.class.getSuperclass(); // returns null
    [/code]

    Java Beans란?
    java beans는 '다양한 환경에서 재사용이 가능하도록 디자인된 소프트웨어 컴포넌트이다.' 라고 설명 되기도 합니다. 하지만 Java Beans를 좀 더 구체적으로 설명하자면 '직렬화 가능하고(serializable) 인자없는 생성자를 가지며, getter ,setter 메소드를 통하여 프로퍼티에 접근 가능한 Java Object이다.'정도가 될것입니다.

    synchronized block vs. synchronized method.
    일반적으로 synchronized block이  synchronized method보다 lock을 거는 주기가 더 짧다고 알려져있습니다. 옳은 말이긴하지만 항상 그렇게 동작한다고 보증할 순 없는데요. 아래는 일반적으로 사용되고 있는 코드 예시로 synchronized block에 lock으로 this가 아닌 다른 object를 사용하고 있습니다. 이런 경우 synchronized block은 synchronized method로 lock을 걸게 됩니다. 결국 synchronized block으로 lock 영역을 줄인 의미가 없어지게 되는거죠.
    [code]
    Map<Key, Value> map = Collections.synchronizedMap(new LinkedHashMap<Key, Value>());
    // perform multiple operations in a thread safe manner
    synchronized(map) {
        Value value = map.get(key);
        if (value == null)
            map.put(key, value = new Value(key));
        return value;
    }
    [/code]

    2011/08/07 00:16 2011/08/07 00:16
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
    1. Blog Icon
      rkdgusrnrlrl

      안녕하세요 글 잘봤습니다. 제가 궁금하게 있어 질문은 남깁니다. Integer a = 10; 해서 a라는 Interger 타입의 클래스에 10라는 데이터를 담았습니다. 그리고 그 a의 주소값은 Integer b 에게 넘겨주려고 합니다. 기본적인 클래스의 방식 대로라면 Integer b = a; 이겠지만 이렇게 하면 값(10)이 넘어가 버립니다. 제가 원하는 것은 a 와 b 는 같은 주소를 공유해 a의 값에 변화가 생기면 b의 값에 변화를 주고 싶습니다. 그래서 a.hashcode(); 도 사용해봤는데 주소 값이 아닌 데이터 값이 10을 반환하더군요. a의 주소값은 얻어와 b에 그 주소값으로 설정해 줄수 있는 방법이 없을까요??

    2. Blog Icon
      서비

      rkdgusrnrlrl님 안녕하세요.
      java API를 유심히 살펴 보셨다면 java 언어가 wrapper 클래스를 님이 원하는 방식으로 사용하지 않기를 바랐다는것을 아실 수 있었을 겁니다.
      java.lang.Integer 는 public final class Integer extends Number 와 같이 정의되어 있습니다. 네.. final class 죠. 한번 생성 후 변경할 수 없는 클래스로 만들어져 있습니다. 이런 이유로 setValue() 나 setInt() 같은 메소드도 존재하지 않는것이구요. final class이기 때문애 값을 변경하려면 항상 새로운 객체를 할당할 수 밖에 없습니다.

      님과 같은 상황을 해결하려면 Integer를 멤버변수로 갖는 VO를 만들어 사용하시면 됩니다.

      public class IntegerData implements Serializable{
      private Integer i;

      public void setInteger(Integer i){
      this.i = i;
      }

      public Integer getInteger(){
      return this.i;
      }
      }

    3. 안녕하세요 transient 관련 글을 검색하다 방문했습니다. 좋은 글 잘 읽었습니다. 그런데 class에 final 키워드는 제가 알기로는 더 이상 상속을 불가능케 하는거지 생성된 인스턴스의 변경 불가와는 크게 상관이 없어 보이는데요 제가 잘못 알고 있는건가요? 관련 레퍼런스가 있다면 알려주시면 감사하겠습니다.

    4. Blog Icon
      rkdgusrnrlrl

      아 그럼 위의 방식으로 하게 되면 데이터 값 교환이 아닌 주소값 교환인 되는 건가요?? 이제 프로그래밍을 배우고 있고 지금 제가 자바 초급을 막 완료한 상태라 VO가 뭔지는 잘 모르겠니요^^;; 얼마전에 wrapper 클래스를 배우서 Integer라는 클래스가 int와 비슷한 기능을 해 관심을 갖고 있었거든요 c 에서는 포인트가 있어 int 변수의 주소 값을 가져올 수 있는 것 같은데 그런 점에서는 자바가 많이 아쉽네요ㅠㅠ 답변 감사합니다.

    5. @Saver

      맞습니다. 클래스에 final이 붙어서 Integer가 불변이 아니지요.

      값을 담고 있는 value가 final이라는 것을 보여주려고 하셨던 것 같습니다.

      private final int value;

      또한 setter가 없기 때문에 Integer의 내부의 value를 바꿀 수 없는 것이지요.

    비 잘온다..

    비 때문에 중부권이 난리다... 매년 연례행사 처럼 때마다 찾아오는 폭우.
    우연히 보게된 올림픽대교 상황.. 물 중간에서 오도가도 못하는 저 검은차는 어쩔...

    아래 사진을 보고있자니 뜬금없이 10년 전 제부도 일이 떠올랐다. 제부도는 하루에 두번인가 물길이 닫히는 시간이 있다. 당시에 같이 공부하던 동생들이랑 놀러갔다가 물길 닫힐 때 통제를하긴 하지만 꼬리를 물고 빠져나가던 그랜저랑 소나타가 중간 지점에서 바닷물에 잠기는걸 본적이 있다. 물론 중간에 멈췄을 때  구조대 출동해서 인명사고는 없었지만 물길 열렸을 때 그 두 대의 차는 어디론가 쓸려갔는지 흔적도 없었다는.. 당시에야 어리기도 했고 남의 일이기만한 신기한 구경거리 하나 봤다는 정도의 느낌이었는데.. 저 차안의 운전자 무사하시길...
     
    사용자 삽입 이미지

    2011/07/27 13:33 2011/07/27 13:33
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    구글 웹로그 분석 쿠키의 의미

    http://www.tutkiun.com/2011/04/a-google-analytics-cookie-explained.html

    구글 애널리틱스는  ‘__utma’ , ‘__utmb’, ‘__utmc’, ‘__utmz’, ‘__utmv’, ‘__utmx’. 의 여섯가지 키 값을 갖는 쿠키를 생성한다.

    각 쿠키의 의미는
    __utma : 유니크 방문자
    126210440.579990553.1301242771.1302852082.1302867721.40 와 같은 값을 가지며
    • 126210440 : Domain hash, unique for each domain
    • 579990553 : Unique Identifier (Unique ID)
    • 1301242771: Timestamp of time you first visited the site
    • 1302852082: Timestamp for the previous visit
    • 1302867721: Timestamp for the current visit
    • 40 : Number of sessions started


    __utmb , __utmc : 세션 트래킹
    126210440.14.0.1302875964860 와 같은 값을 가지며
    • 126210440 : Domain hash, unique for each domain
    • 14 : Number of page views in current session
    • 0 : Starts with 10 and this count decreases to 0 after every outbound link click
    • 1302875964860 : Timestamps of current session time

    __utmz : 트래픽 소스
    126210440.1302625640.30.3.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=page%20load%20javascript 와 같은 값을 가지며
    • 126210440 :  Domain Hash
    • 1302625640 :   Timestamp when cookie was set
    • 30 : Session number
    • 3 : Campaign number
    • utmcsr=google : Campaign source
    • utmccn=(organic):  Campaign name
    • utmcmd=organic :  Campaign medium [Organic, referral, cpc and email]
    • utmctr=page%20load%20javascript : last keyword used to enter in site.


    __utmv : 커스텀 밸류
    126210440.|custom params
    • 126210440 : Domain Hash
    • Custom Values Custom values specified in user custom variables


    __utmx : 웹사이트 옵티마이저
    이 키는 구글 웹사이트 옵티마이저 트래킹 코드를 삽입했을 때 생성된다.

    2011/07/18 22:18 2011/07/18 22:18
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    세계적 온라인 서비스업체의 Web Technology Stack

    '세계 유수의 온라인서비스 업체에서 웹서비스 개발에 이용하고 있는 언어는 무엇일가?' 에 관한 포스팅이 있어 소개한다.
    Web Technology Stack [Analysis] (해당 사이트의 기고문의 신뢰도는 모르겠다. 처음 발견한 사이트라..)
    facebook이 php로 구현된건 알고 있었지만 backend 는 java와 같은 다른 언어로 구성되었다니 몰랐던 사실이다. 표를 보면서 느낀점은 웹관련 스택은 참 많이도 쪼개져 있구나.. 역시 silver bullet은 없구나.. 스크립트 언어로 그들 정도 서비스를 유지하려면 서버가 얼마나 많이 필요할까.. 같은 잡 생각? ㅋ

    Product Front End Back end Database Others
    Twitter Ruby on Rails (RoR), JavaScript, jQuery
    LabJS, Modernizr, JSON-P, oEmbed
    Scala Cassandra Java, C, Python, Mustache templating language
    Facebook PHP, XHP, Hiphop for PHP, JavaScript C, C++, Java Cassandra, MySQL Python, Erlang
    LinkedIn JSP, Apache Coyote Web Server Spring MVC, Linkedin spring, grails, Oracle and MySQL ActiveMQ for JMS, Lucene as a foundation for search, DWR, Jetty, Eh-cache, Quartz, Spring remoting.
    YahooMail HTML, CSS, JavaScript (with YUI 3) PHP MySQL Apache Traffic Server (formely known as Yahoo! Traffic Server).
    Google + Closure framework, including Closure’s JavaScript compiler and template system, HTML5 History API Closure templates server-side, C++, Java, or Python BigTable and Colossus/GFS MapReduce
    FourSquare scala(lift framework) scala

    Amazon S3 for hosting, /img/ folder which is served by nginx directly

    MongoDB load balancer(s): nginx/0.8.52

    Lift- A web framework written in scala.

    Youtube Python psyco, a dynamic python->C compiler MySQL
    Quora Python and JavaScript LiveNode/webnode2, Thrift (Communicate to backend)

    Amazon EC2 and S3 for hosting

    MySQL + memcached C++
    Load Balancing: nginx in front of HAProxy
    Viddler PHP, Python Rails 2.x, ffmpeg/mencoder/x264lib, Java 1.6 / Spring / Hibernate / ehcache, Erlang

    Amazon EC2 and S3 for hosting

    Mysql 5.0 Hadoop HDFS (distributed video source storage)
    Nginx/Keepalived (Load balancers for all web traffic)
    Wowza (RTMP video recording server)
    Mediainfo(reporting video metadata)
    Yamdi (metadata injector for flash videos)
    Puppet(configuration management)
    Logcheck(log scanning)
    Duplicity(backup)
    StackOverFlow jQuery, ASP .NET C#, Microsoft ASP.NET (version 4.0), ASP.NET MVC 3, Razor. LINQ to SQL, some raw SQL Server HAProxy (for load balancing), Bacula(for backup), Redis(caching layer)
    Disqus jQuery,EasyXDM, Sammy, Flot, Raphaël, JSHint Python scripts, Django, Celery, South PostgreSQL, memcached HAProxy + heartbeat (Load balancing)

    2011/07/18 21:54 2011/07/18 21:54
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    jQuery 1.6.1 릴리즈, 성능 , 버그 픽스 내용

    성능향상과 몇몇 주요한 bug fixed 1.6 (글 작성 시점엔 1.6.1) 이 릴리즈 되었습니다.

    data 부분 성능 향상이 눈에 띄네요.

     

    1.6에서 코딩 상 중요한 변경 점은 기존엔 attribute, property 모두 .attr() 메소드를 이용했다면

    1.6에서는 구분하여 .attr(), .prop() 을 이용하게 되었다는 겁니다.

    일례로 흔하게 쓰는 체크박스의 checked 프로퍼티를 기존에는

    .attr( checked , true );  처럼 attribute 조작 메소드로 다루던 것을 .prop(checked , true );와 같이

    프로퍼티 전용 메소드로 변경했습니다.

    기존에는 ele.attr( checked) 으로 체크박스 상태를 검출 하는게 가능했지만 1.6에서는 그냥

    빈 문자열을 리턴하기 때문에 ele.prop( checked) 로 확인해야 합니다.
    attribute와 property 구분이 html 엘리먼트에만 국한된 게 아니라 DOM 엘리먼트까지 적용됩니다.

    attribute와 property 구분은 다음과 같습니다.

    Attribute/Property

    .attr()

    .prop()

    accesskey

    align

    async

    autofocus

    checked

    class

    contenteditable

    defaultValue


    draggable

    href

    id

    label

    location *

    multiple

    nodeName


    nodeType


    readOnly

    rel

    selected

    selectedIndex


    src

    style

    tabindex

    tagName


    title

    type

    width **

    * For example, with window.location
    ** If needed over .width()

    Neither .attr() nor .prop() should be used for getting/setting value. Use the .val() method instead (although using .attr(“value”, “somevalue”) will continue to work, as it did before 1.6).
     

    attribute, property 구분으로 인해 기존 1.6 이전 버전으로 개발을 진행한 상태에서
    1.6 적용 시 소스를 수정해야하는 부분이 상당할 수 있기 때문에 적절한 판단을 해야 할 것 같습니다.

     

    1.6에서 변경된 개략적인 내용은 전체 릴리즈 노트
    http://blog.jquery.com/2011/05/03/jquery-16-released/
    http://blog.jquery.com/2011/05/12/jquery-1-6-1-released/ 
    를 참조하세요.

    2011/06/15 11:28 2011/06/15 11:28
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    제임스 고슬링 구글로 이적

    자바의 아버지 제임스 고슬링 아저씨가 구글로 그 자리를 옮겼다고 합니다. 뭐 썬이 오라클로 넘어가면서 자연스레 오라클 소속이 되었다가 작년에 그만두었죠(http://kldp.org/node/114063). 일년의 공백 후 구글로 입사한 거니 딱히 자리를 옮겼다고 표현하기에도 뭐하지만요. 오라클의 자바 및 오픈소스 지원정책에 불만이 있었기에 오라클을 그만둔 그의 다음 포지션을 많은 이가 궁금해 했을 겁니다. IBM 정도가 아닐까 예상했는데.. 구글로 가는군요. 구글의 비공개 직위로 간다는데 이게.. 오라클과의 특허 분쟁 방어용으로 가는건지 혹은, 자바나 또다른 언어를 위한 것인지는 아직 알려진 바는 없습니다. 그의 강연이나 이전까지 보여준 독설이나 자바 옹호 행위에서 느낀 것은 고슬링아저씨가 위대한 사람이긴 해도 성인군자 스타일은 아니란 거죠. 오라클을 엿먹이기 위해 구글과 손잡았을 가능성도 전혀 배제하진 못하겠네요. 그 정도 창의력이 있는 사람이라면 앞으로도 혁신적인 일로 인류에 공헌하면 좋겠어요.
    2011/03/29 12:26 2011/03/29 12:26
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

    Unable to compile class for JSP

    2011/03/22 03:09

    서비 JAVA , ,

    java / jsp 개발 시 거의 보기 어려운 익셉션으로 대게 아래와 같은 익셉션을 출력한다.
    [code]
    org.apache.jasper.JasperException: Unable to compile class for JSP:

    An error occurred at line: 3 in the jsp file: /src/test/test.jsp
    Employee cannot be resolved to a type
    1: <%@ page language="java" import="java.util.*,com.employee.*" pageEncoding="ISO-8859-1"%>
    2: <%
    3: Employee ddd = new Employee();
    4: %>
    [/code]

    익셉션 출력물 그대로 jsp 파일을 .class 파일로 검파일 하지 못했다는 의미이다. 왜 그럴까?
    예상하건데 첫 번째 라인의 import 내용과 3번째 라인의 클래스 생성코드를 삭제하고 실행하면 페이지가 열릴 것이다.
    그럼, 이 예외상황은 import한 클래스를 찾지 못한 것인가? 그렇지 않다. import 가 잘못되었다면 NoSuchClassFound 같은 익셉션을 보게 될 것이다.

    위와 같은 오류를 만나면 아래 jsp를 적당한 이름으로 저장한 후 컨텍스트 루트, 즉 WEB-INF 디렉토리가 있는 경로에 소스를 올리고 jsp를 호출해 보자.
    [code]
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       <html>  
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
    sun.boot.class.path : <%= System.getProperty("sun.boot.class.path") %>
    sun.boot.library.path : <%= System.getProperty("sun.boot.library.path") %>
    java.library.path : <%= System.getProperty("java.library.path") %>
    java.class.path : <%= System.getProperty("java.class.path") %>
    getClassLoader() : <%= this.getClass().getClassLoader() %>
    DocumentBuilderFactory : <%= javax.xml.parsers.DocumentBuilderFactory.newInstance() %>
    /javax/xml.parsers/DocumentBuilderFactory.class : <%= this.getClass().getResource("/javax/xml.parsers/DocumentBuilderFactory.class") %>
    SAXParserFactory : <%= javax.xml.parsers.SAXParserFactory.newInstance() %>
    /javax/xml/parsers/SAXParserFactory.class : <%= this.getClass().getResource("/javax/xml/parsers/SAXParserFactory.class") %>
    TransformerFactory : <%= javax.xml.transform.TransformerFactory.newInstance() %>
    /javax/xml/transform/TransformerFactory.class : <%= this.getClass().getResource("/javax/xml/transform/TransformerFactory.class") %>
    <hr>
    Servlet : <%= application.getMajorVersion() %>.<%= application.getMinorVersion() %>
    JSP : <%= javax.servlet.jsp.JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion() %>
    ServerInfo : <%= application.getServerInfo() %>
    RealPath : <%= application.getRealPath("/") %>
    ContextPath : <%= request.getContextPath()%>
    <hr>
    totalMemory : <%= Runtime.getRuntime().totalMemory() %>
    maxMemory : <%= Runtime.getRuntime().maxMemory() %>
    freeMemory : <%= Runtime.getRuntime().freeMemory() %>
    <hr>
        </body>
    </html>
    [/code]
    위 소스를 실행하면 몇몇 중요한 정보를 얻을 수 있는데 그중에 request.getContextPath() 값을 한번 확인해 보자.
    개발 시 의도했던 컨텍스트 루트가 아닐 가능성이 크다.
    컨텍스트 루트가 의도했던 루트와 다르다면 웹서버든.. WAS든 host 설정과 관계된 설정파일을 보면서 해당 문제를 교정하면 된다.
    원인은 컨텍스트가 다름으로 인해 import한 클래스를 클래스로더가 찾을 수 없어 발생하는 현상이다.

    한가지 팁이라면 톰켓 + 가상호스트로  구성한 웹 어플리케이션의 컨텍스트 루트가 / 라면  [CATALINA_HOME]/conf/Catalina/[HOST_NAME]/ROOT.xml 의
    Context 항목의 docBase는 "[웹어플리케이션경로]/ROOT" 와 같이 설정되어야 하고, 웹어플리케이션의 또한 [웹어플리케이션경로]/ROOT/  아래에 배포되어야  한다.

    2011/03/22 03:09 2011/03/22 03:09
    Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
    1. Blog Icon
      김진규

      와 진짜 정말 도움 많이됐습니다 ... 이 문제였어요 ㅠㅠ