framework (12) 썸네일형 리스트형 [JPA] 상속관계 매핑, mappedSuperclass 상속관계 매핑이란 ? 관계형 데이터베이스는 상속 관계가 존재하지 않는다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑 : 객체의 상속, 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 JPA에서 기본전략으로 하나의 테이블(Rollup)이 생성된다. 슈퍼타입 서브타입 관계 주요 어노테이션 @Inheritance(strategy = InheritanceType.XXXX JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name = "DTYPE") 어떤 엔티티 객체와 연결되는지 확인하기 위해 사용한다. 조인전략에서 필수는 아니지만(테이블을 조인하여 확인할 수 있다.. [JPA] 엔티티 매핑 3 엔티티를 매핑하는 어노테이션은 4가지의 종류가 존재한다. @ManyToOne @OneToMany @OneToOne @ManyToMany 1. @ManyToOne, @OneToMany 테이블의 연관관계를 살펴보면 MEMBER, TEAM 테이블이 존재하고, MEMBER 테이블은 TEAM의 TEAM_ID를 FK를 가지고 있다. 위의 관계를 Entity로 설계하면 Member 객체는 Team을 참조한다. 연관관계의 주인은 Member 객체이다. @Entity 이 클래스를 JPA의 Entity로 설정한다. @SequenceGenerator 시퀀스 설정 설정된 시퀀스는 @GenerationType을 통해 ID를 설정한다. name : @GenerationType의 generator 속성을 통해 지정할 이름 sequ.. [JPA] 엔티티 매핑 2 객체와 관계형 데이터베이스의 패러다임 차이 객체는 참조를 통해 연관관계를 같는다 class Member { private Long id; private String name; private String age; private Team team; // 참조를 통한 연관관계 } class Team { private Long id; private String name; } 데이터베이스는 PK와 FK를 통해 연관관계를 같는다. 예시 - 객체형 데이터베이스를 기준으로 설계 객체를 테이블에 맞추어 데이터 중심으로 모델링하면 협력 관계를 만들 수 없다. class 생성 // * Member class @Entity @SequenceGenerator( name = "MEMBER_SEQ_GENERATOR", sequen.. [JPA] 엔티티 매핑 1 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리하고, 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수이다. @Entity class Member { // ... code } 주의 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스 사용 x 저장할 필드에 final 사용 x 속성 정리 속성 : name JPA에서 사용할 텐티티 이름을 지정한다. 기본값 : 클래스 이름을 그대로 사용한다(예 : Member) 동일한 클래스의 이름이 있는 경우 사용하지만, 권장하지 않는다. @Table @Table은 엔티티와 매핑할 테이블을 지정한다. 속성 속성 : nam.. [JPA] 기본 사용 방법 pom.xml 설정 추가 org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 2.1.214 javax.xml.bind jaxb-api 2.3.0 hibernate-entitymanager를 추가하면 JPA에 필수적인 라이브러리를 가져올 수 있다. 또한 버전의 경우 프로젝트를 만들 때 사용한 spring버전에서 지원하는 hibernate버전을 가져오면 된다. 지원하는 hibernate의 버전의 경우 spring 사이트에서 확인할 수 있다. javax.xml.bind의 경우 JDK 11 이후에서 JAXB 라이브러리를 내장하고 있지 않기 때문에 발생한 에러를 해결하기 위해 의존성을 추가한다. 출처 : https://roadrunner.ti.. [JPA] JPA 사용 이유 및 개념 정리 JPA란? Java Persistence API 자바 진영의 ORM 기술 표준 JPA는 애플리케이션과 JDBC 사이에서 동작한다. 표준 명세이다 인터페이스의 모음 JPA 표준 명세를 구현한 3가지 구현체 하이버네이트, EclipseLink, DataNucleus ORM이란? Object relational mapping - 객체 관계 매핑 객체는 객체대로 설계 관계형 데이터베이스는 관계형 데이터베이스대로 설계 ORM 프레임워크가 중간에서 매핑 대중적인 언어에는 대부분 ORM 기술이 존재한다. JPA를 사용하는 이유 SQL 중심적인 개발에서 객체 중심으로 개발 : https://my-dev-record.tistory.com/12 생산성 : 객체 중심으로 개발하게 되므로 매핑에 투자해야할 시간이 줄어든다. .. [JPA] JPA 사용 전 객체지향 프로그래밍의 불편함 java는 관계형 언어이고, 데이터베이스도 관계형 데이터베이스인데 sql에 종속적인 시스템이 옳은가? JPA를 사용하는 이유 1. 상속관계 위의 ERD에서 Item과 Album 데이터를 입력 할 때 mybatis를 사용한다면 2개의 쿼리가 필요하다. INSERT INTO ITEM(ID, NAME, PRICE) VALUES(...); INSERT INTO ITEM(ITEM_ID, ID, ARTIST) VALUES(...); 조회 할 때는 최소 세개 이상의 select 쿼리가 필요하다. -- Item, Album 조회 SELECT A.*, B.* FROM ITEM AS A LEFT JOIN ALBUM AS B ON A.ID = B.ID; -- Item, Movie 조회 SELECT A.*, B.* FROM .. [NestJs] JWT 사용 JWT 설명 JWT란? JSON Web Token : json 형식으로 사용하는 웹 토큰이다. JWT 구성 1. Header base64 인코딩 토큰의 타입과 알고리즘 2. Payload base64 인코딩 데이터(key-value) 필요한 정보만 넣는게 중요하다. 3. Signature Header와 Payload를 조합하고 비밀키로 서명한 후 base64로 인코딩 4. JWT 예시 aaa.bbb.ccc 프로세스 설명 로그인(발급) 프로세스 1. 프론트엔드에서 로그인을 위한 정보를 서버로 전송한다. 2. 백엔드에서 로그인한 정보를 수신한다. 3. 백엔드에서 시크릿 키를 사용(서명)하여 JWT를 생성한다. 4. 생성한 JWT를 포론트엔드로 발급(전송)한다. 5. 프론트엔드에서 발급된 JWT를 안전한 장소.. 이전 1 2 다음