Day 44 - JPA pt.1

haxxru log;·2026년 5월 4일
post-thumbnail

이 글은 2026년 05월 04일 작성된 글입니다.

오늘은 Spring Data JPA 초기 세팅부터
엔티티, Repository, 로그 설정, 그리고 서비스 구조까지 정리했다.


1. Spring Data JPA 개념

Spring Data JPA는 DB를 쉽게 다루기 위한 라이브러리다.

  • SQL을 직접 많이 작성하지 않아도 된다
  • CRUD를 자동으로 처리해준다
  • 유지보수가 쉬워진다

2. 프로젝트 세팅

Spring Initializr를 통해 프로젝트를 생성하고
JPA와 Web 의존성을 추가했다.

implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-web")
runtimeOnly("com.h2database:h2")

3. H2 데이터베이스

개발 환경에서는 H2를 사용했다.

  • 설치 없이 바로 사용 가능
  • 메모리 / 파일 모드 지원
spring:
  datasource:
    url: jdbc:h2:./db_dev;MODE=MySQL

4. 엔티티 클래스

DB 테이블과 매핑되는 클래스

@Entity
public class Post {
    @Id
    @GeneratedValue
    private Integer id;

    private String subject;
}

핵심

  • @Entity → 테이블과 매핑
  • @Id → 기본키
  • 기본 생성자 필수

5. ddl-auto 설정

spring:
  jpa:
    hibernate:
      ddl-auto: update
  • update → 테이블 없으면 생성
  • 구조 변경 시 자동 반영

6. Repository 도입

public interface PostRepository extends JpaRepository<Post, Integer> {
}

기본 제공 기능

  • save()
  • findById()
  • findAll()
  • delete()
  • count()

7. 데이터 저장

Post post = new Post();
post.setSubject("제목");

postRepository.save(post);

👉 내부적으로 INSERT 실행


8. ApplicationRunner

앱 시작 시 자동 실행되는 구조

@Bean
ApplicationRunner init() {
    return args -> {
        // 초기 데이터 생성
    };
}

9. SQL 로그 설정

spring:
  jpa:
    properties:
      hibernate:
        format_sql: true
        highlight_sql: true
        use_sql_comments: true

추가

logging:
  level:
    org.hibernate.orm.jdbc.bind: TRACE
    org.hibernate.orm.jdbc.extract: TRACE

👉 실행 SQL + 파라미터 + 결과까지 확인 가능


10. 엔티티 주의사항

  • 기본 생성자 필수
  • final 필드 사용 주의
  • 리플렉션으로 생성됨

11. 서비스 계층 도입

@Service
public class PostService {
}
  • Repository 직접 사용하지 않도록 분리
  • 구조: Controller → Service → Repository

12. @Service vs @Component

  • 기능은 동일
  • 의미 차이 있음

👉 Service에는 @Service 쓰는 게 좋다


13. 컬럼 추가

@Column(columnDefinition = "TEXT")
private String content;
  • 엔티티 수정 → 테이블 자동 반영

14. 날짜 컬럼

private LocalDateTime createDate;
private LocalDateTime modifyDate;

15. 핵심 흐름

  1. 엔티티 작성
  2. Repository 생성
  3. Service 연결
  4. 데이터 저장/조회

✅ 정리

  • Spring Data JPA를 사용하면 SQL 없이도 CRUD를 쉽게 처리할 수 있다.
  • 엔티티는 반드시 기본 생성자가 있어야 한다.
  • Repository를 통해 DB 접근을 단순화할 수 있다.
  • Service 계층을 분리하면 구조가 훨씬 깔끔해진다.

0개의 댓글