์ „์ฒด ๊ธ€ 29

[์ธํ„ด] ์šฐ์•„ํ•œํ…Œํฌ์บ ํ”„ 6๊ธฐ ํšŒ๊ณ  & ์šฐ์•„ํ•œํ˜•์ œ๋“ค ๋ถˆํ•ฉ๊ฒฉ ํ›„๊ธฐ

๋‘ ๋‹ฌ ๊ฐ„์˜ ์บ ํ”„์— ์ด์–ด ์ฑ„์šฉ๊นŒ์ง€ ๋“œ๋””์–ด ๋์ด ๋‚ฌ๋‹ค. ์ข‹์€ ๋งˆ๋ฌด๋ฆฌ๋Š” ์•„๋‹ˆ์—ˆ์ง€๋งŒ ๋งˆ์Œ์„ ๋‹ค์žก๋Š” ์˜๋ฏธ์—์„œ, ๊ทธ๋ฆฌ๊ณ  ์•ž์œผ๋กœ์˜ ๋‚˜๋ฅผ ์œ„ํ•ด ํšŒ๊ณ ๋ฅผ ์“ฐ๋ ค๊ณ  ํ•œ๋‹ค. ๐Ÿ’ก ๋Š๋‚€ ์  ๊ฑด๊ฐ• ๊ด€๋ฆฌ๊ฐ€ ์ตœ์šฐ์„ ์ด๋‹ค ๋ฐค๊นŒ์ง€ ๊ต์œก์žฅ์— ๋‚จ์•„์žˆ์œผ๋ฉด์„œ ๋‘ ๋ผ๋ฅผ ๋ฐ–์—์„œ ํ•ด๊ฒฐํ•˜๊ณ , ์‹์‚ฌ ์‹œ๊ฐ„ ์™ธ์—๋Š” ๊ณ„์† ์•‰์•„์žˆ๋‹ค๋ณด๋‹ˆ ์ €์ ˆ๋กœ ๊ฑด๊ฐ•์ด ์•ˆ์ข‹์•„์ง€๋Š” ๊ฒŒ ๋Š๊ปด์กŒ๋‹ค... ์ตœ์•…์ผ ๋•Œ๋Š” ์œ„์—ผ๊ณผ ์žฅ์—ผ์„ ๋™์‹œ์— ๊ฑธ๋ฆฌ๋ฉด์„œ ๋ง๊ฑฐ๋„ ๋‘ ๋ฒˆ ๋งž์•˜๋‹ค. ์ด ๋•Œ ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค๋ฅธ ๋•Œ๋ณด๋‹ค ์ง‘์ค‘์„ ๋งŽ์ด ๋ชปํ•ด์„œ ํŽ˜์–ด์—๊ฒŒ ๋ฏธ์•ˆํ–ˆ๋‹ค. ์•„ํ”„์ง€ ์•Š์•˜๋˜ ๋•Œ์—๋„ ์ž์ž˜ํžˆ ์ปจ๋””์…˜์ด ์ข‹์ง€ ์•Š์•˜๋Š”๋ฐ, ์ด๊ฑธ ๊ทน๋ณตํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ์˜คํžˆ๋ ค ์ŠคํŠธ๋ ˆ์Šค๋ฅผ ์ข€ ๋ฐ›์•˜๋‹ค. ์ด์ œ๋Š” ๋ฉด์ ‘๋„ ๋๋‚ฌ์œผ๋‹ˆ ์šฐํ…Œ์บ  ์ „์— ๊พธ์ค€ํžˆ ํ•˜๋˜ ๋Ÿฌ๋‹์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  (์•„๋ฌด๋ฆฌ ํฅ๋ฏธ๋กœ์šด ์ด์Šˆ๋ฅผ ๋ฐœ๊ฒฌํ•ด๋„^^;) ๋ฐค ์ƒˆ์„œ ๊ฐœ๋ฐœํ•˜๋Š”..

