태그 : java

자바프로그래밍의 신기술 Framework

Struts 2
=========
Struts 2 Framework 은 WebWork Framework 에 기반을 두고 있습니다. WebWork Framework 은 여러해동안 좋은 아키텍처로 Framework 를 정립하여, 웹 어플리케이션 개발에 많이 활용되어 왔습니다.
이에 Struts Communites 와 WebWork Communities 들이 모여서 WebWork Framework 을 Struts 2 Framework 으로 명명하여 Framework 를 발전시키고자 합의를 하였습니다.
따라서 Struts 2 Framework 는 대부분 WebWork Framework 를 따르고 있으며, 초기의 Struts 2 Framework 는 WebWork Framework 와 같다고 여겨도 됩니다.

Struts 2 Framework 는 Struts 1.x Framework 와는 전혀 다른 아키텍처로 구성되어 있습니다. 일반적으로 Framework 든 어플리케이션이든, 버전업이 되면 기존에 있는 기능에 더 많은 기능을 추가하고, 부족한 기능을 보완하여 버전업을 합니다.

하지만 Struts 2 Framework 는 처음부터 Struts 1.x Framework 에 기반하지 않고, 전혀 다른 WebWork Framework 을 이름을 바꾸어서 새로운 아키텍처로 구성된 Struts 2 Framework 을 만들었습니다. 따라서 개발자들은 Struts 1.x Framework 와 다른 Struts 2 Framework 를 다시 익혀야 됩니다.
 
 
 
ibatis
=========
iBATIS는 간단한 XML서술자를 사용해서 간단하게 자바빈즈를 SQL statement에 맵핑시킨다. 간단함(Simplicity)이란 다른 프레임워크와 객체관계맵핑툴에 비해 iBATIS의 가장 큰 장점이다. iBATIS Data Mapper를 사용하기 위해서 당신은 자바빈즈와 XML 그리고 SQL에 친숙할 필요가 있다. 여기엔 배워야 할것도 거의 없고 테이블을 조인하거나 복잡한 쿼리문을 수행하기 위해 필요한 복잡한 스키마도 없다.
Data Mapper를 사용하면 당신은 실제 SQL문의 모든 기능을 가질수 있다. JDBC 로만 프로그래밍 할 때의 번거로움을 줄여주기 위해 재사용 모듈로 개발된 것이다.
 
 
 
 
Spring
=========
Spring를 이해하기 위해서는 IOC를 먼저 이해해야한다. IOC 란 인스턴스 생성의 제어를  개발자 본인이 아닌 다른 누군가에게 반환 준다는 개념이다. 여기서 말하는 다른 누군가란 EJB, Servlet 등 bean을 관리해 주는 컨테이너이다. 즉 IOC 란 인스턴스의 생성부터 소멸까지의 인스턴스의 생명주기 관리를 내가 아닌 컨테이너가 대신 해준다는 뜻이다.
 
Spring 컨테이너란 ?
Spring 컨테이너는 IOC를 지원한다. Spring 컨테이너란 beans 를 관리하고 애플리케이션 중요 부분을 형성한다. 즉 Spring 컨테이너는 메타데이터(xml 설정)를 통해  bean를 인스턴스화 하고 이를 조합하여 관리하는 역할을 한다. 컨테이너는 관리되는 bean 들을 의존성 삽입(Dependency Injection)을 통해 IOC 를 지원한다.
 
 
 

Highber nate
=============
Hibernate는 java환경의 object/relational mapping tool 이다. object/relational mapping(ORM) 이란 말은 object model로써 표현된 데이터를 relational, 즉 SQL base의 구조를 갖는 데이터에 대응시키기 위한 기술을 말한다.
 
Hibernate는 java class 데이터 베이스의 테이블에 mapping을 할뿐만 아니라, 데이터의 쿼리와 복원 기능도 제공하고 있다. 이덕분에 SQL과 JDBC에 의해 수작업으로 데이터를 조작했던 방식과 비교해서 개발기간을 급격히 줄일수가 있다

by 밀리 | 2008/12/19 12:46 | JAVA | 트랙백 | 덧글(0)

iBATIS의 개념

iBATIS의 개념
 

iBATIS는 간단한 XML서술자를 사용해서 간단하게 자바빈즈를 SQL statement에 맵핑시킨다. 간단함(Simplicity)이란 다른 프레임워크와 객체관계맵핑툴에 비해 iBATIS의 가장 큰 장점이다. iBATIS Data Mapper를 사용하기 위해서 당신은 자바빈즈와 XML 그리고 SQL에 친숙할 필요가 있다. 여기엔 배워야 할것도 거의 없고 테이블을 조인하거나 복잡한 쿼리문을 수행하기 위해 필요한 복잡한 스키마도 없다. Data Mapper를 사용하면 당신은 실제 SQL문의 모든 기능을 가질수 있다. JDBC 로만 프로그래밍 할 때의 번거로움을 줄여주기 위해 재사용 모듈로 개발된 것인데 그 주요한 어려움을 ibatis 개발자 가이드에서 다음과 같이 정리하고 있다.

 
 
