SlideShare uma empresa Scribd logo
1 de 26
POJO(Plain Old Java Object)POJO(Plain Old Java Object)
PROGRAMMINGPROGRAMMING
최범균 , madvirus@madvirus.net
( 다음커뮤니케이션 CTO 본부 기술전략팀 , JavaCan)
2
목차
 지금까지의 개발
 POJO 프로그래밍의 고민거리
 솔루션의 선택
 POJO 구현
 레퍼런스
3
웹 개발자의 발전
pure JSP MVC
Bean DAO
?
framework,
api, module,
…
4
DAO 기반 아키텍처
View
(JSP, Velocity)
Manager
(Session Bean)
DAO
(Entity Bean)
Java Bean
(DTO)
DB
Controller
(Action)
5
객체 지향은 어디에 ?
Manager
Service
DAO
Java Bean (DTO)
function function
struct
Java C
패턴만 있고 , 객체 지향은 없다 !
6
꿈 꾸던 클래스 설계
7
고민과 좌절
하나의 클래스와 하나와 테이
블은
매핑할 수 있겠는걸 ..
Order 와 연관된 Address 객
체를
ORDER 테이블에 넣어야 하
나 ?
쿼리를 두번 날려 ?
상속은 어떻게 구현하지
?
Order 를 로딩할 때 ,
OrderItem 도
함께 로딩할까 ? 매번하면
성능이 나빠질텐데 ,,,,,
트랜잭션의 처리는
?
어려워
ㅜㅜ
8
멋진 솔루션의 발견
iBATIS
JDO
Hibernate
Spring
Java Persistence API
ObJect Relational Bridge
JOTM
JBoss Transaction
Pico
ehcache
9
POJO 의 반격
POJO 진영의 반격
Procedural
힘내라
나
ORM
Lightweight
Container
Open Source
10
솔루션의 선택
ORM: Hibernate
Container: Spring
“JPA 는 향후 고려 예정„
• POJO 기반
• Hibernate/JPA 연동
• 선언적 트랜잭션 지원
• JTA 지원
• 다양한 제품과 연동 용이
• 풍부한 객체 지향 개념 지원
• POJO 기반
• HQL, Criteria, Native SQL
• JTA 를 통한 트랜잭션 관리 가능
• 다양한 방법으로 성능 향상 가능
11
POJO 기반 구현
 도메인 모델의 구성 요소
 아키텍처
 Entity 의 구현
 ORM 처리
 구성 요소의 조립
 Repository 의 구현
 선언적 트랜잭션
 동시성 제어
 JTA 연동
 성능
12
도메인 모델의 구성 요소
 Entity
 고유의 identity 를 갖는 객체
 DB 테이블과 매핑되는 객체
 비즈니스 로직을 포함
 Value Object
 값을 표현하는 객체로서 고유의 identity 를 갖지 않는다 .
 Entity 에 포함되는 value object 와 뷰 영역을 위한 value object 로 구분 가능 .
 Repository
 entity 를 검색하고 삭제하기 위한 메소드를 정의한다 .
 persistence 레이어를 캡슐화한다 .
 Service
 어플리케이션의 흐름을 구현한다 .
 여러 객체를 사용하여 구현되는 기능을 제공한다 .
 서비스는 하나의 entity 로 구현할 수 없는 기능을 포함한다 .
 Use Case 와 연관된다 .
 Factory
 객체 그래프에 맞게 객체들을 조립하여 생성
 Façade
 Presentation 영역과 도메인 영역을 연결
13
아키텍처
Business Tier
14
Entity 의 구현
 객체 지향 모델링
상속
객체간
연관
모델의 재사용
세밀한 설계
로직의 추가
15
ORM 처리
 설정 파일을 사용하여 Entity 와 테이블 매핑
 Hibernate: Value Object, 상속 , 1-n·n-1·m-n·1-1 연관 지원
