1 / 65

Hitting the database

Hitting the database. 백기선 whiteship2000@gmail.com http://whiteship.tistory.com. Persistence Layer. JDBC Hibernate JPA iBatis. DAO Pattern. 왜 ? 단일 책인 원칙 결과 유지 보수 및 요구 사항 변경에 기민하게 Agile 반응 할 수 있다 . Loosely Coupling. 스프링의 Data Access 철학. 예외를 꼭 잡아야 하는가 ?

gema
Download Presentation

Hitting the database

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. www.springframework.co.kr Hitting the database 백기선 whiteship2000@gmail.com http://whiteship.tistory.com

  2. www.springframework.co.kr Persistence Layer JDBC Hibernate JPA iBatis

  3. www.springframework.co.kr DAO Pattern • 왜? • 단일 책인 원칙 • 결과 • 유지 보수 및 요구 사항 변경에 기민하게Agile 반응 할 수 있다. • Loosely Coupling

  4. www.springframework.co.kr 스프링의 Data Access 철학 • 예외를 꼭 잡아야 하는가? • Checked Exception VS Unchecked Exception • Data Access Exception 계층 구조 제공. • 지겹도록 반복해서 나타나는 코드 • Template Pattern • Dao Template 클래스 제공. • 좀 더 간결하게, 중복을 제거하자. • Dao Support 클래스 제공.

  5. www.springframework.co.kr 예외를 꼭 잡아야 하는가?

  6. www.springframework.co.kr java.sql.SQLException이 발생하는 원인 • DB에 연결할 수 없을 때. • 질의문query에 문법적 오류가 있을 때. • 질의하고 있는 테이블이나 컬럼이 존재하지 않을 때. • CRUD 작업이 DB의 제약 사항을 위반할 때.

  7. www.springframework.co.kr 그럼 이런 예외를 잡아서 하는 일은? • 로그 남기기. • 에러 메시지 출력.

  8. www.springframework.co.kr 굳이 로그와 에러 출력 때문에 에러를 잡아야 하겠는가?? • 잡을 수 밖에 없습니다. 안 잡으면 컴파일 에러 입니다. • 왜? Checked Exception

  9. www.springframework.co.kr 그래서 스프링은 • SQLException을 DataAccessException으로 맵핑해 줍니다. • DataAccessException • Unchecked Exception. • 여러 밴더들의 예외를 추상화한 다양한 계층 구조 제공.

  10. www.springframework.co.kr DataAccessException Unchecked Exception

  11. www.springframework.co.kr DataAccessException의 장점 • 개발자에게 예외 처리를 강요하지 않습니다. • 애플리케이션이 좀 더 유연해 집니다. • 추상화된 예외 계층을 제공하기 때문에 Persistence Layer 프레임워크변경이 자유롭습니다. • 좀 더 구체적인 예외 정보 제공

  12. www.springframework.co.kr SQLException VS DataAccessException Lose Win

  13. www.springframework.co.kr 지겹도록 반복해서 나타나는 코드

  14. www.springframework.co.kr 매우 간단한 작업을 하는JDBC를 사용한 DAO 코딩 순서. • Define connection parameters • Open the connection • Specify the statement • Prepare and execute the statement • Set up the loop to iterate through the results (if any) • Do the work for each iteration • Process any exception • Handle transactions • Close the connection

  15. www.springframework.co.kr 변하는 것과 그렇지 않은 것을 분리하라. • Template Pattern 고정적인 것 유동적인 것

  16. www.springframework.co.kr Template Pattern 적용의 장점 • 반복되는 코드 작성이 제거 됩니다. • 더 빠르게 개발할 수 있습니다. • 소스 코드 가독성이 좋아집니다. • 코드 라인 수가 줄어듭니다. • 실수할 가능성을 줄여 줍니다.

  17. www.springframework.co.kr Spring이 제공하는 Template 클래스 다양한 Persistent Layer 프레임워크 지원.

  18. www.springframework.co.kr 좀 더 간결하게,중복을 제거하자.

  19. www.springframework.co.kr Dao Support 클래스 사용시 문제점 • DAO 구현체 마다 각각 Template 클래스를 사용할 것입니다.

  20. www.springframework.co.kr 중복이 발생합니다.

  21. www.springframework.co.kr 중복을 제거 하는 방법 • Extract Super Class 리팩터링

  22. www.springframework.co.kr Dao Support 클래스 사용의 장/단점 • 장점 • 중복제거 • 스프링 설정 파일의 크기가 줄어듭니다. • Template 클래스를 명시적으로 등록할 필요가 없기 때문입니다. • Support 클래스가 data source를 가지고 내부적으로 Template 객체를 생성하여 사용합니다. • 단점 • 스프링 소스코드에 종속성이 생깁니다.

  23. www.springframework.co.kr Spring이 제공하는 Dao Support 클래스

  24. www.springframework.co.kr 퀴즈 1 1. 기존 JDBC 코딩의 단점은?

  25. www.springframework.co.kr 퀴즈 2 2. 그러한 단점을 극복하기 위해 스프링이 제공하는 주요 기능 3개는?

  26. www.springframework.co.kr 퀴즈 3 3. O/X 퀴즈 • DataAccessException은 Checked Exception이다. • JdbcDaoSupport 클래스를 사용하면 JdbcTemplate 클래스를 빈으로 등록하지 않아도 된다. • 이제 쉬는 시간일까?

  27. www.springframework.co.kr 이론은 다 살펴보았습니다.이제는 코딩을 해야 할 시간입니다. • Data Source 얻어오기. • JNDI로부터 가져오기. • Pool에서 건져오기. • JDBC 드라이버 기반 생성. • DAO 코드 작성하기. • JDBC • Hibernate • JPA • iBatis • Caching 사용하기. • Spring Module Project

  28. www.springframework.co.kr Data Source 얻어오기.

  29. www.springframework.co.kr JNDI로부터 가져오기. • Java Naming and Directory Interface

  30. www.springframework.co.kr JNDI로부터 가져오기. • Spring 2.0 이전 • JndiObjectFactoryBean 사용 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean” scope="singleton"> <property name="jndiName" value="/jdbc/RantzDatasource" /> <property name="resourceRef" value="true" /> </bean>

  31. www.springframework.co.kr JNDI로부터 가져오기. • Spring 2.0 이후 • jee 네임스페이스 사용하기. <jee:jndi-lookup id="dataSource" jndi-name="/jdbc/RantzDatasource” resource-ref="true" />

  32. www.springframework.co.kr Pool에서 건져오기.

  33. www.springframework.co.kr Pool에서 건져오기. • Jakarta Commons Database Connection Pools (DBCP) 사용하기 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="org.hsqldb.jdbcDriver" /> <property name="url" value="jdbc:hsqldb:hsql://localhost/roadrantz/roadrantz" /> <property name="username" value="sa" /> <property name="password" value="" /> <property name="initialSize" value="5" /> <property name="maxActive" value="10" /> </bean>

  34. www.springframework.co.kr Pool 설정하기

  35. www.springframework.co.kr JDBC 드라이버에서 생성하기. • DriverManagerDataSource • SingleConnectionDataSource <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName” value="org.hsqldb.jdbcDriver" /> <property name="url” value="jdbc:hsqldb:hsql://localhost/roadrantz/roadrantz" /> <property name="username" value="sa" /> <property name="password" value="" /> </bean>

  36. www.springframework.co.kr JDBC 드라이버에서 생성하기. • DriverManagerDataSource • DB 연결을 요청할 때 마다 새로운 객체를 생성하여 전달합니다. • 멀티스레드 사용 가능. • 매번 요청이 올 때 마다 객체를 생성해야 하는 비용이 발생합니다. • SingleConnectionDataSource • 오직 하나의 DB 연결 객체를 생성해두고 요청할 때 그 객체를 전달합니다. • 멀티스레드에서 사용하지 못합니다. • 둘 이상의 스레드가 하나의 자원에 접근하기 때문에 Thread Safe 하지 않습니다.

  37. www.springframework.co.kr DAO 코드 작성하기.

  38. www.springframework.co.kr JDBC • DataSource 직접 사용하기. • JdbcTemplate 사용하기. • JdbcDaoSupport 사용하기.

  39. www.springframework.co.kr DataSource 직접 사용하기.

  40. www.springframework.co.kr JdbcTemplate 사용하기 • JdbcTemplate • NamedParameterJdbcTemplate • SimpleJdbcTemplate

  41. www.springframework.co.kr JdbcDaoSupport 사용하기

  42. www.springframework.co.kr 다시 한 번 • JdbcDaoSupport 클래스를 사용하는 이유는? • 새로운 DAO 구현체가 추가 되었을 때 상속을 사용하여 중복되는 코드 제거.

  43. www.springframework.co.kr JDBC 사용한 DAO 소스 코드 보기

  44. www.springframework.co.kr DAO 프레임워크와 연동하기 • Spring + Hibernate • Spring + JPA • Spring + iBatis • 왜 DAO 프레임워크를 사용할까? • JDBC를 직접 다루는 것 보다 간단하게 DAO를 구현할 수 있습니다. • Lazy Loading, Eager Fetching, Cascading을 설정으로 처리할 수 있습니다.

  45. www.springframework.co.kr Spring + Hibernate JDBC 사용시 기본 클래스 관계 Hibernate 사용시 기본 클래스 관계

  46. www.springframework.co.kr Spring + Hibernate • 지금 가장 중요한 질문은 다음 중 무엇일까요? • Session 객체는 어떻게 생성할까? • Session 객체를 어떻게 사용할까? • SessionFactory는 어떻게 설정할까? • SessionFactory 객체는 무슨 일을 하는 걸까? • SessionFactory는 무엇인가?

  47. www.springframework.co.kr SessionFactory는 어떻게 설정할까? • SessionFactoryBean • LocalSessionFactoryBean • AnnotationSessionFactoryBean

  48. www.springframework.co.kr HibernateTemplate 사용하기 • org.springframework.orm.hibernate3.HibernateTemplate 빈으로 등록하기

  49. www.springframework.co.kr Hibernate Dao Support 사용하기

  50. www.springframework.co.kr Hibernate 사용한 DAO 코드 보기

More Related