2007년 제8회 jco 컨퍼런스 pojo 프로그래밍 발표 자료

26
POJO(Plain Old Java Object) POJO(Plain Old Java Object) PROGRAMMING PROGRAMMING 최범균 , [email protected] ( 다음커뮤니케이션 CTO 본부 기술전략팀 , JavaCan)

Upload: beom-kyun-choi

Post on 03-Jul-2015

668 views

Category:

Technology


4 download

DESCRIPTION

2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

TRANSCRIPT

Page 1: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

POJO(Plain Old Java Object) POJO(Plain Old Java Object) PROGRAMMINGPROGRAMMING

최범균 , [email protected]( 다음커뮤니케이션 CTO 본부 기술전략팀 , JavaCan)

Page 2: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

2

목차 지금까지의 개발 POJO 프로그래밍의 고민거리 솔루션의 선택

POJO 구현

레퍼런스

Page 3: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

3

웹 개발자의 발전

pure JSP MVCBean DAO ?

framework, api, module,

Page 4: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

4

DAO 기반 아키텍처

View(JSP, Velocity)

Manager(Session Bean)

DAO(Entity Bean)

Java Bean(DTO)

DBController

(Action)

Page 5: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

5

객체 지향은 어디에 ?

ManagerService DAO

Java Bean (DTO)

function function

struct

Java C

패턴만 있고 , 객체 지향은 없다 !

Page 6: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

6

꿈 꾸던 클래스 설계

Page 7: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

7

고민과 좌절

하나의 클래스와 하나와 테이블은

매핑할 수 있겠는걸 ..

Order 와 연관된 Address 객체를

ORDER 테이블에 넣어야 하나 ?

쿼리를 두번 날려 ?

상속은 어떻게 구현하지?

Order 를 로딩할 때 , OrderItem 도

함께 로딩할까 ? 매번하면성능이 나빠질텐데 ,,,,,

트랜잭션의 처리는?

어려워ㅜㅜ

Page 8: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

8

멋진 솔루션의 발견

iBATIS

JDO

Hibernate

SpringJava Persistence API

ObJect Relational Bridge

JOTM

JBoss Transaction

Pico

ehcache

Page 9: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

9

POJO 의 반격

POJO 진영의 반격

Procedural

힘내라

ORM

LightweightContainer

Open Source

Page 10: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

10

솔루션의 선택

ORM: Hibernate

Container: Spring

“JPA 는 향후 고려 예정„

• POJO 기반• Hibernate/JPA 연동• 선언적 트랜잭션 지원• JTA 지원• 다양한 제품과 연동 용이

• 풍부한 객체 지향 개념 지원• POJO 기반• HQL, Criteria, Native SQL• JTA 를 통한 트랜잭션 관리 가능• 다양한 방법으로 성능 향상 가능

Page 11: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

11

POJO 기반 구현 도메인 모델의 구성 요소 아키텍처 Entity 의 구현 ORM 처리 구성 요소의 조립 Repository 의 구현 선언적 트랜잭션 동시성 제어 JTA 연동 성능

Page 12: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

12

도메인 모델의 구성 요소 Entity

고유의 identity 를 갖는 객체 DB 테이블과 매핑되는 객체 비즈니스 로직을 포함

Value Object 값을 표현하는 객체로서 고유의 identity 를 갖지 않는다 . Entity 에 포함되는 value object 와 뷰 영역을 위한 value object 로 구분 가능 .

Repository entity 를 검색하고 삭제하기 위한 메소드를 정의한다 . persistence 레이어를 캡슐화한다 .

Service 어플리케이션의 흐름을 구현한다 . 여러 객체를 사용하여 구현되는 기능을 제공한다 . 서비스는 하나의 entity 로 구현할 수 없는 기능을 포함한다 . Use Case 와 연관된다 .

Factory 객체 그래프에 맞게 객체들을 조립하여 생성

Façade Presentation 영역과 도메인 영역을 연결

Page 13: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

13

아키텍처

Business Tier

Page 14: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

14

Entity 의 구현 객체 지향 모델링

상속

객체간연관

모델의 재사용세밀한 설계

로직의 추가

Page 15: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

15

ORM 처리 설정 파일을 사용하여 Entity 와 테이블 매핑

Hibernate: Value Object, 상속 , 1-n·n-1·m-n·1-1 연관 지원