[230916] MySQL InnoDB์˜ ๋ฒ ํƒ€ ๋ฝ

โœ… MySQL InnoDB์˜ ๋ฒ ํƒ€ ๋ฝ ํ—ท๊ฐˆ๋ ค์„œ ์Šค์Šค๋กœ์—๊ฒŒ ๋‚ด๋ณธ ๋ฌธ์ œ. (1) ์ธ๋ฑ์Šค๊ฐ€ ๊ฑธ๋ ค์žˆ์ง€ ์•Š์€ ์ปฌ๋Ÿผ์œผ๋กœ ๋ฒ ํƒ€ ๋ฝ์„ ๊ฑฐ๋Š” ๊ฒฝ์šฐ Q. ์œ„์™€ ๊ฐ™์€ test ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค. id๋Š” ๊ธฐ๋ณธ ํ‚ค์ด๊ณ , name์€ ์ธ๋ฑ์Šค๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š์€ ์ปฌ๋Ÿผ์ด๋‹ค. ์ด ๋•Œ select * from test where name = 'a' for update ์ฟผ๋ฆฌ๋กœ ๋ฒ ํƒ€ ๋ฝ์„ ๊ฑธ๋ฉด ์–ด๋–ค ์ปฌ๋Ÿผ์— ์–ด๋–ค ๋ฝ์ด ๊ฑธ๋ฆด๊นŒ? A. *************************** 1. row *************************** OBJECT_NAME: test INDEX_NAME: NULL LOCK_TYPE: TABLE LOCK_MODE: IX LOCK_STATUS: GRANTED LOCK_DATA: NULL ***************..

[MySQL/InnoDB] Gap Lock(๊ฐญ ๋ฝ)์˜ ์‹คํ–‰ ์›๋ฆฌ ํƒ๊ตฌ

๊ฐญ ๋ฝ(Gap Lock) ์ด๋ž€? ๋ ˆ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ ˆ์ฝ”๋“œ์™€ ๋ฐ”๋กœ ์ธ์ ‘ํ•œ ๋ ˆ์ฝ”๋“œ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ๋งŒ์„ ์ž ๊ทธ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ฐญ ๋ฝ์˜ ์—ญํ• ์€ ๋ ˆ์ฝ”๋“œ์™€ ๋ ˆ์ฝ”๋“œ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์— ์ƒˆ๋กœ์šด ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ์ œ์–ดํ•œ๋‹ค. ์˜๋ฌธ: ์–ด๋–ป๊ฒŒ ๊ฐญ์— ๋ฝ์„ ๊ฑธ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ์ง€? ๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ ์กด์žฌํ•˜์ง€ ์•Š๋Š” row์— ๋ฝ์„ ๊ฑธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ผ๊นŒ? ํ•œ ๋ฒˆ ์‚ดํŽด๋ณด์•˜๋‹ค. ํ˜„์žฌ 1๋ฒˆ๊ณผ 5๋ฒˆ row์—๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ์ด๋‹ค. ์šฐ์„  ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์ธ 5๋ฒˆ row์— ๋ฝ์„ ๊ฑธ์–ด๋ณด๊ฒ ๋‹ค. select * from parent where id=5 for update; LOCK_TYPE: RECORD, LOCK_MODE: X, REC_NOT_GAP ์ด ๋ณด์ธ๋‹ค. ๊ฐญ์„ ์ œ์™ธํ•œ ๋ ˆ์ฝ”๋“œ์— ์“ฐ๊ธฐ ๋ฝ์ด ๊ฑธ๋ ธ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์ด๊ฑด ์˜ˆ์ƒ๋˜๋Š” ๊ฒฐ๊ณผ์˜€๋‹ค. ์ด์ œ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ..

Database/MySQL 2023.09.16

