๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

728x90

Spring๐Ÿƒ

(33)
T ์•„์นด๋ฐ๋ฏธ : JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ (3) JPA ๋‚ด๋ถ€๊ตฌ์กฐ 1. ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ - ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ฐœ๋…์ด๋‹ค ~ ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค -> ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผ ์—”ํ‹ฐํ‹ฐ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ ๋น„์˜์† - ์˜์† - ์ค€์˜์† - ์‚ญ์ œ 1) ๋น„์˜์† : ex) ๋ฉค๋ฒ„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ์งํ›„ ~ JPA์™€ ์•„๋ฌด ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค 2) ์˜์† : ex) ๋ฉค๋ฒ„ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜์—ฌ ์˜์†์„ฑ์„ ๋ถ€์—ฌํ•œ ์ƒํƒœ 3) ์ค€์˜์† : ex) ํšŒ์› ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ๋ถ„๋ฆฌํ•œ ์ƒํƒœ 4) ์‚ญ์ œ : ex) ๊ฐ์ฒด ์‚ญ์ œ ์™œ ์˜์†์ƒํƒœ๊ฐ€ ํ•„์š”ํ•œ๊ฑธ๊นŒ? ~ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ”๋กœ DB์— ์ €์žฅํ•˜๋ฉด ํšจ์œจ์ ์ผ ํ…๋ฐ? *์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ์žฅ์  1. 1์ฐจ ์บ์‹œ 2. ๋™์ผ์„ฑ ๋ณด์žฅ 3. ํŠธ๋žœ์ ์…˜์„ ๋น„์›ํ•˜๋Š” ์“ฐ๊ธฐ ์ง€์—ฐ 4. ๋ณ€๊ฒฝ ๊ฐ์ง€(๋”ํ‹ฐ ์ฒดํ‚น) 5. ์ง€์—ฐ ๋กœ๋”ฉ 1์ฐจ ์บ์‹œ ๊ฐ์ฒด์— ์˜์†์„ฑ์„ ๋ถ€์—ฌํ•˜๊ฒŒ..
SpringData ์ฟผ๋ฆฌ์™€ QueryDSL 1. SpringData ์ฟผ๋ฆฌ SpringData Common์˜ CrudRepository์™€ PagingAndSortingRepository ์ฟผ๋ฆฌ๊ธฐ๋Šฅ์„ ์ œ๊ณต ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋˜์–ด ์ œ๊ณต๋˜๋Š” ์ฟผ๋ฆฌ๋ช… ๊ทœ์น™ ๋ฆฌํ„ดํƒ€์ž… {์ ‘๋‘์–ด}{๋„์ž…๋ถ€}By{ํ”„๋กœํผํ‹ฐ ํ‘œํ˜„์‹}(์กฐ๊ฑด์‹)(And|Or){ํ”„๋กœํผํ‹ฐ ํ‘œํ˜„์‹}(์กฐ๊ฑด์‹) (๋งค๊ฐœ๋ณ€์ˆ˜...) ์ ‘๋‘์–ด Find, Get, Query, Count, ... ๋„์ž…๋ถ€ Distinct, First(N), Top(N) ํ”„๋กœํผํ‹ฐ ํ‘œํ˜„์‹ Person.Address.ZipCode => find(Person)ByAddress_ZipCode(...) ์กฐ๊ฑด์‹ IgnoreCase, Between, LessThan, GreaterThan, Like, Contains, ... ์ •๋ ฌ ์กฐ๊ฑด OrderBy{ํ”„๋กœ..
SpringData JPA ํŽ˜์ด์ง•๊ณผ ์ •๋ ฌ ์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ in PagingAndSortingRepository ํŽ˜์ด์ง• ํ”„๋กœ์„ธ์Šค PageRequest ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Pageable์— ํŽ˜์ด์ง• ์ •๋ณด๋ฅผ ๋‹ด์•„ ๊ฐ์ฒดํ™” Pageable์„ JpaRepository๊ฐ€ ์ƒ์†๋œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ์— T(Entity)์™€ ํ•จ๊ผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ return ์œผ๋กœ Page๊ฐ€ ์‘๋‹ต ์‘๋‹ต๋œ Page์— ๋‹ด๊ฒจ์ง„ Page ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค. Pageable : ํŽ˜์ด์ง• ์ œ๊ณต ์ธํ„ฐํŽ˜์ด์Šค Pageable ๋งŒ๋“œ๋Š” ๋ฒ• ๋”๋ณด๊ธฐ PageRequest.of(int page, int size) : 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ์™€ ๊ฐœ์ˆ˜. ์ •๋ ฌ์ด ์ง€์ •๋˜์ง€ ์•Š์Œ PageRequest.of(int page, int size, Sort sort) : ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ์™€ ๊ฐœ์ˆ˜, ์ •๋ ฌ ๊ด€๋ จ ..
SpringData ๊ตฌ์กฐ ๋ฐ JpaRepository ์›๋ฆฌ ์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ SpringData ๊ตฌ์กฐ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ : ์Šคํ”„๋ง์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์—ฐ๋™ ๋ฐ ์ตœ์ ํ™” ํŒจํ‚ค์ง€ Spring Data Common & JPA - Repository : ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์€ ์—†๋Š” ๋งˆ์ปค ์–ด๋…ธํ…Œ์ด์…˜ - CrudRepository : CRUD ๊ธฐ๋Šฅ ์ œ๊ณต - PagingAndSortingRepository : ํŽ˜์ด์ง•, ์ •๋ ฌ ๋ถ€๋ฌธ์— ๋Œ€ํ•ด ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค - Repository > CrudRepository > PagingAndSortingRepository > JPARepository๊นŒ์ง€ @NoRepositoryBean : ์ค‘๊ฐ„ ๋‹จ๊ณ„์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์‹ค์ œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์•„๋‹˜์„ ์•Œ๋ ค ์‹ค์ œ Bean์„ ๋งŒ๋“ค์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ ์‚ฌ์šฉ์ž ์ง€์ • ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ JPARepos..
Raw JPA ์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ ํ…Œ์ด๋ธ” ๋งคํ•‘ ๊ธฐ๋Šฅ์œผ๋กœ RDB๋ฅผ ๊ฐ์ฒด๋กœ ์˜ฎ๊ธฐ๊ธฐ 1. @Entity ๊ฐ์ฒด ๊ด€์ ์—์„œ์˜ ์ด๋ฆ„, ํด๋ž˜์Šค ๋ช…์ด ๋””ํดํŠธ, ์—”ํ‹ฐํ‹ฐ์˜ ์ด๋ฆ„์€ JQL์—์„œ ์“ฐ์ธ๋‹ค JQL : Entity ๋ช…์œผ๋กœ ์ฟผ๋ฆฌ์งค ๋•Œ ์“ฐ์ด๋Š” ์–ธ์–ด(ex : JPQL, QueryDsl) 2. @Table RDB์˜ ํ…Œ์ด๋ธ” ์ด๋ฆ„, @Entity์˜ ์ด๋ฆ„์ด ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ๊ฐ’ ~ ์—”ํ‹ฐํ‹ฐ์™€ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์„ ๋‹ค๋ฅด๊ฒŒ ์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์€ SQL์—์„œ ์“ฐ์ธ๋‹ค ~ SQL : Table ๋ช…์œผ๋กœ ์ฟผ๋ฆฌ์งค ๋•Œ ์“ฐ์ด๋Š” ์–ธ์–ด(ex : JDBC, SQL Mapper) 3. @Id ์—”ํ‹ฐํ‹ฐ์˜ ์ฃผ ํ‚ค๋ฅผ ๋งคํ•‘ํ•  ๋•Œ ์‚ฌ์šฉ, ์ž๋ฐ”์˜ ๋ชจ๋“  ์›์‹œ ํƒ€์ž…๊ณผ ๊ทธ ๋ž˜ํผ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค 4. @GeneratedValue ์ฃผ ํ‚ค์˜ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์„ ๋งคํ•‘, ์ƒ์„ฑ ์ „๋žต๊ณผ ์ƒ์„ฑ๊ธฐ..
ORM์˜ ํƒ„์ƒ ๋ฐฐ๊ฒฝ(JDBC, Querry Mapper) + ์„ฑ์žฅ ๊ณผ์ • ์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•œ ๊ฒƒ : https://cdaosldk.tistory.com/69 1. DB ํƒ„์ƒ ํ›„ JAVA ์•ฑ๊ณผ ์—ฐ๋™์„ ์œ„ํ•ด JDBC ์ถœ์‹œ JDBC Driver Manager๋Š” ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ DB์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต JDBC Driver Manager๋Š” ๋Ÿฐํƒ€์ž„ ํ•  ๋•Œ -Connection์„ ์ƒ์„ฑํ•ด ์ฟผ๋ฆฌ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ๋งŒ๋“ค๊ณ  -Statement๋ฅผ ์ƒ์„ฑํ•ด ์ฟผ๋ฆฌ๋ฅผ ์š”์ฒญํ•˜๊ฒŒ ํ•ด์ฃผ๊ณ  -ResultSet์„ ์ƒ์„ฑํ•ด ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค ์‚ฌ์šฉ ํ›„ ๊ฐ๊ฐ Close()๋ฅผ ํ†ตํ•ด ์ž์›์„ ํ•ด์ œํ•ด์•ผ ํ•œ๋‹ค JDBC ๋ฐฉ์‹์œผ๋กœ ์‹ค์Šตํ•ด๋ณด๊ธฐ ์—ฐ๊ฒฐ์ •๋ณด ํŒŒ๋ผ๋ฏธํ„ฐ ์ •์˜ Connection ์ƒ์„ฑ ์‹คํ–‰ํ•  SQL ๋ฌธ ์ง€์ • ํŒŒ๋ผ๋ฏธํ„ฐ ์„ ์–ธ๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’ ์ œ๊ณต Statement ์ค€๋น„์™€ ์‹คํ–‰ ๊ฒฐ..
JPA ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ์—๋Ÿฌ ์žก๊ธฐ(1) ์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ 1. JPA ์—ฐ๊ด€๊ด€๊ณ„ ์›๋ฆฌ 1) JPA ์ •๋ฆฌ( ORM, Hibernate, JPA ) + https://cdaosldk.tistory.com/167 ORM์˜ ํƒ„์ƒ ๋ฐฐ๊ฒฝ(JDBC, Querry Mapper) ์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•œ ๊ฒƒ : https://cdaosldk.tistory.com/69 1. DB ํƒ„์ƒ ํ›„ JAVA ์•ฑ๊ณผ ์—ฐ๋™์„ ์œ„ํ•ด JDBC ์ถœ์‹œ JDBC Driver Manager๋Š” ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ DB์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต JDBC Driver Manage cdaosldk.tistory.com JPA : ์ž๋ฐ” ์ง€์†์„ฑ(์˜์†์„ฑ) API, ์ž๋ฐ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌํžˆ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋Š”(DB) ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ชจ์Œ JPA ์ค‘ ๋Œ€ํ‘œ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ -> H..
์Šคํ”„๋ง ์ž…๋ฌธ ๊ฐ•์˜ ๋…ธํŠธ ์ •๋ฆฌ (2) : ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ์ปจํŠธ๋กค๋Ÿฌ : ์›น MVC์˜ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ•  ์„œ๋น„์Šค : ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผ, ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ DB์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌ ๋„๋ฉ”์ธ : ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ๊ฐ์ฒด ex) ํšŒ์›, ์ฃผ๋ฌธ, ์ฟ ํฐ ๋“ฑ ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์„ค์ •ํ•œ ์ด์œ  : DB์— ๋Œ€ํ•œ ์„ ํƒ์„ ์•„์ง ํ•˜์ง€ ์•Š์•„ DB์— ๋”ฐ๋ผ ๊ตฌํ˜„์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋งŒ๋“ ๋‹ค. ์‹ค์Šต ์š”๊ตฌ์‚ฌํ•ญ ๋ฐ์ดํ„ฐ : ํšŒ์› ID, ์ด๋ฆ„ ๊ธฐ๋Šฅ : ํšŒ์› ๋“ฑ๋ก, ์กฐํšŒ ์•„์ง ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ ์„ ์ •๋˜์ง€ ์•Š์€ ์‹œ์  ๋„๋ฉ”์ธ๊ณผ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐ 1) Domian - Member package hello.helloSpring.domain; public class Member { private Long id; // ์‚ฌ์šฉ์ž ์ž„์˜๋กœ ๋ถ€..

728x90