[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월 경기여서 아직 멀긴 했지만 상당히 기대가 되는 매치업이다.. 부디 둘중 누구하나 부상없이 무사히 이벤트에 출전하길 빈다..

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

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

[NEWS] '오라클 대 구글' 평결서 구글 승소..

요즘 새롭게 추가적으로 해보는 것이 있는데 얼마전에도 글을 올렸던 것처럼 IT 뉴스를 좀 보고 있다.. 햄처럼 거창하게 이곳 저곳을 다 볼만한 능력은 안되고.. 솔직히 그런 곳을 모르기도 한다 ㅋㅋㅋ.. 무튼 내가 웹 뉴스에서 가쉽거리를 많이 보기 때문에 그 한 귀퉁이에 있는 IT 뉴스에서 좀 볼만한 것들을 챙겨보고 블로그에 포스팅 하려고 한다..

그것의 첫 발걸음이 지난 NEWS 카테고리로 올린 글이었고 이번이 두번째가 되는 셈이다.. 점점 무엇인가 많아지는 듯 하긴한데.. 너무 욕심내지는 말고 작은것부터 시작해서 꾸준히 하도록 하자..

이번 뉴스를 보고 알게 된 것인데 오라클과 구글에 지적재산권에 대해서 분쟁이 있었다고 한다.. 아마 IT 분야에 관심이 있는 분들은 알았을 듯 하다.. 나는 관심 자체가 없었기에 상당히 오랜 시간[6년] 분쟁을 일으킨듯 한데 전혀 몰랐단 말이지..ㅜㅠ 아래는 관련 뉴스 전문이다..

출처 : 연합뉴스

자바 프로그래밍 언어의 지적재산권을 보유한 오라클이 안드로이드 운영체제(OS)를 만든 구글을 상대로 낸 '오라클 대 구글' 소송에서 배심원단이 피고 구글의 손을 들어 줬다. 미국 샌프란시스코 소재 캘리포니아 북부 연방지방법원의 배심원단은 26일(현지시간) 이런 평결을 내렸다. 배심원단은 구글이 안드로이드를 개발하면서 자바 코드 중 일부를 이용한 것은 미국 저작권법상의 '공정 이용'(fair use)에 해당하므로, 구글이 오라클로부터 라이선스를 받을 필요가 없다고 판단했다.
오라클은 구글에 손해배상액으로 88억 달러(10조4천억 원)를, 받지 못한 라이선스 수익으로 4억7천500만 달러(5천600억 원)를 각각 요구했으나, 만약 이번 평결 내용이 최종판결로 확정될 경우 한 푼도 받지 못하게 된다.

다만 패소한 오라클이 항소할 것이 확실하므로, 6년간 진행돼 온 이 소송의 결론이 나려면 앞으로도 몇 년이 더 걸릴 것으로 보인다. 오라클은 자바를 개발한 썬마이크로시스템스를 2010년 인수한 뒤 "구글이 자바의 응용프로그램인터페이스(API) 37종의 구조와 순서, 조직을 베끼는 등 부적절한 방법으로 안드로이드를 설계했다"면서 소송을 제기했다.

당초 캘리포니아 북부 연방지방법원은 2012년 자바 API가 저작권의 대상이 될 수 없다고 보고 구글의 손을 들어 줬으나, 2014년 워싱턴 소재 연방구역 연방항소법원은 오라클의 저작권을 인정하는 판단을 내렸고 이 판결이 연방대법원에서 작년에 확정됐다. 이에 따라 오라클과 구글 양측은 자바 API 코드에 대한 오라클의 저작권을 인정하는 전제로 "구글이 라이선스 계약 없이 이를 사용하는 것이 '공정 이용'의 범위에 포함되는가"라는 좁혀진 쟁점을 놓고 1심 재판을 다시 해 왔다.