๊ฐœ๋ฐœ ์ผ์ง€/TIL

23.02.20

sj5262 2023. 2. 25. 02:16

<์˜ค๋Š˜์˜ ๋ณต์Šต>

 

- spring

 

๐ŸŸง ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA


- ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์œผ๋กœ๋„ ๊ฐœ๋ฐœ์„ ์™„๋ฃŒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค

- ๋ฐ˜๋ณต ๊ฐœ๋ฐœํ•ด์˜จ ๊ธฐ๋ณธ DRUC๊ธฐ๋Šฅ๋„ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๊ฐ€ ๋ชจ๋‘ ์ œ๊ณตํ•œ๋‹ค

- ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA๋ผ๋Š” ๊ธฐ๋ฐ˜ ์œ„์—, ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋”ํ•˜๋ฉด ๊ฐœ๋ฐœ์ด ๋” ์ˆ˜์›”ํ•ด ์ง„๋‹ค(์กฐ๊ธˆ์ด๋ผ๋„ ๋‹จ์ˆœํ•˜๊ณ  ๋ฐ˜๋ณต์ด๋ผ ์ƒ๊ฐํ–ˆ๋˜ ๊ฐœ๋ฐœ ์ฝ”๋“œ๋“ค์ด ํ™•์—ฐํ•˜๊ฒŒ ์ค„์–ด๋“ ๋‹ค → ๊ฐœ๋ฐœ์ž๋Š” ํ•ต์‹ฌ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ, ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Œ)
- ์‹ค๋ฌด์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋Š” ์ด์ œ ์„ ํƒ์ด ์•„๋‹ˆ๋ผ ํ•„์ˆ˜!

 

โ—์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋Š” JPA๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๊ธฐ์ˆ ! - ๋”ฐ๋ผ์„œ JPA๋ฅผ ๋จผ์ € ํ•™์Šตํ•œ ํ›„์— ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ฅผ ํ•™์Šตํ•ด์•ผ ํ•œ๋‹ค

 

- SpringDataJpaMemberRepository (interface)

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

    @Override
    Optional<Member> findByName(String name);

}
  • jpaRepository๋ฅผ ๋ฐ›์•„์•„ํ– 
  • ์ธํ„ฐํŽ˜์ด์Šค → ์ธํ„ฐํŽ˜์ด์Šค = "extends"/ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘์ƒ์† ๊ฐ€
  • JpaRepository<T, ID> โžก๏ธ T = Member, ID = entity์—์„œ ์‹๋ณ„์ž pk(type)
  • ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๊ฐ€ JpaRepository๋ฅผ ๋ฐ›๊ณ  ์žˆ์œผ๋ฉด ๊ตฌํ˜„์ฒด๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด ์ค€๋‹ค → ์Šคํ”„๋ง ๋นˆ์— ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค

SpringConfig

โ—๊ฐ•์˜๋ฅผ ๋ณด๋ฉด์„œ ๋”ฐ๋ผ ์น˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚ฌ๋‹ค

์˜ค๋ฅ˜๋ฉ”์„ธ์ง€
๐Ÿ”น ์ด๋Ÿฐ ์˜ค๋ฅ˜๋ฉ”์„ธ์ง€๊ฐ€ ๋–ณ๋Š”๋ฐ ํ•ด์„ํ•ด๋ณด๋‹ˆ 
โžก๏ธ ์ž๋™ ์—ฐ๊ฒฐ์„ ํ•  ์ˆ˜ ์—†์Œ, 'MemberRepository' ์œ ํ˜•์˜ Bean์ด ๋‘ ๊ฐœ ์ด์ƒ ์žˆ๋‹ค, jdbcTemplateMemberRepository(JdbcTemplateMemberRepository.java) ← ์ด๋ถ€๋ถ„์ด ํžŒํŠธ๋กœ ๋‚˜์™€์žˆ์—ˆ๊ณ  ์งˆ๋ฌธ๋ฐฉ์„ ์ฐพ์•„๋ณด๋ฉด์„œ ๋Œ์•„๋‹ค๋‹Œ ๊ฒฐ๊ณผ! 

๐Ÿ”น jdbcTemplateMemberRepository์— ์žˆ๋Š” @Repository ์–ด๋…ธํ…Œ์ด์…˜์„ ์ฃผ์„์ฒ˜๋ฆฌ ํ–ˆ๋”๋‹ˆ ์ž˜ ์‹คํ–‰๋˜์—ˆ์Œ!
- ๋™์ผํ•œ ํƒ€์ž…(MemberRepository)์˜ ๋นˆ์„ 2๊ฐœ ๋“ฑ๋กํ•ด์„œ ๋ฐœํ–‰ํ•˜๋Š” ๋ฌธ์ œ!
- @Repository๋กœ ์ž๋™ ๋นˆ ๋“ฑ๋ก(์ปดํฌ๋„ŒํŠธ ์Šค์บ”์˜ ๋Œ€์ƒ)์„ ์‚ญ์ œ ํ•˜์—ฌ ํ•ด๊ฒฐ!

 

