Home > Spring > ๐Ÿƒ[Spring] SimpleJpaRepository๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

๐Ÿƒ[Spring] SimpleJpaRepository๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?
Spring Framework

๐Ÿƒ[Spring] SimpleJpaRepository๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

  • SimpleJpaRepository๋Š” Spring Data JPA(Java Persistence API)์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ Repository ๊ตฌํ˜„ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
  • ์ด ํด๋ž˜์Šค๋Š” Spring Data JPA์˜ Repository ์ธํ„ฐํŽ˜์ด์Šค(CrudRepository, JpaRepository ๋“ฑ)๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” CRUD(์ƒ์„ฑ(Create), ์กฐํšŒ(Read), ์ˆ˜์ •(Update), ์‚ญ์ œ(Delete)) ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

1๏ธโƒฃ ์—ญํ• .

  • SimpleJpaRepository๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์˜ํ•œ Repository ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๋Š” ์ง์ ‘ CRUD ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ ๋„, SimpleJpaRepository๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋ณธ CRUD ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๏ธโƒฃ SimpleJpaRepository์˜ ๋™์ž‘ ๋ฐฉ์‹.

1๏ธโƒฃ ๊ธฐ๋ณธ CRUD ๋ฉ”์„œ๋“œ ์ œ๊ณต.

  • SimpleJpaRepository๋Š” save, findById, findAll, delete ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ์ ์ธ CRUD(์ƒ์„ฑ(Create), ์กฐํšŒ(Read), ์ˆ˜์ •(Update), ์‚ญ์ œ(Delete)) ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๊ฐ€ JpaRepository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์žฅํ•˜์—ฌ ์ปค์Šคํ…€ Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๋ฉด, Spring Data JPA๊ฐ€ ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— SimpleJpaRepository๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ž๋™ ์ƒํ˜ธ์ž‘์šฉ.

  • SimpleJpaRepository๋Š” Hibernate์™€ ๊ฐ™์€ JPA(Java Persistence API) ๊ตฌํ˜„์ฒด์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•  ๋•Œ ํ•„์š”ํ•œ SQL(Structured Query Language) ์ฟผ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ง์ ‘์ ์ธ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†๋ฏ€๋ฉฐ, Spring Data JPA๊ฐ€ ์ด ๋ชจ๋“  ๊ฒƒ์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ ์ง€์›

  • SimpleJpaRepository๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ๋ถ„์„ํ•˜์—ฌ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, findByName๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋ฉด, Spring Data JPA๋Š” ์ž๋™์œผ๋กœ name ํ•„๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ SimpleJpaRepository์˜ ๊ธฐ๋ณธ์ ์ธ CRUD ๋ฉ”์„œ๋“œ.

  • SimpleJpaRepository๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • save(S entity)
      • ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ์—…๋ฐ์ดํŠธํ•˜๊ณ , ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
    • findById(ID id)
      • ์ง€์ •๋œ ID๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
    • findAll()
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
    • delete(T entity)
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    • deleteById(ID id)
      • ์ง€์ •๋œ ID๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    • count()
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ์—”ํ‹ฐํ‹ฐ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

4๏ธโƒฃ ์‚ฌ์šฉ ์˜ˆ์‹œ.

๐Ÿ‘‰ UserRepository ์ธํ„ฐํŽ˜์ด์Šค.

import org.springframework.data.jpa.repository.JpaRepository;

public interface UseRepository extends JpaRepository<User, Long> {
    User findByName(String name);
}
  • ์œ„ ์˜ˆ์‹œ์—์„œ UserRepository๋Š” JpaRepository๋ฅผ ์ƒ์†ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด SimpleJpaRepository๊ฐ€ UserRepository์˜ ๊ตฌํ˜„์ฒด๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    • findByName, save, findById ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ„๋„๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„, Spring Data JPA๊ฐ€ SimpleJpaRepository๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋“ค์„ ์ž๋™์œผ๋กœ ์ œ๊ณตํ•ด์ค๋‹ˆ๋‹ค.

๐Ÿ‘‰ ์„œ๋น„์Šค ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;

@Sevice
public class UserService {
    
    private final UserRepository userRepository;
    
    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    public User createUser(String name, Integer age) {
        User user = new User(name, age);
        return userRepository.save(user); // SimpleJpaRepository์˜ save ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
    }
    
    public Optional<User> getUserById(Long id) {
        return userRepository.findById(id); // SimpleJpaRepository์˜ findById ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
    }
    
    public void deleteUser(Long id) {
        userRepository.deleteById(id); // SimpleJpaRepository์˜ deleteById ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
    }
}

5๏ธโƒฃ SimpleJpaRepository์˜ ํ™•์žฅ ๋ฐ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•.

1๏ธโƒฃ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ํ™•์žฅ.

  • ๊ฐœ๋ฐœ์ž๋Š” SimpleJpaRepository๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ์™ธ์— ์ถ”๊ฐ€์ ์ธ ์ปค์Šคํ…€ ๊ธฐ๋Šฅ์„ Repository์— ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ •์˜ํ•˜๊ฑฐ๋‚˜, ์ถ”๊ฐ€์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๏ธโƒฃ @Query ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ.

  • @Query ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ JPQL(Java Persistence Query Language) ๋˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜์—ฌ ๋ฉ”์„œ๋“œ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface UserRepository extends JpaRepository<User, Long> {
    @Query("SELECT u FROM User u WHERE u.name = :name AND u.age > :age")
    List<User> findByNameAndAgeGreaterThan(@Param("name") String name, @Param("age") Integer age);
}

6๏ธโƒฃ ์š”์•ฝ.

  • SimpleJpaRepository๋Š” Spring Data JPA์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” CRUD ๊ธฐ๋Šฅ์˜ ๊ตฌํ˜„์ฒด๋กœ, JpaRepository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๋Š” JpaRepository๋ฅผ ์ƒ์†๋ฐ›๋Š” Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•จ์œผ๋กœ์จ SimpleJpaRepository๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ž๋™ CRUD ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ์ฟผ๋ฆฌ, ์ปค์Šคํ…€ ์ฟผ๋ฆฌ ๋“ฑ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Spring Data JPA๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ํฐ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • SimpleJpaRepository๋Š” ์ด๋Ÿฌํ•œ Spring Data JPA์˜ ํ•ต์‹ฌ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ธฐ๋ณธ ๊ตฌํ˜„์ฒด์ž…๋‹ˆ๋‹ค.