Object RelationalMapping
16
구성 요소의 조립
 Spring 의 DI 를 이용하여 구성 요소 조립
17
Repository 의 구현
 Hibernate 를 이용한 Repository 의 구현
 Spring 의 HibernateDaoSupport 이용
18
선언적 트랜잭션
 Façade 의 메소드에 트랜잭션 적용
 Spring 의 AOP 를 이용하여 선언적 트랜잭션 구현
 Façade, Service, Repository 는 트랜잭션 처리로부터 해방
19
Hibernate 의 동시성 제어
 Optimistic Locking
 version 기반 Optimistic Locking 지원
 Pessimistic Locking
 행 단위의 락킹 지원
 Offline Optimistic Locking
 Hibernate 의 detached object 를 사용하여 구현
20
JTA 연동
 JTA 를 이용한 트랜잭션 처리
 JOTM 과 같은 오픈 소스 JTA 구현체 사용
 J2EE 콘테이너가 제공하는 JTA 연동 가능
 JTA 를 통한 DB 커넥션과 다양한 자원의 트랜잭션 처리 가능
21
Hibernate 와 성능 (1)
 Lazy Loading
 연관된 객체를 필요한 순간에 로딩
 불필요한 select 쿼리 및 join 을 수행하지 않음
 Eagarly loading: 객체를 로딩한 후 연관된 객체를 함께 로딩
 Join Fetch
 inner join, outer join 등을 이용하여 연관된 객체를
하나의 SELECT 쿼리로 로딩
 Lazy Loading vs Join Fetch
 기본 : Lazy Loading 을 사용하여 필요한 쿼리만 수행하는 것이 유
리
 적은 수의 객체 : join 을 사용하여 연관된 객체를 함께 로딩함으로
써
수행되는 쿼리의 개수를 줄임
22
Hibernate 성능 (2)
 2 차 캐시
 어플리케이션 단위의 캐시 : 모든 Session 이 캐시 공유
 분산 캐시 지원 : 클러스터 단위로 캐시 공유
 Lazy Loading 을 사용할 경우 2 차 캐시가 유리
 쿼리 캐시
 HQL, Criteria 등 검색 결과를 캐시에 저장
 캐시와 성능
 DBMS 에 대한 접근을 최소화 함으로써 조회 성능 ( 속도 ) 을 대폭
향상
 게시판 , 블로그처럼 최근 데이터가 자주 사용되는 어플리케이션에
서
특히 높은 효과를 볼 수 있음
23
성능에 대하여
 최고의 성능 vs. 적절한 최상의 성능
 최고의 성능 : Java < C < 어셈블리 < 기계어
 최고의 성능 : ORM < 단순 매핑 < pure JDBC
 최고 보다는 적절한 최상의 성능을 추구
 95% 의 ORM
 POJO 에서는 무조건 100% ORM 이라는 생각은 위험함
 일부 고성능이 필요한 곳에서는 pure JDBC 나 캐시 기법 등 적용
 POJO 의 보상 1: 생산성 향상
 SQL 및 자원 관리와 관련된 코드를 없앰으로써 생산성 ( 대폭 )
향상
 빠른 개발과 일부 코드에 대한 튜닝
 POJO 의 보상 2: 유지보수성 향상
 전체적인 코드 라인수가 감소
 비즈니스 로직에 초점이 맞춰진 코드
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
25
맺음말
인내는 쓰지만 ,
그 열매는 달다
감사합니다 !
Q & A

Mais conteúdo relacionado

Mais procurados

자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)DK Lee
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA경원 이
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)beom kyun choi
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)DK Lee
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙Hyosang Hong
 
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)DK Lee
 
Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Younghan Kim
 
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기Kim Hunmin
 
03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)Hankyo
 
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Younghan Kim
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰beom kyun choi
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법Sungchul Park
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)beom kyun choi
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs기동 이
 
