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

๐Ÿ’ป ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ/JPA - Hibernate3

03. Soft Delete ๋” ํŽธํ•˜๊ฒŒ ํ•˜๊ธฐ ๋“ค์–ด๊ฐ€๋ฉฐ DB๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ์šฐ๋ฆฌ๋Š” ์‚ญ์ œ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋ฐฉ์‹ ์„ค๋ช… Soft Delete `UPDATE table SET delete = 1 WHERE id = 2` ํ˜•ํƒœ๋กœ ROW๊ฐ€ ์‚ญ์ œ ๋˜์ง€ ์•Š๊ณ  flag๋ฅผ ํ†ตํ•œ ์ œ์–ด ํ•˜๋Š” ๋ฐฉ์‹ Hard Delete DELETE FROM table WHERE id = 2 ํ˜•ํƒœ๋กœ ROW๊ฐ€ ์‹ค์ œ๋กœ ์‚ญ์ œ ๋˜๋Š” ๋ฐฉ์‹ `Hard Delete`๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ, `Soft Delete`๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ๋งŽ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์— JPA Entity Graph ์˜ ๊ฒฝ์šฐ๋Š” `Soft Delete`์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์ด ๋‹ด๊ฒจ์„œ ์˜จ๋‹ค. `Application level์—์„œ ํ•„ํ„ฐ ํ•˜๋ฉด ๋˜๋Š”๊ฑฐ ์•„๋‹ˆ๋ƒ? ` ๋ผ๊ณ  ์ƒ๊ฐ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ธ๊ฐ„์ด๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ง์— ๊ตฌ๋ฉ์ด ๋งŽ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ.. 2021. 7. 15.
02. ๋‹น์‹ ์˜ @Transactional์˜ readOnly ์˜ต์…˜ ์ž˜ ์“ฐ๊ณ  ์žˆ๋‚˜์š”? ์‹œ์ž‘ํ•˜๋ฉฐ ์˜ค๋Š˜์€ Spring์—์„œ ๋งˆ๋ฒ•์˜ ์–ด๋…ธํ…Œ์ด์…˜์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” @Transactional์˜ readOnly ์˜ต์…˜์— ๋Œ€ํ•˜์—ฌ ์ด์•ผ๊ธฐํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์—ฅ? @Transactional์—๋Š” readOnly๋ผ๋Š” ์˜ต์…˜์ด ์—†๋Š”๋ฐ? ์—ฅ? @Transactional์—๋Š” readOnly ์˜ต์…˜์ด ์—†๋Š”๋ฐ ์ด๊ฒŒ ๋ฌด์Šจ์ผ์ด์ฃ ? ์—†๋Š” ๊ฑธ๋กœ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฑด๊ฐ€? ์šฐ๋ฆฌ๋Š” ์ด๋ฒˆ readOnly ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๊ธฐ ์ „์— @Transactional์€ 2๊ฐ€์ง€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ด์•ผ๊ธฐํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ์ด 2๊ฐ€์ง€๊ฐ€ ๊ถ๊ทน์ ์œผ๋กœ ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ผ์€ ๋™์ผํ•˜๋‹ค. (์‹ค์ œ Spring AOP ์ƒ์—์„œ๋Š” javax ํŒจํ‚ค์ง€์˜ ํŠธ๋žœ์ ์…˜๊ณผ Spring ํŒจํ‚ค์ง€์˜ ํŠธ๋žœ์ ์…˜๋„ ๋ชจ๋‘ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.) Spring ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด ๋” ๋งŽ์€ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๊ฒŒ ๋œ.. 2021. 2. 4.
01. ์•Œ์•„๋‘๋ฉด ์“ธ๋–ผ์žˆ๋Š” GeneratedValue ์ด์•ผ๊ธฐ Part1 ์‹œ์ž‘ํ•˜๋ฉฐ ์šฐ๋ฆฌ๋Š” Entity๋ฅผ ๋งŒ๋“ค ๋•Œ ์šฐ๋ฆฌ๋Š” PK (Primary Key)๋ฅผ ์ง€์ •ํ•œ๋‹ค. ๊ทธ์ค‘์—์„œ๋„ Primary Key๋ฅผ ์„ ํƒํ•  ๋•Œ, ์ „๋žต์ ์œผ๋กœ ์ƒ๊ฐํ–ˆ์„ ๋•Œ ์ˆœ์ฐจ ์ฆ๊ฐ€ ๊ฐ’์„ ํฌ๊ธฐํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ๊ณผ์—ฐ ๊ทธ๋Ÿผ JPA์—์„œ๋Š” ์ด๋Ÿฐ ๋Œ€์ฒด ํ‚ค๋ฅผ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑํ•˜๊ณ , ์–ด๋–ค์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. GeneratedValue๋ž€? import javax.persistence.*; import java.io.Serializable; import java.time.LocalDateTime; @Table(name = "coupon") @Entity @Getter @Setter public class Coupon implements Serializable { private static final long seria.. 2020. 6. 4.