Database

Database/SQL

[Effective SQL] ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์„ค๊ณ„ ไธŠ

โœจ ์ข‹์€ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ ์„ค๊ณ„ํ•˜๊ธฐ  1. ๋ชจ๋“  ํ…Œ์ด๋ธ”์— ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ•œ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ํŠน์ • row์™€ ๋‚˜๋จธ์ง€ row๋ฅผ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ ๋ชจ๋“  ํ…Œ์ด๋ธ”์—๋Š” ์ปฌ๋Ÿผ ํ•œ ๊ฐœ ์ด์ƒ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ธฐ๋ณธํ‚ค(PK)๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค. PK๋Š” row๋งˆ๋‹ค ์œ ์ผํ•ด์•ผํ•˜๋ฏ€๋กœ null ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ์•ˆ์ •์ ์ธ ๊ฐ’์ด์–ด์•ผ ํ•จ(๊ฐ’์„ ๊ฐฑ์‹ ํ•  ํ•„์š” X)๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ์—ฌ์•ผ ํ•จ ๐Ÿ‘‰ ์ด๋Ÿฐ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ• = ์˜๋ฏธ ์—†๋Š” ์ˆซ์ž ๋ฐ์ดํ„ฐ๋กœ ์ž๋™ ์ƒ์„ฑ๋˜๋Š” ์ปฌ๋Ÿผ  ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์ค€์ˆ˜ํ•œ๋‹ค = null์ด ์•„๋‹Œ ์™ธ๋ž˜ํ‚ค(FK)๊ฐ€ ์„ค์ •๋œ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๊ฐ ๋ ˆ์ฝ”๋“œ์™€ ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์— ์กด์žฌํ•จ๋ณตํ•ฉ ๊ธฐ๋ณธํ‚ค๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์ŒPK๋ฅผ ์ •์˜ํ•  ๋•Œ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์€ ํ•ด๋‹น ์ปฌ๋Ÿผ์— ์œ ์ผ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ™์ด ๋งŒ๋“ ๋‹ค. ์ปฌ๋Ÿผ ๋‘..

Database/JPA

[JPA] @Column(unique=true)์™€ @UniqueConstraint

[Failed to add the foreign key constraint. Missing index for constraint 'FKe6nwysthx2dnq1ikoe3u9gkxp' in the referenced table 'area'] ์ด ERROR๊ฐ€ ์ฐธ ๊ฑฐ์Šฌ๋ ธ๋‹ค. ERROR์ž„์—๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์•Œ๋งž๊ฒŒ ๋“ค์–ด๊ฐ”๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.  ๋Œ€์ถฉ ์–ด๋–ค ์—๋Ÿฌ์ธ์ง€๋Š” ํŒŒ์•…ํ–ˆ๋‹ค.area_code๊ฐ€ unique ์กฐ๊ฑด์ด ๊ฑธ๋ ค์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— FK ์ œ์•ฝ์กฐ๊ฑด์„ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์–ด๋–ค ์ƒํ™ฉ์ธ์ง€...Weather ์—”ํ‹ฐํ‹ฐ์™€ Area ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ผ๋Œ€์ผ ๋งคํ•‘๋˜์–ด์žˆ๊ณ ,referencedColumnName ์˜ต์…˜์„ ์ค˜์„œ AREA_CODE๋กœ Area ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ–ˆ๋‹ค. @Entity@Table(name = "WEATHER")public class ..

Database/JPA

[JPA] Open-in-view์™€ @Transactional

์Šคํ”„๋ง๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด ์œ„์™€ ๊ฐ™์€ WARN์ด ํ‘œ์‹œ๋œ๋‹ค. spring.jpa.open-in-view์˜ ๊ธฐ๋ณธ๊ฐ’์€ true์ด๋ฉฐ ํ•ด๋‹นํ•˜๋Š” WARN์€ false ๊ฐ’์œผ๋กœ ์ง€์ •ํ•ด์ฃผ๋ฉด ์—†์–ด์ง„๋‹ค.๋ฐฐํฌ์šฉ ์ชฝ yml ํŒŒ์ผ์— spring.jpa.open-in-view๋ฅผ false๋กœ ํ•ด์ฃผ์—ˆ๊ณ , ๋กœ์ปฌ ์ชฝ์—๋Š” ๋ณ„๋‹ค๋ฅธ ์ง€์ •์„ ํ•˜์ง€ ์•Š๊ณ  ๋ฐฐํฌํ–ˆ๋”๋‹ˆ ๋ฐฐํฌ ์‚ฌ์ดํŠธ์—์„œ ๊ธ€ ์ „์ฒด๊ฐ€ ์กฐํšŒ๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ๋‹ค. open-in-view:false ๋ฅผ ์ฃผ์„์ฒ˜๋ฆฌํ•˜๋‹ˆ ๋‹คํ–‰ํžˆ ๊ธ€ ์ „์ฒด ์กฐํšŒ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ๋‹ค. open-in-view๊ฐ€ ๋ฌด์—‡์ด๊ธธ๋ž˜ ์กฐํšŒ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ๋‹ค! ๋”๋ณด๊ธฐ์˜ˆ์ „์— ๋“ค์—ˆ๋˜ ๊น€์˜ํ•œ ๊ฐ•์‚ฌ๋‹˜์˜ '์‹ค์ „! ์Šคํ”„๋ง๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ2 - API ๊ฐœ๋ฐœ ์„ฑ๋Šฅ์ตœ์ ํ™”' ๊ฐ•์˜์—์„œ ์„น์…˜5 API ๊ฐœ๋ฐœ ๊ณ ๊ธ‰-์‹ค๋ฌด ํ•„์ˆ˜ ์ตœ์ ํ™” - '..

Database/JPA

[JPA] JPA Entity๊ฐ€ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ ธ์•ผํ•˜๋Š” ์ด์œ  - Reflection

JPA ์—”ํ‹ฐํ‹ฐ์—์„œ ์ƒ์„ฑ์ž๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค์–ด ๋†“์œผ๋ฉด ๊ธฐ๋ณธ์ƒ์„ฑ์ž(@NoArgsConstructor๋ฅผ ์ •์˜ํ•ด์•ผํ•œ๋‹ค๋Š” ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.+ public, protected๋กœ ์„ ์–ธํ•ด์•ผํ•จ !๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•ด์•ผํ•˜๋Š” ์ด์œ ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์—†์–ด์„œ ์ •๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๊ฒ ๋‹ค. ๐Ÿ‘‰ ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด Java Reflection API์—์„œ ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. JPA๋Š” DB ๊ฐ’์„ ๊ฐ์ฒด ํ•„๋“œ์— ์ฃผ์ž…ํ•  ๋•Œ, ๋™์ ์œผ๋กœ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ Reflection์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์ž๋ฐ”์—์„œ๋Š” Reflection์ด๋ผ๋Š” API๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ, ๊ทธ๋Ÿผ Reflection์€ ๋ญ˜๊นŒ....  Java Reflection์ž๋ฐ”์—์„œ๋Š” Reflection์ด๋ผ๋Š” API๋ฅผ ์ œ๊ณตํ•œ๋‹ค. Re..

soogoori
'Database' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก