Be52 [자바 ORM 표준 JPA 프로그래밍] 고급 매핑 (7장) 📌 상속 관계 매핑 관계형 데이터베이스에는 상속이 없다. 그나마 '슈퍼타입-서브타입 관계' 모델링 기법이 상속과 비슷하다. 즉, ORM에서의 상속 관계 매핑은 이 모델링 기법이고 3가지 방법으로 구현할 수 있다. 조인 전략 : 각각을 모두 테이블로 만들고 조회 시 조인을 사용한다. 단일 테이블 전략 : 테이블을 하나만 사용해 통합한다. 구현 클래스 테이블 전략 : 서브 타입마다 하나의 테이블을 만든다. 1️⃣ 조인 전략 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아 기본 키 + 외래 키로 사용한다. 테이블은 타입의 개념이 없어 타입을 구분하는 칼럼을 추가해야 한다. @Entity @Inheritance(strategy = InheritanceType.JOINED) // 상속의 부모 클.. 2022. 12. 12. TIL : N+1 문제, Fetch 전략 (18) ☄️ N+1 문제 N+1 문제란? JPA를 사용할 때 흔히 발생하는 문제 중 하나이다. 1번의 쿼리로 N개의 데이터를 가져왔는데, 그 데이터들을 처리하기 위해서 N번의 쿼리가 더 발생하는 문제이다. 🧐 언제 발생하는 문제일까? 몇몇 블로그에서 Fetch 전략에 따라 발생하는 문제라고 작성되어있다. EAGER와 LAZY는 실제 데이터를 가져오는 시점의 차이이지 N+1 문제에 궁극적인 원인이 아니다. JpaRepository에 정의한 메서드를 실행하면 JPA는 메서드 이름을 분석해서 JPQL 쿼리를 생성해 실행한다. JPQL 객체지향 쿼리 언어로 테이블을 신경 쓰지 않고 엔티티와 필드만으로 쿼리를 생성한다. 따라서, N+1 문제는 JPQL이 연관관계를 무시하고 해당 엔티티만을 기준으로 쿼리를 조회하기 때문에.. 2022. 12. 7. [이펙티브 자바] 아이템 1 : 생성자 대신 정적 팩토리 메서드를 고려하라 ✍️ 학습 목표 객체 생성하기 정적 팩토리 메서드의 장점 정적 팩토리 메서드의 단점 📌 객체 생성하기 객체를 생성하는 가장 흔한 방법은 public 생성자를 사용하는 것이다. 정적 팩토리 메서드를 사용해서도 객체를 생성할 수 있다. 차이는 다음과 같다. 🧐 public 생성자 class Pokemon { private int attack, defense, hp; public Pokemon(int attack, int defense, int hp) { this.attack = attack; this.defense = defense; this.hp = hp; } } public class Item1 { public static void main(String[] args) { Pokemon 피카츄 = new .. 2022. 12. 7. [Java] 멀티쓰레드 프로그래밍 (22.12.05 updated) ✍️ 학습할 것 Thread 클래스, Runnable 인터페이스 Thread의 상태 Thread의 우선순위 Main Thread 동기화 데드락 📌 Thread 클래스, Runnable 인터페이스 Java는 멀티쓰레드 프로그래밍을 지원하는 언어이다. 멀티쓰레드 환경은 어떤 쓰레드가 문제가 발생하면 다른 쓰레드에도 영향을 미친다. 따라서 쓰레드에 대한 이해는 필수적이고 다른 실행 환경을 제공하는 프로세스에 대한 이해도 같이 해보자. 🧷 프로세스, Process 메모리 상에 올라간 프로그램을 프로세스라고 한다. 자체적인 실행환경을 가지고 있다. 모든 프로세스는 적어도 하나의 쓰레드를 가진다. 둘 이상일 때 멀티쓰레드 프로세스라고 부른다. 🧷 쓰레드, Thread 쓰레드는 일종의 실행환경의 단위로 실제 작업을 .. 2022. 12. 5. [자바 ORM 표준 JPA 프로그래밍] 다양한 연관관계 매핑 (6장) 📌 다대일 다대일 관계에서 외래 키는 항상 다쪽에 존재한다. 즉, 연관관계의 주인은 항상 다쪽이다. 1️⃣ 다대일 단방향 [N:1] 회원은 Member.team으로 팀 엔티티를 참조할 수 있지만 반대로는 참조할 수 없다. 2️⃣ 다대일 양방향 [N:1, 1:N] 다대일 양방향에서 핵심은 다음과 같다. 양방향은 외래 키가 있는 쪽이 연관관계의 주인이다. 양방향 관계는 항상 서로를 참조해야 한다. 📌 일대다 다대일 관계의 반대 방향이다. 보통 엔티티를 하나 이상 참조할 수 있으므로 자바 컬렉션을 사용한다. 1️⃣ 일대다 단방향 [1:N] 보통 자신이 매핑한 테이블의 외래 키를 관리하는데 Team.members로 회원 테이블의 TEAM_ID 외래 키를 관리한다. 이 경우 mappedBy 속성을 사용하지 않고 .. 2022. 12. 2. TIL : JWT, Access Token / Refresh Token (16) 🔐 JWT JWT란? Json Web Token의 약자로 인증에 필요한 정보를 암호화시킨 JSON 토큰이다. JSON 데이터를 Base64 URL-safe Encode로 인코딩하였고, 토큰 내부에 위조 방지를 위한 전자서명도 들어있다. 🧷 구조 (Header.Payload.Signature) Header : 타입과 해시 알고리즘(ex. HMAC SHA256, RSA)의 종류를 담고 있다. Payload : 사용자 권한, 정보 등을 담고 있다. Key-Value로 이루어진 정보를 Claim이라고 한다. Signature : 헤더에서 정해진 알고리즘과 비밀키를 사용해서 암호화한 인증을 위한 데이터이다. 🧐 왜 JWT를 사용할까? Base64를 통해서 암호화한다는 것을 알기 때문에 누구나 Payload를 쉽게.. 2022. 11. 30. 이전 1 ··· 3 4 5 6 7 8 9 다음