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

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

Jul 03, 2015

Download

Technology

beom kyun choi

2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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