๐ฅ๏ธ ๋ฐฑ์๋/SpringBoot22 ์ด์ 1 2 3 4 ๋ค์ [์ค์ ] ๊น์ํ 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. ์ด์ 1 2 3 4 ๋ค์