[Java] JPA란?

2026. 3. 20. 21:29·개발/java
반응형

자바의 객체지향 패러다임을 유지하면서 관계형 데이터베이스(RDB)를 효율적으로 다루는 건 현대 백엔드 개발의 핵심이다. 하지만 매번 반복되는 SQL 작성과 객체-테이블 간의 구조적 차이는 개발의 효율성을 떨어뜨리는 주범이 되곤 한다.

 

이 글에서는 이러한 '패러다임의 불일치'를 해결하고, 데이터 중심이 아닌 객체 중심의 개발을 가능하게 하는 JPA(Java Persistence API)의 기초를 정리해 보겠다.

 

1. 정의

JPA란 무엇인가요?

 

JPA는 Java Persistence API의 약자로, 자바 진영의 ORM(Object-Relational Mapping) 기술 표준이다. 이름 그대로, 자바의 객체와 관계형 데이터베이스의 테이블을 중간에서 매핑(연결)해 주는 인터페이스의 모음이다.

 

우리가 직접 JDBC API를 써서 복잡한 SQL을 작성하는 대신, JPA에게 "객체를 저장해 줘"라고 요청하면 JPA가 적절한 SQL을 생성해서 DB에 전달한다. 즉, 개발자는 DB가 아닌 객체 중심으로 비즈니스 로직에만 집중할 수 있게 된다.


2. JPA를 사용하는 이유

단순히 쿼리를 안 써도 돼서 편한 것 그 이상으로, JPA는 다음과 같은 강력한 장점을 제공한다.

  • 생산성 향상: 반복적인 CRUD SQL을 직접 작성할 필요가 없다. save(), find() 같은 메서드 호출로 데이터 처리가 끝난다.
  • 유지보수 용이: 엔티티에 필드 하나만 추가해도 관련 SQL을 모두 수정해야 했던 과거와 달리, 엔티티 클래스만 수정하면 JPA가 SQL을 알아서 관리한다.
  • 패러다임의 불일치 해결: 상속, 연관 관계 등 객체지향의 특징을 DB 테이블 구조에 맞게 자연스럽게 저장하고 조회할 수 있다.
  • 성능 최적화: 지연 로딩(Lazy Loading)이나 1차 캐시를 통해 DB 접근 횟수를 줄여 성능을 높일 수 있다.

3. 핵심 개념: 영속성 컨텍스트 (Persistence Context)

JPA를 이해하는 데 있어 가장 중요한 키워드는 영속성 컨텍스트이다. 이는 "엔티티를 영구 저장하는 환경"이라는 뜻으로, 애플리케이션과 DB 사이에서 엔티티를 관리하는 논리적인 영역이다.

 

영속성 컨텍스트의 주요 기능:

기능 설명
1차 캐시 같은 트랜잭션 내에서 동일한 데이터를 조회할 때 DB를 거치지 않고 메모리에서 바로 가져옴
변경 감지 (Dirty Checking) 객체의 값만 바꾸면 트랜잭션이 끝날 때 변경 사항을 감지해 자동으로 UPDATE SQL 실행
쓰기 지연 쿼리를 바로 보내지 않고 모아뒀다가 트랜잭션 커밋시점에 한꺼번에 실행하여 효율성 증대 

 

쉽게 비유하자면...

데이터베이스의 Table은 마트 진열대에 놓인 '식재료'와 같다. JPA는 이 식재료를 가져와서 우리가 원하는 '요리(객체)'로 만들어주거나, 반대로 우리가 만든 요리를 다시 식재료 상태로 정리해서 '창고(DB)'에 넣어주는 자동화 셰프라고 보면 된다.


마치며

처음에는 영속성 컨텍스트의 동작 원리가 어렵게 느껴질 수 있다.

하지만 한 번 익숙해지면 SQL의 늪에서 벗어나 객체지향적인 코드 작성에만 전념할 수 있는 최고의 도구가 될 것이다.

반응형

'개발 > java' 카테고리의 다른 글

[Java] 게시판 만들기 - 3  (0) 2025.09.14
[Java] 게시판 만들기 - 2  (0) 2025.09.08
[Java] 게시판 만들기 - 1  (0) 2025.09.07
[Java] 게시판 만들기 - 0  (0) 2025.09.07
[Java] main method 분석  (2) 2025.08.08
'개발/java' 카테고리의 다른 글
  • [Java] 게시판 만들기 - 3
  • [Java] 게시판 만들기 - 2
  • [Java] 게시판 만들기 - 1
  • [Java] 게시판 만들기 - 0
danieLee
danieLee
개발일지
  • danieLee
    Code log
    danieLee
  • 전체
    오늘
    어제
    • 분류 전체보기 (77)
      • 개발 (76)
        • C++ (3)
        • java (6)
        • JavaScript (9)
        • python (0)
        • AWS (2)
        • Docker (6)
        • git (0)
        • 백엔드 (4)
        • Spring (7)
        • Django (2)
        • AI (3)
        • 코테 준비 (13)
        • 알고리즘 (6)
        • SKALA 4기 (13)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    4기
    API
    Ai
    파이썬
    vue.js
    대학생
    js
    프론트
    skala
    개념
    서버
    개발자
    java
    코테
    spring
    알고리즘
    백엔드
    JavaScript
    프로그래머스
    개발
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.1
danieLee
[Java] JPA란?
상단으로

티스토리툴바