프론트엔드스터디 E03 - Javascript intro.
프론트엔드스터디 E03 - Javascript intro.프론트엔드스터디 E03 - Javascript intro.
프론트엔드스터디 E03 - Javascript intro.Young-Beom Rhee
 
[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis BasicJi-Woong Choi
 

Mais procurados (20)

자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙
 
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
 
Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조
 
Mongo db 최범균
Mongo db 최범균Mongo db 최범균
Mongo db 최범균
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
 
Java JPA
Java JPAJava JPA
Java JPA
 
03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)
 
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
 
프론트엔드스터디 E03 - Javascript intro.
프론트엔드스터디 E03 - Javascript intro.프론트엔드스터디 E03 - Javascript intro.
프론트엔드스터디 E03 - Javascript intro.
 
[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic[오픈소스컨설팅]MyBatis Basic
[오픈소스컨설팅]MyBatis Basic
 

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

스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장Seongchan Kang
 
Spring vs. spring boot
Spring vs. spring bootSpring vs. spring boot
Spring vs. spring bootChloeChoi23
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)중선 곽
 
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena DollyJi-Woong Choi
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Hyosang Hong
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Hyosang Hong
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core Ji-Woong Choi
 
OCE - Cno 2014 private sector oriented open paas oce
OCE - Cno 2014 private sector oriented open paas   oceOCE - Cno 2014 private sector oriented open paas   oce
OCE - Cno 2014 private sector oriented open paas oceuEngine Solutions
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Yeon Soo Kim
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)DK Lee
 
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...문기 박
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기KwangSeob Jeong
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)중선 곽
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴Terry Cho
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들Kivol
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개HYUN-JOO LEE
 

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

스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
Spring vs. spring boot
Spring vs. spring bootSpring vs. spring boot
Spring vs. spring boot
 
ecdevday4
ecdevday4ecdevday4
ecdevday4
 
J2 Ee
J2 EeJ2 Ee
J2 Ee
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
[오픈소스컨설팅]이기종 WAS 클러스터링 솔루션- Athena Dolly
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
 
OCE - Cno 2014 private sector oriented open paas oce
OCE - Cno 2014 private sector oriented open paas   oceOCE - Cno 2014 private sector oriented open paas   oce
OCE - Cno 2014 private sector oriented open paas oce
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
 
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개
 

Mais de beom kyun choi

옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개beom kyun choi
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나beom kyun choi
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)beom kyun choi
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀beom kyun choi
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초beom kyun choi
 
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료beom kyun choi
 
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개beom kyun choi
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해beom kyun choi
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개beom kyun choi
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개beom kyun choi
 
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기beom kyun choi
 
차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)beom kyun choi
 
객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회beom kyun choi
 
Hive 입문 발표 자료
Hive 입문 발표 자료Hive 입문 발표 자료
Hive 입문 발표 자료beom kyun choi
 

Mais de beom kyun choi (20)

옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)
 
DDD 준비 서문래
DDD 준비 서문래DDD 준비 서문래
DDD 준비 서문래
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초
 
Spring Boot 소개
Spring Boot 소개Spring Boot 소개
Spring Boot 소개
 
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료
 
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
Zookeeper 소개
Zookeeper 소개Zookeeper 소개
Zookeeper 소개
 
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기
 
차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)
 
객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회
 
Storm 훑어보기
Storm 훑어보기Storm 훑어보기
Storm 훑어보기
 
Hive 입문 발표 자료
Hive 입문 발표 자료Hive 입문 발표 자료
Hive 입문 발표 자료
 
