오늘이군
JPA 개요 본문
※ 추천 글
https://www.youtube.com/watch?v=OOO4H3BAetU (https://www.slideshare.net/zipkyh/spring-datajpa?next_slideshow=1)
https://www.youtube.com/watch?v=v8nNsS5-pyM
http://blog.naver.com/noranlemon84/220774678674
http://www.javajigi.net/pages/viewpage.action?pageId=5924
https://www.slideshare.net/ssusere4d67c/jpa-53004111
※ 추천 책
★ 추천 글 가볍게 보시고 바로 김영한님이나 최범균님 책을 구입하셔서.. 여러번 보시길 바랍니다..
★ 객체지향/SOLID/디자인패턴/스프링삼각형에 대한 이해도를 높인 상태에서 JPA에 대해 보시고, DDD도 병행하여 보시면 도움이 됩니다.
De facto
Spring
JPA
Hibernate
1. JPA 란?
Java Persistence API 로 자바진영의 ORM 기술 표준이다.
※ ORM (Object-relational mapping) : 객체는 객체대로 설계, 관계형 데이터베이스는 관계형 데이터베이스대로 설계, 중간에서 매핑
EJB 엔티티빈이 어렵고 쓸수 없는 기술이라 판단한 Gavin King과 시러스 테크놀로지스 출신 동료들이 2001년
Hibernate 를 만들었으며, java 진영에서 반성을 하고 거의 복붙으로
JPA 라는 표준을 만들었습니다. 스프링 진영에서는 대부분 기술을 PSA 로 제공하고 있는데 mongoDB, redis, neo4j, hadoop 등 데이터베이스 인터페이스가 많아지자 Spring Data 라는 프로젝트가 나옵니다. RDB, ORM, noSQL 다 지원하는데 앞으로 살펴볼 내용은
Spring Data JPA 입니다.
2. 필요성
객체지향 언어를 사용하면서 (대부분) 관계형데이터베이스를 쓰고 있다. JPA 를 사용하지 않으면 객체를 SQL로 매핑하는 작업이 많다.
외국에서는 대부분 ORM 을 사용(ORM에 익숙하지 못하면 취업을 포기해야한다는.. )하며, SI 는 모르겠지만.. 서비스회사들은 우리나라도 곧.. 대부분.. 거의다.. 일 것 같은 개인적인 생각..
https://trends.google.com/trends/explore?date=all&q=hibernate,jpa,mybatis,ibatis
3. 장단점
SQL 을 직접 작성하지 않아도 된다.
컬럼 추가 시 Domain 에만 추가를 해주면 된다.
성능 개선이 있으며 데이터베이스 변경에 따른 수정 작업이 거의 없다.
학습곡선이 높다.
제대로 알고 사용하지 않으면 데이터 손실이나 성능에 문제가 생길 수 있다.
4. 사용예시
가. 공통
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");
* EntityManager를 만드는 공장, 하나만 만들어서 애플리케이션 전체에서 공유, 서로 다른 스레드간에 공유해도 된다.
EntityManager em = emf.createEntityManager();
* CRUD기능을 할 수 있게끔 한다, 여러 스레드가 동시에 접근하면 동시성 문제가 발생하므로 스레드간에 절대 공유하면 안된다.
나. INSERT
Member member = new Member();
member.setId("gildong");
member.setUsername("홍길동");
member.setAge(24);
em.persist(member);
다. UPDATE
Member member = em.find(Member.class, "gildong");
member.setUsername("홍길순");
member.setAge(30);
라. SELECT
Member member = em.find(Member.class, "gildong");
마. DELETE
Member member = em.find(Member.class, "gildong");
em.remove(member);
5. FAQ
가. 성능에 문제가 없는지
전세계적으로 많이 쓰이고 있으며 국내에서도 쿠팡 등 대형 시스템에서도 JPA 를 전사도입하여 사용중입니다. 아래 3가지 기능을 제공하여 성능을 최적화 할 수 있다.
1) 1차 캐시와 동일성 보장 : 같은 트랜잭션 안에서는 같은 엔티티를 반환
2) 트랜잭션을 지원하는 쓰기지연 : 트랜잭션을 커밋할 때 까지 INSERT SQL 을 모아 커밋하는 순간 한번에 SQL 전송 (JDBC BATCH SQL)
3) 지연로딩 : 객체가 실제 사용 될 때 로딩(데이터베이스에서 조회)
cf) 즉시로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회
ps) 비즈니스 상황 및 데이터에 따라 최적화가 달라질 수 있음
나. 통계 같이 복잡한 쿼리는 어떻게 사용하는지
복잡한 쿼리는 JPQL 이나 Native Query 로 사용가능합니다.
'삶.. > 프로그래밍' 카테고리의 다른 글
Use Case Diagram (0) | 2017.06.08 |
---|---|
JPA 영속성 컨텍스트 (0) | 2017.05.24 |
스프링 삼각형 - PSA (0) | 2017.05.16 |
스프링 삼각형 - AOP (0) | 2017.05.16 |
스프링 삼각형 - IoC/DI (0) | 2017.05.16 |