์Šคํ”„๋ง ์ž…๋ฌธ - (18) ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA

2023. 1. 28. 17:50ยทSpring/Spring ์ž…๋ฌธ

 

๋”๋ณด๊ธฐ

 

์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA๋งŒ ์‚ฌ์šฉํ•ด๋„ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์ด ์ •๋ง ๋งŽ์ด ์ฆ๊ฐ€ํ•˜๊ณ , ๊ฐœ๋ฐœํ•ด์•ผํ•  ์ฝ”๋“œ๋„ ํ™•์—ฐํžˆ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ธฐ์กด์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด ๋งˆ์น˜ ๋งˆ๋ฒ•์ฒ˜๋Ÿผ,

๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๊ตฌํ˜„ ํด๋ž˜์Šค ์—†์ด ์ธํ„ฐํŽ˜์ด์Šค ๋งŒ์œผ๋กœ ๊ฐœ๋ฐœ์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋ณต ๊ฐœ๋ฐœํ•ด์˜จ ๊ธฐ๋ณธ CRUD ๊ธฐ๋Šฅ๋„ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๊ฐ€ ๋ชจ๋‘ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA๋ผ๋Š” ๊ธฐ๋ฐ˜ ์œ„์—, ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ผ๋Š” ํ™˜์ƒ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋”ํ•˜๋ฉด ๊ฐœ๋ฐœ์ด ์ •๋ง ์ฆ๊ฑฐ์›Œ์ง‘๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ์กฐ๊ธˆ์ด๋ผ๋„ ๋‹จ์ˆœํ•˜๊ณ  ๋ฐ˜๋ณต์ด๋ผ ์ƒ๊ฐํ–ˆ๋˜ ๊ฐœ๋ฐœ ์ฝ”๋“œ๋“ค์ด ํ™•์—ฐํ•˜๊ฒŒ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋Š” ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ, ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‹ค๋ฌด์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋Š” ์ด์ œ ์„ ํƒ์ด ์•„๋‹ˆ๋ผ ํ•„์ˆ˜ ์ž…๋‹ˆ๋‹ค.

 

์ฃผ์˜: ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋Š” JPA๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ JPA๋ฅผ ๋จผ์ € ํ•™์Šตํ•œ ํ›„์— ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ฅผ ํ•™์Šตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

์•ž์˜ JPA ์„ค์ •์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ

SpringDataJpaMemberRepository ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ

package hello.hellospring.repository;

import hello.hellospring.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository {

    Optional<Member> findByName(String name);
}

์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๊ฐ€ SpringDataJpaMemberRepository ๋ฅผ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™ ๋“ฑ๋กํ•ด์ค€๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐ›์„๋•Œ(์ƒ์†)๋Š” extends  /  ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค 

 

JpaRepository<Member, Long> , MemberRepository ๋ฅผ ์ƒ์† ๋ฐ›๋Š”๋‹ค 

 

JpaRepository<Member, Long>

<>์•ˆ์—๋Š” ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ID ํ•„๋“œ ํƒ€์ž…์ด ์ง€์ •๋œ๋‹ค

 

JpaRepository ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ

๋”๋ณด๊ธฐ

Spring Data JPA๋Š” "JpaRepository"๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งค์šฐ ๊ฐ„๋‹จํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋œ๋‹ค.

๊ทธ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.

 

JpaRepository๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฏธ๋ฆฌ ๊ฒ€์ƒ‰ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ ํ•ด ๋‘๋Š” ๊ฒƒ์œผ๋กœ, ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์Šค๋งˆํŠธํ•œ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

JpaRepository ์ธํ„ฐํŽ˜์ด์Šค๋Š” org.springframework.data.jpa.repository ํŒจํ‚ค์ง€์˜ "JpaRepository"๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜์—ฌ ๋งŒ๋“ ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. 

public interface ์ด๋ฆ„ extends JpaRepository <์—”ํ‹ฐํ‹ฐ,ID์œ ํ˜•>

<>์•ˆ์—๋Š” ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ID ํ•„๋“œ ํƒ€์ž…์ด ์ง€์ •๋œ๋‹ค

https://araikuma.tistory.com/329

 

์ž๋ฐ” extends, implements ์ฐจ์ด

๋”๋ณด๊ธฐ

ํ•˜์œ„ ๊ฐ์ฒด๋Š” ์ƒ์œ„ ๊ฐ์ฒด (๋ถ€๋ชจ)์˜ ํŠน์ง•์„ ๋ฌผ๋ ค๋ฐ›๋Š”๋‹ค

 

  1. extends
    • ๋ถ€๋ชจ์—์„œ ์„ ์–ธ / ์ •์˜๋ฅผ ๋ชจ๋‘ํ•˜๋ฉฐ ์ž์‹์€ ๋ฉ”์†Œ๋“œ / ๋ณ€์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  2. implements (interface ๊ตฌํ˜„)
    • ๋ถ€๋ชจ ๊ฐ์ฒด๋Š” ์„ ์–ธ๋งŒ ํ•˜๋ฉฐ ์ •์˜(๋‚ด์šฉ)์€ ์ž์‹์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ (์žฌ์ •์˜) ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•จ

