2010년 8월 25일 수요일

브라이언 푸트(Brian Foote)

브라이언 푸트(Brian Foote)만큼 훌륭하게 패턴을 설명한 사람은 없는것 같다.

게으르고 영약한 건축가가 있었다. 어느날 이 건축가가 대학 건물과 그 주변 통행로를 설계하게 되었는데 대학 건물만 설계하고 통해로는 방치한 채 게으름을 피웠다. 결국 사람들은 정해진 통행로가 없었기 때문에 자기 좋을대로 건물 주위를 돌아다녔다. 겨울이 되어 큰눈이 내리고 사람들이 돌아다닌 발자국에 의해 나타난 길을 사진으로 찍어 봄에 통행로를 설계하였다.

이렇게 완성된 통행로는 다니기에도 편했고 주변건물과도 잘어울렸다.

패턴이란 바로 이런것이다.

패턴은 어떤 분야에서 계속 반복해서 나타나는 문제들을 해결해 온 전문가들의 경험을 모아서 정리한 것이다. 누가뭐래도 대학 건물 주변의 동선을 제일 잘 알고있는 전문가는 바로 매일 건물 주변을 돌아다니던 사람인 것이다.

게으르고 영악한 건축가는 누가 전문가 인지 잘 알고 있었고 그러한 전문가들의 경험을 활용한 것이다.

2010년 8월 20일 금요일

B2BI

 B2B통합이란 기업 내 서로 다른 응용 프로그램들을 통합하는 전사적(全社的) 애플리케이션통합(EAI; Enterprise Application Integration) 시스템을 기업간(B2B)으로 확장한 것이다. EAI가 단일 기업에 국한돼 있다면, B2BI는 B2B 거래 시 발생하는 비즈니스 프로세스를 중심으로 기업과 기업 간, 기업과 e마켓플레이스 간, e마켓플레이스와 e마켓플레이스 간의 시스템을 통합한다는 것이다. 특히 최근 들어 국내 e마켓플레이스들의 서비스가 본격화되면서 B2BI에 대한 관심이 증가하고 있는데, 이미 대기업을 주주 및 회원사로 두고 있는 대형 e마켓플레이스들이 이들 기업과 원활한 시스템 연계를 추진하고 있다. 이제까지 B2B 시스템은 주로 경매·역경매·구매처리 등을 중심으로 추진, 발전돼 왔으나 완전한 B2B 서비스를 위해서는 백 엔드(Back End) 시스템 차원의 통합이 필요하기 때문이다. 물론 B2BI를 구현하려면 이를 지원하는 미들웨어 형태의 솔루션이 필요하다. 이 시장에는 주로 EAI에서 B2B로 영역을 확장하고 있는 해외 EAI 업체들과 통합 B2B 솔루션 개발을 추진하고 있는 국내 업체들이 적극 나서고 있다.

2010년 7월 30일 금요일

안드로이드 커리큘럼

[Introduction]
- 안드로이드 소개, OS, JDK, Android SDK, Eclipse 설치 및 환경 설정 및 툴 사용법
- 안드로이드 어플리케이션의 구조(액티비티) 및 구성(디렉토리 구조, Manifest 파일 등)에 대한 학습

[View and Common Widget, Layout]
- View, TextView, Button, ImageView, ImageButton, CheckBox, RadioButton
- 레이아웃들(LinearLayout, RelativeLayout, TableLayout, ScrollView)에 대한 화면 구성 방법

[Advanced Widget Resource]
- ArrayAdapter, ListView, Spinner, GridView, Tab Widget
- 리소스 관리 및 사용하기

[Webkit, Graphic]
- WebKit을 사용한 웹 브라우징 및 WebClient를 통한 사용자 인터페이스
- 안드로이드의 그래픽 기능 및 사용자 이벤트 처리법

[Menu, Thread]
- 옵션메뉴와 컨텍스트 메뉴, 메뉴 인플레이션
- 안드로이드의 스레드 모델

[Intend]
- 인텐트 소개 및 인텐트를 통한 액티비티간, 액티비티
- 서비스간 통신, 인텐트를 사용해 안드로이드의 기능을 사용하는법

[Service, Broadcast Receiver, Phone Function ] - 브로드캐스트 리시버 작성하기
- 전화 걸고 받기, 문자메시지(SMS) 송수신 기법

[Network programming]
- 소켓 및 HTTP를 사용한 네트웍 프로그래밍 기법

