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

์ „์ฒด ๊ธ€10

@Transactional ์„ ํ†ตํ•ด ๋™์‹œ์„ฑ ๋ฌธ์ œ ๋ฐฉ์ง€ํ•˜๊ธฐ ์›น ๋ฐ์ดํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ, dao์—์„œ sql๋ฌธ์œผ๋กœ db์— ์ ‘๊ทผํ•˜๊ณ  service์—์„œ dao ๋ฉ”์„œ๋“œ๋“ค์„ ์ด์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ฌ๋Ÿฌ ๋ช…์ด์„œ ๋™์‹œ์— ์‚ฌ์šฉํ•œ๋‹ค๋ฉด? ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ž€, ๋‘ ๊ฐœ ์ด์ƒ์˜ ์„ธ์…˜์ด ๊ณตํ†ต๋œ ์ž์›์„ ์ฝ๊ณ  ์“ธ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋™์‹œ์„ฑ ๋ฌธ์ œ์™€ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ , @Transactional ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค ํŠธ๋žœ์žญ์…˜์ด๋ž€? DBMS์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ž‘์—…์˜ ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์šฉ์–ด์ƒ ์ •์˜๋กœ๋Š” ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ, ํŠธ๋žœ์žญ์…˜์˜ ์„ฑ์งˆ์„ ์•Œ์•„๋ณด๋ฉด ๋ณด๋‹ค ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ์ฝ”๋“œ ์ž…๋‹ˆ๋‹ค. Service layer์—์„œ.. 2023. 3. 13.
JPA @Embedded, @Embeddable ์‚ฌ์šฉํ•˜๊ธฐ ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… ์ž„๋ฒ ๋””๋“œ ํƒ€์ž…์€ ๋ณตํ•ฉ ๊ฐ’ ํƒ€์ž…์œผ๋กœ ๋ถˆ๋ฆฌ๋ฉฐ ์ƒˆ๋กœ์šด ๊ฐ’ ํƒ€์ž…์„ ์ง์ ‘ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” JPA์˜ ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด User์—”ํ‹ฐํ‹ฐ๋Š” id, ์ด๋ฆ„, ์ด๋ฉ”์ผ, ์„ฑ๋ณ„, ์ฃผ์†Œ์ •๋ณด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š”๋ฐ ์ฃผ์†Œ ์ •๋ณด๊ฐ€ ๋„์‹œ, ๊ตฌ, ์ƒ์„ธ์ฃผ์†Œ, ์šฐํŽธ๋ฒˆํ˜ธ ๋“ฑ์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปฌ๋Ÿผ์œผ๋กœ ๋‚˜๋ˆ ์ ธ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -> ์ด๋ ‡๊ฒŒ ์ƒ์„ธํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ด์ง€ ์•Š์œผ๋ฉฐ ์‘์ง‘๋ ฅ์„ ๋–จ์–ด๋œจ๋ฆฝ๋‹ˆ๋‹ค. ์ด๋Ÿด๋•Œ ์ž„๋ฒ ๋””๋“œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ๋”์šฑ๋” ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. // user.java @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @N.. 2023. 3. 10.
JPA Auditing ๊ธฐ๋Šฅ์„ ํ†ตํ•ด Entity ๊ณตํ†ต ์ปฌ๋Ÿผ ์ž๋™ํ™”ํ•ด๋ณด๊ธฐ ORM ๊ธฐ์ˆ ์ธ JPA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„๋ฉ”์ธ์„ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์— ๋งคํ•‘ํ•  ๋•Œ ๊ณตํ†ต์ ์œผ๋กœ ๋„๋ฉ”์ธ๋“ค์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ•„๋“œ๋‚˜ ์ปฌ๋Ÿผ๋“ค์€ ๋Š˜ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ์ƒ์„ฑ์ž, ์ˆ˜์ •์ž, ์ƒ์„ฑ์ผ์ž, ์ˆ˜์ •์ผ์ž, ์‹๋ณ„์ž ๊ฐ™์€ ํ•„๋“œ ๋ฐ ์ปฌ๋Ÿผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ๋งˆ๋‹ค ๊ณตํ†ต์œผ๋กœ ์กด์žฌํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ๊ฒฐ๊ตญ ์ฝ”๋“œ๊ฐ€ ์ค‘๋ณต๋œ๋‹ค๋Š” ๋ง๊ณผ ์ผ๋งฅ์ƒํ†ตํ•œ๋ฐ, ์ƒ์„ฑ์ž, ์ˆ˜์ •์ž, ์ƒ์„ฑ์ผ์ž, ์ˆ˜์ •์ผ์ž ๊ฐ™์€ ์ปฌ๋Ÿผ์€ DB ๊ด€์ ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ JPA์—์„œ๋Š” Audit์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Audit์€ ๊ฐ์‹œํ•˜๋‹ค๋ผ๋Š” ๋œป์œผ๋กœ Spring Data JPA์—์„œ ์‹œ๊ฐ„์— ๋Œ€ํ•ด์„œ ์ž๋™์œผ๋กœ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ์„ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— INSERT ํ•˜๊ฑฐ๋‚˜ UPDATE ํ•˜๋Š” ๊ฒฝ์šฐ ๋งค๋ฒˆ ์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ €์žฅํ•ด์•ผ ํ•˜๋Š”๋ฐ, audit์„.. 2023. 3. 10.
Disk์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ์ง€ Resize ํ•˜๊ธฐ java-image-scaling์„ ํ†ตํ•ด ๋ณ„๋„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ ์—†์ด ์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ ˆํผ๋Ÿฐ์Šค๋“ค์„ ์‚ดํŽด๋ณด๋ฉด ๋ณดํ†ต ์•„๋ž˜์™€ ๊ฐ™์€ ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์ณค์Šต๋‹ˆ๋‹ค. Disk์— ์›๋ณธ์„ ์ €์žฅํ•œ๋‹ค. Resize ํ•œ๋‹ค. (์›๋ณธ๊ณผ Resize ํŒŒ์ผ ๋‘๊ฐœ๊ฐ€ ์กด์žฌํ•˜๋Š” ์ƒํƒœ) (์›๋ณธ์„ ์‚ญ์ œํ•œ๋‹ค) ์˜ ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์€ ์›๋ณธ ํŒŒ์ผ์€ ์ €์žฅํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•„์š”. ์ €์žฅํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ณ  ์‹ถ์ง€ ์•Š์•„์š”. ํŒŒ์ผ์„ Image IO๋กœ ์ฝ๊ณ , ์“ฐ๊ธฐ๋งŒ ํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ์•ž์œผ๋กœ ์ž์ฃผ ์จ๋จน์„ ๋“ฏํ•ฉ๋‹ˆ๋‹ค. public static void resize(File originFile, File resizeFile) throws IOException { BufferedIma.. 2023. 3. 10.