Courses(57)
-
프로젝트 환경 설정 / 예제 도메인 모델
프로젝트 환경 설정 build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.1.0' id 'io.spring.dependency-management' version '1.1.0' } group = 'study' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter..
2023.09.29 -
실무 필수 최적화
OSIV와 성능 최적화 Open Session in View : 하이버네이트 Open EntityManager In View : JPA 관례상 OSIV라함 OSIV ON spring.jpa.open-in-view : true -> 기본값 애플리케이션 시작 시점에 warn 로그 남김 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지 OSIV 때문에 View Template이나 API 컨트롤러에서 지연 로딩이 가능 지연 로딩은 영속성 컨텍스트가 살아있어야 가능하고, 영속성 컨텍스트는 기본적으로 데이터베이스 커넥션을 유지 너무 오랜시간동안 데이터베이스 커넥션 리소스를 사용하기 때문에 실시간 트래픽이 중요한 애플리케이션에서는 커넥션이 모자랄 수 있음 ..
2023.09.29 -
컬렉션 조회 최적화
주문 조회 V1 : 엔티티 직접 노출 https://github.com/dpdms529/JpaShop/commit/3971dc6b9dc468984b367f0e171eba544a1f778f 주문 조회 V2 : 엔티티를 DTO로 변환 https://github.com/dpdms529/JpaShop/commit/105d4ee3a72114529e7eb4e048f9e746e5d335c8 지연 로딩으로 너무 많은 SQL 실행 주문 조회 V3 : 엔티티를 DTO로 변환 - 페치 조인 최적화 https://github.com/dpdms529/JpaShop/commit/203db80c6a987b83bcfc739a19dc0a0dddda80b1 fetch join으로 SQL이 1번만 실행됨 일대다 조인으로 다를 기준으로 r..
2023.09.29 -
지연 로딩과 조회 성능 최적화
간단한 주문 조회 V1 : 엔티티를 직접 노출 https://github.com/dpdms529/JpaShop/commit/dd799b8549ce171d4103b883109271c2f0c286cd 양방향 연관 관계로 설정한 클래스 한 쪽을 @JsonIgnore로 가져오지 않도록 한다. 설정하지 않으면 서로 호출하기 때문에 무한 루프에 빠져 오류 발생 지연 로딩 설정을 한 경우 하이버네이트가 실제 객체 대신에 ByteBuddyInterceptor를 사용하여 프록시 객체를 넣어둠 Jackson 라이브러리가 json 결과를 만드는데 초기화되지 않은 프록시 객체가 들어있으면 오류 발생 Hibernate5JakartaModule 등록 기본적으로 초기화 된 프록시 객체만 노출하고, 초기화되지 않은 프록시 객체는 n..
2023.09.29 -
API 개발 기본 / 고급 준비
회원 등록 API https://github.com/dpdms529/JpaShop/commit/dfc282fdb5e15dd7154eeffb12b220fcec01e36a V1 엔티티를 RequestBody에 직접 매핑 문제점 엔티티에 프레젠테이션 계층을 위한 로직이 추가됨 엔티티에 API 검증을 위한 로직이 들어감 실무에서는 한 엔티티에 대한 API가 다양하게 만들어지는데, 각각의 API를 위한 모든 요청 요구사항을 한 엔티티에 담기 어려움 엔티티가 변경되면 API 스펙이 변함 V2 엔티티 대신에 DTO를 RequestBody에 매핑 엔티티와 프레젠테이션 계층을 위한 로직을 분리 가능 엔티티와 API 스펙을 명확하게 분리 가능 엔티티가 변해도 API 스펙이 변하지 않음 회원 수정 API https://gi..
2023.09.29 -
웹 계층 개발
홈 화면과 레이아웃 홈 컨트롤러 등록 https://github.com/dpdms529/JpaShop/commit/2985a45fd6b7719d8416f7ca39468668edd59e84 타임리프 템플릿 등록 https://github.com/dpdms529/JpaShop/commit/e01ed9675cab4c6a09084d73c06cd5eb0054071c view 리소스 등록 https://github.com/dpdms529/JpaShop/commit/e5271eb4cdc915607e02bc485249a73ad699a7aa 회원 등록 https://github.com/dpdms529/JpaShop/commit/c596319f7b0cdcccdec9982ccc78e3b77490d699 회원 목록 조회 ht..
2023.09.29