2011년도말 슬라이드이지만 아직도 Spring Framework3를 사용하는 곳이 많으므로 아직도 볼만한 자바 웹개발 시작하기 슬라이드 모음

(현재 2013년 12월경에 Spring Framework 4.0이 나왔지만 아직 4.0대로 완전히 넘어가지 않았고 3.0과 비슷한 점이 많으니 3.0쪽을 많이 보면 됨. 2.0에서 3.0으로 넘어갈때 @(annotation)으로 바뀌면서 완전 바뀌고 3.0에서 4.0으로 넘어갈때엔 xml를 가급적 피하고 java단에서 처리하려는 느낌이 많이 듦)


Buy me a coffeeBuy me a coffee

[Hello world 오픈세미나]spring upgrade


스프링 어플리케이션의 문제해결사례와 안티패턴



Buy me a coffeeBuy me a coffee

카산드라(Cassandra) 최신 버전 CLI프로그램을 실행하려니 아래와 같은 오류가 나옴을 확인할 수 있습니다.

현재 이 맥에서는 JDK 1.6이 설치된 상태입니다.


Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/cassandra/cli/CliMain : Unsupported major.minor version 51.0


이 에러는 자바(Java)의 컴파일 버전이 충돌이 났을때 생기는 에러입니다.

아래 표는 자바 클라스 버전 명칭을 정리한 표입니다.

  major.minor version

Java SE 8 

52

Java SE 7

51

Java SE 6

50

Java SE 5

49

Java SE 1.4

48

Java SE 1.3

47

Java SE 1.2

46

Java SE 1.1

45


정리하면 JDK 1.7로 컴파일된 class파일을 맥에 깔린 JDK 1.6에서 로드할때 "JDK1.7 class파일은 지원하지 않습니다" 에러를 뿝는거라고 보면됩니다.


위의 경우는 맥에 JDK1.7을 설치하면 해결된다고 보면 됩니다.

Buy me a coffeeBuy me a coffee

java 8 람다식 소개와 의미 고찰


박성철님의 자바 8 람다의 이해와 의미 슬라이드


자바 8에서 람다의 내용을 다룬 슬라이드.

아직도 현업에서는 자바 6을 쓰고 있는데 벌써 자바 8이라니 @.@

Buy me a coffeeBuy me a coffee


Java의 날짜, 시간 클래스의 단점을 이야기 하며 JDK8에서 해결되었다고 보여주는 글.


나라마다,지역마다 역사에 따라, 종교에 따라 날짜와 시간이 달라지는 경우가 있으니, 날짜, 시간 API 설계가 어렵다는걸 느끼게 하였고, 만약에 API를 구현한다면 신중해야한다는걸 깨달았음.


ps. 예전, 스프링 프레임워크로 프로젝트할때 날짜와 시간때문에 고생한 기억이 난지라 ㅠㅠ


Buy me a coffeeBuy me a coffee



iBatis로 작업하다 아래의 에러가 나왔다.


심각: Servlet.service() for servlet dispatcher threw exception

java.sql.SQLException: Error: executeQueryForObject returned too many results.


위의 에러는 executeQueryForObject 대신 executeQueryForList로 사용하면 된다.

건수가 많을 경우 executeQueryForObject를 사용할때 이런 에러가 나온다.


요즘 iBatis로 작업하는 일이 많군요. @.@


Buy me a coffeeBuy me a coffee

아래의 URL들은 Spring Security에서 가상 URL로 처리하는 URL이며, 서블릿 필터 처리 과정에서 감시 되고 처리된다.