HBase 훑어보기
HBase 훑어보기HBase 훑어보기
HBase 훑어보기
 

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

  • 1. POJO(Plain Old Java Object)POJO(Plain Old Java Object) PROGRAMMINGPROGRAMMING 최범균 , madvirus@madvirus.net ( 다음커뮤니케이션 CTO 본부 기술전략팀 , JavaCan)
  • 2. 2 목차  지금까지의 개발  POJO 프로그래밍의 고민거리  솔루션의 선택  POJO 구현  레퍼런스
  • 3. 3 웹 개발자의 발전 pure JSP MVC Bean DAO ? framework, api, module, …
  • 4. 4 DAO 기반 아키텍처 View (JSP, Velocity) Manager (Session Bean) DAO (Entity Bean) Java Bean (DTO) DB Controller (Action)
  • 5. 5 객체 지향은 어디에 ? Manager Service DAO Java Bean (DTO) function function struct Java C 패턴만 있고 , 객체 지향은 없다 !
  • 7. 7 고민과 좌절 하나의 클래스와 하나와 테이 블은 매핑할 수 있겠는걸 .. Order 와 연관된 Address 객 체를 ORDER 테이블에 넣어야 하 나 ? 쿼리를 두번 날려 ? 상속은 어떻게 구현하지 ? Order 를 로딩할 때 , OrderItem 도 함께 로딩할까 ? 매번하면 성능이 나빠질텐데 ,,,,, 트랜잭션의 처리는 ? 어려워 ㅜㅜ
  • 8. 8 멋진 솔루션의 발견 iBATIS JDO Hibernate Spring Java Persistence API ObJect Relational Bridge JOTM JBoss Transaction Pico ehcache
  • 9. 9 POJO 의 반격 POJO 진영의 반격 Procedural 힘내라 나 ORM Lightweight Container Open Source
  • 10. 10 솔루션의 선택 ORM: Hibernate Container: Spring “JPA 는 향후 고려 예정„ • POJO 기반 • Hibernate/JPA 연동 • 선언적 트랜잭션 지원 • JTA 지원 • 다양한 제품과 연동 용이 • 풍부한 객체 지향 개념 지원 • POJO 기반 • HQL, Criteria, Native SQL • JTA 를 통한 트랜잭션 관리 가능 • 다양한 방법으로 성능 향상 가능
  • 11. 11 POJO 기반 구현  도메인 모델의 구성 요소  아키텍처  Entity 의 구현  ORM 처리  구성 요소의 조립  Repository 의 구현  선언적 트랜잭션  동시성 제어  JTA 연동  성능
  • 12. 12 도메인 모델의 구성 요소  Entity  고유의 identity 를 갖는 객체  DB 테이블과 매핑되는 객체  비즈니스 로직을 포함  Value Object  값을 표현하는 객체로서 고유의 identity 를 갖지 않는다 .  Entity 에 포함되는 value object 와 뷰 영역을 위한 value object 로 구분 가능 .  Repository  entity 를 검색하고 삭제하기 위한 메소드를 정의한다 .  persistence 레이어를 캡슐화한다 .  Service  어플리케이션의 흐름을 구현한다 .  여러 객체를 사용하여 구현되는 기능을 제공한다 .  서비스는 하나의 entity 로 구현할 수 없는 기능을 포함한다 .  Use Case 와 연관된다 .  Factory  객체 그래프에 맞게 객체들을 조립하여 생성  Façade  Presentation 영역과 도메인 영역을 연결
  • 14. 14 Entity 의 구현  객체 지향 모델링 상속 객체간 연관 모델의 재사용 세밀한 설계 로직의 추가
  • 15. 15 ORM 처리  설정 파일을 사용하여 Entity 와 테이블 매핑  Hibernate: Value Object, 상속 , 1-n·n-1·m-n·1-1 연관 지원 Object RelationalMapping
  • 16. 16 구성 요소의 조립  Spring 의 DI 를 이용하여 구성 요소 조립
  • 17. 17 Repository 의 구현  Hibernate 를 이용한 Repository 의 구현  Spring 의 HibernateDaoSupport 이용
  • 18. 18 선언적 트랜잭션  Façade 의 메소드에 트랜잭션 적용  Spring 의 AOP 를 이용하여 선언적 트랜잭션 구현  Façade, Service, Repository 는 트랜잭션 처리로부터 해방
  • 19. 19 Hibernate 의 동시성 제어  Optimistic Locking  version 기반 Optimistic Locking 지원  Pessimistic Locking  행 단위의 락킹 지원  Offline Optimistic Locking  Hibernate 의 detached object 를 사용하여 구현
  • 20. 20 JTA 연동  JTA 를 이용한 트랜잭션 처리  JOTM 과 같은 오픈 소스 JTA 구현체 사용  J2EE 콘테이너가 제공하는 JTA 연동 가능  JTA 를 통한 DB 커넥션과 다양한 자원의 트랜잭션 처리 가능
  • 21. 21 Hibernate 와 성능 (1)  Lazy Loading  연관된 객체를 필요한 순간에 로딩  불필요한 select 쿼리 및 join 을 수행하지 않음  Eagarly loading: 객체를 로딩한 후 연관된 객체를 함께 로딩  Join Fetch  inner join, outer join 등을 이용하여 연관된 객체를 하나의 SELECT 쿼리로 로딩  Lazy Loading vs Join Fetch  기본 : Lazy Loading 을 사용하여 필요한 쿼리만 수행하는 것이 유 리  적은 수의 객체 : join 을 사용하여 연관된 객체를 함께 로딩함으로 써 수행되는 쿼리의 개수를 줄임
  • 22. 22 Hibernate 성능 (2)  2 차 캐시  어플리케이션 단위의 캐시 : 모든 Session 이 캐시 공유  분산 캐시 지원 : 클러스터 단위로 캐시 공유  Lazy Loading 을 사용할 경우 2 차 캐시가 유리  쿼리 캐시  HQL, Criteria 등 검색 결과를 캐시에 저장  캐시와 성능  DBMS 에 대한 접근을 최소화 함으로써 조회 성능 ( 속도 ) 을 대폭 향상  게시판 , 블로그처럼 최근 데이터가 자주 사용되는 어플리케이션에 서 특히 높은 효과를 볼 수 있음
  • 23. 23 성능에 대하여  최고의 성능 vs. 적절한 최상의 성능  최고의 성능 : Java < C < 어셈블리 < 기계어  최고의 성능 : ORM < 단순 매핑 < pure JDBC  최고 보다는 적절한 최상의 성능을 추구  95% 의 ORM  POJO 에서는 무조건 100% ORM 이라는 생각은 위험함  일부 고성능이 필요한 곳에서는 pure JDBC 나 캐시 기법 등 적용  POJO 의 보상 1: 생산성 향상  SQL 및 자원 관리와 관련된 코드를 없앰으로써 생산성 ( 대폭 ) 향상  빠른 개발과 일부 코드에 대한 튜닝  POJO 의 보상 2: 유지보수성 향상  전체적인 코드 라인수가 감소  비즈니스 로직에 초점이 맞춰진 코드
  • 24. 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

Notas do Editor

  1. - 처음 웹 개발자의 길로 들어서면 JSP 에서 모든 걸 처리하는 것 부터 시작함 - 좀더 공부를 하다보면 JSP 와 로직을 처리하는 코드를 분리하는 것이 좋다고 말하는 것을 듣게 되고 , 이에 따라 스트러츠와 같은 프레임워크를 이용하여 MVC 패턴을 도입하게 된다 . 더불어 , 자바빈을 사용하여 데이터를 표현하게 된다 . - 좀더 하다보면 선배들이 DAO 패턴을 이용하여 DB 처리 관련 코드를 분리해내는 것을 보게 되고 , iBATIS 와 같은 것을 사용해서 좀더 편리하게 처리할 수 있따는 것도 알게 된다 . - 그 이후 발전은 , 이 패턴을 잘 사용할 수 있도록 도와주는 프레임워크의 사용법을 익히는 데 초점이 맞춰진다 .