Spring Boot

Spring Boot 강좌 04강 — 데이터베이스 연동: Spring Data JPA

🎯 학습 목표

  • 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로 확장하세요.