Object RelationalMapping

Page 16: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

16

구성 요소의 조립 Spring 의 DI 를이용하여구성요소조립

Page 17: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

17

Repository 의구현 Hibernate 를 이용한 Repository 의 구현

Spring 의 HibernateDaoSupport 이용

Page 18: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

18

선언적트랜잭션 Façade 의 메소드에 트랜잭션 적용

Spring 의 AOP 를 이용하여 선언적 트랜잭션 구현

Façade, Service, Repository 는 트랜잭션 처리로부터 해방

Page 19: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

19

Hibernate 의동시성제어 Optimistic Locking

version 기반 Optimistic Locking 지원

Pessimistic Locking 행 단위의 락킹 지원

Offline Optimistic Locking Hibernate 의 detached object 를 사용하여 구현

Page 20: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

20

JTA 연동 JTA 를 이용한 트랜잭션 처리

JOTM 과 같은 오픈 소스 JTA 구현체 사용 J2EE 콘테이너가 제공하는 JTA 연동 가능 JTA 를 통한 DB 커넥션과 다양한 자원의 트랜잭션 처리 가능

Page 21: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

21

Hibernate 와성능 (1) Lazy Loading

연관된 객체를 필요한 순간에 로딩 불필요한 select 쿼리 및 join 을 수행하지 않음 Eagarly loading: 객체를 로딩한 후 연관된 객체를 함께 로딩

Join Fetch inner join, outer join 등을 이용하여 연관된 객체를

하나의 SELECT 쿼리로 로딩

Lazy Loading vs Join Fetch 기본 : Lazy Loading 을 사용하여 필요한 쿼리만 수행하는 것이 유

리 적은 수의 객체 : join 을 사용하여 연관된 객체를 함께 로딩함으로

써수행되는 쿼리의 개수를 줄임

Page 22: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

22

Hibernate 성능 (2) 2 차 캐시

어플리케이션 단위의 캐시 : 모든 Session 이 캐시 공유 분산 캐시 지원 : 클러스터 단위로 캐시 공유 Lazy Loading 을 사용할 경우 2차 캐시가 유리

쿼리 캐시 HQL, Criteria 등 검색 결과를 캐시에 저장

캐시와 성능 DBMS 에 대한 접근을 최소화 함으로써 조회 성능 (속도 )을 대폭

향상 게시판 , 블로그처럼 최근 데이터가 자주 사용되는 어플리케이션에

서특히 높은 효과를 볼 수 있음

Page 23: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

23

성능에대하여 최고의 성능 vs. 적절한 최상의 성능

최고의 성능 : Java < C < 어셈블리 < 기계어 최고의 성능 : ORM < 단순 매핑 < pure JDBC 최고 보다는 적절한 최상의 성능을 추구

95% 의 ORM POJO 에서는 무조건 100% ORM 이라는 생각은 위험함 일부 고성능이 필요한 곳에서는 pure JDBC 나 캐시 기법 등 적용

POJO 의 보상 1: 생산성 향상 SQL 및 자원 관리와 관련된 코드를 없앰으로써 생산성 (대폭 )

향상 빠른 개발과 일부 코드에 대한 튜닝

POJO 의 보상 2: 유지보수성 향상 전체적인 코드 라인수가 감소 비즈니스 로직에 초점이 맞춰진 코드

Page 24: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

24

참고자료 POJO

POJO 의 유래 : http://www.martinfowler.com/bliki/POJO.html POJO in Action, Chris Richardson, Manning

Hibernate http://www.hibernate.org Java Persistence with Hibernate, Christian Bauer 외 , Manning Hibernate 3 프로그래밍 , 최범균 , 가메출판사 (3 월 )

Spring http://www.springframework.org 스프링 인 액션 , Craig Walls 외 , 에어콘출판사 [Manning]

오픈소스 JTA 구현체 JOTM(Java Open Transaction Manager) : http://jotm.objectweb.org/

객체 지향 및 패턴 관련 OOAD: http://www.ooad.org Domain Driven Design, Eric Evans, Addison-Wesley Professional

강의 예제 코드 http://cafe.daum.net/jco8pojo

Page 25: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

25

맺음말

인내는 쓰지만 , 그 열매는 달다

Page 26: 2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료

감사합니다 !

Q & A