[Spring boot] ์Šคํ”„๋ง ๋ถ€ํŠธ 3.0 QDomain์ด ์—†์„ ๊ฒฝ์šฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

[Spring boot] ์Šคํ”„๋ง ๋ถ€ํŠธ 3.0 QDomain์ด ์—†์„ ๊ฒฝ์šฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์Šคํ”„๋ง ๋ถ€ํŠธ 3.0 ์ด์ƒ์—์„œ๋Š” compileQuerydsl์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ, Querydsl์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” QDomain์ด ํ•„์š”ํ•˜๋‹ค. ์ด๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด build.gradle์—์„œ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ , Gradle > Tasks > other > compileJava๋ฅผ ์‹คํ–‰ํ•˜์—ฌ QDomain์ด ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
DriedPollack's avatar
May 16, 2024
โ—Error๐ŸŒผSpring
[Spring boot] defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar ์—๋Ÿฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

[Spring boot] defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar ์—๋Ÿฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‹คํ–‰ ์‹œ 'bean ์ด๋ฆ„' ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ, ์ด๋Š” 'build.gradle' ๋˜๋Š” 'pom.xml' ํŒŒ์ผ์—์„œ 'Spring Data JPA'์™€ 'Spring Data JDBC'๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋นŒ๋“œ ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ 'Spring Data JPA' ์™ธ์˜ ๋‹ค๋ฅธ 'Spring Data XXX'์™€ ๊ฐ™์€ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜๋ฉด ๋œ๋‹ค.
DriedPollack's avatar
May 13, 2024
โ—Error๐ŸŒผSpring
[์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA] 7์žฅ ์ •๋ฆฌ

[์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA] 7์žฅ ์ •๋ฆฌ

์ฃผ๋ฌธ ๊ธฐ๋Šฅ ๊ตฌํ˜„์—๋Š” ์ƒํ’ˆ ์žฌ๊ณ  ๊ด€๋ฆฌ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๋ฉ”์†Œ๋“œํ™”, ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„ ์„ค์ •, ์ฃผ๋ฌธ ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ, ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ๊ฒ€์‚ฌ, ๋กœ๊ทธ์ธ ์œ ์ € ์ •๋ณด ์ ‘๊ทผ, Ajax๋ฅผ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ์ฃผ๋ฌธ ๋กœ์ง ํ˜ธ์ถœ, CSRF ํ† ํฐ ๊ฐ’ ์กฐํšŒ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋ฌธ ์ด๋ ฅ ์กฐํšŒ๋Š” ์ฃผ๋ฌธ ์ƒํ’ˆ ์ •๋ณด ๋ฐ ์ฃผ๋ฌธ ์ •๋ณด ํด๋ž˜์Šค ์ƒ์„ฑ, ์ฃผ๋ฌธ ์ด๋ ฅ ์กฐํšŒ ์ฟผ๋ฆฌ ์ž‘์„ฑ, ์ฃผ๋ฌธ ๋ชฉ๋ก ์กฐํšŒ ๋กœ์ง ๊ตฌํ˜„, ์ฃผ๋ฌธ ๋ชฉ๋ก ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜ ๋“ฑ์„ ํฌํ•จํ•˜๋ฉฐ, ์ฃผ๋ฌธ ์ทจ์†Œ ๊ธฐ๋Šฅ์€ ์ƒํ’ˆ ์žฌ๊ณ  ์ฆ๊ฐ€ ๋ฉ”์†Œ๋“œ, ์ฃผ๋ฌธ ์ทจ์†Œ ์‹œ ์žฌ๊ณ  ์ฆ๊ฐ€ ๋ฉ”์†Œ๋“œ, ์ฃผ๋ฌธ ์ทจ์†Œ ๋กœ์ง, ์ฃผ๋ฌธ ์ทจ์†Œ ๊ถŒํ•œ ๊ฒ€์‚ฌ ๋“ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
DriedPollack's avatar
Apr 08, 2024
๐ŸŒผSpring
[์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA] 8์žฅ ์ •๋ฆฌ

[์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA] 8์žฅ ์ •๋ฆฌ