위와 같은 URL은 웹 어플리케이션의 Context ROOT에 대해 상대 경로를 가진다.


  • /j_spring_security_check
    사용자명/비밀번호 폼 인증을 위해 UsernamePasswordAuthenticationFilter를 통해 확인함.
  • /j_spring_openid_security_check
    (OpenID Provider에 의해) 반환되는 OpenID 인증을 위해 OpenIDAuthenticationFilter를 통해 확인함.
  • /j_spring_cas_security_check
    CAS SSO 로그인으로부터 돌아옴과 동시에 CAS 인증에서 사용됨
  • /spring_security_login
    auto-generate 로그인 페이지를 사용하도록 설정할때 DefaultLoginPageGeneratingFilter에서 사용하는 URL
  • /j_spring_security_logout
    로그아웃 액션을 감지하기 위해 LogoutFilter에서 사용하는 URL
  • /saml/SSO
    SAML SSO 사인 온 요청을 처리하기 위해 스프링 시큐리티 SAML SSO 확장 SAMLProcessingFilter에서 사용하는 URL
  • /saml/logout
    SAML SSO 사인 아웃 요청을 처리하기 위해 스프링 시큐리티 SAML SSO 확장 SAMLLogoutFilter에서 사용하는 URL
  • /j_spring_security_switch_user
    사용자를 다른 사용자로 전환하기 위해 SwitchUserFilter에서 사용하는 URL
  • /j_spring_security_exit_user
    사용자 변경 기능을 빠져나가기 위해 사용하는 URL


Buy me a coffeeBuy me a coffee

자바 웹 개발을 하다 아래의 클래스를 불러들이는데에 문제가 생겼습니다.


import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


Eclipse에서 위의 클래스가 import 가 안되는 것이였다. -_-;;

자바 웹 개발에서 가장 기본인 servlet-api.jar 가 빠져서 나오는 거였습니다. Tomcat에서 HttpServletRequest ,HttpServletResponse 등 가장 많이 쓰는 클래스가 들어있는 패키지입니다.

Tomcat에서 servlet-api.jar 파일을 import하여 해결하였습니다만 왜 저런 에러가 나오는지 이해안되군요.

문제 해결은 했으니 원인은 못찾고.. 일정은 급하니 다음에 확인하기로 하였다.

Buy me a coffeeBuy me a coffee

스프링 프레임워크(Spring Framework)에서 빈(Bean)의 생활 주기(Life Cycle)


Java Bean을 자바섬의 커피콩으로 생각하면...... -ㅁ-

Buy me a coffeeBuy me a coffee

Android 프로그래밍을 하다 C코드를 Java코드와 연동해야하는 일이 생겼습니다.

Android NDK를 이용해 빌드하다보니 ant를 사용하여 안드로이드 프로그램을 빌드하였습니다.

Linux에서 빌드할때와 Mac OSX에서 빌드할때 미묘한 차이가 생기더군요.


Java로 된 안드로이드 소스코드는 UTF-8로 분명히 저장되어 있는데, Ant가 Linux에서 돌릴때엔 ascii로 인식해서 컴파일을 하더군요. 결국엔 안드로이드 어플에 한글이 깨져 나오는 문제가 있습니다.

Mac에서는 아무런 문제없이 빌드되고 안드로이더 어플에 한글이 깨져나오는 일이 없습니다. 참 미묘하기도 하지요?


참고로 CentOS5에 설치한 Ant 버전은 아래와 같습니다.

[studioego@localhost ~]$ ant -version

Apache Ant version 1.7.1 compiled on June 27 2008

[studioego@localhost ~]$ 



그리고 Mac  OSX 10.6에 설치된 Ant버전은 아래와 같다.

Dae-Hyun-Sung-ui-MacBook-Pro:~ studioego$ ant -version

Apache Ant version 1.8.1 compiled on September 21 2010

Dae-Hyun-Sung-ui-MacBook-Pro:~ studioego$


CentOS5 에서 Ant를 실행했을때


$ ant debug

Buildfile: build.xml

    [setup] Android SDK Tools Revision 8

    [setup] Project Target: Android 2.2

    [setup] API level: 8

    [setup] 

    [setup] ------------------

    [setup] Resolving library dependencies:

    [setup] No library dependencies.

    [setup] 

    [setup] ------------------

    [setup] 

    [setup] 

    [setup] Importing rules file: tools/ant/main_rules.xml


