BackEnd๐Ÿ/Spring๐ŸŽƒ

[springboot 3.x, querydsl] QClass ์ƒ์„ฑ ๋ฐ ๊ฒฝ๋กœ ์„ค์ •

๊น€์˜ํ•œ๋‹˜ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋‚˜์„œ ๊ฐ•์˜์— ์žˆ๋Š” Querydsl ์„ธํŒ…๊ณผ ํ˜„์žฌ ๋‚ด๊ฐ€ ์“ฐ๊ณ  ์žˆ๋Š” ์Šคํ”„๋ง 3.x ๋ฒ„์ „์˜ ์„ธํŒ…์ด ์กฐ๊ธˆ ๋‹ค๋ฅด๋‹จ๊ฑธ ์•Œ์•˜๋‹ค. ๊ทธ๋ž˜์„œ ํ•ด๋‹น ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋Š”๊ฒƒ๊ณผ ๋™์‹œ์— ๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋„๋ก ํ•˜๊ฒ ๋‹ค. QueryDSL JPA์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์ฟผ๋ฆฌ์ธ JPQL(Java Persistence Query Language)์„ ํ†ตํ•ด ๋™์  ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ต‰์žฅํžˆ ๋‚œ์žกํ•ด์ง„๋‹ค๋Š” ๊ฒƒ์„ ๋Š๋‚„ ์ˆ˜ ์žˆ๋‹ค. JPQL์€ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฌธ์ž์—ด์„ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ด์–ด๋ถ™์ด๋Š” ํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋ฌธ์ž์—ด์ด๊ธฐ์— ์˜คํƒ€๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ์—๋Ÿฌ๋ฅผ ์žก์•„์ฃผ์ง€ ๋ชปํ•œ๋‹ค.(๋‹ค๋งŒ, NamedQuery๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋Šฅํ•˜๋‹ค) ๋˜ํ•œ ๋™์ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ, ์ค‘๊ฐ„์ค‘๊ฐ„ if๋ฌธ์— ์˜ํ•ด ๋ฌธ..

2023. 11. 4. 15:47
BackEnd๐Ÿ/Java๐ŸŽฑ

[Spring] AOP(Aspect Oriented Programming)๋ž€? ์Šคํ”„๋ง AOP๋ž€?

intro ์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ ์„ ๋“ฃ๊ณ  ๋‚˜์„œ ๊ฐœ์ธ์ ์œผ๋กœ AOP์— ๋Œ€ํ•ด ์ถ”๊ฐ€๋กœ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค. ํ•ด๋‹น ๊ฐ•์˜์— ๋‚˜์˜จ ์ฝ”๋“œ ๋ถ„์„ ์™ธ์—๋„ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ๋„ ์‚ดํŽด๋ณด์•˜๋‹ค. AOP (Aspect Oriented Programming)๋ž€? AOP๋Š” Aspect Oriented Programming์˜ ์•ฝ์ž๋กœ ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค. ๊ด€์  ์ง€ํ–ฅ์€ ์–ด๋–ค ๋กœ์ง์„ ๊ธฐ์ค€์œผ๋กœ ํ•ต์‹ฌ์ ์ธ ๊ด€์ , ๋ถ€๊ฐ€์ ์ธ ๊ด€์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋ณด๊ณ  ๊ทธ ๊ด€์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋“ˆํ™” ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋ชจ๋“ˆํ™” : ์–ด๋–ค ๊ณตํ†ต๋œ ๋กœ์ง์ด๋‚˜ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ๋Š” ๊ฒƒ ์˜ˆ๋ฅผ ๋“ค์–ด ํ•ต์‹ฌ์ ์ธ ๊ด€์ ์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋  ์ˆ˜ ์žˆ๊ณ , ๋ถ€๊ฐ€์ ์ธ ๊ด€์ ์€ ํ•ต์‹ฌ ๋กœ์ง์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ–‰ํ•ด์ง€๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ, ๋กœ๊น…, ํŒŒ์ผ ์ž…์ถœ..

2023. 9. 2. 23:07
BackEnd๐Ÿ/Java๐ŸŽฑ

[Java] [๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด] - (2) ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ, JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

