JPA의 핵심 역할: 개발자가 직접 SQL을 작성하지 않고 객체 지향 방식으로 데이터베이스와 연동할 수 있게 해주는 기술입니다. 🚀
엔티티 정의: @Entity와 @Id 어노테이션을 사용하여 자바 클래스를 데이터베이스 테이블에 매핑되는 엔티티 객체로 정의합니다. 🏷️
ID 자동 생성: @GeneratedValue(strategy = GenerationType.IDENTITY)를 통해 데이터베이스의 자동 증가 기능을 활용하여 ID를 자동으로 부여할 수 있습니다. 🔢
리포지토리 인터페이스: JpaRepository<엔티티클래스, ID타입>를 상속받아 기본적인 CRUD(생성, 조회, 수정, 삭제) 메서드를 자동으로 제공받습니다. 💾
save 메서드의 동작: ID가 null이면 새로운 데이터를 삽입(INSERT)하고, ID가 존재하면 해당 데이터를 갱신(UPDATE)합니다. 🔄
메서드 이름 기반 쿼리: findBy이름, findBy이름And이메일, findBy나이GreaterThan 등 메서드 이름 규칙만으로 복잡한 조회 조건을 정의할 수 있습니다. 🔍
동적 쿼리 (Query by Example): Example.of(엔티티객체)를 사용하여 엔티티 객체에 설정된 값(null이 아닌)을 기반으로 유연한 동적 검색 조건을 생성할 수 있습니다. 🧩
H2 데이터베이스 스키마 관리: H2와 같은 인메모리 데이터베이스에서는 JPA가 애플리케이션 실행 시 엔티티 기반으로 스키마를 자동으로 생성하고 종료 시 삭제합니다. 🏗️
테이블/컬럼 매핑 커스터마이징: @Table(name="테이블명") 및 @Column(name="컬럼명") 어노테이션을 사용하여 클래스/프로퍼티 이름과 다른 데이터베이스 테이블/컬럼 이름을 매핑할 수 있습니다. 🗺️
SQL 로깅 활성화: spring.jpa.show-sql=true, spring.jpa.properties.hibernate.format_sql=true, logging.level.org.hibernate.orm.jdbc.bind=TRACE 설정을 통해 JPA가 생성하는 SQL문과 파라미터 바인딩 값을 상세하게 확인할 수 있습니다. 📊