BackEnd๐Ÿ/Spring๐ŸŽƒ

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์˜์กด์„ฑ ์ฃผ์ž… ๊ธฐ๋ฒ• - ์ƒ์„ฑ์ž ์ฃผ์ž…, ์ˆ˜์ •์ž ์ฃผ์ž…, ํ•„๋“œ ์ฃผ์ž… (์™œ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€?)

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ ์›์น™์ธ '์˜์กด์„ฑ ์—ญ์ „ ์›์น™'์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection, DI)์„ ์ค‘์‹ฌ์œผ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ , ์œ ์—ฐ์„ฑ ๋ฐ ํ™•์žฅ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์Šคํ”„๋ง์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์„ธ ๊ฐ€์ง€ ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐฉ์‹์ธ ์ƒ์„ฑ์ž ์ฃผ์ž…(Constructor Injection), ์ˆ˜์ •์ž ์ฃผ์ž…(Setter Injection), ํ•„๋“œ ์ฃผ์ž…(Field Injection)์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ณ , ๊ฐ ๋ฐฉ๋ฒ•์˜ ํŠน์ง•๊ณผ ์žฅ๋‹จ์ ์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.1. ์ƒ์„ฑ์ž ์ฃผ์ž…(Constructor Injection)์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•œ ์˜์กด์„ฑ ์ฃผ์ž…์€ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ๋ชจ๋“  ์˜์กด์„ฑ์ด ์ถฉ์กฑ๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž ์ธ์ž๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ํ•„..

2024. 5. 5. 21:19
BackEnd๐Ÿ/Spring๐ŸŽƒ

[JPA] ๊ธฐ๋ณธ ํ‚ค ์ƒ์„ฑ ์ „๋žต(IDENTITY, SEQUENCE, TABLE)

๊ธฐ๋ณธ ํ‚ค ํ• ๋‹น ์ „๋žต JPA๊ฐ€ ์ œ๊ณตํ•˜๋Š” DB ๊ธฐ๋ณธ ํ‚ค ํ• ๋‹น ์ „๋žต์€ ์ง์ ‘ ํ• ๋‹น ๋ฐฉ์‹, ์ž๋™ ์ƒ์„ฑ ๋ฐฉ์‹ ๋‘ ๊ฐ€์ง€์ด๋‹ค. ์ด ์ค‘ ์ง์ ‘ ํ• ๋‹น ๋ฐฉ์‹์€ Application์—์„œ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ง์ ‘ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ž๋™ ์ƒ์„ฑ ๋ฐฉ์‹์€ ๋Œ€๋ฆฌ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ IDENTITY, SEQUENCE, TABLE ๋„ค ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ํ•ด๋‹น ๋ฐฉ์‹๋“ค์€ ์‚ฌ์šฉํ•˜๋Š” DB์— ์˜์กดํ•œ๋‹ค. MySQL์€ IDENTITY ์‚ฌ์šฉ, Oracle์€ SEQUENCE ์‚ฌ์šฉ ์ง์ ‘ ํ• ๋‹น ๋ฐฉ์‹ ์ง์ ‘ ํ• ๋‹น ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ Entity๋ฅผ ์ƒ์„ฑํ•  ๋•Œ Key Column์— @Id๋งŒ ์‚ฌ์šฉํ•ด ์ฃผ์–ด๋„ ๋œ๋‹ค. @Id private long id; @Id๊ฐ€ ์ ์šฉ ๊ฐ€๋Šฅํ•œ Java Type์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. Java ๊ธฐ๋ณธํ˜•(int, double, long ...) Java Wrap..

2024. 4. 21. 18:10
BackEnd๐Ÿ/Spring๐ŸŽƒ

