CheckedException / Unchecked Exception
Checked Exception
- 처리여부 : 반드시 예외 처리 해야함
- 트랜잭션 Rollback 여부 : Rollback 안됨
- 대표 Exception : IOException, SQLException
Unchecked Exception
- 처리여부 : 예외 처리 하지 않아도됨
- 트랜잭션 Rollback 여부 : Rollback 안됨
- 대표 Exception : NullPointerException, IllegalArgumentException
JPA N+1 문제
JPA N+1란?
- Entity에 대해 하나의 쿼리로 N개의 레코드를 가져왔을 때, 연관관계 Entity를 가져오기 위해 쿼리를 N번 추가적으로 수행하는 문제
해결 방법
- Fetch join 사용
- @EntityGraph 사용
- 주의 사항
- JoinFetch는 Inner Join, Entity Graph는 Outer Join
- 카테시안 곱(Cartesian Product)이 발생하여 Subject의 수만큼 Academy가 중복 발생
- 일대다 필드의 타입을 Set으로 선언
- distinct를 사용하여 중복을 제거하는 것
테이블 정규화
정규화란
- 테이블 간에 중복된 데이터를 허용하지 않는다는 것
- 무결성(Integrity)를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있음
제1정규화
- 테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것
제2정규화
- 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것
- 기본키의 부분집합이 결정자가 되어선 안된다는 것
제3정규화
- 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것
- 이행적 종속이라는 것은 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것
BCNF 정규화
- 제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것