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

๐Ÿ–ฅ๏ธ ๋ฐฑ์—”๋“œ/SpringBoot22

[์„ค์ •] ๊น€์˜ํ•œ SpringBoot JPA ๊ฐ•์˜ ํ”„๋กœ์ ํŠธ 3.X.X ์„ค์น˜ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ https://start.spring.io/ ์ƒ์„ฑ ํ”„๋กœ์ ํŠธ ์˜ค๋ฅ˜๋กœ ์‹คํ–‰ ๋ถˆ๊ฐ€ ๊ฐ•์˜์— ๋‚˜์˜จ ๋‚ด์šฉ๋Œ€๋กœ https://start.spring.io/ ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  IDE์—์„œ ์˜คํ”ˆํ–ˆ์ง€๋งŒ Gradle๊ณผ Java๋ฒ„์ „์ด ์•ˆ๋งž๋Š”๋‹ค๋Š” ์˜ค๋ฅ˜๋กœ ์‹คํ–‰์กฐ์ฐจ ์•ˆ๋จ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ๋”๋ณด๊ธฐ A problem occurred configuring root project 'datastudy'. > Could not resolve all files for configuration ':classpath'. > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.1.6. Required by: project : > org.springframework.boot:o.. 2023. 12. 17.
[์„ค์ •] SpringBoot + MyBatis + Oracle + JSP ์—ฐ๋™ ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ์„ค์ • ์ •๋ณด SpringBoot๋Š” ์ฃผ๋กœ JPA์™€ Thymeleaf๋ฅผ ํŒŒํŠธ๋„ˆ๋กœ ์‚ผ์•„ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋„๋ฆฌ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ์ˆ ์˜ ์„ธ๊ณ„์—์„œ๋Š” ์–ธ์ œ๋‚˜ ์˜ˆ์™ธ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค..... ๋ณธ ๊ธ€์—์„œ๋Š” SpringBoot๋ฅผ MyBatis์™€ Oracle DB์— ์—ฐ๊ฒฐํ•˜๊ณ , JSP๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ทฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ณผ์ •์— ํ•„์š”ํ•œ ์„ค์ •๋“ค์— ๋Œ€ํ•ด ๊ธฐ๋กํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์€ ์ธํ…”๋ฆฌ์ œ์ด์™€ ์œˆ๋„์šฐ์ด๋ฉฐ, ๊ฒŒ์‹œํŒ์˜ ๊ธ€๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๊นŒ์ง€์˜ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง๋ถ€ํŠธ 2.X.X ๋ฒ„์ „, ์ž๋ฐ” 11 ๋“ฑ ๋‚ฎ์€ ๋ฒ„์ „์ผ ๋•Œ์˜ ์„ค์ •์ž…๋‹ˆ๋‹ค. ์ค€๋น„๋ฌผ: SpringBoot ํ”„๋กœ์ ํŠธ ์ด ๊ธ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” build.gradle ์ž…๋‹ˆ๋‹ค. plugins { id 'org.springframework.boot' version '2.4.1' //์Šคํ”„๋ง๋ถ€ํŠธ 2.X... 2023. 12. 11.
[Querydsl] Querydsl ์‚ฌ์šฉ์„ ์œ„ํ•œ ์ค€๋น„ Query DSL์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด QOrder, QMember.. ์™€ ๊ฐ™์€ query order query ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ์ค˜์•ผํ•จ ์Šคํ”„๋ง๋ถ€ํŠธ 3.X.X ์ž…๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ build.gradle //Querydsl ์ถ”๊ฐ€ ๋นŒ๋“œ ๊ณผ์ •์†์— Qdsl์„ ๋„ฃ์€ ๊ฒƒ implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProces.. 2023. 11. 30.
[API] REST API ํ…Œ์ŠคํŒ… ๋„๊ตฌ Talend API Tester REST API ํ…Œ์ŠคํŠธ์— ์œ ์šฉํ•œ Chrome ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ Talend API Tester [์„ค์น˜๋ฐฉ๋ฒ•] 1. Chrome์›น์Šคํ† ์–ด ๋ฐฉ๋ฌธ 2. Talend API Tester ๊ฒ€์ƒ‰ ๋ฐ ์„ค์น˜ 3. ๋น ๋ฅธ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ณ ์ • 4. ๊ถŒํ•œ ๋ถ€์—ฌ ํ—ค๋” ์ „์†ก ๋“ฑ ๋‹ค์–‘ํ•œ ์ž‘์—… ๊ฐ€๋Šฅํ•จ 2023. 11. 29.
[API] API ๊ณ ๊ธ‰ ์„ค๊ณ„ - ์ง€์—ฐ ๋กœ๋”ฉ๊ณผ ์กฐํšŒ ์„ฑ๋Šฅ ์ตœ์ ํ™” โŒ ์—”ํ‹ฐํ‹ฐ ์ง์ ‘ ๋…ธ์ถœ @GetMapping("/api/v1/orders") public List ordersV1() { List all = orderRepository.findAll(); for (Order order : all) { order.getMember().getName(); //Lazy ๊ฐ•์ œ ์ดˆ๊ธฐํ™” order.getDelivery().getAddress(); //Lazy ๊ฐ•์ œ ์ดˆ๊ธฐํ™” List orderItems = order.getOrderItems(); orderItems.stream().forEach(o -> o.getItem().getName()); //Lazy ๊ฐ•์ œ ์ดˆ๊ธฐํ™” } return all; } order member ์™€ order address ๋Š” ์ง€์—ฐ ๋กœ๋”ฉ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ ์—”.. 2023. 11. 28.
[JPA] ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด - ์ค‘๊ธ‰ ๋ฌธ๋ฒ•(2) JPQL - ํŽ˜์น˜ ์กฐ์ธ(fetch join) ์‹ค๋ฌด์—์„œ ์ •๋ง์ •๋ง ์ค‘์š”ํ•จ ํŽ˜์น˜ ์กฐ์ธ(fetch join) SQL ์กฐ์ธ ์ข…๋ฅ˜X JPQL์—์„œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋‚˜ ์ปฌ๋ ‰์…˜์„ SQL ํ•œ ๋ฒˆ์— ํ•จ๊ป˜ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ join fetch ๋ช…๋ น์–ด ์‚ฌ์šฉ ํŽ˜์น˜ ์กฐ์ธ ::= [ LEFT [OUTER] | INNER ] JOIN FETCH ์กฐ์ธ๊ฒฝ๋กœ ์—”ํ‹ฐํ‹ฐ ํŽ˜์น˜ ์กฐ์ธ ํšŒ์›์„ ์กฐํšŒํ•˜๋ฉด์„œ ์—ฐ๊ด€๋œ ํŒ€๋„ ํ•จ๊ป˜ ์กฐํšŒ(SQL ํ•œ ๋ฒˆ์—) SQL์„ ๋ณด๋ฉด ํšŒ์› ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŒ€(T.*)๋„ ํ•จ๊ป˜ SELECT [JPQL] select m from Member m join fetch m.team select์ ˆ์— m๋งŒ ๋ช…์‹œํ•จ join fetch ๊ตฌ๋ฌธ ์‚ฌ์šฉ [SQL] SELECT M.*, T.* FROM MEMBER M INNER.. 2023. 11. 27.
[JPA] ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด - ์ค‘๊ธ‰ ๋ฌธ๋ฒ•(1) ๊ฒฝ๋กœ ํ‘œํ˜„์‹ .(์ )์„ ์ฐ์–ด ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ select m.username -> ์ƒํƒœ ํ•„๋“œ from Member m join m.team t -> ๋‹จ์ผ ๊ฐ’ ์—ฐ๊ด€ ํ•„๋“œ join m.orders o -> ์ปฌ๋ ‰์…˜ ๊ฐ’ ์—ฐ๊ด€ ํ•„๋“œ where t.name = 'ํŒ€A' ๋‚ด๋ถ€์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹ ๊ตฌ๋ถ„ ์ƒํƒœํ•„๋“œ ๋‹จ์ผ ๊ฐ’ ์—ฐ๊ด€ํ•„๋“œ ์ปฌ๋ ‰์…˜ ๊ฐ’ ์—ฐ๊ด€ํ•„๋“œ ๊ฒฝ๋กœ ํ‘œํ˜„์‹ ์šฉ์–ด ์ •๋ฆฌ ๋ฐ ์„ค๋ช… ์ƒํƒœ ํ•„๋“œ(state field) ๋‹จ์ˆœํžˆ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ํ•„๋“œ (ex: m.username) ๊ฒฝ๋กœ ํƒ์ƒ‰์˜ ๋, ํƒ์ƒ‰X #๋‹จ์ผ ๊ฐ’ ์—ฐ๊ด€ ๊ฒฝ๋กœ ํƒ์ƒ‰ [JPQL] select o.member from Order o; [SQL] select m.* from Orders o inner join Member m on o.member_id .. 2023. 11. 26.