๐Ÿ’ป
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
  • What Is JDBC
  • What Is JPA
  • JPA vs JDBC
  • Database Interactions
  • Managing Associations
  • Database Dependency
  • Exception Handling
  • Performance
  • JDBC Dependency
  • Transaction Management
  • Pros and Cons
  • Reference

Was this helpful?

  1. ๋งค์ผ๋งค์ผ ์กฐ๊ธˆ์”ฉ ์„ฑ์žฅํ•˜๊ธฐ
  2. DB

Between JPA and JDBC

What Is JDBC

JDBC๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ†ต์‹ ํ•˜๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ˆ˜์ค€ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JDBC ๊ด€๋ฆฌ์ž์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ณตํ†ต API์ž…๋‹ˆ๋‹ค. API ์™ธ์—๋„ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ„ํ•œ ๋ฒค๋” ์ œ๊ณต JDBC ํ˜ธํ™˜ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

What Is JPA

JPA๋Š” Java ๊ฐ์ฒด๋ฅผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ ˆ์ฝ”๋“œ์— ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ๋Š” Java ํ‘œ์ค€์ž…๋‹ˆ๋‹ค. ORM(Object Relationship Mapping)์— ๋Œ€ํ•œ ๊ฐ€๋Šฅํ•œ ์ ‘๊ทผ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ Java ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰, ์ €์žฅ, ์—…๋ฐ์ดํŠธ ๋ฐ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JPA ์‚ฌ์–‘์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JPA vs JDBC

๋ฐฑ์—”๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ๊ณผ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•  ๋•Œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์ž๋Š” ์ƒ๋‹นํ•œ ๊ธฐ์ˆ ์  ๊ณผ์ œ์— ์ง๋ฉดํ•ฉ๋‹ˆ๋‹ค. JPA์™€ JDBC ๊ฐ„์˜ ๋…ผ์Ÿ์€ ๋‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ์ˆ ์ด ์˜๊ตฌ ๋ฐ์ดํ„ฐ ์ž‘์—…์— ๋งค์šฐ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข…์ข… ๊ฒฐ์ •์ ์ธ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