| ๋ณ€์ˆ˜ ์ž๋ฐ”์—์„œ ๋ณ€์ˆ˜๋Š” ํด๋ž˜์Šค๋ณ€์ˆ˜, ์ธ์Šคํ„ด์Šค๋ณ€์ˆ˜, ์ง€์—ญ๋ณ€์ˆ˜ ์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค. ๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ๋Š” '๋ณ€์ˆ˜์˜ ์„ ์–ธ๋œ ์œ„์น˜'์ด๋‹ค. ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ์ œ์™ธํ•œ ๊ฒƒ์€ ๋ชจ๋‘ ์ง€์—ญ๋ณ€์ˆ˜, ๋ฉค๋ฒ„๋ณ€์ˆ˜ ์ค‘ static ์ด ๋ถ™์€ ๊ฒƒ์€ ํด๋ž˜์Šค๋ณ€์ˆ˜, ๋ฉค๋ฒ„๋ณ€์ˆ˜ ์ค‘ static ์ด ๋ถ™์ง€ ์•Š์€ ๊ฒƒ์€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์ด๋‹ค. ใ…๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜ iv ์™€ cv ๋Š” ํด๋ž˜์Šค ์˜์—ญ์— ์„ ์–ธ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉค๋ฒ„๋ณ€์ˆ˜์ด๋‹ค. cv ๋Š” static ์ด ๋ถ™์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค๋ณ€์ˆ˜์ด๊ณ , iv ๋Š” static ์ด ๋ถ™์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šค๋ณ€์ˆ˜์ด๋‹ค. lv๋Š” ๋ฉ”์„œ๋“œ ์˜์—ญ์— ์„ ์–ธ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง€์—ญ๋ณ€์ˆ˜์ด๋‹ค. ์ธ์Šคํ„ด์Šค๋ณ€์ˆ˜ (instance variable) ์ธ์Šคํ„ด์Šค๋ณ€์ˆ˜๋Š” ๋…๋ฆฝ์ ์ธ ์ €์žฅ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค..

2023. 6. 29. 22:20
BackEnd๐Ÿ/Java๐ŸŽฑ

[Java] ๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด - (1) ํด๋ž˜์Šค, ๊ฐ์ฒด, ์ธ์Šคํ„ด์Šค

| ๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด ๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด๋Š” ๊ธฐ์กด์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•œ ํ˜•ํƒœ์˜ ์–ธ์–ด์ด๋‹ค. ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๋‹ค. ์ฝ”๋“œ์˜ ๊ด€๋ฆฌ๊ฐ€ ํŽธํ•˜๋‹ค. ์‹ ๋ขฐ์„ฑ์ด ๋†’์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. | ํด๋ž˜์Šค์™€ ๊ฐ์ฒด ํด๋ž˜์Šค, ๊ฐ์ฒด, ์ธ์Šคํ„ด์Šค โ–ทํด๋ž˜์Šค: ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•ด๋†“์€ ๊ฒƒ -> ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. โ–ท๊ฐ์ฒด: ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ โ–ทํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šคํ™”: ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ • --> ์–ด๋– ํ•œ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋ฅผ ๊ทธ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ผ๊ณ  ํ•œ๋‹ค. ex) ํด๋ž˜์Šค๊ฐ€ ์ฑ…์ƒ ์„ค๊ณ„๋„๋ผ๋ฉด, ๊ฐ์ฒด๋Š” ์ฑ…์ƒ์ด๋‹ค. ์ฑ…์ƒ์€ ์ฑ…์ƒ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ด๋‹ค. ํด๋ž˜์Šค์˜ ๋˜ ๋‹ค๋ฅธ ์ •์˜ ํด๋ž˜์Šค๋Š” ๋ฐ์ดํ„ฐ์™€ ํ•จ์ˆ˜์˜ ๊ฒฐํ•ฉ์ด๋‹ค. ํด๋ž˜์Šค๋Š” ์‚ฌ์šฉ์ž์ •์˜ ํƒ€์ž…์ด๋‹ค. ๊ฐ์ฒด์˜ ๊ตฌ์„ฑ์š”์†Œ (๊ฐ์ฒด → iv(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜) ๋ฌถ์Œ) ๊ฐ์ฒด๋Š”..

