๐ŸŒ WEB/JPA

Hibernate ๊ฐ€ ๋ญ์ง€? ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ORM์€ ์ž๋ฐ” ์–ธ์–ด๋ฅผ ์œ„ํ•œ ๊ฐ์ฒด ๊ด€๊ณ„ ๋งคํ•‘ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. JPA์˜ ๊ตฌํ˜„์ฒด์˜ ํ•œ ์ข…๋ฅ˜๋กœ, JPA ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋‚ด๋ถ€์ ์œผ๋กœ JDBC API ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Hibernate ๋Š” SQL ์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋งŒ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ( SQL ๋ฐ˜๋ณต์ž‘์—…์„ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค ) ์ปฌ๋Ÿผ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ, ํ…Œ์ด๋ธ”๊ณผ ๊ด€๋ จ๋œ DAO ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ, ์ฟผ๋ฆฌ ,SQL ๋“ฑ์„ ๋Œ€์‹  ์ˆ˜ํ–‰ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๋ฒค๋”์‚ฌ์— ์ข…์†์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง•์€ ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ๋„ ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Mysql ์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ORCLE ๋กœ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ Hibernate ๋Š” ๋ณ€๊ฒฝํ•œ ORCLE ๋กœ ..
๐Ÿƒ‍โ™‚๏ธ ๊ณ„์†ํ•ด์„œ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ๐Ÿƒ‍โ™‚๏ธ ๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ 2022/03/29 1. Querydsl ์„ ์™œ ์‚ฌ์šฉํ• ๊นŒ? 2. ์ž‘๋™๋ฐฉ์‹? 3. ์˜์กด์„ฑ 4. Repository ๊ตฌ์กฐ 5. Projection ์˜ ๋Œ€ํ•œ ๊ณ ์ฐฐ ... 6. ๋™์ ์ฟผ๋ฆฌ (BooleanBuilder) 7. ExpressionUtils 8. ์ •๋ ฌ ํƒ€์ž…์— ๋”ฐ๋ฅธ ์ •๋ ฌ ์ฒ˜๋ฆฌ Querydsl ์„ ์™œ ์‚ฌ์šฉํ• ๊นŒ? JPA ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ (@Query ํฌํ•จ) ์กฐํšŒ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. ๋™์ ์ธ ์ฟผ๋ฆฌ์ธ ๊ฒฝ์šฐ์ธ๋ฐ ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ๋ฌธ ํŽ˜์ด์ง€๋ฅผ ๊ฒ€์ƒ‰ ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ์นดํ…Œ๊ณ ๋ฆฌ or ์ƒํ’ˆ๋ช… or ๊ธฐ์—…๋ช… ๋“ฑ๋“ฑ... ์œผ๋กœ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ๋‹ฌ๋ผ์ง€๋Š” ๋ถ€๋ถ„์ด๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด ๋ฐ”๋กœ Querydsl ํ”„๋ ˆ์ž„์›Œํฌ ์ด๋‹ค. - ํƒ€์ž… ์ฒดํฌ๊ฐ€ ๋ฐ”๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค - ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ..
ํ”„๋ก์‹œ Team์— ์†ํ•ด์žˆ๋Š” Member ๋ฅผ ์กฐํšŒํ•  ์‹œ Team๊นŒ์ง€ ์กฐํšŒํ•  ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ? ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์—์„œ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ ํ•ญ์ƒ Team์„ ํ•จ๊ป˜ ์กฐํšŒํ•œ๋‹ค๋ฉด ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค. ์ด ๋‚ญ๋น„๋ฅผ ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ํ”„๋ก์‹œ๋ผ๋Š” ๊ฐ ๋ฉฐ์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค. - ์‹ค์ œ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„์„œ ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ‰ ๋ชจ์–‘์ด ๊ฐ™๋‹ค - ์‚ฌ์šฉํ•˜๋Š” ์ž…์žฅ์—์„œ๋Š” ์ง„์งœ, ๊ฐ€์งœ ๊ฐ์ฒด์ธ์ง€ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. - ํ”„๋ก์‹œ ๊ฐ์ฒด๋Š” ์‹ค์ œ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ๋ณด๊ด€ -> ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ”„๋ก์‹œ ๊ฐ์ฒด๋Š” ์‹ค์ œ ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ em.find() : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด์„œ ์‹ค์ œ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด ์กฐํšŒ em.getReference() : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ๋ฅผ ๋ฏธ๋ฃจ๋Š” ๊ฐ€์งœ(ํ”„๋ก์‹œ) ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด ์กฐํšŒ // ํ˜ธ์ถœํ•œ ์ˆœ๊ฐ„ ์ฟผ๋ฆฌ ์‹คํ–‰ Member findMember..
์ƒ์†๊ด€๊ณ„ ๋งคํ•‘ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ƒ์† ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค.(์Šˆํผํƒ€์ž… ์„œ๋ธŒํƒ€์ž… ๊ด€๊ณ„๋ผ๋Š” ๋ชจ๋ธ๋ง ๊ธฐ๋ฒ•์ด ๊ฐ์ฒด ์ƒ์†๊ณผ ์œ ์‚ฌํ•˜๋‹ค) ์Šˆํผํƒ€์ž… ์„œ๋ธŒํƒ€์ž… ๋…ผ๋ฆฌ ๋ชจ๋ธ์„ ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ชจ๋ธ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• 1. ๊ฐ๊ฐ ํ…Œ์ด๋ธ”๋กœ ๋ณ€ํ™˜ -> ์กฐ์ธ ์ „๋žต (์ •์„) - ํ…Œ์ด๋ธ” ์ •๊ทœํ™” - ์™ธ๋ž˜ ํ‚ค ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด ํ™œ์šฉ ๊ฐ€๋Šฅ - ์ €์žฅ๊ณต๊ฐ„ ํšจ์œจํ™” - ์กฐํšŒ์‹œ ์กฐ์ธ์„ ๋งŽ์ด ์‚ฌ์šฉ -> ์„ฑ๋Šฅ ์ €ํ•˜, ์กฐํšŒ ์ฟผ๋ฆฌ๊ฐ€ ๋ณต์žกํ•จ - ๋ฐ์ดํ„ฐ ์ €์žฅ์‹œ INSERT ์ฟผ๋ฆฌ๊ฐ€ 2๋ฒˆ ํ˜ธ์ถœ ๋œ๋‹ค. ๋น„์ง€๋‹ˆ์Šค์ ์œผ๋กœ ์ค‘์š”ํ•˜๊ณ  ๋ณต์žกํ•  ๋•Œ ์„ ํƒ! ๋ถ€๋ชจ ํด๋ž˜์Šค ์„ค์ • @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn ์ž์‹ ํด๋ž˜์Šค ์„ค์ • -> dtype์— ํ‘œ์‹œ๋  ์ด๋ฆ„์„ ์ •ํ•ด ์ค„ ๊ฒฝ์šฐ @DiscriminatorVa..
์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘์‹œ ๊ณ ๋ ค์‚ฌํ•ญ 3๊ฐ€์ง€ 1. ๋‹ค์ค‘์„ฑ 2. ๋‹จ๋ฐฉํ–ฅ, ์–‘๋ฐฉํ–ฅ 3. ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ - ๊ฐ์ฒด ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„๋Š” ์ฐธ์กฐ๊ฐ€ 2๊ตฐ๋ฐ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘˜์ค‘ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค๋ฅผ ๊ด€๋ฆฌํ•  ๊ณณ์„ ์ง€์ •ํ•ด์•ผํ•จ - ์™ธ๋ž˜ ํ‚ค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ฐธ์กฐ - ์ฃผ์ธ์˜ ๋ฐ˜๋Œ€ํŽธ : ์™ธ๋ž˜ ํ‚ค์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ, ๋‹จ์ˆœ ์กฐํšŒ ๋‹ค๋Œ€์ผ[N:1] ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•จ ๋‹จ๋ฐ˜ํ–ฅ ์•„๋ž˜์™€ ๊ฐ™์ด [N]์—์„œ ์™ธ๋ž˜ ํ‚ค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  Team์„ ์กฐํšŒ ํ•˜๊ณ  ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. Team์— ์„œ๋Š” ์กฐํšŒํ•˜์ง€ ๋ชปํ•จ -> Team์—์„œ Member์„ ์กฐํšŒํ•˜๋Š”์ผ์ด ๋นˆ๋ฒˆํ•˜๋‹ค๊ณ  ํ•˜๋ฉด -> ์–‘๋ฐ˜ํ–ฅ ์œผ๋กœ ๋งคํ•‘ํ•ด์ฃผ๋Š”๊ฒŒ ์ข‹์Œ. ์–‘๋ฐ˜ํ–ฅ ๋‹จ๋ฐ˜ํ–ฅ์—์„œ TEAM์ด MEMBER๋ฅผ mapped by ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ MEMBER๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. (์ฝ๊ธฐ ์ „์šฉ) ์ผ๋Œ€๋‹ค[1:N] 1์ด ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์ด๋‹ค. ๋‹จ๋ฐฉํ–ฅ TEAM ์—์„œ..
๋ชฉํ‘œ - ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ” ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฐจ์ด๋ฅผ ์ดํ•ด - ๊ฐ์ฒด์˜ ์ฐธ์กฐ์™€ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค๋ฅผ ๋งคํ•‘ ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ” ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฐจ์ด๋ฅผ ์ดํ•ด ๊ฐ์ฒด๋ฅผ ํ…Œ์ด๋ธ”์— ๋งž์ถ”์–ด ๋ชจ๋ธ๋ง ํ–ˆ์„ ๋•Œ ๋ฌธ์ œ์  (์ฐธ์กฐ ๋Œ€์‹ ์— ์™ธ๋ž˜ ํ‚ค๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ) ํ˜‘๋ ฅ ๊ด€๊ณ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค. ํ…Œ์ด๋ธ”์€ ์™ธ๋ž˜ ํ‚ค๋กœ ์กฐ์ธ์„ ์‚ฌ์šฉํ•ด์„œ ์—ฐ๊ด€๋œ ํ…Œ์ด๋ธ”์„ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฒˆ๊ฑฐ๋กœ์šด ์ฝ”๋“œ๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค. Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("member1"); // ์™ธ๋ž˜ํ‚ค ์‹๋ณ„์ž๋ฅผ ์ง์ ‘ ๋‹ค๋ฃฌ๋‹ค. member.setTeamId(team.getId()); em.persist(member); // ๋ฉค๋ฒ„์˜ ..
๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ” ๋งคํ•‘ @Entity - @Entity๊ฐ€ ์ •์˜๋˜์–ด์žˆ๋Š” ํด๋ž˜์Šค๋Š” JPA๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค. - ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ๊ผญ ์žˆ์–ด์•ผ ํ•œ๋‹ค. - ์†์„ฑ: name ->JPA์— ์‚ฌ์šฉํ•  ์—”ํ‹ฐํ‹ฐ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค, ๊ธฐ๋ณธ๊ฐ’ : ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ @Table - name, catalog, schema ๋“ฑ๋“ฑ. . ํ•„๋“œ์™€ ์ปฌ๋Ÿผ ๋งคํ•‘ @Column ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปฌ๋Ÿผ๋ช…์„ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. unique(์‹ค๋ฌด์—์„œ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค -> ์œ ๋‹ˆํฌ ์ œ์•ฝ์กฐ๊ฑด ์ด๋ฆ„์„ ์„ค์ •ํ•  ์ˆ˜ ์—†๋‹ค ๋Œ€์‹  @Table(uniqueCons.. ์‚ฌ์šฉ), length ๋“ฑ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. @Temporal ๋‚ ์งœ ํƒ€์ž… ๋งคํ•‘ ํ•˜์ง€๋งŒ LocalDate, LocalDateTime์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค. @Enumerated enum ํƒ€์ž… ๋งคํ•‘ default..
JPA์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ 2๊ฐ€์ง€ - ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งคํ•‘ํ•˜๊ธฐ - ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋ญ˜๊นŒ? JPA๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์šฉ์–ด์ด๋‹ค. "์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜๊ตฌ ์ €์žฅํ•˜๋Š” ํ™˜๊ฒฝ"์ด๋ผ๋Š” ๋œป. -> EntityManager.persist(entity); - persist๋Š” ์‚ฌ์‹ค DB์— ์ €์žฅํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ  Entity๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. - ๋…ผ๋ฆฌ์ ์ธ ๊ฐœ๋…์œผ๋กœ ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค. EntityManager๋ฅผ ํ†ตํ•ด์„œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผํ•œ๋‹ค. - ์—ฌ๋Ÿฌ๊ฐœ์˜ EntityManager๊ฐ€ ํ•˜๋‚˜์˜ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ฐ”๋ผ๋ณธ๋‹ค. ์—”ํ‹ฐํ‹ฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๋น„์˜์† - ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ์ „ํ˜€ ๊ด€๊ณ„๊ณผ ์—†๋Š” ์ƒˆ๋กœ์šด ์ƒํƒœ ์˜์† - ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ๊ด€๋ฆฌ๋˜๋Š” ์ƒํƒœ ์ค€์˜์† - ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋˜..
์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ์„ ๋•Œ ์ €์žฅ์ด ๋ ๊นŒ? ์—๋Ÿฌ๊ฐ€ ์ƒ๊ธด๋‹ค. ์™œ๋ƒํ•˜๋ฉด JPA๋Š” ํŠธ๋ Œ์ ์…˜์ด๋Š” ๋‹จ์œ„๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— JPA์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์€ ํŠธ๋ Œ์ ์…˜ ์•ˆ์—์„œ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•œ๋‹ค. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); Member member = new Member(); member.setId(1L); member.setName("AE"); em.persist(member); em.close(); emf.close(); ํŠธ๋ Œ์ ์…˜์„ ์ถ”๊ฐ€ํ•œ ์ฝ”๋“œ EntityManagerFactory emf = Persistence.createEntityMa..
www.inflearn.com/course/ORM-JPA-Basic/dashboard ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜ JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., ๋ณธ ๊ฐ•์˜๋Š” ์ž๋ฐ” ๋ฐฑ์—” www.inflearn.com ์ธํ”„๋Ÿฐ์— ์žˆ๋Š” ๊ฐ•์˜๋ฅผ ๋ณด๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค! ๋ชฉํ‘œ : ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ” ์„ค๊ณ„ ๋งคํ•‘ - ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ”์„ ์ œ๋Œ€๋กœ ์„ค๊ณ„ํ•˜๊ณ  ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ• - ๊ธฐ๋ณธ ํ‚ค์™€ ์™ธ๋ž˜ ํ‚ค ๋งคํ•‘ - 1:N, N:1, 1:1, N:M ๋งคํ•‘ - ์‹ค๋ฌด ๋…ธํ•˜์šฐ + ์„ฑ๋Šฅ ๊ณ ๋ ค - JPA ๋‚ด๋ถ€ ๋™์ž‘ ๋ฐฉ์‹ ์ดํ•ดํ•˜๊ธฐ - JPA๊ฐ€ ์–ธ์ œ, ์–ด๋–ค SQL์„ ๋งŒ๋“ค์–ด ์‹คํ–‰ํ•˜๋Š”์ง€ ์ดํ•ด J..
Page๊นŒ์ง€ ์™”๋‹ค๋Š”๊ฑด... ๊ธฐ๋ณธ์ ์ธ CRUD๋ฅผ ์•Œ๊ณ  ๊ณ„์‹  ์ƒํƒœ๋กœ ์ดํ•ดํ•˜๊ณ  ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! ํ• ์ผ : ๊ฐ„๋‹จํ•œ ๋ฆฌ์ŠคํŠธ ๋ฐ์ดํ„ฐ์— Page, Sort ๊ตฌํ˜„ํ•˜์—ฌ API๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. Service Entity์ž์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฑด ์ ˆ๋•Œ๋กœ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Response dto๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜ํ•˜๊ธฐ๋กœ ํ•ฉ๋‹ˆ๋‹ค. Repository์—์„œ ๋ฐ›์•„์˜จ Page UserEntity๋ฅผ Response์— ๋งตํ•‘ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜ํ™˜ํ• ๋•Œ ์ƒ์„ฑ์ž์— stream์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๊ฐ ๋งตํ•‘ ํ•ด์ค๋‹ˆ๋‹ค! ์—ฌ๊ธฐ์„œ finAny().orElse("") ๋Š” user์˜ ์ด๋ฏธ์ง€๊ฐ€ ํ•„์ˆ˜๋Š” ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— NPE์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— null์ผ ๊ฒฝ์šฐ String ํƒ€์ž…์˜ null์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ถ€๋ถ„์€ ์ข€๋” ์ฐพ์•„์„œ ์—…๋ฐ์ดํŠธ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! public Page..
์• ์ •์“ฐ
'๐ŸŒ WEB/JPA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก