SpringBoot

스프링부트 3백앤드 개발자 되기 : 자바 편 5장 정리 (데이터베이스/ ORM)

나는주민 2025. 2. 17. 17:07

도서 저자분 깃허브 주소 (chat 5) : https://github.com/shinsunyoung/springboot-developer/tree/main/chapter5

SQL언어가 아니라 자바 코드로 DB값을 객체처럼 사용

 

1. 엔터티(Entity)

엔터티(Entity)데이터베이스의 테이블과 대응되는 자바 객체입니다. JPA에서 엔터티는 데이터베이스 테이블의 행(row)을 자바 객체의 속성(필드)으로 매핑하는 역할을 합니다.

  • 어노테이션(@Entity)을 통해 해당 클래스가 엔터티임을 명시합니다.
  • 각 엔터티는 기본 키(primary key)를 가져야 하며, 이를 @Id 어노테이션을 사용하여 지정합니다.

엔터티의 특징:

  • @Entity: 해당 클래스가 엔터티임을 나타냄.
  • @Id: 기본 키를 지정하는 어노테이션.
  • @GeneratedValue: 기본 키의 값 생성 전략을 설정하는 어노테이션 (예: 자동 증가).
  • 엔터티는 자바 객체와 데이터베이스 레코드 간의 매핑을 제공.

2. 엔터티 매니저(EntityManager)

  • 엔터티의 생성, 수정, 삭제 및 조회를 수행합니다.
  • 트랜잭션 관리를 돕습니다.
  • JPQL(Java Persistence Query Language) 또는 네이티브 SQL을 사용하여 데이터베이스 쿼리를 실행합니다.
  • 영속성 컨텍스트(Persistence Context)를 관리하여, 엔터티 객체가 DB와 어떻게 매핑될지를 정의합니다.

엔터티 매니저의 주요 메서드:

  • persist(): 엔터티를 영속성 컨텍스트에 저장합니다. (새로운 엔터티 저장)
  • find(): 엔터티를 ID로 조회합니다.
  • remove(): 엔터티를 삭제합니다.
  • merge(): 엔터티의 상태를 갱신하거나 새로 추가합니다.
  • createQuery(): JPQL 쿼리를 생성하고 실행합니다.

 

  • 엔터티 매니저(EntityManager)는 JPA에서 엔터티의 생명주기를 관리하고, 데이터베이스와의 상호작용을 처리하는 핵심 객체입니다. 엔터티 매니저는 엔터티의 상태 관리 쿼리 실행을 담당합니다.


3) 스프링 데이터 JPA 란?

스프링 데이터 JPA 에서는 스프링 데이터의 인터페이스인 PagingAndSortingRepository 를 상속받아 JpaRepository 인터페이스를 만들었으며 , JPA를 더 편리하게 사용하는 메서드를 제공함 . 

 



항목JPA를 사용한 코드 vs JPA를 사용하지 않은 코드

엔터티 클래스 선언 @Entity, @Id, @GeneratedValue 어노테이션 사용 일반 Java 클래스, 추가 어노테이션 없음
데이터베이스 연결 EntityManager를 사용하여 데이터베이스와 연결 DriverManager.getConnection()을 사용하여 데이터베이스 연결
SQL 쿼리 작성 SQL 없이 객체를 EntityManager를 통해 직접 저장 SQL 쿼리를 직접 작성 (INSERT INTO member (name) VALUES (?))
객체를 데이터베이스에 삽입 em.persist(member) 메서드 호출 PreparedStatement를 사용하여 직접 SQL 실행 (stmt.executeUpdate())
기본 키 생성 @GeneratedValue 어노테이션을 사용하여 기본 키 자동 생성 수동으로 기본 키를 설정하거나 데이터베이스에서 자동 증가 설정
트랜잭션 관리 @Transactional 어노테이션 또는 EntityManager의 트랜잭션 관리 메서드 사용 수동으로 Connection을 열고 트랜잭션을 시작하고 커밋/롤백 처리
코드 유지보수 객체 기반으로 데이터를 처리하여 코드가 간결하고 유지보수가 쉬움 SQL과 Java 코드가 섞여 있어 유지보수가 더 어려움

차이점 요약:

  • JPA 사용: 객체 지향적인 방식으로, 데이터베이스 작업을 EntityManager로 처리하며 SQL을 직접 작성하지 않습니다. 유지보수가 쉬운 코드 작성이 가능합니다.
  • JPA 미사용: SQL을 수동으로 작성하여 데이터베이스 작업을 직접 처리해야 하며, Java 코드와 SQL 코드가 혼합되어 있어 코드가 더 복잡하고 유지보수하기 어려울 수 있습니다.