์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ ๊ตฌํ˜„์—๋Š” ์ƒํ’ˆ ์•„์ด๋””์™€ ์ˆ˜๋Ÿ‰์„ ์ „๋‹ฌ๋ฐ›๋Š” DTO ๊ตฌํ˜„, ํšŒ์› ๋ณ„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ƒ์„ฑ, ์ƒํ’ˆ ์ถ”๊ฐ€ ๋ฐ ์ˆ˜๋Ÿ‰ ์ฆ๊ฐ€ ๋ฉ”์†Œ๋“œ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฐ ์ƒํ’ˆ ์กฐํšŒ, ์ƒํ’ˆ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ ๋กœ์ง ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์กฐํšŒ ํŽ˜์ด์ง€๋Š” DTO ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ƒํ’ˆ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ƒํ’ˆ ์‚ญ์ œ๋Š” ์„œ๋น„์Šค ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค์— ์š”์ฒญ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ƒํ’ˆ ์ฃผ๋ฌธ์€ ์ฃผ๋ฌธํ•  ์ƒํ’ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ์ฃผ๋ฌธ์„ ์ƒ์„ฑํ•˜๊ณ , ์ฃผ๋ฌธํ•œ ์ƒํ’ˆ์€ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
DriedPollack's avatar
Apr 08, 2024
๐ŸŒผSpring
[์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA] 6์žฅ ์ •๋ฆฌ

[์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA] 6์žฅ ์ •๋ฆฌ

์ƒํ’ˆ ๋“ฑ๋ก, ์ˆ˜์ •, ๊ด€๋ฆฌ, ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋ฐ ์ƒ์„ธ ํŽ˜์ด์ง€ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์ƒํ’ˆ ๋“ฑ๋ก ์‹œ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด ๋ณ€ํ™˜, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ, ํŒŒ์ผ ์ „์†ก, ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๊ฒฝ๋กœ ์„ค์ • ๋“ฑ์ด ์ค‘์š”ํ•˜๋ฉฐ, ์ˆ˜์ • ์‹œ ํŠธ๋žœ์žญ์…˜ ์ฝ๊ธฐ ์ „์šฉ ์„ค์ •, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ, ๋ณ€๊ฒฝ ๊ฐ์ง€ ๊ธฐ๋Šฅ ํ™œ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ƒํ’ˆ ๊ด€๋ฆฌ์—์„œ๋Š” ๋ณต์žกํ•œ ์กฐํšŒ ์กฐ๊ฑด์— Querydsl์„ ํ™œ์šฉํ•˜๋ฉฐ, ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ๋Š” @QueryProjection์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํ’ˆ ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ DTO ๊ฐ์ฒด๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ƒํ’ˆ ์ƒ์„ธ ํŽ˜์ด์ง€์—์„œ๋Š” th:each๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ๋ฌธ์„ ๋ฐ˜๋ณตํ•˜๊ณ , th:if๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์ด null์ด๊ฑฐ๋‚˜ ๋นˆ ๋ฌธ์ž์—ด์ผ ๋•Œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.
DriedPollack's avatar
Apr 05, 2024
๐ŸŒผSpring
[์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA] 5์žฅ ์ •๋ฆฌ

[์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA] 5์žฅ ์ •๋ฆฌ

์—”ํ‹ฐํ‹ฐ๋“ค์€ ๋Œ€๋ถ€๋ถ„ ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ์™€ ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ์œผ๋ฉฐ, JPA์—์„œ๋Š” ์ด๋ฅผ ๋งคํ•‘ํ•ด ํ•„์š”ํ•  ๋•Œ ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ์™€ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ์—ฐ๊ด€ ๋งคํ•‘์˜ ์ข…๋ฅ˜๋กœ๋Š” ์ผ๋Œ€์ผ, ์ผ๋Œ€๋‹ค, ๋‹ค๋Œ€์ผ, ๋‹ค๋Œ€๋‹ค๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๋‹จ๋ฐฉํ–ฅ ๋˜๋Š” ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜์†์„ฑ ์ „์ด๋Š” ์—”ํ‹ฐํ‹ฐ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ์™€ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์ „ํŒŒ์‹œํ‚ค๋Š” ์˜ต์…˜์ด๋‹ค. ์ผ๋Œ€์ผ, ๋‹ค๋Œ€์ผ๋กœ ๋งคํ•‘ํ•  ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์ „๋žต์ธ ์ฆ‰์‹œ ๋กœ๋”ฉ์„ ํ†ตํ•ด ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ง€๊ณ  ์˜ค์ง€๋งŒ, ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค์˜ ๊ฒฝ์šฐ ๋งคํ•‘๋˜๋Š” ์—”ํ‹ฐํ‹ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ๊ณ , ์ด ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋ ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ง€์—ฐ ๋กœ๋”ฉ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, Auditing ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ฉด ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ €์žฅ ๋˜๋Š” ์ˆ˜์ •๋  ๋•Œ ์ž๋™์œผ๋กœ ๋“ฑ๋ก์ผ, ์ˆ˜์ •์ผ, ๋“ฑ๋ก์ž, ์ˆ˜์ •์ž๋ฅผ ์ž…๋ ฅํ•ด์ค€๋‹ค.
DriedPollack's avatar
Apr 03, 2024
๐ŸŒผSpring
[์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA] 4์žฅ ์ •๋ฆฌ

