๐/Spring5 [JPA] ์ฆ์ ๋ก๋ฉ, ์ง์ฐ ๋ก๋ฉ | FetchType.EAGER, FetchType.LAZY ์ฆ์ ๋ก๋ฉ FetchType.EAGER ์ฐ๊ด๋ ์ํฐํฐ๋ฅผ ์ฆ์ ์กฐํํ๋ค. ํ์ด๋ฒ๋ค์ดํธ๋ ๊ฐ๋ฅํ๋ฉด SQL ์กฐ์ธ์ ์ฌ์ฉํด์ ํ ๋ฒ์ ์กฐํํ๋ค. ์ฆ์ ๋ก๋ฉ์ ์ฌ์ฉํ๋ ค๋ฉด @ManyToOne์ fecth ์์ฑ์ FetchType.EAGER๋ก ์ง์ ํ๋ค. @ManyToOne(fetch = FetchType.EAGER) JPA ๊ตฌํ์ฒด๋ ์ฆ์ ๋ก๋ฉ์ ์ต์ ํํ๊ธฐ ์ํด ๊ฐ๋ฅํ๋ฉด ์กฐ์ธ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค. ํ์ด๋ฒ๋ค์ดํธ๋ ๊ฐ๋ฅํ๋ฉด SQL ์กฐ์ธ์ ์ฌ์ฉํด์ ํ ๋ฒ์ ์กฐํํ๋ค. ์ฃผ์์ ์ปฌ๋ ์ ์ ํ๋ ์ด์ ์ฆ์ ๋ก๋ฉํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๋๋ค. ์ปฌ๋ ์ ๊ณผ ์กฐ์ธํ๋ค๋ ๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ๋ก ๋ณด๋ฉด ์ผ๋๋ค ์กฐ์ธ์ด๋ค. ์๋ฅผ๋ค์ด, A ํ ์ด๋ธ์ N, M ๋ ํ ์ด๋ธ๊ณผ ์ผ๋๋ค ์กฐ์ธํ๋ฉด SQL ์คํ ๊ฒฐ๊ณผ๊ฐ N*M์ด ๋๋ฉด์ ๋๋ฌด ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ์ ์.. 2021. 8. 31. [Spring] DI(Dependency Injection) ๊ฐ๋ DI๋ Dependency Injection ์์กด๊ด๊ณ ์ฃผ์ ์ด๋ผ๋ ๋ป์ผ๋ก ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ํต์ฉ๋๋ ๊ฐ๋ ์ด๋ค. '๊ฐ์ฒด๋ฅผ ์ฃผ์ ๋ฐ๋๋ค'๋ ๊ฒ์ ์ธ๋ถ์์ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋๊ฒจ๋ฐ๋ ๊ฒ์ด๋ค. ๊ฐ์ฒด๋ฅผ ์ค์ค๋ก ๋ง๋๋ ๊ฒ์ด ์๋๋ผ ์ ์ด๊ถ์ (์คํ๋ง์) ์์ํ์ฌ (์คํ๋ง์ด) ๋ง๋ค์ด ๋์ ๊ฐ์ฒด๋ฅผ ๋๊ฒจ ๋ฐ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๊ณ , ๋ฐํ์์์ ์์กด๊ด๊ณ๊ฐ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ์ ์ฐํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค. SOLID ์์น์์ O ์ ํด๋นํ๋ Open Closed Principle ์ ์งํค๊ธฐ ์ํด์ ๋์์ธ ํจํด ์ค ์ ๋ตํจํด์ ์ฌ์ฉํ๊ฒ ๋๋๋ฐ, ์์ฑ์ ์ฃผ์ ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ ๋ตํจํด์ ์ฌ์ฉํ๊ฒ ๋๋ค. OCP : ๊ฐ๋ฐฉ ํ์ ์์น ํ์ฅ์๋ ์ด๋ ค์๊ณ , ์์ ์๋ ๋ซํ์์ด์ผ ํ๋ค. ์์กด๊ด๊ณ ์ฃผ์ ์๋ ํฌ๊ฒ .. 2021. 5. 2. [Spring] PSA (Portable Service Abstraction) ์คํ๋ง 3๋ ํน์ง(IoC/DI, AOP, PSA) ์ค PSA์ ์์๋ณธ๋ค. ๊ฐ๋ PSA๋ Portable Service Abstraction์ผ๋ก ์ผ๊ด์ฑ ์๋ ์๋น์ค ์ถ์ํ์ด๋ค. ์ด๋ํฐ ํจํด์ ์ ์ฉํด ๊ฐ์ ์ผ์ ํ๋ ๋ค์์ ๊ธฐ์ ์ ๊ณตํต์ ์ธํฐํ์ด์ค๋ก ์ ์ดํ ์ ์๊ฒ ํ ๊ฒ์ ์๋น์ค ์ถ์ํ๋ผ๊ณ ํ๋ค. ์ถ์ํ ๊ณ์ธต์ ์ฌ์ฉํด์ ์ด๋ค ๊ธฐ์ ์ ๋ด๋ถ์ ์จ๊ธฐ๊ณ ๊ฐ๋ฐ์์๊ฒ ํธ์์ฑ์ ์ ๊ณตํด์ฃผ๋ ๊ฒ์ ์๋น์ค ์ถ์ํ(Service Abstraction)์ด๋ผ ํ๋ค. ์๋น์ค ์ถ์ํ(Service Abstraction)๋ก ์ ๊ณต๋๋ ๊ธฐ์ ์ ๋ค๋ฅธ ๊ธฐ์ ์คํ์ผ๋ก ๊ฐํธํ๊ฒ ๋ฐ๊ฟ ์ ์๋ ํ์ฅ์ฑ์ ๊ฐ๊ณ ์๋ ๊ฒ์ด Portable Service Abstraction์ด๋ค. Spring์ Spring Web MVC, Spring Transacti.. 2021. 5. 2. [Spring] AOP ๊ฐ๋ AOP(Aspect Oriented Programming) ์ ์ฝ์๋ก ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค. ๊ด์ ์งํฅ์ ์ฝ๊ฒ ๋งํด ์ด๋ค ๋ก์ง์ ๊ธฐ์ค์ผ๋ก ํต์ฌ์ ์ธ ๊ด์ , ๋ถ๊ฐ์ ์ธ ๊ด์ ์ผ๋ก ๋๋์ด์ ๋ณด๊ณ ๊ทธ ๊ด์ ์ ๊ธฐ์ค์ผ๋ก ๊ฐ๊ฐ ๋ชจ๋ํํ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ๋ชจ๋ํ๋ ์ด๋ค ๊ณตํต๋ ๋ก์ง์ด๋ ๊ธฐ๋ฅ์ ํ๋์ ๋จ์๋ก ๋ฌถ๋ ๊ฒ์ ๋งํ๋ค. ๋ชจ๋ํ๋ฅผ ํตํด ํต์ฌ์ ์ธ ๊ธฐ๋ฅ์์ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ๋ค. ๋ถ๋ฆฌํ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ ์คํํธ(Aspect)๋ผ๋ ๋ ํนํ ๋ชจ๋ ํํ๋ก ๋ง๋ค์ด์ ์ค๊ณํ๊ณ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ ํต์ฌ๊ธฐ๋ฅ์์ ๋ถ๊ฐ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํด์ Aspectํํ๋ก ๋ชจ๋ํํ๋ ๊ฒ ํต์ฌ๊ธฐ๋ฅ : ์ ๋ฌด ๋ก์ง์ ํฌํจํ๋ ๊ธฐ๋ฅ์ ํต์ฌ๊ธฐ๋ฅ(Core Concerns) ๋ถ๊ฐ๊ธฐ๋ฅ : ํต์ฌ๊ธฐ๋ฅ์ ๋์์ฃผ๋ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ(๋ก๊น , ๋ณด์ ๋ฑ)์ ๋ถ๊ฐ๊ธฐ๋ฅ(Cross-c.. 2021. 4. 18. [Spring] Pageable ๋ค์ค Sorting | PageableDefault | Pagination SQL์ Pageable์ ์ด์ฉํ์ฌ ๋ํ๋ด๊ธฐ select * from luvket.luvkets order by status desc, created_at desc limit 0, 25; ์์ ๊ฐ์ SQL๋ฌธ์ Spring ์์ Pageable์ ์ด์ฉํ์ฌ ํํํ๋ค๋ฉด ์ด๋ ๊ฒ ๋ํ๋ผ ์ ์์ต๋๋ค. 1 2 3 4 5 6 7 8 9 @GetMapping("") public LuvketResponse search(@PageableDefault(size = 25) @SortDefault.SortDefaults({ @SortDefault(sort = "status", direction = Sort.Direction.DESC), @SortDefault(sort = "createdAt", direction = Sort.D.. 2020. 1. 9. ์ด์ 1 ๋ค์