MemberServiceIntegrationTest

  • test๊ฐ€ ์„ฑ๊ณตํ•˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค
  • ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๊ฐ€ "SpringDataJpaMemberRepository"๋ฅผ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก์‹œํ‚จ๋‹ค (ํ”„๋กœ์‹œ๋ผ๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ด์„œ - ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ์Šคํ”„๋ง ๋นˆ์— ์˜ฌ๋ฆผ → ์ธ์ ์…˜ํ•ด์„œ ์“ด๋‹ค)

  • ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ๊ฐ€ JpaRepository
  • JpaRepository : ๊ธฐ๋ณธ๋ฉ”์„œ๋“œ๋“ค์ด ๋‹ค ์ œ๊ณต๋œ๋‹ค(ex. findAll(), findAllById() ๋“ฑ๋“ฑ) 
  • ์œ„ ๊ทธ๋ฆผ์ด ์˜›๋‚  ์˜ˆ์ œ์—ฌ์„œ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š”๊ฒŒ ๋ช‡ ๊ฐœ ์žˆ์Œ 
  • ๋ชจ๋‘์—๊ฒŒ ํ†ต์šฉ๋˜๋Š” ๊ฒƒ! 
  • ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๋น„์ฆˆ๋‹ˆ์Šค๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ณตํ†ตํ™” ๋ชปํ•˜๋Š” ๊ฒƒ๋“ค์ด ์žˆ์Œ - ๊ณตํ†ต ํด๋ž˜์Šค๋กœ ์ฐพ์„ ์ˆ˜ ์—†์Œ  โžก๏ธ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ๋ถ€๋ถ„๋“ค์„ ๊ทœ์น™์— ์˜ํ•ด ๋งŒ๋“ค์–ด ์“ธ ์ˆ˜ ์žˆ์Œ(ex. findByName())

 

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

๐Ÿ”น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ๊ธฐ๋ณธ์ ์ธ CRUD
๐Ÿ”น "findByName()", "findByEmail()" ์ฒ˜๋Ÿผ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๋งŒ์œผ๋กœ ์กฐํšŒ ๊ธฐ๋Šฅ ์ œ๊ณต
๐Ÿ”น ํŽ˜์ด์ง• ๊ธฐ๋Šฅ ์ž๋™ ์ œ๊ณต

[ ์‹ค๋ฌด์—์„œ๋Š” JPA์™€ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ๋ณต์žกํ•œ ๋™์  ์ฟผ๋ฆฌ๋Š” Querydsl์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค, Querydsl์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฟผ๋ฆฌ๋„ ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ๋™์  ์ฟผ๋ฆฌ๋„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค, ์ด ์กฐํ•ฉ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ์ฟผ๋ฆฌ๋Š” JPA๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์•ž์„œ ํ•™์Šตํ•œ ์Šคํ”„๋ง JdbcTemplate๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค ] - JPA, ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA, Querydsl์„ ์กฐํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•จ
- ์œ„ ์กฐํ•ฉ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ์€ → ์ˆœ์ˆ˜ํ•œ SQL(๋„ค์ดํ‹ฐ๋ธŒ - ์Œฉ์œผ๋กœ SQL์งœ๋Š” )์“ธ ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•จ

 

- JpaRepository 

JpaRepository
PagingAndSortingRepository

  • Paging ์กฐํšŒ๊นŒ์ง€ ํ•ด์ค€๋‹ค

CrudRepository

  • save(), findById() ๋“ฑ ๋ชจ๋‘ ์žˆ์Œ
  • ๊ธฐ๋ณธ์ ์ธ CRUD๋ž‘ ๋‹จ์ˆœ์กฐํšŒ๋“ค์ด ๋ชจ๋‘ ์ œ๊ณต๋จ

 

 

 

 

 

 

 


<์ถœ์ฒ˜ - ์ธํ”„๋Ÿฐ(์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ ) >

(https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8)

 

[๋ฌด๋ฃŒ] ์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์Šคํ”„๋ง ์ž…๋ฌธ์ž๊ฐ€ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์ „๋ฐ˜์„ ๋น ๋ฅด๊ฒŒ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ

www.inflearn.com

- ์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ํ•™์Šต์„ ์œ„ํ•ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

'๊ฐœ๋ฐœ ์ผ์ง€ > TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

23.02.22  (2) 2023.02.26
23.02.21  (0) 2023.02.26
23.02.17  (2) 2023.02.24
23.02.16  (0) 2023.02.23
23.02.15  (1) 2023.02.23