복합키란? 복합 키(Composite Key)는 두 개 이상의 PK를 하나로 PK로 지정하는 것을 말한다. 이러한 복합키를 가지고 있는 논리 모델은 식별 관계와 비식별 관계로 구분되어 사용한다. 식별 관계 부모테이블의 기본키를 상속 받고 자식 테이블의 기본키 + 외래키의 구조로 사용되는 구조 입니다. 비식별 관계 비식별 관계는 부모 테이블의 기본키만 받아서 자식 테이블의 FK로 사용하는 것이 비식별 관계입니다. 이러한 관계는 FK가 Null이냐 아니냐에 따라서 필수적 비식별 관계와 선택적 비식별 관계로 구분되어집니다. JPA는 이러한 식별, 비식별 관계를 모두 제공합니다. JPA에서의 복합키 JPA에서는 아래와 같은 두개의 식별자를 사용하려면 오류가 발생하기 때문에 별도의 식별자 클래스를 만들어야합니다...
데이터 베이스에서 상속 관계 관계형 데이터베이스에서는 상속이라는 개념이 존재하지 않는다. 그래서 보통 슈퍼타입과 서브타입으로 분리시키는 방식으로 구현을 한다. 이러한 논리 모델을 구현하기 위해서는 세가지 방법이 존재하는데 각각 방법에 대한 장점과 단점을 알아보자 조인전략: 각각의 테이블로 변환 각각의 논리 모델을 모두 테이블로 만들고 부모테이블의 PK를 받아서 기본키와 외래키를 통해 사용하는 전략이다. 해당 방법을 사용할 때 주의할 점은 객체에서는 타입으로 구분할 수 있지만 데이터베이스에는 그런 개념이 없기 때문에 타입을 구분하는 전략을 사용해 주어야한다. Table 구조 Entity 구조 부모 클래스(Product) @Entity @Inheritance(strategy = InheritanceType...
JWT Authentication Flow HTTP는 connectionless, stateless한 성질을 가지고 있는 프로토콜 입니다. 그렇기에 유저 인증이 필요한 경우 인증이 필요할 때 마다 로그인을 할 수 없으므로 토큰이나 세션을 통해 유저 인증 상태를 관리하게 되는데 그중 가장 널리 사용되는 JWT 토큰 전략을 스프링 시큐리티 활용하여 사용방법과 동작과정을 정리한 글입니다. 1. 유저 정보를 자바에서 Validation을 활용하여 유저 정보를 체크하고 H2 데이터 베이스에 저장을 합니다. 2. 스프링 시큐리티를 통해 유저 로그인 정보를 인증하고 토큰을 발급 받습니다. 3. 스프링 시큐리티를 통해 전달 받은 토큰을 통해 인가 과정을 거친 후 서비스 로직을 동작하도록 합니다. 스프링 시큐리티가 있는..
npm을 통해 express를 다운로드하고 express 프로젝트를 생성하면 아래와 같은 구조로 생성하게 되는데 프로젝트를 진행하기 전에 각각 무슨 역활을 하는지 알아 보고자한다. 프로젝트 구조 ├── app.js ├── bin │ └── www ├── package.json ├── public │ ├── images │ ├── javascripts │ └── stylesheets │ └── style.css ├── routes │ ├── index.js │ └── users.js └── views www express의 핵심파일로 아래와 같이 구성되어 있다. var app = require('../app'); var debug = require('debug')('learn-express:server')..
fetch join이란 SQL 조인 종류 X JPQL에서 성능 최적화를 위해 제공하는 기능 연관된 엔티티나 컬렉션을 SQL 한 번을 통해 조회할 수 있다. 페치 조인 ::= [ LEFT [OUTER] | INNER ] JOIN FETCH 조인경로 엔티티 fetch join 회원을 조회하면서 연관된 팀도 함께 조회 SQL을 보면 회원 뿐만 아니라 팀(T.*)도 함께 SELECT -- [JPQL] select m from Member m join fetch m.team -- 실제 나가는 SQL SELECT M.*, T.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID = T.ID SQL JPQL fetch join 사용하는 이유 String jpql = "select m f..