[์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA] 4์žฅ ์ •๋ฆฌ

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” ์Šคํ”„๋ง ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋ฉฐ, ํšŒ์› ๊ฐ€์ž…, ๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ํŽ˜์ด์ง€ ๊ถŒํ•œ ์„ค์ •์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” ์ธ์ฆ๊ณผ ์ธ๊ฐ€ ๊ณผ์ •์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, `pom.xml`์— ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํšŒ์›์€ ์ด๋ฉ”์ผ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ, ๊ฐ ํšŒ์›์€ ์—ญํ• ์— ๋”ฐ๋ผ ํŽ˜์ด์ง€ ์ ‘๊ทผ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋œ๋‹ค. ๋˜ํ•œ, ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” CSRF ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  POST ๋ฐฉ์‹์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๋ณดํ˜ธํ•œ๋‹ค.
DriedPollack's avatar
Apr 02, 2024
๐ŸŒผSpring
[์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA] 3์žฅ ์ •๋ฆฌ

[์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA] 3์žฅ ์ •๋ฆฌ

Thymeleaf๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ํ†ตํ•ด ๋™์  HTML ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด๋‹ค. Thymeleaf ๋ฌธ๋ฒ•์€ HTML ํƒœ๊ทธ ์•ˆ์— ์†์„ฑ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. Spring Boot Devtools๋Š” ๊ฐœ๋ฐœ ์‹œ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ๋กœ, ํŒŒ์ผ ๋ณ€๊ฒฝ ์‹œ ์ž๋™ ์žฌ์‹œ์ž‘, ๋ผ์ด๋ธŒ ๋ฆฌ๋กœ๋“œ, ์†์„ฑ ๊ธฐ๋ณธ๊ฐ’ ๋“ฑ์„ ์ œ๊ณตํ•œ๋‹ค. Thymeleaf๋Š” ํ…์ŠคํŠธ ์ถœ๋ ฅ, ์ปฌ๋ ‰์…˜ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ, ์กฐ๊ฑด๋ถ€ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ, ์Šค์œ„์น˜๋ฌธ ์‚ฌ์šฉ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋˜ํ•œ, Thymeleaf Layout Dialect๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ์„ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
DriedPollack's avatar
Apr 01, 2024
๐ŸŒผSpring
[์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA] 2์žฅ ์ •๋ฆฌ

[์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with JPA] 2์žฅ ์ •๋ฆฌ

์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ด๋Š” 1์ฐจ ์บ์‹œ, ๋™์ผ์„ฑ ๋ณด์žฅ, ์“ฐ๊ธฐ ์ง€์—ฐ, ๋ณ€๊ฒฝ ๊ฐ์ง€ ๋“ฑ์˜ ์ด์ ์„ ์ œ๊ณตํ•œ๋‹ค. Spring Data JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋Š” @Query ์–ด๋…ธํ…Œ์ด์…˜๊ณผ JPQL์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ Querydsl์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ƒํ’ˆ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™” ์ „๋žต, ์—”ํ‹ฐํ‹ฐ ๋งค์นญ ๊ด€๋ จ ์–ด๋…ธํ…Œ์ด์…˜, ๊ธฐ๋ณธํ‚ค ์ƒ์„ฑ ์ „๋žต ๋“ฑ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์˜€๋‹ค.
DriedPollack's avatar
Mar 29, 2024
๐ŸŒผSpring
[์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ์ •ํŒ] 7์žฅ ์ •๋ฆฌ

