본문 바로가기

Spring69

금쪽 같은 트러블 슈팅 (최적화) 1. DB 조회 쿼리 최적화 1-1. Projection 을 통해 필요한 값만 가져오기 전체 필드가 아닌 필요한 필드만 받아오는 방법 적용 전 : SELCT * FROM User; 적용 후 : SELECT username, profileImageUrl FROM User; List findById(Long userId); public interface UserProfile { String getUsername(); String getProfileImageUrl(); } 1-2. 하이버네이트 @BatchSize 하이버네이트에서 제공하는 어노테이션을 사용하면 연관된 엔티티를 조회할때 지정한 사이즈만큼만 조회한다. (SQL IN절 사용) @Entity public class Member { @Id @Genera.. 2024. 3. 13.
CS(Computer Science) 공부법 전공 기준으로 CS 란? 1. 운영 체체 ( OS ) 2. 컴퓨터 구조 (CPU RAM HDD ....) 3. 자료 구조 (HEAP , STACK ......) 4. 네트워크 (CCNA?) (HTTPS , TOKEN SESSION COOKIE ) 5. DB (PreSql) 웹 서비스 기준으로 뭘 공부 해야 할가? 네트워크 / (HTTP 프로토콜) Device (OS) DB ( 개발자는 영원히 공부 해야한다... ) CS 공부법 1. 키원드 선정 => 2. 질문 수집 => 3. 개념 공부 => 4. 실습 및 정리 1. 키원드 선정 : 뭘 공부 해야 하는지 선정 e.g 유저 쪽이면 네트워크/보안 쪽 으로 공부, 빅데이터면 데이터 구조 혹을 알고리즘 공부. 2. 질문 수집 : 어떻게 작동 되고 장단점, 다른 .. 2024. 3. 7.
SpringData JPA, N+1 문제를 해결 N+1 문제란? 엔티티 하나을 조회하기 위해서 1:N 로 연관된 엔티티까지 조회 쿼리문이 N+1번 날라가는 이슈 이로 인해 아래와 같은 시스템에 심각한 성능 저하가 일어날 수 있다 Comment 조회 - 1번 Comment의 갯수(각 Comment가 가지고 있는 Board 조회) - N번 이렇게 하면 N+1번의 쿼리가 발생하는 것이다 해결방법 3가지: GlobalFetch Fetch Join EntityGraph Global Fetch Strategy 글로벌 패치 전략이란, 엔티티를 생성할 때(컴파일 시점) 결정 되는 연관관계 전략이 해결방법은 @ManyToOne 속성에 fetch 속성으로 LAZY를 주면 된다 public class Comment { ... @ManyToOne(fetch = FetchT.. 2024. 3. 6.
Transactional 심화 / Isolation (격리 수준) Propagation (전파 전략) 1. PROPAGATION_REQUIRED ( JpaTransactionManager Default ) 부모 트랜잭션이 존재할 경우 부모 트랜잭션에 참여한다. 부모 트랜잭션이 없을 경우 새 트랜잭션을 시작한다. 일반적으로 사용되는 트랜잭션의 전파유형이다. 즉, 어떻게 해서든 (상속받서든, 내가 새로만들든) Transaction 을 시작하는 전파 유형 작한다. 2. PROPAGATION_SUPPORTS 부모 트랜잭션이 존재할 경우 부모 트랜잭션에 참여한다. 부모 트랜잭션이 없을 경우 non-transactional 하게 동작한다. 부모 따라서 전파되는 유형 3. PROPAGATION_MANDATORY 부모 트랜잭션이 존재할 경우 부모 트랜잭션에 참여한다. 부모 트랜잭션이.. 2024. 3. 6.