[Map DB & File]
- GPS에 기반한 지도 서비스 사용법
- 안드로이드에서 파일 억세스, Content Provider 및 자체 DB인 sqlite 사용법

[Application upload and Publishing]
- 안드로이드 앱 스토어에 올리기 위해 어플리케이션에 서명 및 퍼블리싱 기법
- 안드로이드 개발보드를 활용한 실습

[개발보드 활용]
- 스마트폰 사례를 통한 실제 안드로이드 개발보드를 활용한 실습

2010년 5월 18일 화요일

How Will Java Technology Change My Life?

We can't promise you fame, fortune, or even a job if you learn the Java programming language. Still, it is likely to make your programs better and requires less effort than other languages. We believe that Java technology will help you do the following:

  • Get started quickly: Although the Java programming language is a powerful object-oriented language, it's easy to learn, especially for programmers already familiar with C or C++.
  • Write less code: Comparisons of program metrics (class counts, method counts, and so on) suggest that a program written in the Java programming language can be four times smaller than the same program written in C++.
  • Write better code: The Java programming language encourages good coding practices, and automatic garbage collection helps you avoid memory leaks. Its object orientation, its JavaBeansTM component architecture, and its wide-ranging, easily extendible API let you reuse existing, tested code and introduce fewer bugs.
  • Develop programs more quickly: The Java programming language is simpler than C++, and as such, your development time could be up to twice as fast when writing in it. Your programs will also require fewer lines of code.
  • Avoid platform dependencies: You can keep your program portable by avoiding the use of libraries written in other languages.
  • Write once, run anywhere: Because applications written in the Java programming language are compiled into machine-independent bytecodes, they run consistently on any Java platform.
  • Distribute software more easily: With Java Web Start software, users will be able to launch your applications with a single click of the mouse. An automatic version check at startup ensures that users are always up to date with the latest version of your software. If an update is available, the Java Web Start software will automatically update their installation.

2010년 5월 17일 월요일

Spring seucrity 2.0 태그 사용하기

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

<!-- 권한에 따라 페이지에서 보여주는 것을 달리하기 위해 authorize 태그를 사용할 수 있다. -->
<sec:authorize ifNotGranted="ROLE_USER">
<a href="<s:url value="/public/blog/login.jsp"/>">로그인</a>
</sec:authorize>
<sec:authorize ifAnyGranted="ROLE_USER, ROLE_ADMIN">
<b><sec:authentication property="principal.username"/></b>님 반갑습니다. <br>
<a href="<s:url value="/j_spring_security_logout"/>">로그아웃</a>
</sec:authorize>
 
수정 및 삭제 버튼도 위에서 사용한 authorize 태그를 사용해서 로그인 상태에 따라 보여주거나 보여주지 않을 수 있다.

authentication 태그를 사용하여 현재 로그인된 사용자의 정보를 확인할 수 있다.

* Spring Security Tag Library *
- authentication 태그
 property="principal.username" 설정으로 현재 로그인 된 사용자의 username을 확인 할 수 있다.
- authorize 태그
 현재 로그인 된 사용자가 해당되는 권한에 따라, 태그 안에 포함된 내용을 보여주거나 보여주지 않을 수 있다.
 
 ifAllGranted 속성: 사용자가 나열된 모든 권한에 해당할 경우 태그 안에 포함된 내용을 보여준다.
 ifAnyGranted 속성: 사용자가 나열된 권한 중 한가지에라도 해당할 경우 태그 안에 포함된 내용을 보여준다.
 ifNotGranted 속성: 사용자가 나열된 권한 중 한가지에라도 해당할 경우 태그 안에 포함된 내용을 보여주지 않는다.

Web Service 쉽게 구현하기 II - 웹서비스 프로그램 작성 예

1. 서버 프로그램 작성
 <웹서비스 구현 플로우>

2. 자바 Interface와 자바 Implement 클래스 작성
- c:\test\ 에 아래 2개의 파일을 생성한다.

// HelloIF.java
package hello;
public interface HelloIF extends java.rmi.Remote {
public String hello(java.lang.String name) throws java.rmi.RemoteException;
}

// HelloImpl.java
package hello;
public class HelloImpl implements HelloIF {
public HelloImpl() {}
public String hello(String name) {
System.out.println(name);
return "hi " + name;
}
}

- 컴파일 후 c:\test\webservice/hello 디렉토리 밑에 HelloImpl.class 와 HelloIF.class가 생성. 생성된 class파일을 C:\Tomcat\webapps\axis\WEB-INF\classes 디렉토리에 패키지 디렉토리를 포함해서 복사한다.

