[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

2016년 5월 27일 금요일

[JAVA] 12장 DAO 지원..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

이 문서는 개인적인 목적이나 배포하기 위해서 복사할 수 있다. 출력물이든 디지털 문서든 각 복사본에 어떤 비용도 청구할 수 없고 모든 복사본에는 이 카피라이트 문구가 있어야 한다.

12. DAO 지원
12.1 소개
스프링의 Data Access Object (DAO) 지원은 JDBC, Hibernate, JPA, JDO같은 데이터 접근 기술과 관련된 작업을 일관된 방법으로 쉽게 할 수 있게 도와준다. DAO 지원은 앞서 언급한 퍼시스턴스 기술을 꽤 쉽게 해주고 각 기술에 특화된 익셉션 처리에 대해 걱정하지 않고 코드를 짤 수 있게 해준다.

12.2 일관된 예외 계층
스프링은 SQLException처럼 기술에 특화된 예외를 루트 익셉션처럼 DataAccessException의 스프링 예외계층으로 편리하게 변환한다. 이러한 예외는 원래의 예외를 감싸므로 잘못되거나 정보를 잃어버릴 위험이 절대 없다.

JDBC 예외에 추가적으로 스프링은 소유자로부터 변환해서 하이버네이트에 특화된 예외와 체크드 익셉션(하이버네이트 3.0 이전의 버전인 경우)을 관심있는(focused) 런타임 예외(JDO와 JPA 예외에도 마찬가지다.)의 세트로 감쌀 수 있다. 이는 복구할 수 없고 적합한 계층에서만 존재하고 보일러플레이트 catch-throw 블락을 귀찮음없으면서 DAO에 선언된 예외인 대부분의 퍼시스턴스 예외를 처리하게 해준다. (여전히 필요한 곳에서는 예외를 처리할 수 있다.) 앞에서 얘기했듯이 JDBC 예외(데이터베이스에 특화된 방언을 포함해서)도 같은 계층 즉 일관된 프로그래밍 모델에서 JDBC로 작업을 수행할 수 있는 계층으로 변환할 수 있다.

스프링의 다양한 템플릿 클래스는 다양한 ORM 프레임워크를 지원한다. 인터셉터 기반의 클래스를 사용한다면 어플리케이션은 되도록이면 SessionFactoryUtils의 convertHibernateAccessException(..)나 convertJdoAccessException()에 각각 위임해서 HibernateExceptions와 JDOExceptions 자체를 다루는 데 신경써야 한다. 이 메서드들은 예외를 org.springframework.dao 예외 계층의 예외와 호환되도록 변환한다. JDOExceptions가 언체크드면 예외와 관련된 용어로 제너릭 DAO 추상화를 희생시켜서 그냥 던질 수 있다.

스프링이 제공하는 예외 계층은 아래에서 볼 수 있다. (이미지의 클래스 계층은 전체 DataAccessException 계층의 서브세트만 보여준다.)

사용자 삽입 이미지


12.3 DAO나 리파지토리 클래스 설정에 사용하는 어노테이션
데이터 접근 객체(DAO)나 리파지토리가 예외 변환을 제공한다는 것을 보장하는 가장 좋은 방법은 @Repository 어노테이션을 사용하는 것이다. 이 어노테이션은 컨포넌트 스캔이 XML 설정없이도 DAO와 리파지토리를 찾고 설정하도록 해준다.


1
2
3
4
5
6
Java

@Repository
public class SomeMovieFinder implements MovieFinder {
  // ...
}

모든 DAO와 리파지토리 구현체는 사용하는 퍼시스턴스 기술에 따라 퍼시스턴스 리소스에 접근해야할 필요가 있을 것이다. 예를 들어 JDBC 기반 리파지토리는 JDBC DataSource에 접근할 것이고 JPA 기반 리파지토리는 EntityManager에 접근해야 할 것이다. 이렇게 하는 가장 쉬운 방법은 @Autowired,, @Inject, @Resource, @PersistenceContext 어노테이션 중에 하나를 사용해서 해당 리소스를 의존성 주입하는 것이다. 다음은 JPA 리파지토리의 예제이다.

1
2
3
4
5
6
7
8
9
Java

@Repository
public class JpaMovieFinder implements MovieFinder {
  @PersistenceContext
  private EntityManager entityManager;

  // ...
}

전형적인 하이버네이트 API를 사용한다면 SessionFactory를 주입할 수 있다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Java

@Repository
public class HibernateMovieFinder implements MovieFinder {

  private SessionFactory sessionFactory;
  
  @Autowired
  public void setSessionFactory(SessionFactory sessionFactory) {
      this.sessionFactory = sessionFactory;
  }
  
  // ...
}

이번 장에서 보여줄 마지막 예제는 대표적인 JDBC 지원이다. DataSource를 사용하는 SimpleJdbcCall 등과 같은 데이터 접근 지원 클래스나 JdbcTemplate를 생성하하는 곳에 초기화 메서드에 이 DataSource를 주입할 것이다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Java

@Repository
public class JdbcMovieFinder implements MovieFinder {

  private JdbcTemplate jdbcTemplate;
  
  @Autowired
  public void init(DataSource dataSource) {
      this.jdbcTemplate = new JdbcTemplate(dataSource);
  }
  
  // ...
}



Note
이러한 어노테이션의 이점을 취하기 위해 어플리케이션 컨텍스트를 설정하는 방법은 각 퍼시스턴스 기술의 해당하는 부분을 참고하길 바란다.

[UFC] 미오치치, 1차 방어전 상대는 오브레임 UFC 203..

일전에 UFC 헤비급 타이틀을 획득한 미오치치에 대한 포스팅을 하고서 또 미오치치 소식의 글을 올리게 됬다..

미오치치가 1차 방어전을 한다는 소식이다.. 그의 상대는 다소 예상을 했던 알리스타 오브레임이다.. 예상을 한 이유는 오브레임의 이전 경기들이 다 화끈하게 KO 승을 해왔기 때문이다.. 경기 장소 및 이벤트 넘버링은 9월 11일 클리블랜드 퀵큰 론즈 아레나에서 열리는 UFC 203 메인이벤트다..



조심스럽게 이번 경기를 예상해보자면 나는 미오치치에게 손을 들어주고 싶다.. 개인적으로 흥행성?? 선수의 상품성?? 등으로 보자면 오브레임을 더 좋아한다.. 과거 프라이드[일본 격투 단체였던 PRIDE 지금은 UFC에 인수합병되고 사라짐] 시절부터 말이지..

하지만 미오치치의 산토스 그리고 직전 경기인 베우둠과의 경기를 보면 타격이 상당하다.. 무엇보다 그라운드에서도 띄어난 실력을 갖고 있기에 모든 방면에서 균형이 맞춰진 선수라고 볼 수 있다.. 지난 챔피언이었던 케인 벨라스케즈도 그런 선수중에 하나이긴 하지만 미오치치를 조금 더 높게 보는건 케인은 타격과 그라운드가 5:5 가 아니다..

비율적으로 구태여 따지자면 타격이 3이고 결국에는 그라운드로 끌고 가기에 7이라고 볼 수 있을 듯 하다.. 이부분은 지극히 개인적인 생각이다.. 그렇지만 미오치치는 타격으로 풀어도 무방하고 그라운드로 풀어도 무방할 5:5의 선수이면서 가장 결정적으로 피지컬이 좋다.. 그 부분은 산토스와의 경기에서도 증명하듯 그 발빠르고 타격이 좋은 산토스가 뒤로 빠져도 미오치치는 리치가 길기 때문에 다 맞춰버렸다.. 그 경기의 승자는 미오치치라고 생각했는데 산토스가 저버리긴 했지만 말이다.. ㅡㅡ..

무튼!!! 그런면에서 미오치치의 승이라고 생각한다.. 오브레임도 물론 과거에 입식타격기를 해왔기에 타격감이 좋긴하지만 결정적으로 유리턱이다.. 그리고 약물파동 이후에 그의 강인함은 없어진듯한 느낌이다.. 반면 미오치치는 맷집도 상당하단 말이지.. 의외로 타격전이 아닌 그라운드로 끌고가는 경기가 나올수도 있을듯하다.. 9월 경기여서 아직 멀긴 했지만 상당히 기대가 되는 매치업이다.. 부디 둘중 누구하나 부상없이 무사히 이벤트에 출전하길 빈다..

다음은 미오치치가 타이틀을 획득한 후 한 말이다.. 미오치치의 바람이 이뤄지길 빈다..

"이 벨트를 클리블랜드로 가져간다. 타이틀을 오래 지킬 것을 약속한다"