[์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ์ •ํŒ] 7์žฅ ์ •๋ฆฌ

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์ด์šฉํ•ด ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ, ์ž๋™ ๋กœ๊ทธ์ธ, ์ธ์ฆ/๊ถŒํ•œ ์ฒ˜๋ฆฌ, JDBC ์ธ์ฆ/๊ถŒํ•œ ์ฒ˜๋ฆฌ, ์‚ฌ์šฉ์ž ์ •์˜ UserDetailsService, JSP์—์„œ์˜ ์‚ฌ์šฉ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” POST ๋ฐฉ์‹, JDBC, BCryptPasswordEncoder, CustomUserDetailsService, Ajax ๋“ฑ์„ ํ™œ์šฉํ•˜๋ฉฐ, ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์˜ ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋˜ํ•œ, ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” CSRF ํ† ํฐ ์ฒ˜๋ฆฌ์™€ ์•”ํ˜ธํ™” ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
DriedPollack's avatar
Mar 28, 2024
๐ŸŒผSpring
[์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ์ •ํŒ] 6์žฅ ์ •๋ฆฌ

[์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ์ •ํŒ] 6์žฅ ์ •๋ฆฌ

์ฒจ๋ถ€ํŒŒ์ผ ์—…๋กœ๋“œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒŒ์‹œ๋ฌผ์„ ๋“ฑ๋กํ•˜๊ธฐ ์ „์— ์—…๋กœ๋“œํ•œ ํŒŒ์ผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ์ฒจ๋ถ€ํŒŒ์ผ ์ฒ˜๋ฆฌ๋Š” ๋ณต์žกํ•˜๋ฉฐ, ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์˜ ์ดˆ๊ธฐํ™”, ์—…๋กœ๋“œ๋œ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ, ๋‹ค์šด๋กœ๋“œ, ์›๋ณธ ์ด๋ฏธ์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ, ์ฒจ๋ถ€ํŒŒ์ผ ์‚ญ์ œ ๋“ฑ์„ ํฌํ•จํ•œ๋‹ค. ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ • ์‹œ ์ฒจ๋ถ€ํŒŒ์ผ ์ฒ˜๋ฆฌ๋Š” ๊ธฐ์กด ํŒŒ์ผ ์‚ญ์ œ ๋ฐ ์ƒˆ ํŒŒ์ผ ์ถ”๊ฐ€๋ฅผ ํฌํ•จํ•œ๋‹ค. ์ž˜๋ชป ์—…๋กœ๋“œ๋œ ํŒŒ์ผ ์‚ญ์ œ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์ด๋Š” `Spring-Batch`๋‚˜ `Quartz` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
DriedPollack's avatar
Mar 26, 2024
๐ŸŒผSpring
[์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ์ •ํŒ] 5์žฅ ์ •๋ฆฌ

[์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ์ •ํŒ] 5์žฅ ์ •๋ฆฌ

๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(AOP)๋Š” ๊ฐœ๋ฐœ์ž๋“ค์˜ ๊ณ ๋ฏผ์„ ๋ณ„๋„์˜ '๊ด€์‹ฌ์‚ฌ'๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งŒ์„ ์ž‘์„ฑํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. AOP๋Š” ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ๋ฉ”์„œ๋“œ์˜ ์‹คํ–‰ ์‹œ๊ฐ„ ๊ธฐ๋ก, ์ž˜๋ชป๋œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ธํ•œ ์˜ˆ์™ธ ์ œ์–ด ๋“ฑ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. ๋˜ํ•œ, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค์—์„œ ์ชผ๊ฐœ์งˆ ์ˆ˜ ์—†๋Š” ํ•˜๋‚˜์˜ ๋‹จ์œ„ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ACID ์›์น™์„ ๋”ฐ๋ฅธ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„์—์„œ๋Š” ์ •๊ทœํ™”๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ €์žฅ์˜ ํšจ์œจ์„ ๋†’์ด๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ๋ฐ˜์ •๊ทœํ™”๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. ์Šคํ”„๋ง์—์„œ๋Š” @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ด ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
DriedPollack's avatar
Mar 21, 2024
๐ŸŒผSpring
[์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ์ •ํŒ] 4์žฅ ์ •๋ฆฌ

[์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ์ •ํŒ] 4์žฅ ์ •๋ฆฌ