3. 구현된 클래스로부터 WSDL 생성 하기
 Ex) java org.apache.axis.wsdl.Java2WSDL -o C:\test\hello\Hello.wsdl
-l http://localhost:8080/axis/services/Hello
-n http://hello.webservice -pwebservice.Hello http://hello.webservice hello.Hello
- C:\test 밑에 hello.wsdl 파일이 생성되었는지 확인한다.

4. WSDL 파일로부터 deploy.wsdd 및 client-side 자바 클래스 생성
Ex) java org.apache.axis.wsdl.WSDL2Java -o C:\test\hello\ -d Application -s C:\test\hello\Hello.wsdl

5. deploy.wsdd 파일 수정
wsdd 파일은 wsdl 파일만 가지고 생성되었기 때문에 실제 구현클래스가 무엇인지 제대로
설정이 안되어 있으므로 그부분을 수정해 주어야한다.
붉은색 부분으로 해당 부분을 수정해주면 된다.

xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
...
...생략...
...
hello.HelloImpl"/>  <- 실제 구현 클래스 명칭 및 패키지 경로를 수정한다.
...
...생략...

6. 서비스 디플로이먼트 하기
Ex) java org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/services/AdminService deploy.wsdd

[디플로이먼트 확인하기]
http://localhost:8080/axis/servlet/AxisServlet
'Hello' 라는 서비스가 설치된 것을 확인할 수 있다.

7. 서비스 언디플로이먼트 하기
Ex) java org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/services/AdminService undeploy.wsdd

[언디플로이먼트 확인하기]
http://localhost:8080/axis/servlet/AxisServlet
'Hello' 라는 서비스가 삭제된 것을 확인할 수 있다.

Web Service 쉽게 구현하기 I - 환경설정

본 강좌는 Axis를 이용한 웹서비스 구축 및 클라이언트 구현 방법을 소개한다.

I. 환경설정
1. JDK 설치
- http://java.sun.com 에서 jdk1.5 버전을 다운받아 설치한다.
- 설치 후 CLASSPATH 를 설정한다.
- set CLASSPATH=.;C:\jdk15\lib\tools.jar;C:\tomcat\common\lib\servlet-api.jar;
- set JAVA_HOME=C:\jdk15
- set PATH=C:\jdk15\bin; 을 기존 PATH에 추가한다.

2. Apache Tomcat 설치
- http://tomcat.apache.org/ 에서 Tomcat 5.5 다운로드
- set CATALINA_HOME=tomcat 설치폴더 ex) C:\tomcat
- 설치 후 CATALINA_HOME\bin\startup.bat 를 실행한다.
- 웹 브라우저에서 http://localhost:8080으로 확인한다.

3. AXIS 설치
- http://ws.apache.org/axis/ 에서 1.4 버전을 다운로드 한다.
- set AXIS_HOME=C:\axis
- set AXIS_LIB=%AXIS_HOME%\lib
- set AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar;
- %AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;
- %AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar;
- %AXIS_LIB%\wsdl4j.jar
- set CLASSPATH=%CLASSPATH%;%AXISCLASSPATH% 으로 기존 CLASSPATH 에 추가한다.
- CLASSPATH에 있는 xml-apis.jar 파일과 xercesImpl.jar 파일은http://xml.apache.org/ 에서 받으면 된다.

4. AXIS를 Tomcat에 연동하기
- C:\axis\webapps\axis\ 에서 axis디렉토리를 C:\tomcat\webapps\axis로 복사하면 된다. 즉, 톰캣 webapps디렉토리에 axis 컨텍스트가 추가 되었다고 이해해도 되겠다.
- 웹 브라우저에서 http://localhost:8080으로 확인한다.

5. AXIS 테스트
- tomcat을 실행하고 연결테스트를 해본다. (http://localhost:8080/axis)
- 라이브러리 테스트 : http://localhost:8080/axis/happyaxis.jsp 에서 필요하거나 필수적인 추가 라이브러리를 설치하라는 경고 메시지를 보여주기 때문에 이때 필요한 라이브러리를 다운받아서 C:\tomcat\webapps\axis\lib\ 에 복사해주고 다시 테스트를 해본다.

maven

1. maven 다운로드 및 설치

1) 다운로드
  maven 최신버전을 다운로드 한다

