[JPA] 상속관계 매핑
·
JVM/JPA
Database 와 Object 간에는 기본적인 패러다임 차이가 존재한다. Database 관점 슈퍼타입 - 서브타입의 논리 모델이 존재한다. 이를 물리 모델로 구현할 수 있는 여러 전략이 존재한다. Joined Table 전략 Single table 전략 Table per class 전략 1. Joined Table 전략 슈퍼타입 테이블을 만들고 각각의 모든 서브타입 테이블을 별도로 생성하는 구조. Item 슈퍼타입 테이블에 별도의 `data_type` 컬럼을 두어 해당 테이블에서 어느 서브타입 테이블을 가리키는지 구분한다. 가장 정규화된 방식으로 저장 공간이 효율화됨. 정석적인 방법으로 JOIN 으로 인해 성능 저하 위험 존재한다고는 하나, 미미함. (JOIN을 잘쓴다면) 부모 - 서브타입 테이블에 ..
[JPA] 1:1 연관관계 설정
·
JVM/JPA
요구사항 가정 회원당 무조건 하나의 락커 를 점유한다. 락커 또한 무조건 한명의 회원만 사용할 수 있다. 테이블 설계 1:1 관계가 성립해야한다. 그러나 부모 자식 관계가 성립해야하고 외래키는 존재해야한다. JPA Entity class 설계 단 1:1로 살아있는 테이블을 만든다고 하면 1:1 연관관계 설정 (@OneToOne) 필요하다. 주 대상 테이블 || 대상 테이블에 외래키와 UNIQUE 제약조건을 건다. (그래야 1:1이 제대로 성립한다.) FK를 회원에 둘 것인가 사물함에 둘 것인가? 나라면 이렇게 설계하겠다. 회원에 사물함 아이디를 FK로 보유한다. 엔티티 클래스에서는 연관관계 주인으로 삼는다. 테이블 설계상으로나 비즈니스 로직상으로나 사물함으로부터 회원을 조회하기보다 특정 회원의 사물함을 ..
[JPA] auto_increment 전략 IDENTITY vs SEQUENCE
·
JVM/JPA
기본키 생성 전략에 따른 JPA 의 기본 동작 차이. IDENTITY IDENTITY 전략에서는 PK (auto_increment) 값이 Insert 쿼리가 DB에 COMMIT 되는 시점에 확정된다. 문제 상황 영속성 컨텍스트를 가진 JPA 입장에서 어떤 트랜잭션 내에서 COMMIT 하기 전에 PK (ID) 를 사용해야 한다면 어떻게 해야할까? em.persist(entity) 시점에 INSERT 쿼리를 실행한다. (아직 COMMIT 전) Member.java @Entity @Table(name = "member") @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter public class Member { @Id @GeneratedValue(strat..
[JPA] JPA 는 왜 등장했을까?
·
JVM/JPA
객체 - DB 간 패러다임 불일치 객체는 참조 (Reference) 로, DB는 외래키(foreign key) 로 연관관계를 맺는다. 이 때문에 OOP 와 DB 간의 패러다임 불일치가 발생한다. 1. 객체지향 언어는 참조로, RDB 는 외래키로 맵핑한다. Team 이 부모, Member 가 자식 테이블이라 해보자. MemberTeam.java member_team.sql 참조가 아닌 Foreign Key (teamId) 로 맵핑한다. -- 팀별로 소속된 멤버를 모두 불러옴 SELECT * FROM Member AS m JOIN Team AS t -- teamId 와 team.id 를 매핑 ON m.teamId = team.id 2. Entity 신뢰 문제 DB Entity - Class 간 매핑시 최초에..
📕 가독성 업, Hi docusaurus (feat.tistory, github, velog)
·
기타/잡동사니
배경 나는 총 3개의 블로그를 운영중이다. tistory 에러 로그 및 잡다한 지식 velog Node.js 및 AWS 내용 github + jekyll Database 기본기 공부내용 위와 같이 다루는 콘텐츠별로 블로그를 분리하여 관리하는데 최근 Kotlin 과 Go 등 언어와 프레임워크만 다룰 블로그를 개설하고자 다른 도구가 없나 찾아봤다. 구분 커스터마이징 자유도 마크다운 편의성 IDE & VCS 연동 편의성 tistory 높음 낮음 낮음 velog 낮음 높음 낮음 github.io 보통 높음 높음 gitbook ? 높음 높음 ✅ docusaurus 높음 높음 높음 디자인과 포맷은 gitbook 이 맘에 들지만 아쉽게도 3년 전부터 더이상 관리되지 않는 상태다. 한줄기 빛인 Facebook 에서 만..
[Error] Jekyll 을 통한 깃헙 블로그 생성시 만난 오류들
·
기타/git
just the docs 를 통한 Github 블로그 만들기 Windows 10 환경에 깃헙 블로그를 만들어보자. 설정 도중 출력된 에러까지 해결해보자. 1. ruby install RubyInstaller for Windows Is RubyInstaller for you? RubyInstaller is the easiest and most widely-used Ruby environment on Windows. And Ruby is a great language for beginners as well as professionals. It’s suitable for small scripts as well as large applications. RubyInstaller com rubyinstaller.o..