REST ๋ฐฉ์‹์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์˜€์Šต๋‹ˆ๋‹ค. REST๋Š” URI๋ฅผ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋Œ€ํ‘œํ•˜๋ฉฐ, ์Šคํ”„๋ง์€ ์ด๋ฅผ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, REST ๋ฐฉ์‹์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์€ GET/POST ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, Ajax๋ฅผ ์ด์šฉํ•œ ๋Œ“๊ธ€ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•๊ณผ ์ด๋ฅผ ์œ„ํ•œ ์˜์† ์˜์—ญ ์„ค์ •, ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์™€ HTML ์ฒ˜๋ฆฌ, ๋Œ“๊ธ€์˜ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
DriedPollack's avatar
Mar 20, 2024
๐ŸŒผSpring
[์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ์ •ํŒ] 3์žฅ ์ •๋ฆฌ

[์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ์ •ํŒ] 3์žฅ ์ •๋ฆฌ

์Šคํ”„๋ง MVC๋ฅผ ์ด์šฉํ•œ ์›น ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํŽ˜์ด์ง€ ์„ค์ •, ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์„ค์ •, ๊ธฐ๋ณธ์ ์ธ ๋“ฑ๋ก, ์ˆ˜์ •, ์‚ญ์ œ, ์กฐํšŒ, ๋ชฉ๋ก ๊ตฌํ˜„, ๋ชฉ๋ก ํ™”๋ฉด์˜ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ, ๊ฒ€์ƒ‰ ์ฒ˜๋ฆฌ ๋ฐ ํŽ˜์ด์ง€ ์ด๋™ ๋“ฑ์˜ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ์™€ ํ•œ ํŽ˜์ด์ง€๋‹น ๋ณด์—ฌ์ค„ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, MyBatis๋Š” ๋™์  ํƒœ๊ทธ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด SQL์„ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐ๊ฑด์— ๋งž๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์€ ๋‹จ์ผ ํ•ญ๋ชฉ ๊ฒ€์ƒ‰๊ณผ ๋‹ค์ค‘ ํ•ญ๋ชฉ ๊ฒ€์ƒ‰์œผ๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ™”๋ฉด์—์„œ ๊ฒ€์ƒ‰์€ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ ์œ ์ง€, ๊ฒ€์ƒ‰ ์กฐ๊ฑด๊ณผ ํ‚ค์›Œ๋“œ ์œ ์ง€, ํ•œ๊ธ€ ์ฒ˜๋ฆฌ ๋“ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.
DriedPollack's avatar
Mar 18, 2024
๐ŸŒผSpring
[์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ์ •ํŒ] 2์žฅ ์ •๋ฆฌ

[์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ์›น ํ”„๋กœ์ ํŠธ ๊ฐœ์ •ํŒ] 2์žฅ ์ •๋ฆฌ

์Šคํ”„๋ง MVC ํ”„๋กœ์ ํŠธ๋Š” root-context.xml๊ณผ servlet-context.xml์„ ์—ฐ๋™ํ•˜์—ฌ ๊ตฌ๋™ํ•˜๋ฉฐ, ์›น ํ”„๋กœ์ ํŠธ๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค. ์Šคํ”„๋ง MVC์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” DispatcherServlet, HandlerMapping, HandlerAdapter, Controller, ViewResolver, View๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ์Šคํ”„๋ง MVC๋ฅผ ์ด์šฉํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋Š” HttpServletRequest, HttpServletResponse๋ฅผ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฉฐ, ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ์™€ ๋ฆฌํ„ด ํƒ€์ž… ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. @Controller ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์„ ์–ธํ•˜๊ณ , @RequestMapping์„ ํ†ตํ•ด URL ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•œ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” @RequestParam์„ ํ†ตํ•ด ์ˆ˜์ง‘ํ•˜๋ฉฐ, Model ๊ฐ์ฒด๋Š” JSP์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฆฌํ„ด ํƒ€์ž…์€ String, void, VO, DTO ํƒ€์ž…, ResponseEntity ํƒ€์ž…, Model, ModelAndView, HttpHeaders ๋“ฑ์ด ์žˆ๋‹ค. @ControllerAdvice์™€ @ExceptionHandler๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
DriedPollack's avatar
Mar 13, 2024
๐ŸŒผSpring

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ปDriedPollack's Blog