2) 설치
  압축을 적당한 경로에 풀고 path를 설정한다.
  path : C:\apache-maven-2.0.10\bin
  확인 : mvn --version
           Maven version: 2.0.10
           Java version: 1.5.0_17
           OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows"

3) Maven Integration for Eclipse
  Help -> Software Update and add-ons -> Available Software 선택
  Add Site 버튼선택 후 http://m2eclipse.sonatype.org/update/ 를 추가

2010년 5월 11일 화요일

Research

Danga :  Memcached(캐싱처리), MogileFS(분산파일시스템), Gearman(병렬처리,로드밸런싱)

 

Twitter : Starling(메모리캐싱, 소스코드는 여기)

 

WordPress.com : Pound(로드밸런싱), Wackamole(클러스터링), Spread(메시징서비스), HyperDB

2010년 4월 2일 금요일

What Can Java Technology Do?

 
 Java 프로그래밍 언어는 강력한 소프트웨어 플랫폼으로써, 다음과 같은 기능을 제공한다.

  • Development Tools : 개발 도구(Development Tools)를 사용하면 컴파일, 실행하는 데 필요한 모니터링, 디버깅 등을 제공하고, javadoc 문서 도구를 이용해 응용 프로그램을 문서화 할 수 있다.
  • Application Programming Interface (API) : API는 Java 프로그래밍 언어의 핵심 기능을 제공한다. 이는 XML 생성 및 데이터베이스 액세스, 네트워킹 및 보안 등 다양한 기능을 자신의 어플리케이션에서 사용하기 위해 제공된다. 더 자세한 내용은 Java SE Development Kit 6 (JDKTM 6) Documentation 참조.
  • Deployment Technologies : JDK의 소프트웨어는 Java Web Start 혹은 Java Plug-In 소프트웨어와 같은 표준 메카니즘(Mechanisms)을 제공하고, 최종 사용자에게 응용 프로그램을 배포하기 위한 소프트웨어를 제공한다.
  • User Interface Toolkits : 스윙(Swing)과 Java 2D toolkits 은 정교한 그래픽 사용자 인터페이스(GUIs)를 만들 수 있다.
  • Integration Libraries : Java IDL API, JDBCTM API, JNDI API, Java RMI, Java RMI-IIOP Technology 등 Integration Libraries 는 데이터베이스 액세스 및 원격 개체의 조작을 가능하게 한다.

About the Java Technology

 Java technology is both a programming language and a platform.


 자바 프로그래밍 언어는 다음과 같은 특징을 가진 높은 수준의 언어다.

  • Simple
  • Architecture neutral
  • Object oriented                  
  • Portable
  • Distributed
  • High performance
  • Multithreaded
  • Robust
  • Dynamic
  • Secure

  •  자바 프로그래밍 언어에서 모든 소스 코드가 .java 확장자로 끝나는 일반 텍스트 파일에 기록된다. 그 소스 파일은 javac 컴파일러에 의해 컴파일 되어 바이트 코드로 된 .class 파일을 생성한다. Java launcher tool은 Java 가상 머신의 인스턴스와 함께 응용 프로그램을 실행한다.


    Software Development process


     자바 플랫폼은 두 가지 구성 요소가 있다.

    • The Java Virtual Machine
    • The Java Application Programming Interface (API) [1.6|1.5|1.4.2]

     API는 많은 유용한 기능을 제공하는 컴포넌트의 모음이다. 이것은 관련 클래스와 인터페이스의 라이브러리로 그룹화하고, 이러한 라이브러리는 패키지로 알려져 있다.

    2010년 4월 1일 목요일

    Spring Roo Getting Started

    1. Spring Roo 다운
    springsource.org(http://www.springsource.org/download) 를 방문하여
    Spring Roo 최신버전(Spring Roo 1.0.2)을 다운받는다.

    2. 다운받은 spring-roo-1.0.2.RELEASE.zip 화일을 압축을 푼다.

    3. 압축을 푼 경로 클래스 패스 추가
     ex) C:\spring-roo-1.0.2.RELEASE\bin

    4. 콘솔창에서 roo 입력

    5. 테스트 프로젝트 실행
    1) sample 폴더의 wedding.roo 파일을 참고하여 프로젝트를 생성한다.
    2) perform eclipse 까지 실행하고 나면 eclipse를 열고, 생성된 프로젝트 import 한다.

    6. eclipse 프로젝트에서 톰켓 서버를 설정하고, 실행하면 다음과 같은 화면이 뜬다.