Database Interactions

  • JDBC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” SQL ๋ช…๋ น์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • JPA๋Š” JDBC์™€ ๋‹ฌ๋ฆฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ์ฒด ์ง€ํ–ฅ semantics์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜ Java ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. JPA annotations์€ ์ฃผ์–ด์ง„ Java ํด๋ž˜์Šค ๋ฐ ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ•ด๋‹น ํ…Œ์ด๋ธ” ๋ฐ ํ•ด๋‹น ์—ด์— ๋งคํ•‘๋˜๋Š” ๋ฐฉ์‹์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Managing Associations

  • JDBC์™€ ์—ฐ๊ฒฐํ•  ๋•Œ ์ฟผ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์„ ์ „์ฒด SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • JPA์—์„œ๋Š” ๋‹จ์ˆœํžˆ annotations์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋Œ€์ผ, ์ผ๋Œ€๋‹ค, ๋‹ค๋Œ€์ผ ๋ฐ ๋‹ค๋Œ€๋‹ค ์—ฐ๊ฒฐ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Database Dependency

  • JDBC๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜์กด์ ์ด๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งˆ๋‹ค ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ˜๋ฉด์— JPA๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ฑฐ์˜ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ (๋˜๋Š” ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ) ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Exception Handling

  • JDBC๋Š” SQLException๊ณผ ๊ฐ™์€ ํ™•์ธ๋œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— try-catch ๋ธ”๋ก์— ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ˜๋ฉด์— Hibernate์™€ ๊ฐ™์€ JPA ํ”„๋ ˆ์ž„์›Œํฌ๋Š” unchecked exceptions๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์œ„์น˜์—์„œ ์ด๋ฅผ ํฌ์ฐฉํ•˜๊ฑฐ๋‚˜ ์„ ์–ธํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Performance

  • JPA์™€ JDBC์˜ ์ฐจ์ด์ ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ JPA ํ”„๋ ˆ์ž„์›Œํฌ ๋˜๋Š” ๋กœ์ปฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋”ฉ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฐจ์ด์ž…๋‹ˆ๋‹ค. ์–ด๋А ์ชฝ์ด๋“  ๊ฐ์ฒด ๊ด€๊ณ„ ์ž„ํ”ผ๋˜์Šค ๋ถˆ์ผ์น˜๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ณต์ •ํ•˜๊ฒŒ ๋งํ•˜๋ฉด SQL ์ฟผ๋ฆฌ๋ฅผ ์ž˜๋ชป ์ž‘์„ฑํ•˜๋ฉด JDBC ์„ฑ๋Šฅ์ด ์—„์ฒญ๋‚˜๊ฒŒ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ๋•Œ ์„ฑ๋Šฅ์ด ๋…ผ์Ÿ์˜ ๋Œ€์ƒ์ด ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ „๋ฌธ ๊ฐœ๋ฐœ์ž๋Š” ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•˜๊ฒŒ ์ž˜ ์‹คํ–‰๋˜๋Š” Java ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JDBC Dependency

  • JPA ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์—ฌ์ „ํžˆ JDBC๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ JPA๋ฅผ ํ™œ์šฉํ•  ๋•Œ ์ฝ”๋“œ๋Š” ์‹ค์ œ๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํ˜ธ ์ž‘์šฉ์— ๋Œ€ํ•ด JDBC API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. JPA๋Š” ๊ฐœ๋ฐœ์ž๋กœ๋ถ€ํ„ฐ ์ €์ˆ˜์ค€ JDBC ํ˜ธ์ถœ์„ ์ˆจ๊ธฐ๋Š” ์ถ”์ƒํ™” ๊ณ„์ธต ์—ญํ• ์„ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Transaction Management

  • JDBC์—์„œ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๋Š” ์ปค๋ฐ‹ ๋ฐ ๋กค๋ฐฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

  • ๋ฐ˜๋ฉด ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๋Š” JPA์—์„œ ์•”์‹œ์ ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

Pros and Cons

  • JPA์— ๋น„ํ•ด JDBC์˜ ๊ฐ€์žฅ ํ™•์‹คํ•œ ์ด์ ์€ ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ๋˜ํ•œ JPA๋Š” ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณด๋‹ค ์ •๊ตํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋” ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ๊ฐœ๋ฐœ์ž๊ฐ€ JPA ํ”„๋ ˆ์ž„์›Œํฌ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„์˜ ๋‚ด๋ถ€ ์ž‘์—…์„ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•˜๋ฉด ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณต๊ธ‰์—…์ฒด๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๊ณ„ํš์ด ์—†๋Š” ๊ฒฝ์šฐ JDBC๊ฐ€ ์„ ํ˜ธ๋˜๋Š” ๋Œ€์•ˆ์ด ๋ฉ๋‹ˆ๋‹ค.

  • ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ JDBC๋ณด๋‹ค JPA์˜ ์ฃผ์š” ์ด์ ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜๋ฏธ ์ฒด๊ณ„์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š” ์—†์ด ๊ฐ์ฒด ์ง€ํ–ฅ ์›์น™๊ณผ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ, ํŠนํžˆ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ SQL ๋ฐ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ํ™•์‹คํ•œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์„ ๋ณด๋‹ค ์‹ ์†ํ•˜๊ฒŒ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋˜ํ•œ ์ž˜ ํ…Œ์ŠคํŠธ๋˜๊ณ  ๊ฐ•๋ ฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— JPA๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งคํ•‘ ๊ณ„์ธต์˜ ์˜ค๋ฅ˜๊ฐ€ ๊ฐ์†Œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Reference

Last updated 2 years ago

Was this helpful?

A Comparison Between JPA and JDBC | BaeldungBaeldung
Logo