🎯 학습 목표
- JPA와 Entity 매핑의 개념을 이해한다.
- JpaRepository로 기본 CRUD를 사용한다.
- 쿼리 메서드로 조건 조회를 만든다.
📖 개념 설명
JPA는 자바 객체와 DB 테이블을 매핑(ORM)해, SQL을 직접 쓰지 않고도 객체로 데이터를 다루게 해 줍니다. Spring Data JPA는 여기에 더해 Repository 인터페이스만 선언하면 기본 CRUD 구현을 자동 생성해 줍니다.
앞 강의 Docker MySQL과 연결할 수도 있고, 학습용으로는 메모리 DB(H2)가 간편합니다.
💻 의존성 & 설정
# build.gradle 의존성
# spring-boot-starter-data-jpa
# com.h2database:h2 (또는 mysql-connector-j)
# application.yml (H2 메모리 DB 예시)
spring:
datasource:
url: jdbc:h2:mem:testdb
jpa:
hibernate:
ddl-auto: update # 엔티티에 맞춰 테이블 자동 생성/수정 (학습용)
show-sql: true # 실행 SQL 콘솔 출력
💻 Entity & Repository
@Entity
public class Memo {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String body;
// 기본 생성자, getter/setter 필요 (Lombok @Getter @Setter 권장)
}
// 인터페이스만 선언하면 CRUD 구현이 자동 생성됨
public interface MemoRepository extends JpaRepository {
// 쿼리 메서드: 메서드 이름으로 SQL 자동 생성
List findByTitleContaining(String keyword);
}
💻 사용 예
memoRepository.save(memo); // INSERT/UPDATE
memoRepository.findById(1L); // SELECT by PK
memoRepository.findAll(); // 전체 조회
memoRepository.deleteById(1L); // DELETE
memoRepository.findByTitleContaining("docker"); // 제목 검색
⚠️ 주의사항
ddl-auto: update는 학습용입니다. 운영에서는 Flyway/Liquibase로 스키마를 관리하세요.- 엔티티에 기본 생성자가 없으면 JPA가 객체를 만들지 못합니다.
💡 팁
- H2 콘솔(
spring.h2.console.enabled: true)로 브라우저에서 데이터를 직접 볼 수 있습니다. - 복잡한 조회는
@Query(JPQL)나 QueryDSL로 확장하세요.