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

til92

[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java ] ์˜น์•Œ์ด (2) ๋ฌธ์ œ ์„ค๋ช…https://school.programmers.co.kr/learn/courses/30/lessons/133499 ํ”„๋กœ๊ทธ๋ž˜๋จธ์ŠคSW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„programmers.co.kr๋จธ์“ฑ์ด๋Š” ํƒœ์–ด๋‚œ ์ง€ 11๊ฐœ์›” ๋œ ์กฐ์นด๋ฅผ ๋Œ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ์นด๋Š” ์•„์ง "aya", "ye", "woo", "ma" ๋„ค ๊ฐ€์ง€ ๋ฐœ์Œ๊ณผ ๋„ค ๊ฐ€์ง€ ๋ฐœ์Œ์„ ์กฐํ•ฉํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐœ์Œ๋ฐ–์— ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์—ฐ์†ํ•ด์„œ ๊ฐ™์€ ๋ฐœ์Œ์„ ํ•˜๋Š” ๊ฒƒ์„ ์–ด๋ ค์›Œํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด ๋ฐฐ์—ด babbling์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋จธ์“ฑ์ด์˜ ์กฐ์นด๊ฐ€ ๋ฐœ์Œํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.์ œํ•œ ์‚ฌํ•ญ1 ≤ babbling์˜ ๊ธธ์ด ≤ .. 2025. 1. 21.
[ TIL ] JPA ์‹ฌํ™”_Day 7 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง ํ•„์ˆ˜ ๊ณผ์ œ Level 2 (Cascade, N+1)CascadeType.ALL์„ ์‚ฌ์šฉํ•˜๋ฉด ์œ„ํ—˜์„ฑ์ด ๋„ˆ๋ฌด ํฌ๋‹ค. ๊ทธ๋ž˜์„œ ALL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ PERSIST๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋“ฑ๋ก๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•˜๋‹ค.FetchType = LAZY์™€ Fetch Join์„ ํ•จ๊ป˜ ์ด์šฉํ•ด์„œ N+1 ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.FeFetch Join๊ณผ @EntityGraph ๋‘˜ ์ค‘ ํ•˜๋‚˜๋กœ N+1์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ์ค‘์—์„œ Fetch Join์ด inner join๊ณผ outer join ์ค‘์—์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Fetch Join์„ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ์„ธ์…˜ ๋“ฃ๊ธฐDocker ์‚ฌ์šฉํ•ด์„œ MySQL๊ณผ Redis image ๋ถˆ๋Ÿฌ์˜ค๊ณ  IntelliJ์™€ ์—ฐ๋™์‹œ์ผœ ๋ณด๊ธฐ ์˜ค๋Š˜ ํ•˜๋ฃจ ์ •๋ฆฌ โœ.. 2025. 1. 20.
[ TIL ] JPA ์‹ฌํ™”_Day 6 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง ํ•„์ˆ˜๊ณผ์ œ Level 1 - 3, 4, 5 ๋๋‚ด๊ธฐ1-3. AOP ์ดํ•ดํ•˜๊ธฐUserAdminController ํด๋ž˜์Šค์˜ changeUserRole( ) ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ „์— ๋™์ž‘ํ•˜๋„๋ก ์ˆ˜์ •์‹คํ–‰ ์ „์— ๋™์ž‘ํ•ด์•ผ ํ•˜๋ฏ€๋กœ @After๋กœ ๋˜์–ด ์žˆ๋˜ ์–ด๋…ธํ…Œ์ด์…˜์„ @Before๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค. ์•ˆ์˜ execution ํ‘œํ˜„์‹์„ UserAdminController.changeUserRole๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.1-4. ์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ ์ดํ•ดํ•˜๊ธฐtodo_๋‹จ๊ฑด_์กฐํšŒ_์‹œ_todo๊ฐ€_์กด์žฌํ•˜์ง€_์•Š์•„_์˜ˆ์™ธ๊ฐ€_๋ฐœ์ƒํ•œ๋‹ค ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๊ณ  ์žˆ์–ด์„œ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์–ด ํ†ต๊ณผ๋  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •Service ๋‹จ์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด todo๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ, InvalidReqeustException์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋‹ค.GlobalExceptionH.. 2025. 1. 19.
[ TIL ] JPA ์‹ฌํ™”_Day 4 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง ํ•„์ˆ˜ ๊ณผ์ œ ์‹œ์ž‘Level 1@Transactional์˜ ์ดํ•ดํ˜„์žฌ ๊ธฐ๋ณธ์ ์œผ๋กœ TodoService์˜ ๋ชจ๋“  ๋กœ์ง์ด @Transactional(readOnly = true)๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.๊ทธ๋ž˜์„œ saveTodo( ) ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋„ ๊ฐ™์€ ์„ค์ •์ด ๋“ค์–ด๊ฐ€์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋‹ค.DB๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋”ฐ๋กœ @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์ค˜์•ผ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.JWT์˜ ์ดํ•ด๊ถ๊ธˆํ–ˆ๋˜ ๋‚ด์šฉ๊ฐ๊ฐ์˜ ๋ฉ”์„œ๋“œ ์œ„์— ๋”ฐ๋กœ @Transactional์„ ๋ถ™์—ฌ์ฃผ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ? ์™œ ์ „์ฒด ์ ์šฉ์„ ํ•˜๋Š” ๊ฑฐ์ง€??@Transactional(readOnly = true)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐํšŒ์šฉ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด์„œ ์„ฑ๋Šฅ์ƒ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ผ๋ฐ˜์ ์œผ๋กœ ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•ด์„œ DB์— ๋ฐ์ดํ„ฐ์˜ ์ผ.. 2025. 1. 17.
[ TIL ] JPA ์‹ฌํ™”_Day 3 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง JPA ์‹ฌํ™” 4, 5์ฃผ์ฐจ ๊ฐ•์˜Cascade (์˜์†์„ฑ ์ „์ด)์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ ๋ฐ˜๋Œ€ํŽธ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.@OneToMany ๋˜๋Š” @OneToOne์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.์–‘์ชฝ Entity์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์ด ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋น„์Šทํ•ด์•ผ ํ•œ๋‹ค.์˜ต์…˜ ์ข…๋ฅ˜ALL: ์ „์ฒด ์ƒํƒœ ์ „์ดPERSIST: ์ €์žฅ ์ƒํƒœ ์ „์ดREMOVE: ์‚ญ์ œ ์ƒํƒœ ์ „์ด → ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๊ฐ’์ด ๊ฐ™์ด ์‚ญ์ œ๋˜์–ด์•ผ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค. MERGE: ์—…๋ฐ์ดํŠธ ์ƒํƒœ ์ „์ด REFRESH: ๊ฐฑ์‹  ์ƒํƒœ ์ „์ดDETACH: ๋น„์˜์†์„ฑ ์ƒํƒœ ์ „์ดorphanRemoval (๊ณ ์•„ ๊ฐ์ฒด ์ œ๊ฑฐ)@OneToMany ๋˜๋Š” @OneToOne์—์„œ ์‚ฌ์šฉํ•œ๋‹ค. (๋ถ€๋ชจ Entity)Cascade.REMOVE์™€ ๋น„์Šทํ•œ ์šฉ๋„๋กœ ์‚ญ์ œ๋ฅผ ์ „ํŒŒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.๋ถ€๋ชจ ๊ฐ์ฒด์—์„œ ๋ฆฌ์ŠคํŠธ.. 2025. 1. 16.
[ TIL ] JPA ์‹ฌํ™”_Day 1 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง JPA ์‹ฌํ™” 1, 2์ฃผ์ฐจ ๊ฐ•์˜ ๋“ฃ๊ธฐDB ์‚ฌ์šฉ ๋ฐฉ์‹ 3๊ฐ€์ง€Server Mode (ํ˜„์—…์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹)In-memory Mode (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์˜ ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹)Embedded Mode (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์˜ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ํœ˜๋ฐœ์„ฑ์ด ์—†์Œ)ModeH2 ๋‹ค์šด๋กœ๋“œ ์—ฌ๋ถ€์‹คํ–‰ ์ฃผ์ฒดDB ์ €์žฅ ์œ„์น˜์‚ฌ์šฉ ์šฉ๋„Server ModeO์™ธ๋ถ€๋กœ์ปฌ(ํŒŒ์ผ ์‹œ์Šคํ…œ)๋ฐฐํฌ ์šฉ๋„In-Memory ModeX์Šคํ”„๋ง๋ฉ”๋ชจ๋ฆฌํ…Œ์ŠคํŠธ ์šฉ๋„Embedded ModeX์Šคํ”„๋ง๋กœ์ปฌ(ํŒŒ์ผ ์‹œ์Šคํ…œ)๊ฐœ๋ฐœ ์šฉ๋„SQLDDL: CREATE, ALTER, DROPDML: SELECT, INSERT, UPDATE, DELETE, ORDER BY, GROUP BY, JOINํŠธ๋žœ์žญ์…˜ (์›์ž์„ฑ, ์ผ๊ด€์„ฑ, ๋…๋ฆฝ์„ฑ)DCL: BEGIN, C.. 2025. 1. 14.