2023. 6. 29. 22:14
BackEnd๐Ÿ/Laravel

[Laravel] php ์„ค์น˜๋ถ€ํ„ฐ Laravel ๊ธฐ๋ณธ ์„ธํŒ… ์„ค์น˜ (Mac M2)

Intro ๋ผ๋ผ๋ฒจ์„ ์„ค์น˜ํ•˜๋Š”๋ฐ ๋Œ€๋ถ€๋ถ„ window์— ๊ด€ํ•œ ์„ค๋ช…์ด ์žˆ๊ณ , ๋งฅ๋ถ์— ๊ด€ํ•œ ์„ค๋ช…์ด ๋งŽ์ด ์—†์—ˆ๋‹ค. ์‹ฌ์ง€์–ด Homebrew๋กœ ์„ค์น˜๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ์ •๋ง ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ธฐ์— ์ด๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•ด ํฌ์ŠคํŒ…์„ ํ•œ๋‹ค. php ๋ฐ Valet ์„ค์น˜ํ•˜๊ธฐ Valet(์ดํ•˜ ๋ฐœ๋ ›)์€ Mac์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ๋ผ๋ฒจ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ถ”๊ฐ€ ์„ค์ •์ด๋‚˜ ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. hosts ํŒŒ์ผ์„ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ๊ฐ€๋ณ๊ณ  ์œ ์—ฐํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ์„ ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ๋ผ๋ฒจ๋ฟ๋งŒ ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ฐœ๋ ›์€ brew ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ์ „์— composer๋„ ๋ฏธ๋ฆฌ ์„ค์น˜๊ฐ€ ๋˜์–ด์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ™ˆ๋ธŒ๋ฃจ๋ฅผ ์„ค์น˜ํ•˜์…จ๊ฑฐ๋‚˜ ์›๋ž˜ ์žˆ์œผ์‹œ๋‹ค๋ฉด ๋จผ์ € ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์ค..

2023. 6. 21. 22:25
BackEnd๐Ÿ/Java๐ŸŽฑ

[Java] intellij 404 ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

Java ํŒŒ์ผ์„ ๋ฐ›๊ณ  ์ฒ˜์Œ Tomcat ์„œ๋ฒ„๋กœ ์‹คํ–‰์„ ํ•˜๋‹ˆ ํ•ด๋‹น ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚ฌ๋‹ค.. ํ•ด๋‹น ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ๊ฐ€์ง€๋กœ ์ฐพ์•„ ๋ณด์•˜๋Š”๋ฐ, ์ด์ „์— ํšŒ์‚ฌ์—์„œ๋„ ๋ฐœ๊ฒฌํ–ˆ์—ˆ๋˜ ์˜ค๋ฅ˜์˜€๋‹ค, 404์˜ค๋ฅ˜ ์ž์ฒด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ดํŠธ์—์„œ ์กด์žฌํ•˜์ง€ ์•Š๋Š” URL์„ ํƒ์ƒ‰ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๋ณธ๋‹ค. ํ•ด๋‹น ์›์ธ์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ, ๊ทธ์ค‘ ๋‚˜์—๊ฒŒ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๋Š” Application context ๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์ •๋˜์–ด์žˆ์ง€ ์•Š์•˜๋˜ ์˜ค๋ฅ˜์˜€๋‹ค. ๊ทธ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ณผ์ •์„ ๊ธฐ๋กํ•ด๋ณด์•˜๋‹ค. ์„œ๋ฒ„ ์„ค์ •์—์„œ Delpoyment ์—์„œ Application context์— /warexploded ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹จ์–ด๊ฐ€ ์ ํ˜€์žˆ์„ ํ™•๋ฅ ์ด ์žˆ๋Š”๋ฐ, ํ•ด๋‹น ๋ถ€๋ถ„์„ / ๋กœ ์ˆ˜์ •์„ ํ•˜๋ฉด ์‹คํ–‰์ด ๋˜๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

2023. 6. 11. 17:32
โ—€ PREV [1] [2] [3] NEXT โ–ถ