Spring Boot ํ…Œ์ŠคํŠธ @DataJpaTest๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ค๋ฅ˜ ํ•ด๊ฒฐํ•˜๊ธฐ

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ, ๊ฐ„ํ˜น org.hibernate.exception.SQLGrammarException ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์™€์„œ ๋‹นํ™ฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๋‚ด์šฉ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ๊ณผ์ •์ด ๋ธ”๋กœ๊ทธ๋“ค์— ์ œ๋Œ€๋กœ ๋‚˜์™€์žˆ์ง€ ์•Š์•„ ๋งŽ์ด ๊ณ ์ƒ์„ ํ–ˆ๋‹ค.. ๊ทธ ๋ฐฐ๊ฒฝ ๋‚ด์šฉ์— ๋Œ€ํ•ด ๊ฐ™์ด ๊ณต๋ถ€ํ•ด๋ฉด์„œ ์˜ค๋ฅ˜์— ๋Œ€ํ•ด ํŒŒ์•…ํ•ด๋ณด์ž! ์ด ์˜ค๋ฅ˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํ•„์š”ํ•œ ์‹œํ€€์Šค๋‚˜ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ ์ฃผ๋กœ ๋ฐœ์ƒํ•˜๋Š”๋ฐ ํŠนํžˆ, @DataJpaTest๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JPA ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒฝ์šฐ, ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์„ค์ •์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜์„ ๋•Œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์šฐ์„  @DataJpaTest ์—๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•ด๋ณด์ž. DataJpaTest๋ž€? @DataJpaTest๋Š” Spring Boot์—์„œ JPA ๊ด€๋ จ ๊ตฌ..

2024. 4. 21. 17:50
BackEnd๐Ÿ/Spring๐ŸŽƒ

[JPA] ์—๋Ÿฌ Attempt to recreate a file for type ...

QueryDSL์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ๋นŒ๋“œ ๊ณผ์ • ์ค‘์— ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ์ธ๋ฐ ์ •๋ฆฌํ•ด์„œ ๋‹ค์Œ์—๋Š” ๋ฐ”๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์ƒํ™ฉ QueryDSL์„ ์‚ฌ์šฉํ•˜์—ฌ ์—”ํ‹ฐํ‹ฐ์— ๋Œ€ํ•œ Qํƒ€์ž… ํด๋ž˜์Šค ํŒŒ์ผ๋“ค์„ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œ, ์ด๋ฏธ ์ƒ์„ฑ๋œ Qํƒ€์ž… ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋ ค ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: Attempt to recreate a file for type org.jake.spring.entity.QAnster Attempt to recreate a file for type org.jake.spring.entity.QMember ์ด๋Š” QAnster์™€ QMember ๊ฐ™์€ Q๊ฐ์ฒด ํŒŒ์ผ๋“ค์ด ์ด๋ฏธ ์ƒ์„ฑ๋˜์—ˆ๋Š”๋ฐ, ๋นŒ๋“œ ๊ณผ์ •์—์„œ ์ด ํŒŒ์ผ๋“ค์„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ•˜๋ฉด์„œ ๋ฐœ์ƒ..

2024. 4. 11. 15:47
BackEnd๐Ÿ/Spring๐ŸŽƒ

[Spring] ํŠธ๋žœ์žญ์…˜ ์–ด๋…ธํ…Œ์ด์…˜(@Transaction)์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•œ ์ •๋ฆฌ

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜์ ์ธ ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, Spring Framework์™€ ๊ฐ™์€ ํ˜„๋Œ€์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋„๊ตฌ์™€ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ Spring์—์„œ @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•œ ์ผ๋ฐ˜์ ์ธ ์˜ˆ์ œ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์ด๋ž€? ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์—ฐ์‚ฐ์„ ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„๋กœ ๋ฌถ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  ์—ฐ์‚ฐ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜, ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•  ๊ฒฝ์šฐ ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ทจ์†Œ๋˜์–ด์•ผ ํ•จ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค(All or Nothing). ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ์ •ํ™•์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Spring์˜ @Transaction..

2024. 4. 7. 23:50
โ—€ PREV [1] [2] [3] NEXT โ–ถ