Why JPA?

Persistence Mechanisms

Supports:
Serialization
JDBC
ORM
ODB
EJB 2
JDO
JPA

Java Objects

Yes

No

Yes

Yes

Yes

Yes

Yes

Advanced OO Concepts

Yes

No

Yes

Yes

No

Yes

Yes

Transactional Integrity

No

Yes

Yes

Yes

Yes

Yes

Yes

Concurrency

No

Yes

Yes

Yes

Yes

Yes

Yes

Large Data Sets

No

Yes

Yes

Yes

Yes

Yes

Yes

Existing Schema

No

Yes

Yes

No

Yes

Yes

Yes

Relational and Non-Relational Stores

No

No

No

No

Yes

Yes

No

Queries

No

Yes

Yes

Yes

Yes

Yes

Yes

Strict Standards / Portability

Yes

No

No

No

Yes

Yes

Yes

Simplicity

Yes

Yes

Yes

Yes

No

Yes

Yes

  • Serialization은 객체 κ·Έλž˜ν”„λ₯Ό λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μ „μ†‘ν•˜κ±°λ‚˜ νŒŒμΌμ— μ €μž₯ν•  수 μžˆλŠ” 일련의 λ°”μ΄νŠΈλ‘œ λ³€ν™˜ν•˜κΈ° μœ„ν•œ Java의 κΈ°λ³Έ λ©”μ»€λ‹ˆμ¦˜μž…λ‹ˆλ‹€. μ§λ ¬ν™”λŠ” μ‚¬μš©ν•˜κΈ° 맀우 μ‰½μ§€λ§Œ 맀우 μ œν•œμ μž…λ‹ˆλ‹€. 전체 객체 κ·Έλž˜ν”„λ₯Ό ν•œ λ²ˆμ— μ €μž₯ν•˜κ³  검색해야 ν•˜λ―€λ‘œ λ§Žμ€ μ–‘μ˜ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” 데 μ ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 정보λ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” λ™μ•ˆ 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ 객체에 적용된 λ³€κ²½ 사항을 μ·¨μ†Œν•  수 μ—†μœΌλ―€λ‘œ μ—„κ²©ν•œ 데이터 무결성이 μš”κ΅¬λ˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ— μ ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬ μŠ€λ ˆλ“œ λ˜λŠ” ν”„λ‘œκ·Έλž¨μ€ μ„œλ‘œ μΆ©λŒν•˜μ§€ μ•Šκ³  λ™μΌν•œ μ§λ ¬ν™”λœ 데이터λ₯Ό λ™μ‹œμ— 읽고 μ“Έ 수 μ—†μŠ΅λ‹ˆλ‹€. 쿼리 κΈ°λŠ₯을 μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ λͺ¨λ“  μš”μΈμœΌλ‘œ 인해 μ§λ ¬ν™”λŠ” κ°€μž₯ μ‚¬μ†Œν•œ 지속성 μš”κ΅¬ 사항을 μ œμ™Έν•˜κ³ λŠ” λͺ¨λ‘ μ“Έλͺ¨κ°€ μ—†μŠ΅λ‹ˆλ‹€.

  • λ§Žμ€ κ°œλ°œμžκ°€ JDBC(Java Database Connectivity) APIλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 영ꡬ 데이터λ₯Ό μ‘°μž‘ν•©λ‹ˆλ‹€. JDBCλŠ” λŒ€λŸ‰μ˜ 데이터λ₯Ό μ²˜λ¦¬ν•  수 있고, 데이터 무결성을 보μž₯ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ΄ 있으며, 정보에 λŒ€ν•œ λ™μ‹œ μ•‘μ„ΈμŠ€λ₯Ό μ§€μ›ν•˜κ³ , SQL에 μ •κ΅ν•œ 쿼리 μ–Έμ–΄κ°€ μžˆλŠ” λ“± μ§λ ¬ν™”μ˜ 단점을 λŒ€λΆ€λΆ„ κ·Ήλ³΅ν•©λ‹ˆλ‹€. JDBCμ—μ„œ μ‚¬μš©ν•˜λŠ” κ΄€κ³„ν˜• νŒ¨λŸ¬λ‹€μž„μ€ 객체λ₯Ό μ €μž₯ν•˜λ„λ‘ μ„€κ³„λ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ 영ꡬ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ½”λ“œ 뢀뢄에 λŒ€ν•œ 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ ν¬κΈ°ν•˜κ±°λ‚˜ 상속과 같은 객체 μ§€ν–₯ κ°œλ…μ„ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ— 직접 λ§€ν•‘ν•˜λŠ” 방법을 μ°ΎλŠ” κ²ƒμž…λ‹ˆλ‹€.

  • 객체와 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ” κ°„μ˜ 맀핑을 μˆ˜ν–‰ν•  수 μžˆλŠ” 툭슀 μ†Œν”„νŠΈμ›¨μ–΄ μ œν’ˆμ΄ 많이 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ ORM(개체 κ΄€κ³„ν˜• λ§€ν•‘) ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λ©΄ 객체 λͺ¨λΈμ— 집쀑할 수 있으며 객체 μ§€ν–₯ νŒ¨λŸ¬λ‹€μž„κ³Ό κ΄€κ³„ν˜• νŒ¨λŸ¬λ‹€μž„ κ°„μ˜ λΆˆμΌμΉ˜μ— λŒ€ν•΄ κ±±μ •ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. μ•ˆνƒ€κΉκ²Œλ„ μ΄λŸ¬ν•œ 각 μ œν’ˆμ—λŠ” κ³ μœ ν•œ API 집합이 μžˆμŠ΅λ‹ˆλ‹€.우리의 μ½”λ“œλŠ” 단일 κ³΅κΈ‰μ—…μ²΄μ˜ 특수 μΈν„°νŽ˜μ΄μŠ€μ— μ—°κ²°λ©λ‹ˆλ‹€. 곡급업체가 가격을 μΈμƒν•˜κ±°λ‚˜ λˆˆμ— λ„λŠ” 버그λ₯Ό μˆ˜μ •ν•˜μ§€ λͺ»ν•˜κ±°λ‚˜ κΈ°λŠ₯이 λ’€μ²˜μ§€λŠ” 경우 λͺ¨λ“  지속성 μ½”λ“œλ₯Ό λ‹€μ‹œ μž‘μ„±ν•˜μ§€ μ•Šκ³ λŠ” λ‹€λ₯Έ μ œν’ˆμœΌλ‘œ μ „ν™˜ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 이λ₯Ό 벀더 락인(Lock-in)이라고 ν•©λ‹ˆλ‹€.

  • 객체λ₯Ό κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ— λ§€ν•‘ν•˜λŠ” λŒ€μ‹  일뢀 μ†Œν”„νŠΈμ›¨μ–΄ νšŒμ‚¬μ—μ„œλŠ” 객체λ₯Ό μ €μž₯ν•˜λ„λ‘ νŠΉλ³„νžˆ μ„€κ³„λœ λ°μ΄ν„°λ² μ΄μŠ€ ν˜•μ‹μ„ κ°œλ°œν–ˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 객체 λ°μ΄ν„°λ² μ΄μŠ€(ODB)λŠ” μ’…μ’… 객체-κ΄€κ³„ν˜• λ§€ν•‘ μ†Œν”„νŠΈμ›¨μ–΄λ³΄λ‹€ 훨씬 μ‚¬μš©ν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€. 객체 λ°μ΄ν„°λ² μ΄μŠ€ 관리 κ·Έλ£Ή(ODMG)은 객체 λ°μ΄ν„°λ² μ΄μŠ€μ— μ•‘μ„ΈμŠ€ν•˜κΈ° μœ„ν•œ ν‘œμ€€ APIλ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ κ΅¬μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ ODMG의 ꢌμž₯ 사항을 μ€€μˆ˜ν•˜λŠ” 객체 λ°μ΄ν„°λ² μ΄μŠ€ κ³΅κΈ‰μ—…μ²΄λŠ” 거의 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 곡급업체 μ˜μ‘΄μ€ 객체 λ°μ΄ν„°λ² μ΄μŠ€μ—λ„ 문제λ₯Ό μΌμœΌν‚΅λ‹ˆλ‹€. λ”° λžμ„œ 은기업듀이 κ²€μ¦λœ κ΄€κ³„ν˜• μ‹œμŠ€ν…œμ—μ„œ μƒλŒ€μ μœΌλ‘œ 잘 μ•Œλ €μ§€μ§€ μ•Šμ€ 객체 λ°μ΄ν„°λ² μ΄μŠ€ 기술둜 μ „ν™˜ν•˜λŠ” 것을 μ£Όμ €ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 객체 λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ— μ‚¬μš©ν•  수 μžˆλŠ” 데이터 뢄석 도ꡬ가 적고 였래된 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ— 이미 λ°©λŒ€ν•œ μ–‘μ˜ 데이터가 μ €μž₯λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ λͺ¨λ“  μ΄μœ μ™€ 기타 이유으둜 인해 객체 λ°μ΄ν„°λ² μ΄μŠ€λŠ” κΈ°λŒ€ν•œ 만큼 인기λ₯Ό μ–»μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

  • Java ν”Œλž«νΌμ˜ Enterprise Edition은 μ—”ν„°ν‹° EJBs(Enterprise Java Beans)λ₯Ό λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€. EJB 2.x μ—”ν„°ν‹°λŠ” 데이터 μ €μž₯μ†Œμ˜ 영ꡬ 정보λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ꡬ성 μš”μ†Œμž…λ‹ˆλ‹€. 객체 κ΄€κ³„ν˜• λ§€ν•‘ μ†”λ£¨μ…˜κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ EJB 2.x μ—”ν„°ν‹°λŠ” 영ꡬ λ°μ΄ν„°μ˜ 객체 μ§€ν–₯ viewλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 객체 κ΄€κ³„ν˜• μ†Œν”„νŠΈμ›¨μ–΄μ™€ 달리 EJB 2.x μ—”ν„°ν‹°λŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ‘œ μ œν•œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이듀이 λ‚˜νƒ€λ‚΄λŠ” 영ꡬ μ •λ³΄λŠ” EIS(Enterprise Information System) λ˜λŠ” 기타 μ €μž₯ μž₯μΉ˜μ—μ„œ κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ EJB 2.x μ—”ν„°ν‹°λŠ” μ—„κ²©ν•œ ν‘œμ€€μ„ μ‚¬μš©ν•˜λ―€λ‘œ 곡급업체 간에 이식할 수 μžˆμŠ΅λ‹ˆλ‹€. λΆˆν–‰ν•˜κ²Œλ„ EJB 2.x ν‘œμ€€μ€ ν‘œν˜„ν•  수 μžˆλŠ” 객체 μ§€ν–₯ κ°œλ…μ— λ‹€μ†Œ μ œν•œμ΄ μžˆμŠ΅λ‹ˆλ‹€. 상속, λ‹€ν˜•μ„± 및 λ³΅μž‘ν•œ 관계와 같은 κ³ κΈ‰ κΈ°λŠ₯이 μ—†μŠ΅λ‹ˆλ‹€. λ˜ν•œ EBJ 2.x μ—”ν„°ν‹°λŠ” μ½”λ”©ν•˜κΈ° μ–΄λ €μš°λ©° μ‹€ν–‰ν•˜λ €λ©΄ 무겁고 μ’…μ’… κ°’λΉ„μ‹Ό μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„κ°€ ν•„μš”ν•©λ‹ˆλ‹€

  • JDO 사양은 JPA와 λ†€λžλ„λ‘ μœ μ‚¬ν•œ APIλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ JDOλŠ” λΉ„κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ§€μ›ν•˜λ©° μΌλΆ€μ—μ„œλŠ” 이 κΈ°λŠ₯이 사양을 ν¬μ„μ‹œν‚¨λ‹€κ³  μ£Όμž₯ν•©λ‹ˆλ‹€

  • JPAλŠ” μœ„μ— λ‚˜μ—΄λœ 각 지속성 λ©”μ»€λ‹ˆμ¦˜μ˜ μ΅œμƒμ˜ κΈ°λŠ₯을 κ²°ν•©ν•©λ‹ˆλ‹€. JPAμ—μ„œ μ—”ν„°ν‹°λ₯Ό μƒμ„±ν•˜λŠ” 것은 직렬화 κ°€λŠ₯ν•œ 클래슀λ₯Ό μƒμ„±ν•˜λŠ” κ²ƒλ§ŒνΌ κ°„λ‹¨ν•©λ‹ˆλ‹€. JPAλŠ” JDBC의 λŒ€μš©λŸ‰ 데이터 μ„ΈνŠΈ, 데이터 일관성, λ™μ‹œ μ‚¬μš© 및 쿼리 κΈ°λŠ₯을 μ§€μ›ν•©λ‹ˆλ‹€. 객체 κ΄€κ³„ν˜• μ†Œν”„νŠΈμ›¨μ–΄ 및 객체 λ°μ΄ν„°λ² μ΄μŠ€μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ JPAλŠ” 상속과 같은 κ³ κΈ‰ 객체 μ§€ν–₯ κ°œλ…μ˜ μ‚¬μš©μ„ ν—ˆμš©ν•©λ‹ˆλ‹€. JPAλŠ” JDBC의 λŒ€μš©λŸ‰ 데이터 μ„ΈνŠΈ, 데이터 일관성, λ™μ‹œ μ‚¬μš© 및 쿼리 κΈ°λŠ₯을 μ§€μ›ν•©λ‹ˆλ‹€. 객체 κ΄€κ³„ν˜• μ†Œν”„νŠΈμ›¨μ–΄ 및 객체 λ°μ΄ν„°λ² μ΄μŠ€μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ JPAμ—μ„œλŠ” 상속과 같은 κ³ κΈ‰ 객체 μ§€ν–₯ κ°œλ…μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. JPAλŠ” JDO 및 EJB 2.x 엔터티와 같은 μ—„κ²©ν•œ 사양에 μ˜μ‘΄ν•˜μ—¬ 벀더 쒅속을 λ°©μ§€ν•©λ‹ˆλ‹€. JPAλŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ— 쀑점을 λ‘‘λ‹ˆλ‹€. 그리고 JDO와 λ§ˆμ°¬κ°€μ§€λ‘œ JPAλŠ” μ‚¬μš©ν•˜κΈ°κ°€ 맀우 μ‰½μŠ΅λ‹ˆλ‹€.

Reference

Last updated

Was this helpful?