Web
-
JPA (2) - API 개발 시 기본으로 지켜야 할 사항Web/JPA 2024. 1. 22. 10:47
1. 사용자의 요청과 응답에 대한 요구사항에 맞는 적절한 DTO를 만들어라! @PostMapping("/api/v1/members") public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member) { Long id = memberService.join(member); return new CreateMemberResponse(id); } @PostMapping("/api/v2/members") public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request) { Member member = new Member(); member.setName..
-
JPA (11) - 다형성 쿼리,엔티티 직접 사용,정적쿼리,벌크연산Web/JPA 2024. 1. 12. 14:40
1. 다형성 쿼리 - TYPE > 조회 대상을 특정 자식으로 한정 (ex Item 중에 Book, Movie를 조회하라) select i from Item i where type(i) IN (Book, Movie) > 자바의 타입 캐스팅과 유사하다. > 상속 구조에서 부모 타입을 특정 자식 타입으로 다룰 때 사용 (FROM, WHERE, SELECT에서 사용) select i from Item i where treat(i as Book).author = 'kim' 2. 엔티티 직접 사용 > JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티 기본 키 값을 사용한다. select count(m.id) from Member m //엔티티 아이디를 사용 select count(m) from Member..
-
JPA - 프로젝트 생성Web/JPA 2024. 1. 11. 10:47
> JPA를 사용하기 위해서는 hibernate-entitymanager 필요함 > persistence.xml파일이 필요 (Spring 없이 순수 자바에서 jpa 활용) > DB연동, 엔티티 매니저 팩토리 생성시 필요 > persistence-unit name에 매니저 팩토리 생성시 불러올 이름 지정 > javax.persistence로 시작하는 속성은 JPA표준 속성이고, hibernate로 시작하는 속성은 하이버네이트 전용 속성이다. * 어떤 DB접근 기술을 사용하던 커넥션풀과 데이터 소스 등록필수! -> dialetc는 DB 방언 부분임 -> JPA는 특정 데이터 베이스에 종속적이지 않고, 어떤 DB를 사용하던 똑같이 서비스하도록 설계됨 -> 따라서 각 DB마다 문법과 함수가 다른것은 어떤 DB를..
-
JPA 활용 (1-3) - 엔티티 설계시 주의점Web/JPA 2024. 1. 4. 15:36
1. 엔티티는 가급적 Setter를 사용하지말자 -> Setter가 모두 열려있으면, 변경 포인트가 너무 많아서 유지보수가 어렵다. 1.2 모든 연관관계는 지연로딩으로 설정 > 즉시로딩은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1의 문제가 자주 발생함 > 실무에서 모든 연관관계는 지연로등으로 설정해야한다. > 연관된 엔티티를 DB에서 조회하면 fetch join, 엔티티 그래프들을 사용하자 > @XToOne(OneToOne,ManyToOne)관계는 기본이 즉시 로딩이므로 직접 지연로딩으로 설정해야한다. 1.3 컬렉션은 필드에서 초기화하자 컬렉션은 필드에서 바로 초기화하는 것이 안전하다. >null문제에서 안전함 > 하이버네이트는 엔티티를 영속화 할 때, 컬..
-
JPA 활용 (1-2) - 도메인 분석 설계Web/JPA 2024. 1. 4. 15:25
1. 도메인 모델과 테이블 설계 - 회원,주문,상품 관계 : 회원은 여러 상품을 주문할 수 있음 주문할 때 여러 상품을 선택할 수 있다 (주문과 상품은 다대다관계) (1 주문에 다 상품 1상품에 다 주문) 다대다 관계는 관계형 데이터베이스는 물론이고, 엔티티에서 거의 사용하지않음 따라서, 중간에 주문상품 테이블을 추가해서 다대일관계로 풀어냄 (1주문 다주문상품 다주문상품은 1주문) - 상품 분류 : 상품은 도서,음반,영화로 구분 상품이라는 공통 속성을 사용하므로, 상속구조 표현 - 회원 : 이름,임베디드 타입 주소, 주문을 리스트로 가짐 - 주문: 한 번 주문시 여러 상품을 주문할 수 있으므로 주문과 주문상품은 일대다 관계 주문은 상품을 주문한 회원과 배송정보,주문날짜,주문상태 가지고 있음 -> 주문 상..
-
JPA 활용 (1) - 프로젝트 환경설정Web/JPA 2024. 1. 4. 14:24
1. spring boot (build.gradle) > java 17버전 > dependencies: spring-data-jpa, thymeleaf, validation,spring-web, h2 > gradle은 의존관계 추가하면, 그 의존관계에 필요한 모든 의존관계 자동으로 끌어온다. > ./gradlew dependencies -configuration complieClasspath를 보면 의존관계 라이브러리 살펴볼 수 있음 * dependencies 추가하면서, version이 없는 것은 , plugins에 작성된 것은 2. H2 데이터 베이스 설치 > jdbc:h2:~/jspshop (최소한번) -> 한번 들어가줘야함 파일 모드로 들어가기 > ~/jpashop.mv.db -> 파일 생성 한번..
-
Spring MVC 2 - API 예외 처리 @ExceptionResolverWeb/Spring 2023. 11. 22. 00:39
- 스프링 부트가 기본으로 제공하는 ExceptionResolver는 다음과 같다. 1. ExceptionHandlerExceptionResolver : @ExceptionHandler 처리 (API 예외 처리 대부분 이 기능 사용) 2. ResponseStatusExceptionResolver : HTTP 상태 코드 지정해줌 (@ResponseStatus) 3. DefaultHandlerExceptionResolver : 스프링 내부 기본 예외를 처리 * HandlerExceptionResolverComposite 에 위 순서로 등록됨 -> null반환하면 계속 다음 것 찾음 -> 없으면 걍 500일 듯(WAS) 1. ReponseStatusExceptionResolver - 예외에 따라 HTTP 상태..
-
Spring MVC 2 - API 예외 처리 HandlerExceptionResolverWeb/Spring 2023. 11. 22. 00:26
1. API 예외 처리 - 시작 - API 예외 처리는 어떻게 해야할 까? - HTML 페이지를 보여주어야 하는 경우 쉽게 처리할 수 있었다. - API 예외는 각 오류 상황에 맞는 오류 응답 스펙을 정의하고, JSON으로 데이터를 내려주어야 한다. @Slf4j @RestController public class ApiExceptionController { @GetMapping("/api/members/{id}") public MemberDto getMember(@PathVariable("id") String id) { if (id.equals("ex")) { throw new RuntimeException("잘못된 사용자"); } return new MemberDto(id, "hello " + id);..