[230914] Spring์˜ @Transactional ๊ธฐ๋ณธ ์„ค์ •, Spring์˜ AOP์™€ ํ”„๋ก์‹œ, MySQL ์•„ํ‚คํ…์ฒ˜

โœ… @Transactional ๊ธฐ๋ณธ ์„ค์ • https://docs.spring.io/spring-framework/reference/data-access/transaction/declarative/annotations.html#transaction-declarative-attransactional-settings Using @Transactional :: Spring Framework The @Transactional annotation is metadata that specifies that an interface, class, or method must have transactional semantics (for example, "start a brand new read-only transaction ..

[230911] DTO์™€ ๋„๋ฉ”์ธ์˜ ๋ณ€ํ™˜, ์ค‘์ฒฉ ํŠธ๋žœ์žญ์…˜

โœ… DTO์™€ ๋„๋ฉ”์ธ์˜ ๋ณ€ํ™˜ DTO๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ? Although the main reason for using a Data Transfer Object is to batch up what would be multiple remote calls into a single call, it's worth mentioning that another advantage is to encapsulate the serialization mechanism for transferring data over the wire. By encapsulating the serialization like this, the DTOs keep this logic out of the rest of the code and also prov..

[230910] JPA์—์„œ ๋ถ€๋ชจ๊ฐ€ ์ž์‹์„ ์ œํ•œํ•ด์„œ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ

โœ… JPA์—์„œ ๋ถ€๋ชจ๊ฐ€ ์ž์‹์„ ์ œํ•œํ•ด์„œ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ ์ƒํ™ฉ ์„ค๋ช… (์ œ๋ชฉ ์“ฐ๋Š” ๊ฒƒ๋ถ€ํ„ฐ ํ—ท๊ฐˆ๋ฆฌ๋„ค...) ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ fk๋กœ ๋ถ€๋ชจ์™€ ์ž์‹์˜ ๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ๊ฒฝ์šฐ, ์ž์‹์ด ํ•ด๋‹น ๋ถ€๋ชจ์˜ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ์ฆ‰ ๋ถ€๋ชจ๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ž์‹์˜ ์ˆ˜์—๋Š” ์ œํ•œ์ด ์—†๋‹ค. JPA์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ณดํ†ต @OneToMany๋กœ ๋ถ€๋ชจ ์ชฝ์—์„œ ์ž์‹์„ ์ฐธ์กฐํ•  ๋•Œ๋Š” List ๋“ฑ ํฌ๊ธฐ ์ œํ•œ์ด ์—†๋Š” ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค. @Entity public class Parent { @OneToMany private List childs = new ArrayList(); } ํ•˜์ง€๋งŒ ํŠน์ • ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ œํ•œ์ ์œผ๋กœ ์ž์‹์„ ๊ฐ€์ง€๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ํ˜„์žฌ ๋‚ด๊ฐ€ ์ฐธ์—ฌํ•œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” '๊ฐ€๊ณ„๋ถ€ ๋‚ด์—ญ'๊ณผ '์นดํ…Œ๊ณ ๋ฆฌ'๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๊ฐ€..

[230907] Spring Boot ํ…Œ์ŠคํŠธ์˜ ๋กค๋ฐฑ