iBATIS의 역사와 사용
  • SQL 문장과 프로그래밍 코드의 분리
  • JDBC 라이브러리를 통해 매개변수를 전달하고 결과를 추출하는 일
  • 데이터베이스 접근 클래스와 비즈니스 로직을 담은 클래스의 분리
  • 자주 쓰이는 데이터를 변경되지 않는 동안에 임시 보관(Cache)
  • 트랜젝션과 쓰레드 관리
 
이러한 사항들에 대해서 한번쯤 생각해볼 필요가 있다.
  • SQL 문장과 프로그래밍 코드의 분리
    SQL문과 프로그램 코드는 꼭 분리해야 할까? 우선 프로그램이 작은 경우는 굳이 분리할 필요가 없어 보인다. 파일만 두개로 분리되기 때문에 관리에 불편함이 가중될 수 있다. 프로그램이 커져도 분리하는 것이 꼭 유리한 것만은 아니다. SQL을 사용하는 클래스가 1000개라면 분리했을 때 2000개가 되어서 더 복잡해질 수도 있다. 그럼에도 불구하고 ibatis에서는 SQL을 분리하는 이유는 무엇일까?
    Separation of Concern!! 할 일의 명확한 분리. 아마도 이것이라 짐작된다. 자바 코드에서 SQL을 없애서 순수 OO로 만들어놓기. 이것은 결벽증이나 지나친 원리집착이아니라 체계가 다른 것을 나누어 보관하는 것이다. 논리적으로 정연한 흐름을 만들어 둘 수 있고, 객체지향 입장에서 데이터에 해당하는 도메인 모델(Domain model) 혹은 도메인 객체(Domain object)와 관계형 데이터베이스의 테이블(Table)을 느슨한 관계(loosely coupled)로 만들어서 변화에 대한 유연성을 확보할 수도 있다. 즉, 정규화를 위해서 혹은 데이터 접근의 효율성을 위해서 테이블 구조를 바꾸어도 프로그램 코드 안에 있는 SQL을 수정할 필요가 없어진다.
     
  • JDBC 라이브러리를 통해 매개변수를 전달하고 결과를 추출하는 일
    select 등를 할 때 조건에 해당하는 매개변수를 설정하거나, insert 문에서 값을 할당하기 위해 매개변수를 설정하는 일은 무척 번거로운 일이다. 단순한 일이면서도 오류가 잦은 부분이다. 때문에 프로젝트를 몇 차례 겪고 나면 자신만의 라이브러리를 만들거나 공통팀에서 유틸리티를 제공하는 일을 흔하게 볼 수 있다. Apache Commons의 DB Utils 나 Spring의 JDBC Template 등은 이러한 작업을 용이하게 하려고 등장했고, ibatis 역시 이러한 작업을 훨씬 부드럽게 해준다.
     
  • 데이터베이스 접근 클래스와 비즈니스 로직을 담은 클래스의 분리
    이른바 DAO(Data Access Object) 패턴이 이러한 일을 담당한다. ibatis는 DAO 계층 구현을 위한 유틸리티 성격이면서 동시에 best practice 역할도 수행한다.
     
  • 자주 쓰이는 데이터를 변경되지 않는 동안에 임시 보관(Cache)
    ibatis 에선 XML 설정만으로 캐시를 할 수 있다.
     
  • 트랜젝션과 쓰레드 관리
    트랜젝션 처리 역시 용이하다.


    iBATIS의 주요기능 

    Data Mapper (com.ibatis.sqlmap.*)


    개념
    iBATIS Data Mapper API는 프로그래머에게 자바빈즈 객체를 PreparedStatement파라미터와 ResultSets으로 쉽게 맵핑할 수 있도록 한다. Data Mapper의 기본적인 생각은 간단함(simple)이다. 이는 자바코드의 20%를 사용하여 JDBC기능의 80%를 제공하는 간단한 프레임워크라는 뜻이다.


    작동원리
    Data Mapper는 자바빈즈, Map구현, 원시래퍼타입(String, Integer…) 그리고 SQL문을 위한 XML문서를 맵핑하기 위한 XML서술자를 사용하는 매우 간단한 프레임워크를 제공한다.

    다음은 생명주기에 대한 높은 레벨의 서술이다.


    1) 파라미터(자바빈즈, Map 또는 원시래퍼)로써 객체를 제공한다. 파라미터 객체는 update문내에 입력값을 셋팅하기 위해 사용되거나 쿼리문의 where절을 셋팅하기 위해서 사용된다.

    2) 맵핑된 statement을 실행한다. 이 단계는 마법이 일어나는곳이다. Data Mapper프레임워크는
    PreparedStatement 인스턴스를 생성할것이고 제공된 파라미터객체를 사용해서 파라미터를 셋팅한다. 그리고 statement를 실행하고 ResultSet으로부터 결과 객체를 생성한다.

    3) update의 경우에 영향을 미친 rows의 숫자를 반환한다. 조회문일경우에 한 개(single)의 객체 또는 컬렉션 객체를 반환한다. 파라미터처럼 결과 객체는 자바빈즈, Map 원시타입래퍼또는 XML이 될수 있다.

  • by 밀리 | 2008/11/06 16:13 | JAVA | 트랙백 | 덧글(0)

    abstract수정자와 interface의 차이는 무엇인가여?

    출저 : 네이버 지식~~

    용어에서 알 수 있듯이, 한쪽은 class이고, 다른 한쪽은 interface 입니다. class와 interface의 역할은 분명히 나뉘어져 있죠.

    일반적으로, class는 초기화 되어서 생성될 수 있습니다. 그러나, abstract class는 초기화 되어서 생성될 수 없는 class 입니다. class의 성질을 모두 가지면서 이러한 성질 하나의 차이로 abstract 와 concrete class 로 나뉘게 됩니다. 그럼, abstract class는 왜 필요할까요? abstract class는 그 자체로 불완전하기 때문에 다른 class가 이 abstract class를 상속받아야 합니다. 즉, 이 abstract class는 개발자가 구현시에 반드시 이 class를 상속받고자 하기 원할 때에 사용할 수 있습니다. 이러한 것을 '설계 의도' 라고도 얘기를 하죠. javax.servlet.http.HttpServlet을 예를 들면, 개발자가 서블릿을 구현하려면 반드시 HttpServlet이라는 abstract class를 상속받아서 구현해주어야 합니다. (물론, 다른 방법도 있긴 하지만 설명을 간단하기 위해서 일반적으로 사용하는 방법을 설명드립니다.) 이것은 다시 말하면, 서블릿을 개발하는데 기본적인 API를 제공하는 java 진영에서는 이 HttpServlet을 개발자가 반드시 구현해주어서 웹으로 서비스를 해주기를 원한다는 얘기죠. 개발자가 HttpServlet 상위의 모든 부분을 구현해주어서 별도의 서블릿을 만들어도 상관없지만, 기타 공통으로 사용되는 부분들은 상위의 클래스 (HttpServlet 상위의 클래스)로 모두 옮겨놓고, 단지 개발자는 service 메소드만 구현하도록 만든거죠.

    interface 라는 것은 타입(type) 또는 역할(role)이라는 관점에서 보셔야 할 겁니다. class와 interface의 차이 중에 하나가 단일 상속과 다중 상속입니다. interface는 다중 상속이 가능합니다. 또한, interface는 abstract 클래스와 마찬가지로 직접적으로 초기화할 수 없습니다. interface가 실제 구현상에서 사용되는 예들은 다형성(polymorphism)일 것입니다. 이것은 interface가 하는 역할이 해당 객체에 대한 타입(type) 또는 역할(role)을 규정짓는데 사용된다는 것을 의미합니다. 다시 말하면, interface는 해당 객체에 대한 행동 규약을 미리 정해놓는다고 생각하시면 됩니다. 이렇게 구현된 객체는 외부에서 바라볼때에 구체적으로 구현된 클래스를 바라보는 것이 아니라, interface를 바라보면 그 interface를 구현한 클래스가 어떤 기능을 하는지 알 수 있습니다. 또한, 같은 행동이라 하더라도 실제로 필요에 따라서는 그 구체적인 구현이 달라질 수 있으며 시간이 지나면서 구현 자체가 다른 방식으로 변경될 수 있습니다. 이러한 경우, 외부에서 바라보는 객체는 interface만을 바로보았기 때문에 그 변경에 대한 영향을 최소한으로 줄일 수 있는 장점이 있습니다. 사실, interface는 객체지향 개발, Component-based 개발에서 중요한 요소로 사용되는 역할을 합니다.

    by 밀리 | 2008/09/08 17:06 | JAVA | 트랙백 | 덧글(0)

    ◀ 이전 페이지          다음 페이지 ▶