Spring 27

객체지향 쿼리 언어 소개

JPA는 다양한 쿼리 방법을 지원 JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 JPQL 소개 가장 단순한 조회 방법 EntityManager.find() 객체 그래프 탐색(a.getB().getC()) 나이가 18살 이상인 회원을 모두 검색하고 싶다면? JPQL JPA를 사용하면 엔티티 객체를 중심으로 개발 문제는 검색 쿼리 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리 SQL을 추상화..

Spring/JPA 2023.03.01

값 타입

기본값 타입 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 값 타입 분류 기본값 타입 자바 기본 타입 (int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입 컬렉션 값 타입 기본 값 타입 예) : String name, int age 생명주기를 엔티티에 의존 예) 회원을 삭제하면 이름, 나이 필드도 함께 삭제 값 타입은 공유하면 X 예) 회원 이름 변경시 다른 회원의 이름도 함께 변경되면 안됨 참고 : 자바의 기본 타입은 절대 공유 X int, double ..

Spring/JPA 2023.02.23

다양한 연관관계 매핑

목차 연관관계 매핑시 고려사항 3가지 다대일 [N:1] 일대다 [1:N] 일대일 [1:1] 다대다 [N:M] 실전 예제 - 3. 다양한 연관관계 매핑 연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 4가지를 지원하고 있다. 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A → B, B → A 처럼 참조가 2군데 객체 양방향 관계는 참조..

Spring/JPA 2023.02.22

연관관계 매핑 기초

목표 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 매핑 용어 이해 방향(Direction) : 단방향, 양방향 다중성(Multiplicity) : 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 연관관계의 주인(Owner) : 객체 양방향 연관관계는 관리 주인이 필요 목차 연관관계가 필요한 이유 단방향 연관관계 양방향 연관관계와 연관관계의 주인 실전 예제 2. 연관관계 매핑의 시작 연관관계가 필요한 이유 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계다. 객체를 테이블에 맞추어 모델링(연관관계가 없는 객체) 외래 키 식별자를 직접 다룸 //팀 저장 Team team = new Team(); team.s..

Spring/JPA 2023.02.19

실전 예제

실전 예제 1. 요구사항 분석과 기본 매핑 요구사항 분석 회원은 상품을 주문할 수 있다. 주문 시 여러 종류의 상품을 선택할 수 있다. 기능 목록 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 수정 상품 조회 주문 기능 상품 주문 주문내역조회 주문취소 도메인 모델 분석 회원과 주문의 관계 : 회원은 여러 번 주문할 수 있다. (일대다) 주문과 상품의 관계 : 주문할 때 여러 상품을 선택할 수 있다. 반대로 같은 상품도 여러 번 주문될 수 있다. 주문상품이라는 모델을 만들어서 다대다 관계를 일대다, 다대일 관계로 풀어냄 테이블 설계 엔티티 설계와 매핑 데이터 중심 설계의 문제점 현재 방식은 객체 설계를 테이블 설계에 맞춘 방식 테이블의 외래키를 객체에 그대로 가져옴 객체 그래프 탐색이 불가능 ..

Spring/JPA 2023.02.19

엔티티 매핑

목차 객체와 테이블 매핑 데이터베이스 스키마 자동 생성 필드와 컬럼 매핑 기본 키 매핑 실전예제 : 요구사항 분석과 기본 매핑 엔티티 매핑 소개 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리함 JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 주의 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스 사용 X 저장할 필드에 final 사용 X @Entity 속성 정리 속성 : name JPA에서 사..

Spring/JPA 2023.02.19

영속성 관리 - 내부 동작 방식

JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 ( ORM ) 영속성 컨텍스트 엔티티 매니저 팩토리와 엔티티 매니저 영속성 컨텍스트 JPA를 이해하는 데 가장 중요한 용어 "엔티티를 영구 저장하는 환경" 이라는 뜻 EntityManager.persist(entity); 영속성 매니저? 영속성 컨텍스트? 영속성 컨텍스트는 논리적인 개념 눈에 보이지 않는다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 엔티티의 생명주기 비영속(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속(managed) 영속성 컨텍스트에 관리되는 상태 준영속(detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(delete) 삭제된 상태 비영속 Member member = ..

Spring/JPA 2023.02.18

JPA 애플리케이션 개발

JPA가 어떻게 동작하는데? JPA는 Persistence라는 클래스가 있는데 여기서 persistence.xml 설정 정보를 읽어서 EntityManagerFactory를 만듬. 여기서 필요할 때마다 EntityManager를 찍어냄. JpaMain 클래스를 만듬 JPA가 어떻게 동작하는지 살펴봄. 객체와 테이블 생성하고 매핑하기 Member.java @Entity public class Member { @Id private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public..

Spring/JPA 2023.02.18

JPA 프로젝트 생성

라이브러리를 넣는 것이 중요! pom.xml 사이에 어떤 라이브러리를 넣을지 정함. org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 1.4.199 실무에서 라이브러리 버전을 선택할 경우 JPA를 사용할 경우 스프링과 함께 사용하는 경우가 많기 때문에 스프링과 잘 연동되는 버전을 선택하는 것이 바람직하다. 또한 버전은 실제 설치하는 버전과 일치시키는 것이 좋다. JPA 설정 JPA를 사용하기 위해서는 몇 가지 설정 파일을 넣어줘야 한다. 1) JPA 설정 파일 - 위치 : src/main/resources/META-INF/persistence.xml JPA는 특정 단어에 종속적이지 않도록 설계됨. 그래서 단어에 맞는 설정을 해줘야함..

Spring/JPA 2023.02.18

HTTP 기본

HTTP 모든 것이 HTTP 클라이언트 서버 구조 Stateful, Stateless 비 연결성(connectionless) HTTP 메세지 모든 것이 HTTP HTTP(Hyper Text Transfer Protocol) HTTP 메세지에 모든 것을 전송 HTML, TEXT IMAGE, 음성, 영상, 파일 JSON, XML(API) 거의 모든 형태의 데이터 전송 가능 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 지금은 HTTP 시대! HTTP/1.1 1997년 : 가장 많이 사용, 우리에게 가장 중요한 버전 기반 프로토콜 TCP : HTTP/1.1, HTTP/2 UDP : HTTP/3 현재 HTTP/1.1 주로 사용 HTTP/2, HTTP/3 도 점점 증가 HTTP 특징 클라이언트 서버 구조..

Spring/HTTP 2023.02.14