최근 자바프로그래머가 해야할 역할(업무)이 점점 증가하는 추세다.이런 추세를 따라가는 것도 쉬운 일은 아니다.하지만 흐름이 이런 이상 따라가지 못하면 자바프로그래머로써 생명도 짧아지며 취업기회도 줄어드는 것이 사실이다.
그럼 어떤 것을 익혀두면 이런 흐름에 뒤지지 않을 수 있을까 하는 바램에서 다음과 같은 오픈 기술을 나열해 본다.
오픈 기술을 나열하는 이유는 대기업이든 중소기업이든 현업에 종사하는 프로그래머들은 고민에 빠질 경우에 내부의 누군가에 물어보든지 아니면 오픈소스를 뒤집어 볼 수 밖에 없다는 것이다. 해당 기술을 가지고 있는 회사에 문의하면 가장 좋지만 금전적인 문제가 있다. 또한 오픈소스에는 좋은 기술들이 많이 있다.이런 기술은 배우고 익힌 프로그래머들이 회사의 주요 위치를 점점 차지하고 있으며 오픈기술을 자기회사의 기본방침으로 삼고 적용한다.이런 흐름을 감안할 때 오픈소스를 익히고 연구하는 것이 현업요구에 직결된다는 것이다.
그럼 여기저기에 수 많이 나열되어 있는 오픈소스들 다 익힐 수는 없는 상황에서 어떤 오픈소스를 익혀두면 좋은지 막연할 것이다.이에 지침이랄까 대표적인 사이트를 소개한다. 가능하면 버전은 최신 것이 좋다.버그도 적을 뿐만 아니라 기능도 기존 것보다 훨씬 많이 추가되어 있기때문이다.
그리고 간단한 예제들을 소개할 예정인데 개념이해에는 간단한 예제소스가 최고다.
1. 로깅
프로그램에서 빠질 수 없는 부분이 로그를 남기는 것이다.단위테스트는 물론 프로그램을 사용하는 동안은 이 부분은 제거할 수는 없다.
문제가 발생하면 가장 먼저 찾아보는 것이 로그기록이다.
아래 대표적인 로그API를 익혀두면 다른 것들도 쉽게 적응할 수 있을 거라고 생각된다.
http://www.slf4j.org/apidocs/index.html
http://logging.apache.org/log4j/companions/component/apidocs/index.html
2. OR Mapping
오프젝트와 관계형 데이터베이스 테이블과 관계를 매핑하는 기술 등장으로 프로그래머가 JDBC API를 호출할 때 반드시 해야하는 매번 반복되는 코딩을 제거해 주었다.하지만 프로그래머가 테이블 구조까지 고려해서 오프젝트를 설계해야 하는 부담이 덧붙여 졌다.또한 테이블설계자 입장에서도 오프젝트를 이해해야 하는 흐름으로 가고 있다.이런 상황을 고려해 볼때 프로그래머 입장에서는 오프젝트를 테이블에 매핑하는 기술뿐만 아니라 테이블을 설계하는 기술까지도 익혀야 테이블설계자를 납득할 수 있으며, 보다 좋은 프로그램을 구현할 수 있다.
iBATIS와 Hibernate중에서 어느 것을 사용해야 좋을 지 하는 의문이 생길 것이다. 어느 하나를 사용할 수 있으면 족하다.양쪽다 SQL문을
자바코드내에서 구현하는 Annotaion을 지원하며, 또한 외부에 Xml로 저장된 것을 이용할 수 있다.Annotaion이 가지는 한계를 외부에 Xml로 저장된 것을 이용하여 극복하는 방법으로 사용하면 좋은 듯하다.개인적으론 iBATIS3의 경우가 보다 직관적이며 이해하기 쉽다.
iBATIS3
http://svn.apache.org/repos/asf/ibatis/java/ibatis-3/trunk/doc/en/iBATIS-3-User-Guide.pdf
iBATIS23
http://svn.apache.org/repos/asf/ibatis/java/ibatis-2/trunk/ibatis-2-docs/ko/
http://ibatis.apache.org/docs/java/dev/
Hibernate3
http://docs.jboss.org/hibernate/stable/core/api/
http://docs.jboss.org/hibernate/stable/annotations/api/
http://docs.jboss.org/hibernate/stable/entitymanager/api/
http://docs.jboss.org/hibernate/stable/shards/api/
http://docs.jboss.org/hibernate/stable/validator/api/
http://docs.jboss.org/hibernate/stable/search/api/
3. IoC(DI Container)
대표적인 것으로 스프링프레임워크(Seasar2도 동일한 것으로 일본에서만 많이 사용하고 있음)으로, 간단히 말하자면 콜백함수개념에 인터페이스개념을 적용한 것이다.
다들 아는 얘기이지만 콜백함수는 함수선언 즉 함수원형이 정해져 있다.함수선언원형을 정의하는 것은 스프링프레임워크과 같은IoC Container 이다. 함수구현은 프로그래머에게 위임한다.
인터페이스는 성질이 다른 클래스간 동일형 대입처럼 취급이 가능하게 한다.참고로 계승은 성질이 같은 형이다.
이런 개념을 기본으로 Controller, Service, Domain등 오브젝트설계패턴를 구현하고 있다.간단한 사용자정보입력 웹어플리케이션 개발의 경우로 설명을 하자만 다음과 같다. 웹브라우저에서 사용자는 사용자정보를 입력한다. 클릭하면 사용자정보는 사용자정보 오브젝트에 저장된다. 사용자정보 클래스를 Domain 오브젝트라고 부른다. 어플리케이션설정화일에 등록되어 있는 Controller는 통제권을 웹설정화일에 등록되어 있는 디스패쳐 서브릿로부터 받는다.
Controller는 어플리케이션설정화일에 등록되어 있는 해당 Service 오브젝트를 부른다. 이 Service 오브젝트가 바로 사전에 정해진 콜백함수를 구현하고 있는 클래스(이것은 어플리케이션설정화일에 어느 인터페이스에 넘겨질 것인지 등록되어 있으며, 넘겨주는 역할을 IoC Container 즉 스프링프레임워크과 같은 것이 한다)의 인터페이스이다. 또한 사용자정보 오브젝트를 처리하는 비지니스로직 메쏘드들도 가지고 있다.
그리고 Controller는 이 Service 오브젝트에게 Domain 오브젝트라고 불리는 사용자정보 오브젝트를 넘겨주면서 처리를 맡긴다.
그럼 이 Service 오브젝트(비지니스 서비스오브젝트라고 할 수 있음)는 비지니스로직처리를 하고, 결과인 사용자정보 오브젝트를(데이터베이스를 사용안할 경우는 Controller에게 넘겨준다.사실상 여기까지가 Controller, Service, Domain등 패턴이며, 이하 설명은 이것의 반복에 불가함) UserDAO Service라는 또 다른 서비스오브젝트를 호출해서 넘겨준다.이 Service 오브젝트 역시 바로 사전에 정해진 콜백함수를 구현하고 있는 클래스(이것은 어플리케이션설정화일에 어느 인터페이스에 넘겨질 것인지 등록되어 있으며, 넘겨주는 역할을 IoC Container 즉 스프링프레임워크과 같은 것이 한다)의 인터페이스이다.이것의 내부에는 오브젝트성질상 당연한 얘기이지만 비지니스로직처리가 아닌 데이터베이스처리관련 메쏘드를 가지고 있다. 물론 iBATIS와 같은 것이 포함될 수 있다.이 인터페이스는 데이터베이스에 저장처리하고 결과를 비지니스 서비스 오브젝트에 넘겨주고, 비지니스 서비스 오브젝트는 Controller에 넘겨주면, Controller는 디스패쳐 서브릿에 넘겨주고,디스패쳐 서브릿은 어플리케이션설정화일에 등록되어 있는 것을 기준으로 어느 포워드(jsp화일)를 선택할지를 결정하고 결과를 사용자에게 보여준다.
Spring2.5, 3.1
http://www.springsource.org/download
Seasar2
http://www.seasar.org/
http://www.seasar.org/en/
4. AOP
객체지향프로그래밍을 OOP라하며 면(수평)지향프로그래밍을 AOP라고 하는 새로운 개념의 프로그램언어이다.실제 구현은 자바로 되어 있는 경우도 있고 C++로 되어 있는 경우등이 있다.
과연 이것이 뭔지 잘 이해가 안가는 경우가 있다. 자바로 설명을 하면 역시 클래스라는 모듈개념과 큰 차이는 없다.단지 클래스간의 공통적인 특징을 모듈화할 수 있다는 것. 즉 상속이나 인터페이스가 아닌 면(수평)을 중심으로 모듈화한다는 것이다. 말이 조금 어렵게 흘러가는 것 같은데 다음과 같이 생각하면 쉽게 이해될 것이다.클래스A와 클래스B... 등 있을 경우에 이들을 옆으로(수평) 나열해 놓고 공통기능들이 있는 지 찾아서 이 부분을 하나의 클래스로 모듈화한다는 것이다.여기서 의문이 생길것이다. 그럼 처음부터 클래스들의 공통기능부분을 뽑아 내어 인터페이스나 클래스로 만들고 이를 상속하면 되지 않는냐 하는 것이다.맞는 말이다. 하지만 전제가 클래스들을 모두 재 설계한다고 했을 때 가능한 얘기다.여기에 AOP가 등장해서 이 문제를 간단히 해결했다.즉 기존의 클래스들을 수정하나 없이 새로운 기능(생성자,필드,메쏘드등)추가를 할 수 있다.클래스간이 아닌 하나의 클래스에 런타임때 기능을 추가하는 것은 마치 자바스크립트에서의 기능과 비슷한 개념으로 이해하면 될 것같다.
현재 가장 많이 사용하고 간단히 쉽게 적용하는 부분이 트래싱,로깅,퍼포먼스 튜닝이다.
자바기반의 AOP를 구현한 것은 java.lang.annotation.* 를 근거로 한 것같다.
또한 각 구현해 놓은 단계가 다르기 때문에 사용하는 방법이 다르다. AspectJ경우는 여러 전문용어가 코드에서 보이지만 스프링프레임워크에서의 AOP구현은 꽤 상위수준까지 구현(IoC구조로)놓았기 때문에 간단히 사용할 수 있다.
AOP Alliance (Java/J2EE AOP standards)
http://aopalliance.sourceforge.net/doc/
AspectJ
http://eclipse.org/aspectj/doc/released/runtime-api/index.html
http://eclipse.org/aspectj/doc/released/progguide/examples-development.html
Spring
http://www.javabeat.net/articles/51-introduction-to-springs-aspect-oriented-programminga-4.html
5. Tags
6. Titles
HTML(JSP등)페이지에서 프레임을 사용하지 않고 내용이나 페이지를 바꾸고 싶을 때는 자바스크립트등으로 내용을 다이나믹하게 바꿀수 밖에 없다. 하지만 이런 기능등을 프로그램하지 않고 간단한 지정만으로 처리할 수 있는 것이 Tiles프레임워크이다.
7. Validation
8.xxxxJavascript
Prototy.js
-JQuery.js 1.7
xxxxxxJavascript가 HTML페이지에 들어가는 곳이라면 무조건 JQuery를 사용한 것이 좋다.언듯보기엔 마치 Ajax를 사용할때만 필요한 것처럼 보일 수 있다. 이 기능이외에도 많은 편리한 기능이 있다.웹개발시 필수라고 해도 과언이 아니다.
http://docs.jquery.com/Downloading_jQuery
9.Velocity
Jsp,PHP, HTML화일등 화일내부에 기술할 수 있는 프레임워크로 지원하는 스크립트언어로 VTC(Velocity Template Language)
이다.이것의 장점으로 예를 들면 Servlet 이나 Jsp의 코딩량을 줄이기 위해 등장한 스트러츠 태그라이브리등을 사용하기 위해서 는 일반 언어구조와 약간 다른 식으로 되어 있어 익히는데 시간이 걸린다.하지만 VTC는 언어구조되어 있는 템플릿 언어라 익히는 오래 걸리지 않는다.HTML페이지내에 기술할 때 마치 PHP언어를 사용하는 느낌이다.즉 코팅량은 스트러츠 태그랑 별로 차이는 없지만 사용하기에는 분명이 편리하며 다른 프레임워크와 같이 사용할 수 있는데 특히 화면계층를 구성하는 데 주로 사용한다.
참고로 VelocityStruts는 Struts 1.x 어플리케이션 개발시 같이 사용가능하다.
첫댓글 tools for static code analysis(find bugs)-http://en.m.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
code coverage tools (jacoco)-http://www.eclemma.org/index.html
코드스텝수를 계산해주는 프로그램:コロ助、数えちゃお-http://ja.m.wikipedia.org/wiki/コロ助_(ステップ数カウンタ)
Eclipseプラグイン Code step counter: http://amateras.osdn.jp/cgi-bin/fswiki/wiki.cgi?page=StepCounter