JPA 스프링부트 - JPA 기본과 CRUD

박지명·2026년 5월 10일

스프링부트

목록 보기
4/10

1. ORM과 JPA

ORM (Object-Relational Mapping): 데이터베이스 테이블을 자바 객체로 매핑하는 기술

  • 개발자가 자바 객체만 조작하면 SQL 자동 생성
  • DB 조작: JDBC → MyBatis → JPA (고수준)

JPA: 자바의 ORM 표준 명세 (구현체: Hibernate)


2. Entity vs DTO

구분DTOEntity
역할데이터 저장소기능을 가진 객체
로직없음비즈니스 로직 포함
JPA 관리XO
기본생성자-필수
// DTO → Entity 변환
public Item toEntity() {
    return Item.builder().seq(seq).name(name)...build();
}

// Entity → DTO 변환
public ItemDto toDto() {
    return ItemDto.builder().seq(seq).name(name)...build();
}

3. Entity 선언

@Entity
@Table(name = "tblItem")
@Getter
@NoArgsConstructor      // JPA 필수
@AllArgsConstructor
@Builder
public class Item {
    
    @Id
    @Column(name = "seq")
    @SequenceGenerator(name = "seqItem", sequenceName = "seqItem", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqItem")
    private Long seq;
    
    @Column(name = "name", nullable = false, length = 100)
    private String name;
    
    @Column(nullable = false)  // name과 같으면 생략 가능
    private Integer price;
    
    // 비즈니스 로직
    public void update(String name, Integer price) {
        this.name = name;
        this.price = price;
    }
}

주요 애너테이션:

  • @Entity: JPA 관리 클래스
  • @Id: Primary Key
  • @Column(nullable=false, length=100): 컬럼 제약조건
  • @GeneratedValue: 자동 증가값

4. Repository

public interface ItemRepository extends JpaRepository<Item, Long> {
    // JpaRepository가 기본 메서드 제공
    // - save(), findById(), findAll(), delete(), count()...
}

5. CRUD 연산

CREATE (INSERT)

Item item = dto.toEntity();
itemRepository.save(item);

READ (SELECT)

Optional<Item> item = itemRepository.findById(1L);
if(item.isPresent()) {
    Item result = item.get();
}

// 또는
item.ifPresent(v -> { /* 처리 */ });

UPDATE (UPDATE)

Optional<Item> item = itemRepository.findById(seq);
item.get().update("새이름", 5000);
itemRepository.save(item.get());  // 자동 UPDATE

중요: 조회한 Entity는 JPA가 추적. 필드 수정 후 save() 호출 시 UPDATE 자동 실행

DELETE (DELETE)

Optional<Item> item = itemRepository.findById(seq);
itemRepository.delete(item.get());

6. JPA 쿼리 방식

Query Method: 메서드명으로 JPQL 자동 생성 단순 조회 (예: ID 검색)
JPQL: 엔티티 객체 대상의 JPA 전용 쿼리 언어 복잡한 조회, JPA 표준 방식
Native Query: DB에 의존적인 SQL 직접 작성 Oracle CONNECT BY 등 DB 전용 기능

(JPA와 결합)
QueryDSL: 자바 코드로 JPQL을 빌드하는 오픈소스 프레임워크 동적 쿼리, 복잡한 JOIN

0개의 댓글