Spring JPA
๐ฟ JPA
์๋ฐ ์ดํ๋ฆฌ์ผ์ด์ ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ ์ํ ์ธํฐํ์ด์ค
์ฌ๊ธฐ์ ์ฃผ๋ชฉํ ์ ์ ๋ฐ๋ก ์ธํฐํ์ด์ค๋ผ๋ ๊ฒ์ด๋ค. JPA๋ ํน์ ๊ธฐ๋ฅ์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ค. JPA๋ ์๋ฐ ์ดํ๋ฆฌ์ผ์ด์ ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผ ํ๋์ง๋ฅผ ์ ์ํ ๋ฐฉ๋ฒ์ด๋ค.
JPA๋ ๋จ์ํ interface์ด๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ด ์๋ค. JPA๋ฅผ ์ ์ํ javax.persistence ํจํค์ง์ ๋๋ถ๋ถ์ ๊ฐ์ข Annotation ๊ณผ interface, enum, Exception์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. JPA์ ํต์ฌ์ด ๋๋ EntityManager๋ ์๋์ ๊ฐ์ด javax.persistence.EntityManager๋ผ๋ ํ์ผ์ interface๋ก ์ ์๋์ด ์๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package javax.persistence;
import ...
;
public interface EntityManager {
public void persist(Object entity);
public <T> T merge(T entity);
public void remove(Object entity);
public <T> T find(Class<T> entityClass, Object primaryKey);
// More interface methods...
}
JPA์ 3์์
- javax.persistance ํจํค์ง๋ก ์ ์๋ API ๊ทธ ์์ฒด
- JPQL(Java Persistence Query Language)
- ๊ฐ์ฒด/๊ด๊ณ ๋ฉํ๋ฐ์ดํฐ ___
๐ฟ Hibernate
hibernate๋ JPA์ ๊ตฌํ์ฒด
EntityManagerFactory, EntityManager, EntityTransaction์ Hibernate์์๋ ๊ฐ๊ฐ SessionFactory, Session, Transaction์ผ๋ก ์์๋ฐ๊ณ ๊ฐ๊ฐ Impl๋ก ๊ตฌํํ ๊ฒ์ด๋ค.
์ฆ, JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋ฐ๋์ hibernate๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์๋ค.
Hibernate ๊ตฌ์กฐ
- Configurattion
- Session Factory์์ Java Application ๋ฐ Database์ ํจ๊ป ์์ ํ ๋ ์ฌ์ฉ
- It represents an entire set of mappings of an application Java Types to an SQL database.
- Session Factory
- ์ฌ์ฉ์ ์ดํ๋ฆฌ์ผ์ด์ ์์ Session Factory์ Session ๊ฐ์ฒด๋ฅผ ์์ฒญํ๋ฉด Session Factory๋ Configuration ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ Session Object๋ฅผ ์ธ์คํด์คํ ํ๋ค.
- Session
- ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ํธ์์ฉ์ ๋ํ๋ธ๋ค.(ํญ์์ ์ผ๋ก)์ธ์ ์ ์ธ์คํด์ค๋ SessionFactory Bean์ผ๋ก ๋ถํฐ ๋ฐ์
- Session ๊ฐ์ฒด๋ application ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค(๋ฐ์ดํฐ๊ฐ ์ ์ฅ ๋)์ ์ธํฐํ์ด์ค์ด๋ค.์งง์ ์์กด์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, JDBC Connection ์ ํฌ์ฅ ํ๊ณ ์๋ค. (์ฟผ๋ฆฌ๋ฅผ ์ง์ ์ ์ผ๋ก ์ํํ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋์ ์์กด์ฃผ๊ธฐ(ํธ๋์ญ์ ??)๊ฐ ์งง์ผ๋ฉฐ, JDBC Connection ์ ํฌ์ฅํ๋ค๋ ํํ์ ํ ๊ฒ ๊ฐ๋ค.)
- Session, EntityManager ๊ฐ์ ๊ฒ๋ค์ด Persistent Context๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ทธ๋ฆญ
- Query
- ์์ฉํ๋ก๊ทธ๋จ์ด ํ๋ ์ด์์ ์ ์ฅ๋ ๊ฐ์ฒด(Persistence Object)์ ๋ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฟผ๋ฆฌํ ์ ์๊ฒํ๋ค.
- First-level cache
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ ์์ฉํ๋ ๋์ Hibernate Session ๊ฐ์ฒด๊ฐ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ์บ์๋ฅผ ๋ํ๋ธ๋ค. Session cache๋ผ๊ณ ๋ ํ๋ฉฐ, ํ์ฌ ์ธ์ ๋ด์์ ๊ฐ์ฒด๋ฅผ ํ์ Session์ ์ ์ฅํ๋ค. Session์ ์ ์ฅ๋ ๊ฐ์ฒด์์ DB์ ํ๋ ๋ชจ๋ ์์ฒญ์ Session cache๋ฅผ ๊ฑฐ์น๋ค. Session ๊ฐ์ฒด๊ฐ ํ์ฑ์ค์ผ ๋๋ง Session cache๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- Transaction
- ๋ฐ์ดํฐ์ ์์์ฑ์ ๋ฌ์ฑ์ํค๊ณ (commit) ์๊ธฐ์น ๋ชปํ ์ํฉ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ๋กค๋ฐฑํ ์ ์๊ฒํ๋ค.
- Persistent objects
- Persistent objects๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ํ๋๋ก์ ์ ์ง๋๋ ํ๋ฒํ ์ค๋๋ Java ๊ฐ์ฒด๋ค(POJOs)์ด๋ค.
- ๊ตฌ์ฑ ํ์ผ(hibernate.cfg.xml ๋๋ hybernate.properties)์์ ๊ตฌ์ฑํ๊ฑฐ๋ @Entity ์ด๋ ธํ ์ด์ ์ผ๋ก ์ ์ธ๋ ์ ์๋ค.
- Second-level-cache :
- ์ฌ๋ฌ ์ธ์ ์ ๊ฑธ์ณ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ค(application ๋จ์์ cache).
- Second-level-cache๋ ๋ช ์์ ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ, ํด๋น ์บ์์ ๋ํ ์บ์ ๊ณต๊ธ์๋ฅผ ์ ๊ณตํด์ผ ํ๋ค.
- ์ผ๋ฐ์ ์ธ Second-level-cache ๊ณต๊ธ์ ์ค ํ๋๋ก EhCache๊ฐ ์๋ค.
๐ฟ Spring-Data
Spring์์ ์ ๊ณตํ๋ ๋ชจ๋ ์ค ํ๋๋ก ๊ฐ๋ฐ์๊ฐ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก JPA๋ฅผ ํ๋จ๊ณ ๋ ์ถ์ํ ์ํจ Repository๋ผ๋ interface๋ฅผ ์ ๊ณต
์ฆ, Spring-Data-JPA์ Repository์ ๋ด๋ถ์ ์ธ ๊ตฌํ์์ JPA๋ฅผ ์ฌ์ฉํ๋ค๋ ๋ป
๐ฟ JDBC
Java Database Connectivity์ ์ค์๋ง. java์์ DB์ ์ ์ํ ์ ์๋๋ก ํ๋ API
- JDBC Driver Manager๋ DB์ ๋ง๋ Driver๋ฅผ loadํ์ฌ JDBC๋ฅผ ์ด๊ธฐํ ํฉ๋๋ค
- JDBC Driver๋ค์ Java App์ ์์ฒญ๋ค์ DBMS๊ฐ ์ดํด ํ ์ ์๋ Protocal๋ก ๋ณํํฉ๋๋ค.