โœ… Spring Boot ํ…Œ์ŠคํŠธ์˜ ๋กค๋ฐฑ ๋ฌธ์ œ ๋ฐœ์ƒ: ์ผ๋Œ€๋‹ค ๋‹จ๋ฐฉํ–ฅ ์ฐธ์กฐ๊ฐ€ ๋ถˆ๋Ÿฌ์˜จ ๋‚˜๋น„ํšจ๊ณผ JPA์—์„œ ์ผ๋Œ€๋‹ค ๋‹จ๋ฐฉํ–ฅ์„ ์ง€์–‘ํ•˜๋ผ๋Š” ๊ฒƒ์€ ๋„๋ฆฌ ์•Œ๋ ค์ง„ ์–˜๊ธฐ์ด๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์ด์œ ๋Š” ์ž์‹ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— saveํ•˜๋Š” ๊ณผ์ •์—์„œ ์ถ”๊ฐ€ ์ฟผ๋ฆฌ๊ฐ€ ๋‚ ๋ผ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ, ์ž์‹ ์—”ํ‹ฐํ‹ฐ์—์„œ ๋ถ€๋ชจ์˜ ์ •๋ณด(id)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์•„ insert ์ฟผ๋ฆฌ ์ดํ›„ fk๋ฅผ ์„ค์ •ํ•˜๋Š” update ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ฅผ ์ง์ ‘ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์•˜๋‹ค. @DataJpaTest public class CustomTest { @Autowired private OrderRepository orderRepository; @Test void test() { Order order = new Order(new OrderItems()); orderRe..

[์šฐ์•„ํ•œํ…Œํฌ์บ ํ”„] 6๊ธฐ(์„œ๋ฒ„/๋ฐฑ์—”๋“œ) ์ตœ์ข… ํ•ฉ๊ฒฉ ํ›„๊ธฐ

https://techblog.woowahan.com/11427/ [๋ชจ์ง‘] 2023 ์šฐ์•„ํ•œํ…Œํฌ์บ ํ”„ 6๊ธฐ | ์šฐ์•„ํ•œํ˜•์ œ๋“ค ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ {{item.name}} ์šฐ์•„ํ•œ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค์„ ์œ„ํ•œ 2023 ์šฐ์•„ํ•œํ…Œํฌ์บ ํ”„ 6๊ธฐ ๋ชจ์ง‘์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค! ์˜ฌํ•ด ์šฐ์•„ํ•œํ…Œํฌ์บ ํ”„ 6๊ธฐ๋Š”์š”! ๐Ÿ ์—ฌ๋ฆ„๋ฐฉํ•™ 8์ฃผ ๋™์•ˆ ๐Ÿ’ก Java ์–ธ์–ด ๊ธฐ๋ฐ˜์˜ ๋ฐฑ์—”๋“œ ๊ต์œก ๐Ÿ‘ฉ๐Ÿฝ‍๐Ÿ’ป techblog.woowahan.com ์ „ํ˜•๋‹จ๊ณ„ ์‚ฌ์ „์ ‘์ˆ˜ > 1์ฐจ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ > 2์ฐจ ๊ณผ์ œํ…Œ์ŠคํŠธ > ์„œ๋ฅ˜์ ‘์ˆ˜ > ๋ฉด์ ‘ > ์šฐ์•„ํ•œํ…Œํฌ์บ ํ”„ ์ฝ”๋”ฉ/๊ณผ์ œํ…Œ์ŠคํŠธ ์ง„ํ–‰ ์ผ์ • ์‚ฌ์ „์ ‘์ˆ˜: 2023. 04. 26.(์ˆ˜) 13:00 – 2023. 05. 04.(๋ชฉ) 13:00 1์ฐจ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ: 2023. 05. 06.(ํ† ) 13:00-16:00 2์ฐจ ๊ณผ์ œํ…Œ์ŠคํŠธ: 2023. 05. 13...

[2023๋…„ ์ƒ๋ฐ˜๊ธฐ] toddler ๊ฐœ๋ฐœ์ž์˜ 6๊ฐœ์›”

SSAFY ์กธ์—…์„ ์•ž๋‘๊ณ  ์‹ธํ”ผ์— ํ•ฉ๊ฒฉํ–ˆ๋‹ค. (ํ•ฉ๊ฒฉ ํ›„๊ธฐ: https://velog.io/@dahyen0o/์‹ธํ”ผ-9๊ธฐ-์ „๊ณต์ž-ํ•ฉ๊ฒฉ-ํ›„๊ธฐ) ์‚ฌ์‹ค ํ•ฉ๊ฒฉ์ด ๋งˆ๋ƒฅ ๊ธฐ์˜์ง„ ์•Š์•˜๋‹ค. ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์ง„๋กœ๋ฅผ ๊ตณํ˜”๊ธฐ ๋•Œ๋ฌธ์— 1ํ•™๊ธฐ ๋•Œ ํ”„๋ก ํŠธ๊นŒ์ง€ ๋ฐฐ์šฐ๋Š” ์ ์ด๋‚˜, ๋ณธ๊ฒฉ์ ์ธ ํ”„๋กœ์ ํŠธ๋Š” 2ํ•™๊ธฐ์— ์ง„ํ–‰ํ•˜๋Š” ์  ๋“ฑ์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•˜๋‹ค. 1ํ•™๊ธฐ๋ฅผ ๋งˆ์นœ ์ง€๊ธˆ์€... ์˜คํžˆ๋ ค ์ข‹์•„ ใ…‹ใ…‹ ์ž๋ฐ”๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ ํ”„๋กœ์ ํŠธ๋งŒ ํ•˜๋‹ค ๋†“์น˜๊ธฐ ์‰ฌ์šด ๋‚ด์šฉ์„ ๋ณต์Šต/๊ณต๋ถ€ํ•˜๊ณ , ์Šคํ”„๋ง๋„ ์Šคํ”„๋ง ๋ถ€ํŠธ ์ „ ๋ ˆ๊ฑฐ์‹œ ์Šคํ”„๋ง์„ ๋ฐฐ์›Œ์„œ ๊ธฐ๋ณธ๋ถ€ํ„ฐ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒŒ ์ข‹์•˜๋‹ค. ์Šคํƒ€ํŠธ ์บ ํ”„๋งŒ ๋นผ๋ฉด 1ํ•™๊ธฐ๋Š” ์ข‹์•˜๋‹ค. ๋ฐ˜ ์นœ๊ตฌ๋“ค๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋””๋„ ์ง„ํ–‰ ํ•ด ๋ฐฑ์ค€ ๊ณ„์ •๋„ ์—†๋Š” ๋‚ด๊ฐ€ ๊ณจ๋“œ1๊นŒ์ง€ ์˜ฌ๋ž๋‹ค. ํ˜ผ์ž์„œ ๊ณต๋ถ€ํ•˜๋ฉด ๋งํ•˜๋Š” ์‚ฌ๋žŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์›น ๊ฐœ๋ฐœ ๋“ฑ ๋ชจ๋“  ๋ถ„์•ผ๋ฅผ '๋Œ€๊ฐ•' ์•Œ๊ณ  ์žˆ๋Š” ..

[Spring Boot/JPA] org.hibernate.LazyInitializationException: could not initialize proxy - no Session

https://sechoi.tistory.com/15 [Spring Boot/JPA] FetchType, Lazy Loading ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋‘ ํ…Œ์ด๋ธ”์ด (์ผ๋Œ€๋‹ค ํ˜น์€ ๋‹ค๋Œ€์ผ) ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ FK๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ๋‹ค. FK๋Š” ์—ฐ๊ฒฐ ๋œ ํ…Œ์ด๋ธ”์˜ PK์ด๋‹ค. ํ•˜์ง€๋งŒ JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์—์„œ PK๊ฐ€ ์•„๋‹Œ PK๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ํ…Œ์ด๋ธ” ์ž์ฒด sechoi.tistory.com tmi. ์œ„ ํฌ์ŠคํŒ…์„ ํ•œ ์ด์œ ๋Š” ์‚ฌ์‹ค ์ด ํฌ์ŠคํŒ…์„ ์œ„ํ•ด์„œ์˜€๋‹ค ๐Ÿ™ƒ ๋ฌธ์ œ ์ƒํ™ฉ @Service public class Service { public List showAllCommentsFromBoard(Long boardId) { return freeBoardCommentCustomRepository.findAllByBoard(boardId) ...