-debug-obfuscation-check:

-set-debug-mode:

-compile-tested-if-test:

-dirs:

     [echo] Creating output directories if needed...

    [mkdir] Created dir: /******/bin/classes

-pre-build:

-resource-src:

     [echo] Generating R.java / Manifest.java from the resources...

     [null] /home/studioego/android/platform-tools/aapt: /usr/lib/libz.so.1: no version information available (required by /home/studioego/android/platform-tools/aapt)

-aidl:

     [echo] Compiling aidl files into Java classes...

-pre-compile:

compile:

    [javac] Compiling 5 source files to /******/bin/classes

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]            ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]             ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]              ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]               ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]                ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]                 ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]                  ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]                   ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]                    ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]                      ^

(생략)

    [javac] 100 warnings

(생략)



이후 소스코드는 UTF-8로 분명히 저장했는데도 안드로이드 어플에서 글씨가 깨져 나옵니다.


Mac OSX 10.6 Snow Leopard 에 탑재된 Ant를 실행했을때

$ ant debug

Buildfile: /******/build.xml

    [setup] Android SDK Tools Revision 10

    [setup] Project Target: Android 2.2

    [setup] API level: 8

    [setup] 

    [setup] ------------------

    [setup] Resolving library dependencies:

    [setup] No library dependencies.

    [setup] 

    [setup] ------------------

    [setup] 

    [setup] 

    [setup] Importing rules file: tools/ant/main_rules.xml

-debug-obfuscation-check:

-set-debug-mode:

-compile-tested-if-test:

-pre-build:

-dirs:

     [echo] Creating output directories if needed...

-aidl:

     [echo] Compiling aidl files into Java classes...

-renderscript:

     [echo] Compiling RenderScript files into Java classes and RenderScript bytecode...

-resource-src:

     [echo] Generating R.java / Manifest.java from the resources...

-pre-compile:

...

(생략)

BUILD SUCCESSFUL

Total time: 10 seconds


소스코드도 UTF-8로 저장되었고 안드로이드 어플에서 한글이 깨지는 일이 없이 문제 없이 돌아갑니다. 


ant의 버전 차이때문에 그런건가요?


이 문제 때문에 Linux용 최신 ant binary 버전을 다운 받아서 사용했어도 똑같은 일이 발생하더군요.

버전문제는 아는 것 같고.. Linux용 ant를 직접 빌드해서 사용해야 문제가 해결될까요?


한글이 깨지는 문제때문에 구글링 한 결과 android-sdk폴더안의 파일을 수정해야되더군요

android-sdk디렉토리 안에 있는 tools/ant/main_rules.xml 을 열고 나서 

<property name="java.encoding" value="ascii" /> 부분을 찾습니다. 

 120     <!-- compilation options -->

 121     <property name="java.encoding" value="ascii" />

 122     <property name="java.target" value="1.5" />

 123     <property name="java.source" value="1.5" />

이후 ascii를 UTF-8로 수정후 저장합니다.

 <property name="java.encoding" value="UTF-8" />

이후에 다시 ant로 안드로이드 어플 컴파일 하면 한글이 깨지는 문제가 사라집니다.

참조: android: getting rid of “warning: unmappable character for encoding ascii”

(역시 구글링하면 모든 문제가 대부분 해결 되더군요 ㅎㅎ)


참고로 Mac OSX에선 기본적으로 UTF-8로 설정되어서 위와 같이 한글이 깨지는 문제가 없더군요.

아래는 맥의 ant 설정파일의 내용입니다.

/Users/studioego/android-sdk-mac_86/tools/ant/main_rules.xml

124     <!-- compilation options -->

125     <property name="java.encoding" value="UTF-8" />

126     <property name="java.target" value="1.5" />

127     <property name="java.source" value="1.5" />


Buy me a coffeeBuy me a coffee

+ Recent posts