본문 바로가기
반응형

Study44

MockMvc를 이용한 REST API의 Json Response 검증 MockMvc를 이용하여 API의 Json Response를 JsonPath 표현식을 사용해 검증하는 예제를 정리하였습니다. 테스트 예제를 보기 앞서 테스트에 필요한 기본적인 지식들을 간단히 서술 해보겠습니다. 의존성 추가 Spring Boot에 spring-boot-starter-test 의존성을 추가하여 테스트를 작성할 수 있습니다. @WebMvcTest와 @MockBean을 이용한 테스트 @SpringBootTest 어노테이션을 사용하면 스프링이 관리하는 모든 빈을 등록시켜서 통합 테스트를 진행하기 때문에 무겁습니다. 하지만 @WebMvcTest는 web 레이어 관련 빈들만 등록하므로 비교적 가볍습니다. web레이어 관련 빈들만 등록되므로 Service는 등록되지 않습니다. 따라서 가짜로 만들어줄 .. 2021. 1. 14.
자바 ORM 표준 JPA 프로그래밍(14) - 경로 표현식, 페치 조인, 다형성 쿼리, Named 쿼리, 벌크 연산 경로 표현식(Path Expression) 경로 표현식은 쉽게 표현하면 .(점)을 찍어 객체 그래프르 탐색하는 것이다. select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드 where t.name = '팀A' 위에서 m.username, m.team, m.orders, t.name이 모두 경로 표현식을 사용한 예이다. 상태 필드(state field): 단순히 값을 저장하기 위한 필드(필드 or 프로퍼티) 연관 필드(association field): 연관 관계를 위한 필드, 임베디드 타입 포함(필드 or 프로퍼티) 단일 값 연관 필드: @ManyToOne, @OneToOne, 대.. 2021. 1. 10.
자바 ORM 표준 JPA 프로그래밍(13) - 조인, 서브 쿼리, 조건식, 컬렉션 식, 스칼라 식, CASE 식 조인 JPQL이 지원하는 조인은 SQL 조인과 기능은 같고 문법만 약간 다르다. 내부 조인(INNER JOIN) SELECT m FROM Member m [INNER] JOIN m.team t INNER JOIN을 사용한다. INNER는 생략 가능 생성된 내부 조인은 아래와 같다. SELECT M.ID AS ID, M.AGE AS AGE, M.TEAM_ID AS TEAM_ID, M.NAME AS NAME FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID=T.ID JPQL 조인의 가장 큰 특징은 연관 필드를 사용한다는 점 JPQL 조인을 SQL 조인처럼 사용하면 문법 오류가 발생한다. FROM Member m JOIN Team t →잘못된 JPQL 조인, 오류! 외부 조인(O.. 2021. 1. 7.
자바 ORM 표준 JPA 프로그래밍(12) - JPQL 기본 문법과 파라미터 바인딩, 프로젝션, 페이징 JPQL(Java Persistence Query : Language) JPQL은 객체지향 쿼리 언어이다. 테이블 대상으로 쿼리하는 것이 아닌 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화하여 특정 데이터베이스 SQL에 종속적이지 않다. JPQL은 결국 SQL로 변환되어 실행한다. JPQL 문법 select 문 :: = select_절 from_절 [where_절] [groupby_절] [having_절] [orderby_절] update_문 :: = update_절 [where_절] delete_문 :: = delete_절 [where_절] SELECT문은 다음과 같이 사용한다. SELECT m FROM Member AS m where m.username = 'Hello' 대소문자 구분 .. 2021. 1. 6.
자바 ORM 표준 JPA 프로그래밍(11) - 값 타입 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(embedded type, 복합 값 타입) 컬렉션 값 타입(collection value type) 임베디드 타입 새로운 값 타입을 직접 정의할 수 있음 JPA는 임베디드 타입(embedded.. 2021. 1. 5.
자바 ORM 표준 JPA 프로그래밍(10) - 프록시와 연관관계 관리 프록시 엔티티 조회 시 연관된 엔티티들이 항상 사용되는 것이 아님. 프록시를 사용하면 연관된 엔티티를 처음부터 데이터베이스에 조회하는 게 아닌 실제 사용하는 시점에 데이터베이스에서 조회할 수 있음. 자주 함께 사용하는 엔티티들은 조인을 사용해서 함께 사용하는 것이 효과적 JPA는 즉시 로딩(Eager Loading)과 지연 로딩(Lazy Loading)을 둘 다 지원함. EntityManger.find() 이 메소드는 영속성 컨텍스트에 엔티티가 없다면 데이터베이스를 조회한다. 이렇게 조회한 엔티티는 실제 사용하든 사용하지 않든 데이터베이스를 조회하게 된다. EntityManager.getReferance() 이 메소드를 사용하면 엔티티를 실제 사용하는 시점까지 데이터베이스 조회를 미룬다. 이 메소드가 호.. 2021. 1. 5.
자바 ORM 표준 JPA 프로그래밍(9) - 고급 매핑 상속 관계 매핑 관계형 데이터베이스에는 상속이라는 개념이 없다. 상속과 유사한 슈퍼타입 서브타입 관계(Super-Type Sub-Type relationship)라는 모델이 있다. ORM이 다루는 상속 관계 매핑은 상속 구조와 슈퍼타입 서브타입 관계를 매핑하는 것이다. 데이버테이스에서 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때에 3가지 방법을 선택할 수 있다. 각각의 테이블로 변환: 각각 모두 테이블로 만들고 조회할 때 조인을 사용 → 조인 전략 통합 테이블로 변환: 테이블을 하나만 사용해서 데이터를 통합하여 관리 → 단일 테이블 전략 서브타입 테이블로 변환: 서브 타입마다 하나의 테이블을 만듬 → 구현 클래스마다 테이블 전략 주요 어노테이션 @Inheritance(strateg.. 2021. 1. 4.
자바 ORM 표준 JPA 프로그래밍(8) - 다양한 연관관계 매핑 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany 다대일 n:1 관계 매핑에 대해서는 앞 포스팅에 다루었기 때문에 이번 포스팅에서는 다루지 않겠음. 일대다 1:n 관계는 n:1 관계의 반대 방향이다. 1:n 관계는 엔티티를 하나 이상 참조할 수 있으므로 자바 컬렉션인 Collection, List, Set, Map 중에 하나를 사용해야 한다. 일대다 단방향 @Entity public class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "team_id") private Long id; private String name; @OneToMan.. 2021. 1. 3.
자바 ORM 표준 JPA 프로그래밍(7) - 연관관계 매핑 기초 목표 • 객체와 테이블 연관관계의 차이를 이해 • 객체의 참조와 테이블의 외래 키를 매핑 • 용어 이해 • 방향(Direction): 단방향, 양방향 • 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 • 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리 주인이 필요 목차 • 연관관계가 필요한 이유 • 단방향 연관관계 • 양방향 연관관계와 연관관계의 주인 연관관계 매핑? 객체 연관관계와 테이블 연관관계를 매핑하는 것, 객체의 참조와 테이블의 외래 키를 매핑한다. 핵심 키워드 살펴보기 방향(Direction) : 회원과 팀이 관계가 있을 때 단방향 : 회원 → 팀, 팀 → 회원 둘 중 한 쪽만 참조하는 관계 양방향 : 회원 → 팀, 팀 .. 2020. 12. 28.
반응형