Spring

TIL Spring #2-5

๋ฆฐ์˜ˆ์กฐ 2023. 12. 13. 21:26

SpringBoot JPA

Spring data JPA


์ถ”๊ฐ€์ ์ธ ์• ๋„ˆํ…Œ์ด์…˜: @PersistenceContext, @Transactional

 

 ์ž๋ฐ”ํ™˜๊ฒฝ์ด ์•„๋‹Œ Spring boot์—์„œ JPA๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘๋ ์ง€ ์‚ดํŽด๋ณด์ž (memo PJ)

 

- ์šฐ์„  bulid.gradle ๊ณผ application.properties ์— JPA ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. (ddl-auto=update)

- Memo ํด๋ž˜์Šค ๋˜ํ•œ entity ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด @Entity ์• ๋„ˆํ…Œ์ด์…˜ ์ถ”๊ฐ€.

 

- spring ํ™˜๊ฒฝ์—์„œ๋Š” application.properties ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ emf, em ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ค€๋‹ค. (java ํ™˜๊ฒฝ์—์„œ๋Š” persistence.xml์„ ๋งŒ๋“ค์—ˆ์Œ) 

  • ์‚ฌ์šฉ๋ฐฉ๋ฒ•์€ @PersistenceContext ์• ๋„ˆํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด spring์ด ๋งŒ๋“  em์„ ์‰ฝ๊ฒŒ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

Spring์˜ ํŠธ๋žœ์žญ์…˜

 

- ์ถ”๊ฐ€์ ์ธ๊ฒƒ ์—†์ด @Transactional ์• ๋„ˆํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ์— ํŠธ๋žœ์žญ์…˜ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

- JPA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DB์— ๋ฐ์ดํ„ฐ ์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œ ํ•ด๋‹น ์ž‘์—…๋“ค์„ ํ•˜๊ธฐ ์œ„ํ•ด์„  ํŠธ๋žœ์žญ์…˜ ์ ์šฉ์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค.

 

 

# ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ํŠธ๋žœ์žญ์…˜์˜ ์ƒ๋ช…์ฃผ๊ธฐ

 

 

 

: ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜๊ณผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ๋™์ผํ•˜๋‹ค

ํŠธ๋žœ์žญ์…˜์ด ์œ ์ง€๋˜๋Š” ๋™์•ˆ์—๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ๋˜ํ•œ ์œ ์ง€๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.(ex 1์ฐจ ์บ์‹œ, ๋ณ€๊ฒฝ ๊ฐ์ง€)

 

# ํŠธ๋žœ์žญ์…˜ ์ „ํŒŒ ํ…Œ์ŠคํŠธ

- TransactionTest ํด๋ž˜์Šค

 @Test
    @Disabled
    @Transactional
    @Rollback(value = false)
    @DisplayName("ํŠธ๋žœ์žญ์…˜ ์ „ํŒŒ ํ…Œ์ŠคํŠธ")
    void test3() {
        memoRepository.createMemo(em); //test3(๋ถ€๋ชจ), createMemo(์ž์‹)
        System.out.println("ํ…Œ์ŠคํŠธ test3 ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ");
    }

 

- MemoRepository 

@Transactional
    public Memo createMemo(EntityManager em) {
        Memo memo = em.find(Memo.class, 1);
        memo.setUsername("Robbie");
        memo.setContents("@Transactional ์ „ํŒŒ ํ…Œ์ŠคํŠธ ์ค‘!");

        System.out.println("createMemo ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ");
        return memo;

 

<๊ฒฐ๊ณผ>

 

: ์ž์‹๋ฉ”์„œ๋“œ ์ข…๋ฅ˜ ํ›„ ๋ฐ”๋กœ update๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ถ€๋ชจ ๋ฉ”์„œ๋“œ์— ํŠธ๋žœ์žญ์…˜์ด ํ•ฉ๋ฅ˜๋˜๋ฉฐ ๋ถ€๋ชจ ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ ํ›„ ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹๋˜๊ณ  ๊ทธ ๋‹ค์Œ์— update๊ฐ€ ์‹คํ–‰๋˜์—ˆ๋‹ค.

 


Spring data JPA

 

: ์ด๋Š” JPA๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด๋‘” ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์ด๋ฉฐ JPA๋ฅผ ์ถ”์ƒํ™”์‹œํ‚จ Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋Š” JPA ๊ตฌํ˜„์ฒด(hibernate)๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

<์‚ฌ์šฉ๋ฐฉ๋ฒ•>

 

- JpaRepository <entity ํด๋ž˜์Šค, id ๋ฐ์ดํ„ฐ ํƒ€์ž…>๋ฅผ ์ƒ์†๋ฐ›๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์„ ์–ธํ•œ๋‹ค.

- ์ด๋Š” Spring data JPA์— ์˜ํ•ด bean ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก๋œ๋‹ค.

-  DB์˜ memo ํ…Œ์ด๋ธ”๊ณผ ์—ฐ๊ฒฐ๋˜์–ด CRUD ์ž‘์—…์„ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋˜์—ˆ๋‹ค

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

TIL Spring #3-2  (0) 2023.12.15
TIL Spring #3-1  (0) 2023.12.14
TIL Spring #2-4  (0) 2023.12.12
TIL Spring #2-3  (0) 2023.12.12
TIL Spring 2-2  (0) 2023.12.08