πŸ’»
Albert's Til
GitHub
  • 맀일맀일 μ‘°κΈˆμ”© μ„±μž₯ν•˜κΈ°
    • README
    • CS
      • Network
      • HTTP
        • NO-CACHE
      • 였λ₯˜ μ½”λ“œ
      • ORM 도ꡬ
      • Design Pattern
        • CQRS Pattern
          • Event Sourcing and CQRS pattern
        • Builder Pattern
    • DB
      • MySQL
        • Timeline
        • Pagination
        • Index
        • Database Performance Optimization Strategies
        • B+ tree
        • MySQL Connectors VS MySQL Shell(Scripting) VS MySQL Workbench
        • MySQL Storage Engine Architecture
      • Normalization & Denormalization
      • JPA
        • @Transactional
        • Why JPA?
        • About JPA
        • N+1 Issue
        • Index
        • ElementCollection&CollectionTable
        • orphanRemoval
        • CascadeType
        • Use Subselect
        • Dynamic Instance Creation
        • Paging
        • Order
        • Spefication
        • mappedBy
      • MongoDB
        • ObjectId
      • Why MySQL?
      • ACID properties of transactions
      • Between JPA and JDBC
      • Identifiers in Hibernate/JPA
    • Java
      • Jackson de/serialize
      • Collections.singletonList() vs List.of()
      • Manage dependencies in Gradle
      • Logging Level
      • Bean Validation
      • JVM Internals
        • Threads
          • Frame
        • Shared Between Threads
          • Classloader
            • Class Loader Hierarchy
            • Loading Linking Initialization
      • Java Collection Framework
      • Annotation
      • Generic
      • λ””λ―Έν„° 법칙
    • Spring
      • Caching
      • Spring Integration Overview
        • ThreadPollTaskExecutor
        • Messaging Bridge
        • Channel Adapter
        • Poller
        • Configuration and @EnableIntegration
        • Message Endpoints
        • Message Channels
      • HATEOAS
      • @Autowired vs Constructor Dependency Injection
      • Spring Security
        • JWT 토큰 μ‚¬μš©ν•œ 인가
        • OAuth 2 Login
        • OAuth 2 인증
        • 인가
        • 인증
        • PasswordEncoder
      • IoC Container
      • Filter,Interceptor,AOP,Argument Resolver
      • Spring Annotation
      • About Spring
    • Kafka
      • Error Channel
    • Infra
      • Scale Up || Scale Out
      • Docker
        • Dockerfile
        • Docker Hub Deploy
        • Command
      • Cloud μœ ν˜•
        • Infrastructure as a Service
        • Platform as a Service
        • Software as a Service
      • 무쀑단 배포
        • μ—”μ§„μ—‘μŠ€(Nginx)
      • μ½”λ“œ μžλ™ 배포
        • Technical
      • AWS EC2
        • PEM(Privacy Enhanced Mail) ν‚€
      • AWS RDS
      • AWS S3
    • CodeSquad
      • Spring Boot Project 1μ£Όμ°¨ 회고
      • Spring Boot Project 2μ£Όμ°¨ 회고
      • Spirng Boot Project 3μ£Όμ°¨ 회고
      • Spring Boot Project 4μ£Όμ°¨ 회고
    • Foody Moody ν”„λ‘œμ νŠΈ
      • Query Performance Comparison
      • HeartCount Asynchronous Issue
      • DeferredResult
      • ResponseBodyEmitter
      • SseEmitter (Spring)
      • Server-Sent Events (SSE)
      • 기술 μŠ€νƒ 적용 이유
      • NO-CACHE(HTTP)
      • Transactional
    • DDD
      • AggregateId
    • Test
      • RestAssured
    • Coding and Algorithmic Problems
      • 819. Most Common Word
      • 344. Reverse String
      • 125. Valid Palindrome
      • 937. Reorder Data in Log Files
    • Node
      • Async... Await...
      • Custom Transactional Decorator Challenger
    • Python
      • Python Basic Grammar
        • Comments and Input/Output
        • Variable
        • Data type
        • Operations and syntax
        • List,Tuple,Dictionary,Set
        • Function
        • Conditional statement
        • Loop
    • HTML
      • HTML Basic
      • HTML Basic Tags
      • HTML Form Tags
      • HTML Table Tags
    • CSS
      • CSS Basic
      • CSS Practice
Powered by GitBook
On this page
  • Persistence Mechanisms
  • Reference

Was this helpful?

  1. 맀일맀일 μ‘°κΈˆμ”© μ„±μž₯ν•˜κΈ°
  2. DB
  3. JPA

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 2 years ago

Was this helpful?

ChapterΒ 2.Β Why JPA?
Logo