Etc2009. 7. 14. 11:14
 
■ Apache , Subversion 설치
 
 1. http://httpd.apache.org/download.cgi 에서 2.x 버전의 apache를 다운


  2. http://subversion.tigris.org/project_packages.html 에서 가장 최신의 subversion을 다운


  3. 먼저 Apache를 설치 (Apache 설치 중 port 설정이 나오면 자신의 환경에 맞게 80 or 8080 포트를 선택)
  4. 그리고 subversion을 설치
  5. Apache 설치 디렉토리의 \conf\httpd.conf 파일을 열면 중간쯤에

          LoadModule dav_module modules/mod_dav.so
          LoadModule dav_svn_module modules/mod_dav_svn.so

     두 줄이 주석이 없는 것이 보인다. 이것은 Subversion 설치시 해당 주석을 삭제 하기 때문


■ Apache, Subversion 설정

 1. 시작 → 실행 → cmd (엔터)
 2. 저장소를 생성

   - ex ) svnadmin create d:/svn/repository
 3. 유저 파일 생성 (Apache\bin 디렉토리로 이동)
   - ex) htpasswd -cm d:\svn\svn-auth-file admin
          ※  -c : 새로운 파일 생성 / -m : MD5 타입으로 암호를 암호화
 4. Apache 설치 디렉토리의 \conf\httpd.conf 수정 or 추가
        
  <Location /repos>
            DAV svn
            SVNPath d:/svn/repository
         
            Require valid-user
         
            # how to authenticate a user
            AuthType Basic
            AuthName "Subversion repository"
            AuthUserFile d:/svn/svn-auth-file
  </Location>
 
   - 태그내에 <Location /repos> 는 나중에 http 로 접근시 http://서버주소/repos 형식으로 붙음
   - SVNPath : 저장소 위치 설정
   - Require : valid-user라는 값은 승인된 유저만 접근이 가능하다는 것을 의미
   - AuthType : 인증 타입으로는 필자는 Basic인 기본타입을 사용
   - AuthUserFile에는 위에서 셋팅한것처럼 사용자 정보가 들어가는 파일의 위치를 지정

 5. Apache 설치 후 Sunversion을 설치하면 Apache 관련 서비스가 사라지므로, 이때는 명령창에서 
    Apache 설치 디렉토리의 \bin 으로 이동 후, [ httpd -k install ] 라고 해주면 다시 서비스가 설치
 6. Apahce 를 다시 시작 시키고 나서 웹브라우져로 http://서버주소/repos 해준 후 아이디와 암호를 쓰는 창이 나온다면
    설치 / 설정 과정이 제대로 이루어짐

■ Eclipse 연동
 1. Eclipse 에서 Subversion 플러그인을 업데이트 받는다.
   - Help → Software Updates  → Find and Install
   - Search for new features install 을 체크 하고 Next
   - New Remote Site 를 클릭하여
       Name : subclipse
       URL   : http://subcilpse.tigris.org/update
     를 입력 후 OK 버튼을 클릭
   - 그럼 Subclipse 의 최신버젼을 체크 한 후 몇 번의 페이지 이동 후 설치

 2. 설치 후 메뉴에 Window → Show View → Other → SVN 하위 디렉토리에 Reposotories 를 선택
 3. Reposotories 창에서 마우스 오른쪽 버튼을 클릭하여 Repository Location 으로 새 저장소를 생성
 4. URL 에다가 서버 주소/repos 라고 써주고 아이디/비번을 써준 후 Finish 하면 SVN Repositories 에 등록
 5. 이제 기존의 프로젝트 or 새로운 프로젝트에 마우스 오른쪽 버튼 → Team → Share Project 를 선택
 6. CVS / SVN 선택 창이 나오면 SVN 을 선택
 7. 세팅 되어 있는 SVN Repositories 를 선택
 8. 연결이 되면 폴더 또는 파일에 물음표("?")가 되어 있는데 물음표가 되어 있는 폴더나 파일을 선택 한 후
    마우스 오른쪽 버튼 → Team → Add to Version Control 선택
Posted by kaios
Web Programing/iBATIS2009. 2. 6. 11:55
■ 예제 개발 환경
 - Eclipse SDK Version 3.4.1
 - MS-SQL 2005
 - Tomcat 5.5

■ 사용 jar 파일
 - ibatis-2.3.4.726.jar
 - sqljdbc.jar

- JAR Download - Table 구성
CREATE table member(
 num INT NOT NULL identity(1,1),
 uid VARCHAR(10) NOT NULL,
 pwd VARCHAR(10) NOT NULL,
 name VARCHAR(10) NOT NULL,
 PRIMARY KEY(num)
);

INSERT INTO member(uid, pwd, name) VALUES('test','1234', '나유철');
INSERT INTO member(uid, pwd, name) VALUES('test2','1234', '김태희');
INSERT INTO member(uid, pwd, name) VALUES('test3','1234', '한가인');
INSERT INTO member(uid, pwd, name) VALUES('test4','1234', '김연아');

- SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0 //EN"
 "
http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
 <transactionManager type="JDBC">
  <dataSource type="SIMPLE">
   <property name="JDBC.Driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
   <property name="JDBC.ConnectionURL" value="jdbc:sqlserver://아이피주소:1433" />
   <property name="JDBC.Username" value="DB아이디" />
   <property name="JDBC.Password" value="DB비밀번호" />
  </dataSource>
 </transactionManager>
 <sqlMap resource="iBATIS/SqlMap.xml" /> // SqlMap.xml 의 위치
</sqlMapConfig>

- SqlMap.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
 "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
 <select id="getMemberList" parameterClass="VO.MemberVO" resultClass="hashmap">
  SELECT *
  FROM 테이블명
 </select>
</sqlMap>

※ id = 사용할 이름
    parameterClass = 테이블의 필드명과 ValueObject 객체에 선언된 변수들의 이름이 같아야 한다.
    resultClass = 쿼리 수행 결과 값을 담을 타입/객체

- example_iBATIS.java
public class exmaple_iBATIS {
public static void main(String[] args) throws Exception {
  String resource = "SqlMapConfig.xml";
  Reader reader = Resources.getResourceAsReader(resource);
  SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
 
  List someList = sqlMap.queryForList("getMemberList");

  Iterator<HashMap> iter = someList.iterator();

  while (iter.hasNext()) {
   HashMap data = iter.next();
   System.out.println("번호 : " + data.get("num") + "  아이디 : " + data.get("uid") + "  비밀번호 : " + data.get("pwd") + "  이름 : " + data.get("name"));
  }
 }
}
Posted by kaios
Web Programing/iBATIS2009. 2. 2. 18:08

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이 될수 있다.

    출처 : http://blog.empas.com/ahnyounghoe/11535652

  • Posted by kaios