LECTURES(34)
-
공통 인터페이스 기능
공통 인터페이스 설정 javaConfig 설정 @Configuration @EnableJpaRepositories(basePackages = "jpabook.jpashop.repository") public class AppConfig {} 스프링 부트 사용시 @SpringBootApplication 위치를 지정(해당 패키지와 하위 패키지 인식) 만약 위치가 달라지면 @EnableJpaRepositories 필요 스프링 데이터 JPA가 구현 클래스 대신 생성 org.springframework.data.repository.Repository를 구현한 클래스는 스캔 대상 @Repository 애노테이션 생략 가능 공통 인터페이스 분석 공통 인터페이스 구성 주요 메서드 save(S) : 새로운 엔티티는 저장..
2023.09.29 -
프로젝트 환경 설정 / 예제 도메인 모델
프로젝트 환경 설정 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 -
주문 도메인 개발
주문, 주문상품 엔티티 개발 https://github.com/dpdms529/JpaShop/commit/57cc7ffe1ee4745241d91a67cf4b1c2c36e3e561 주문 리포지토리 개발 https://github.com/dpdms529/JpaShop/commit/2d572de97e15b3427e6c0e2002b897938bf7ab8c 주문 서비스 개발 https://github.com/dpdms529/JpaShop/commit/3b84471c7c6c9aa83aeab480cc4ebd66c04b9e39 주문 기능 테스트 https://github.com/dpdms529/JpaShop/commit/81a8eabd836176c1df669823df0be69dbd5aef61 주문 검색 기능 개발 검색..
2023.09.29 -
상품 도메인 개발
상품 엔티티 개발(비즈니스 로직 추가) https://github.com/dpdms529/JpaShop/commit/6f9c29210cf3432c8472dfe75f83faf919a09865 데이터를 가지고 있는 쪽에 비즈니스 로직이 있는 것이 응집력이 좋음 상품 리포지토리 개발 https://github.com/dpdms529/JpaShop/commit/cefacc252b6dd22a69fde1d5a7444881121d0b9c 상품 서비스 개발 https://github.com/dpdms529/JpaShop/commit/d7db9f67f9fc3769276b1ccd2602f212c0cfb979 서비스가 리포지토리를 단순히 위임만 하는 클래스라면 리포지토리를 바로 사용하는 것도 고려 가능 실전! 스프링 부트와..
2023.09.29 -
회원 도메인 개발
회원 리포지토리 개발 https://github.com/dpdms529/JpaShop/commit/a11d031ecef924939234372e2c0d8130df9ce36a @Repository : 스프링 빈으로 등록, JPA 예외를 스프링 기반 예외로 예외 변환 @PersistenceContext : EntityManager 주입 @PersistenceUnit : EntityManagerFactory 주입 회원 서비스 개발 https://github.com/dpdms529/JpaShop/commit/b45e2278dd1b8e58949642f944707751205ae1aa @Service : 스프링 빈으로 등록 @Transactional : 트랜잭션, 영속성 컨텍스트 readOnly=true : 데이터의 ..
2023.09.29 -
애플리케이션 구현 준비
애플리케이션 아키텍처 계층형 구조 사용 controller, web : 웹 계층 service : 비즈니스 로직, 트랜잭션 처리 repository : JPA를 직접 사용하는 계층, 엔티티 매니저 사용 domain : 엔티티가 모여 있는 계층, 모든 계층에서 사용 패키지 구조 jpabook.jpashop domain exception repository service web 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의 실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., 스프 www.inflearn.com
2023.09.29 -
도메인 분석 설계
요구사항 분석 기능 목록 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 수정 상품 조회 주문 기능 상품 주문 주문 내역 조회 주문 취소 기타 요구사항 상품은 재고 관리가 필요하다. 상품의 종류는 도서, 음반, 영화가 있다. 상품을 카테고리로 구분할 수 있다. 상품 주문시 배송 정보를 입력할 수 있다. 도메인 모델과 테이블 설계 데이터베이스가 order by 때문에 order를 예약어로 잡고 있기 때문에 관례상 Orders를 많이 사용함 연관관계 매핑 분석 회원과 주문 : 일대다, 다대일의 양방향 관계 주문상품과 주문 : 다대일 양방향 관계 주문상품과 상품 : 다대일 단방향 관계 주문과 배송 : 일대일 양방향 관계 카테고리와 상품 : @ManyToMany로 매핑하면 되지만 실무에서는 이렇게 쓰..
2023.09.29