유쨈미 2024. 7. 18. 19:55

1. Spring Data JPA : CrudRepository

Spring Data JDBC 라이브러리는 CrudRepository 인터페이스를 제공한다.
CrudRepository는 Spring Data JPA에서 제공하는 기본 CRUD (Create, Read, Update, Delete) 작업을
처리하기 위한 인터페이스이다. CrudRepository는 엔티티 객체의 기본적인 데이터 조작을 간단하게 수행할 수
있도록 설계되어 있다.

 

💡 CrudRepository의 개요

JPA와 Spring Data의 기본적인 데이터 접근 작업을 쉽게 수행할 수 있게 해 준다.

 

💻 CrudRepository의 기본 구조 (T : 엔티티 클래스의 타입, ID : 엔티티의 기본 키(PK) 타입)

public interface CrudRepository<T, ID> extends Repository<T, ID> {
   <S extends T> S save(S entity);
   Optional<T> findById(ID id);       
   Iterable<T> findAll();              
   long count();                      
   void deleteById(ID id);       
   void delete(T entity);     
   void deleteAll();          
}

 

📌 CrudRepository의 주요 메소드

메소드 설명 예제
save(S entity) 엔티티를 저장하거나 업데이트 userRepository.save(new User("tom", "oscar"));
findById(ID id) ID로 엔티티를 조회 Optional<User> user = userRepository.findById(1L);
findAll() 모든 엔티티를 조회 Iterable<User> users = userRepository.findAll();
count() 전체 엔티티 수를 반환 long userCount = userRepository.count();
deleteById(ID id) ID로 엔티티를 삭제 userRepository.deleteById(1L);
delete(T entity) 주어진 엔티티를 삭제 userRepository.delete(existingUser);
deleteAll() 모든 엔티티를 삭제 userRepository.deleteAll();

 

💻 CrudRepository의 사용 예시 코드

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity 
public class User {
    @Id
    private Long id;
    private String firstName;
    private String lastName;
    // Constructors, getters, setters
}

 

엔티티 클래스는 @Entity 어노테이션을 사용하여 정의한다.

 

스프링 데이터 JPA : CrudRepository란?

 CrudRepository는 스프링 데이터 JPA에서 제공하는 기본 CRUD (Create, Read, Update, Delete) 작업을 처리하기 위한 인터페이스이다. CrudRepository는 엔티티 객체의 기본적인 데이터 조작을 간단하게 수행할 수

cafe.daum.net

- 출처 : 데이터 과학자 + 프로그래머 세상 다음카페

 

[Web] Spring Data JPA 개념 및 메소드 사용법 알아보기

안녕하세요 데브당에입니다. 최근 Spring으로 웹 프로젝트를 개발하면서 JPA를 처음 사용해보았습니다. 이 과정에서 자연스럽게 Spring Data JPA까지 알아보게 되었습니다. 오늘은 직관적인 코드 구현

devdange.tistory.com

- 참고 : devdange


2. JPA 구조 (Spring Data JPA와의 차이)

JPA는 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다.

JPA는 ORM (Object-Relational Mapping) 기술의 표준 명세로, 구현체가 아닌 인터페이스의 모음이다.

💡 JPA의 주요 구성 요소

  1. EntityManagerFactory
    EntityManager 인스턴스를 생성한다.

  2. EntityManager
    엔티티의 저장, 수정, 삭제, 조회 등 엔티티와 관련된 모든 작업을 처리한다.

  3. Entity
    데이터베이스의 테이블과 매핑되는 Java 객체이다.

  4. Persistence Context
    엔티티를 영구 저장하는 환경이다.

  5. Query
    데이터베이스에 질의하기 위한 객체이다.

 

💡 JPA 구현체

  1. Hibernate
  2. EclipseLink
  3. OpenJPA

 

Spring Data JPA는 JPA를 쉽게 사용할 수 있도록 추상화한 Spring의 하위 프로젝트이다.

 

📌 Spring Data JPA와 JPA의 주요 차이점

특성 JPA Spring Data JPA
추상화 수준 낮음 (더 많은 보일러플레이트 코드) 높음 (적은 코드로 구현 가능)
구현 방식 EntityManager 직접 사용 Repository 인터페이스 사용
쿼리 메소드 JPQL 또는 Criteria API 사용 메소드 이름으로 쿼리 자동 생성
페이징 및 정렬 수동 구현 필요 내장 지원
트랜잭션 관리 @Transactional 사용 자동 트랜잭션 관리

 