extends๋Š” ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ฑฐ๊ณ  implements๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์Šคํ”„๋ง ์„ค์ • ๋ณ€๊ฒฝ

package hello.hellospring;

import hello.hellospring.repository.*;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration 
public class SpringConfig {

    private final MemberRepository memberRepository;

    @Autowired
    public SpringConfig(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    @Bean 
    public MemberService memberService() {

        return new MemberService(memberRepository);
    }
}

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ MemberRepository ๋ฅผ ์ฐพ๋Š”๋‹ค 

๊ทธ๋Ÿฐ๋ฐ ๋“ฑ๋กํ•œ ๋นˆ์ด ์—†์Œ 

--> ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๊ฐ€ SpringDataJpaMemberRepository ๋ฅผ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™ ๋“ฑ๋กํ•ด์ค€๋‹ค. ( ๊ตฌํ˜„์ฒด๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค ) 

 

 

JPA ์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ

 

 

์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ์ œ๊ณต ํด๋ž˜์Šค

๊ณตํ†ต์ ์ธ ๋ถ€๋ถ„์€ ๊ฐ€์ ธ๋‹ค ์“ฐ๋ฉด ๋œ๋‹ค 

 

 

์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ์ œ๊ณต ๊ธฐ๋Šฅ

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ๊ธฐ๋ณธ์ ์ธ CRUD

findByName() , findByEmail() ์ฒ˜๋Ÿผ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๋งŒ์œผ๋กœ ์กฐํšŒ ๊ธฐ๋Šฅ ์ œ๊ณต

ํŽ˜์ด์ง• ๊ธฐ๋Šฅ ์ž๋™ ์ œ๊ณต

 

 

์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ณตํ†ตํ•  ์ˆ˜ ์—†๋Š” ๋ถ€๋ถ„๋“ค 

Optional<Member> findByName(String name);

findByName ๊ทœ์น™ 

JPQL // select m from Member m where m.name = ? 

 

์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„๋งŒ์œผ๋กœ๋„ ๊ฐœ๋ฐœ์ด ๋๋‚œ๋‹ค 

 

 

์ฐธ๊ณ : ์‹ค๋ฌด์—์„œ๋Š” JPA์™€ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ๋ณต์žกํ•œ ๋™์  ์ฟผ๋ฆฌ๋Š” Querydsl์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

Querydsl์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฟผ๋ฆฌ๋„ ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ๋™์  ์ฟผ๋ฆฌ๋„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด ์กฐํ•ฉ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ์ฟผ๋ฆฌ๋Š” JPA๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์•ž์„œ ํ•™์Šตํ•œ ์Šคํ”„๋ง JdbcTemplate๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Spring > Spring ์ž…๋ฌธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์Šคํ”„๋ง ์ž…๋ฌธ - (19) AOP (Aspect Oriented Programming)  (0) 2023.01.29
์Šคํ”„๋ง ์ž…๋ฌธ - (17) JPA(Java Persistence API)  (0) 2023.01.28
์Šคํ”„๋ง ์ž…๋ฌธ - (16) ์Šคํ”„๋ง JdbcTemplate  (0) 2023.01.27
์Šคํ”„๋ง ์ž…๋ฌธ - (15) ์Šคํ”„๋ง ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ  (0) 2023.01.27
์Šคํ”„๋ง ์ž…๋ฌธ - (14) ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  / ์ˆœ์ˆ˜ Jdbc  (0) 2023.01.26
'Spring/Spring ์ž…๋ฌธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ์Šคํ”„๋ง ์ž…๋ฌธ - (19) AOP (Aspect Oriented Programming)
  • ์Šคํ”„๋ง ์ž…๋ฌธ - (17) JPA(Java Persistence API)
  • ์Šคํ”„๋ง ์ž…๋ฌธ - (16) ์Šคํ”„๋ง JdbcTemplate
  • ์Šคํ”„๋ง ์ž…๋ฌธ - (15) ์Šคํ”„๋ง ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
hello_u
hello_u
  • hello_u
    ๐Ÿ˜œ
    hello_u
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿ˜œ (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring ์ž…๋ฌธ (20)
        • Spring ๊ธฐ๋ณธ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA ๊ธฐ๋ณธ (16)
        • Spring JPA ํ™œ์šฉ (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp ๊ธฐ์ดˆ (44)
        • ํŒŒ์ด์ฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (64)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • ์ปดํ“จํ„ฐ์ผ๋ฐ˜ (3)
        • ์šด์˜์ฒด์ œ (3)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
        • ์ •๋ณดํ†ต์‹  (1)
        • ์ž๋ฃŒ๊ตฌ์กฐ (1)
        • ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ (1)
        • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (0)
        • ์ตœ์‹  ๋””์ง€ํ„ธ, ์ผ๋ฐ˜์ƒ์‹ (0)
      • ์ž๊ฒฉ์ฆ (41)
        • ์ •๋ณด๋ณด์•ˆ๊ธฐ์‚ฌ (9)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (22)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (3)
        • SQLD (7)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
hello_u
์Šคํ”„๋ง ์ž…๋ฌธ - (18) ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”