## [Spring Data JPA] EntityManagerFactory, BoardRepository가 인터페이스인 이유, 그리고 H2 데이터베이스 실행 실수 총정리

Yeeun·2025년 4월 22일
0

SpringBoot

목록 보기
8/46

안녕하세요! 오늘은 Spring Data JPA를 사용하면서 자주 헷갈릴 수 있는 EntityManagerFactoryRepository 인터페이스, 그리고 H2 데이터베이스 실행 실수에 대해 정리해보려고 합니다.
실제 코드 예시와 함께, 실무에서 자주 마주치는 실수와 그 이유까지 콕 집어 설명드릴게요!


1. EntityManagerFactory란?

  • EntityManagerFactory는 JPA에서 엔티티 매니저(EntityManager)를 생성해주는 팩토리(Factory) 객체입니다.
  • 데이터베이스 연결, 트랜잭션, 엔티티의 영속성 관리 등 JPA의 핵심 기능을 담당하는 EntityManager를 만들어주는 역할을 합니다.

왜 Factory(공장) 패턴을 쓸까?

  • 데이터베이스 연결 설정, 자원 관리, 여러 EntityManager 생성 등 복잡한 과정을 캡슐화해서 개발자가 쉽게 사용할 수 있도록 도와줍니다.
  • EntityManagerFactory는 무겁고, 애플리케이션당 하나만 생성해서 공유하는 것이 일반적입니다.

2. BoardRepository가 인터페이스인 이유

public interface BoardRepository extends JpaRepository {}

왜 클래스가 아니라 인터페이스일까?

  • Spring Data JPA는 개발자가 직접 구현 클래스를 만들 필요 없이, 인터페이스만 선언하면 내부적으로 구현체를 자동으로 만들어줍니다.
  • 즉, JpaRepository를 상속받는 순간, CRUD 메서드(저장, 조회, 삭제 등)가 자동으로 구현됩니다.
  • 추상 메서드를 하나도 안 만들어도 Spring이 런타임에 프록시(Proxy) 객체로 구현체를 제공해줍니다.

만약 class였다면?

  • 직접 모든 메서드를 구현해야 하므로, 코드가 길어지고 유지보수가 어려워집니다.

결론

  • 인터페이스로 선언하면, 코드가 간결해지고 확장성도 높아집니다.
  • Spring Data JPA의 핵심 철학: "인터페이스만 만들면, 구현은 Spring이 알아서 해준다!"

3. 실수 주의! H2 데이터베이스 실행

흔한 실수

  • H2 데이터베이스를 메모리 모드로 쓰거나, 애플리케이션 실행 전에 H2 콘솔을 켜지 않아 데이터가 저장되지 않는 경우가 많습니다.
  • 오른쪽 하단에 H2 아이콘이 안 보이면, DB가 실행 중이 아닐 수 있습니다!

올바른 실행 방법

  1. H2 데이터베이스를 먼저 실행하세요.
    • IDE(예: IntelliJ)에서 H2를 실행하거나, 터미널에서 직접 실행할 수 있습니다.
  2. application.properties에 H2 설정이 되어 있는지 확인!
    spring.datasource.url=jdbc:h2:tcp://localhost/~/test
    spring.datasource.driver-class-name=org.h2.Driver
    spring.datasource.username=sa
    spring.datasource.password=
    spring.h2.console.enabled=true
  3. H2 콘솔 접속
    • http://localhost:8080/h2-console에서 접속 가능
    • JDBC URL, 사용자명, 비밀번호가 맞는지 꼭 확인!

4. 정리

  • EntityManagerFactory는 EntityManager를 만들어주는 팩토리 객체!
  • Repository는 인터페이스로 선언하면 Spring이 자동으로 구현체를 만들어줌!
  • H2 데이터베이스를 실행하지 않으면, DB 연결/저장 오류가 발생할 수 있으니 꼭 실행상태를 확인!

💡 실무 꿀팁

  • Repository에 메서드를 추가하고 싶으면, 인터페이스에 메서드 시그니처만 추가하세요.
    Spring Data JPA가 자동으로 쿼리를 만들어줍니다!
  • H2를 쓸 때는 항상 DB 실행 상태와 JDBC URL을 꼼꼼히 확인하세요!

궁금한 점이나 추가로 알고 싶은 내용이 있다면 댓글로 남겨주세요!
읽어주셔서 감사합니다 😊

0개의 댓글