김영한(인프런 강의)
-
데이터 중심 테이블 설계와 객체 중심의 테이블 설계김영한(인프런 강의) 2021. 3. 10. 23:07
개발자와 이야기 도중에 데이터 중심 테이블 설계와 객체 중심의 테이블 설계에 대해 질문이 있어 대답은 했는데 한마디로 개소리를 대답한것 같다. 챙피함.. 그래서 혼자 고민하고 있다가 도저히 결론이 안나서 김영한 님에게 질문을 하였고, 이에 따른 답변이 오게 되었다. 아래와 같이 매우 친절하게 답변을 주셨는데.. 한마디로 설계를 할 때 어느 관점으로 보고 설계를 하는 것이었다... 음 하 얼굴 빨개지네 어제 생각하면 할수록 어쨌든 좋은 답변 감사합니다.!
-
스프링 데이터 JPA김영한(인프런 강의)/실전! 스프링 데이터 JPA 2021. 2. 15. 11:58
코드 github.com/rlawls1991/Study_practice_RestAPI 스프링 데이터 JPA 전 강의를 보게 된다면 Repository를 직접 상황에 맞게 구현을 해야 한다. 하지만 스프링 JPA는 이와같은 역할을 대신해준다. 어떤식으로 대신해줄까 한번 알아보자 스프링 데이터 JPA 스프링 데이터 JPA 코드 아래는 기본적인 스프링 JPA DATA의 코드이다. 코드를 보게 된다면 JpaRepository 인터페이스를 상속받았다. 하지만 구현체가 없는데 어떤식으로 동작이 될까? import com.jpa.practice.domain.entity.Member; import org.springframework.data.jpa.repository.JpaRepository; public interf..
-
QueryDSL 소개김영한(인프런 강의)/실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 2021. 2. 9. 18:06
www.querydsl.com/ 코드 github.com/rlawls1991/Study_JPA_API QueryDSL 사용이유 Querydsl은 SQL(JPQL)과 모양이 유사하면서 자바 코드로 동적 쿼리를 편리하게 생성할 수 있다. 실무에서는 복잡한 동적 쿼리를 많이 사용하게 되는데, 이때 Querydsl을 사용하면 높은 개발 생산성을 얻으면서 동시에 쿼리 오류를 컴파일 시점에 빠르게 잡을 수 있다. 꼭 동적 쿼리가 아니라 정적 쿼리인 경우에도 다음과 같은 이유로 Querydsl을 사용하는 것이 좋다. 장점 직관적인 문법 컴파일 시점에 빠른 문법 오류 발견 코드 자동완성 코드 재사용(이것은 자바다) JPQL new 명령어와는 비교가 안될 정도로 깔끔한 DTO 조회를 지원한다 사용예시 public Lis..
-
OSIV와 성능 최적화김영한(인프런 강의)/실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 2021. 2. 9. 18:04
OSIV Open Session In View 하이버네이트 Open EntityManager In View JPA (관례상 OSIV라 한다.) OSIV ON (OSIV 사용) spring.jpa.open-in-view=true JPA를 의존성 추가하고 어플리케이션(WAS)를 시작할 때 WARN으로 뿌리는 이유가 뭘까? 바로 영속성 컨텍스트(1차캐시)에 관한 것이다. OSIV 전략은 트랜잭션 시작처럼 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때 까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지한다. 그래서 지금까지 View Template이나 API 컨트롤러에서 지연 로딩이 가능했던 것이다. 지연로딩이라는 영속성 컨텍스트가 살아있어야 가능하고, 영속성 컨텍스트는 기본적으로 데이터베이스 커..
-
API 개발 고급 - 컬렉션 조회 최적화김영한(인프런 강의)/실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 2021. 2. 7. 15:48
코드 github.com/rlawls1991/Study_JPA_API 페치 조인 최적화 2021/02/06 - [김영한(인프런 강의)/실전! 스프링 부트와 JPA 활용 2 - API 개발과 성능 최적화] - API 개발과 성능 최적화 위 글을 보게 되면 엔티티가 직접 노출 되면 안 좋은지에 대해서 나오게 된다. LIst를 조회하게 되면 하위 엔티티까지 같이 조회하게 되어서 쿼리가 1+ N이 나오게된다. 이를 방지하기 위해서 페치 조인과 JPQL문을 사용해야 한다는 것을 알게 되었다. 그리고 파라미터가 나오게 된다면 criteria과 JPQL을 사용해야 되는 것까지 알게 되었다. 그렇다면 페치 조인의 장점과 문제점을 알아보자 패치조인 예제 public List findAllWithItem() { retur..
-
API 개발과 성능 최적화김영한(인프런 강의)/실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 2021. 2. 6. 13:57
코드 github.com/rlawls1991/Study_JPA_API 지연 로딩의 문제점 버전코드 github.com/rlawls1991/Study_JPA_API/commit/61b3534a503114dc6554cbf6433de3e4c1b2ddff 아래 컨트롤러를 보자 이 코드는 모든 주문들의 List을 가져오는 Controller API이다. @RestController @RequiredArgsConstructor public class OrderSimpleApiController { private final OrderRepository orderRepository; /** * V1. 엔티티 직접 노출 * - Hibernate5Module 모듈 등록, LAZY=null 처리 * - 양방향 관계 문제 발..
-
웹 애플리케이션 개발김영한(인프런 강의)/실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 2021. 2. 3. 11:43
예시 코드 github.com/rlawls1991/Study_JPA_Web_Application 목차 1. 요구사항 분석 2. 도메인 모델과 테이블 설계 3. 엔티티 클래스 4. 엔티티 설계시 주의점 1. 요구사항 분석 1-1. 최종 개발 화면 1-2. 기능 목록 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 수정 상품 조회 주문 기능 상품 주문 주문 내역 조회 주문 취소 기타 요구사항 상품은 재고 관리가 필요하다. 상품의 종류는 도서, 음반, 영화가 있다. 상품을 카테고리로 구분할 수 있다. 상품 주문시 배송 정보를 입력할 수 있다 2. 도메인 모델과 테이블 설계 회원, 주문, 상품의 관계 회원은 여러 상품을 주문할 수 있다. 그리고 한 번 주문할 때 여러 상품을 선택할 수 있으므로 주문과..