💻 예시 코드 (JPA, Spring Data JPA)

@PersistenceContext
private EntityManager entityManager;

public User findById(Long id) {
    return entityManager.find(User.class, id);
}

public List<User> findAll() {
    return entityManager.createQuery("SELECT u FROM User u", User.class).getResultList();
}

public void save(User user) {
    entityManager.persist(user);
}
public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByLastName(String lastName);
}

@Service
public class UserService {
    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User findById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    public List<User> findAll() {
        return userRepository.findAll();
    }

    public void save(User user) {
        userRepository.save(user);
    }
}
 

JPA 구조는 어떻게 되어있고 spring-data-jpa와는 뭐가 다를까?

JPA는 Java Persistence API로, 자바 객체와 DB를 매핑하기 위한 인터페이스를 제공하는 자바 ORM 기술의 표준 명세입니다. SQL Mapper ORM sql과 객체를 매핑 DB와 객체를 매핑 mybatis, jdbcTemplate 등 hibernate, Eclip

tape22.tistory.com

- 참고 : tape22


3. application.yml

application.yml은 Spring Boot 애플리케이션의 설정을 YAML 형식으로 관리하는 파일이다.
application.properties와 동일한 목적을 가지지만, 계층적 구조를 가진 설정에 더 적합하다.

 

💡 YAML의 주요 특징

  1. 계층적 구조
    들여 쓰기로 구조를 표현

  2. 가독성
    복잡한 설정을 더 읽기 쉽게 표현

  3. 타입 추론
    값의 타입을 자동으로 추론 (String, Int, Boolean 등)

  4. 리스트 표현
    하이픈(-)을 사용하여 간단히 표현

 

💻 예시 코드

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver // 한 칸 공백이 있어야함..!
    url: jdbc:mysql://localhost:3306/test_db?serverTimezone=Asia/Seoul
    username: root
    password: $%1234%$

 

📌 YAML의 주요 문법

문법 설명 예시
키-값 쌍 콜론(;)으로 구분 key:value
계층 구조 들여쓰기로 표현 parent:<br> child:value
리스트 하이픈(-)으로 표현 lisf:<br> -item1<br> -item2
여러 줄 문자열 파이프( )로 시작

 

 

Spring application.yml 관리하기

Spring boot 2.4 버전부터 적용되는 방법입니다. 기밀 정보 분리의 필요성 Spring에서는 애플리케이션의 설정 정보를 관리하는 파일이 있는데, resoures폴더의 application.yml (.properties)가 바로 그 프로필

velog.io

- 참고 : devlog


4. application.properties JPA설정

application.properties 파일에서 JPA 관련 설정을 관리할 수 있다.

이 설정들은 JPA의 동작 방식, 데이터베이스 연결, 로깅 등을 제어한다.

 

📌 주요 JPA 설정 항목

설정 항목 설명 예시
spring.jpa.hibernate.ddl-auto 데이터베이스 스키마 자동 생성 설정 update, create, create-drop,
validate, none
spring.jpa.show-sql SQL 쿼리 로깅 여부 true, false
spring.jpa.properties.
hibernate.format_sql
SQL 포멧팅 여부 true, false
spring.jpa.database-platform 데이터베이스 방언 설정 org.hibernate.dialect.
MariaDBDialect

 

🛠️ MariaDB JDBC드라이버를 프로젝트 의존성에 추가해야 한다.
Maven을 사용한다면 아래의 코드를 pom.xml에 추가하자.

<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb-java-client</artifactId>
</dependency>

Gradle을 사용한다면 build.gradle에 아래의 코드를 추가하자.

implementation 'org.mariadb.jdbc:mariadb-java-client'
 

[스프링부트 게시판] 6. application.properties 설정

이번 게시글에서는 스프링부트의 전반적인 설정을 담당하는 application.properties 설정에 대해 설명드리려고 합니다. 먼저 .properties 에 대해서 간단히 말씀드릴 것은 'Key=Value형식으로 파라미터 정보

mun9659.tistory.com

- 참고 : mun9659