JPA OSIV에 대해
JPA OSIV 사용시 주의할 점에 대해 알아보자. OSIV Open Session In View (Open EntityManager In View) OSIV란 영속성 컨텍스트의 생존 범위를 결정하는 것을 말한다. 스프링 사용시 OSIV 옵션은 기본으로 true(ON)로 설정되어있다. OSIV를 true(ON)로 했을 때와 fals...
JPA OSIV 사용시 주의할 점에 대해 알아보자. OSIV Open Session In View (Open EntityManager In View) OSIV란 영속성 컨텍스트의 생존 범위를 결정하는 것을 말한다. 스프링 사용시 OSIV 옵션은 기본으로 true(ON)로 설정되어있다. OSIV를 true(ON)로 했을 때와 fals...
영속성 컨텍스트 엔티티를 영구 저장하는 환경 이라는 뜻 영속성 컨텍스트는 논리적인 개념 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 엔티티의 생명주기 비영속(new/transient) - 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 Member mem...
트랜잭션 전파(propagation) 트랜잭션 안에 새로운 트랜잭션이 들어올 때 어떻게 동작할지를 결정하는 것을 트랜잭션 전파라고 한다. 스프링에서는 기본 옵션은 REQUIRED로 되어있다. 그 외에도 다양한 옵션들이 존재한다. REQUIRED 만약 트랜잭션 1이 먼저 실행 중일 때 새로운 트...
JDBC 등장 이유 보통 애플리케이션은 클라이언트에서 요청이 들어오면 서버에서 DB에서 요청에 맞는 데이터를 알맞게 처리한다. 이런 과정에서 애플리케이션 서버와 DB는 서로 통신을 해야한다. 커넥션 연결 - TCP/IP를 사용 SQL 전달 결과 응답 ...
프로젝트 중 트러블 슈팅 정리 내용과 BatchSize를 사용 시 주의할 점에 대해 정리한 글 문제 상황 게시글 불러오는데 게시글 숫자만큼 사진을 가져오는 쿼리가 나감 (N+1 문제) 게시글 로딩이 3초가량 걸림 해결 @OneToMany(mappedBy = "board", cascade = CascadeType.ALL) @Bat...
Querydsl Projections 사용시 발생한 문제 해결 과정 프로젝트 진행 중 발생한 오류에 관해 기록했습니다. QueryDsl에서 Projections.bean() 사용 시 발생하는 ExpressionException 일으킨 기존 코드 package com.WalkiePaw.domain.chatroom.repository; import...
JPA 적용 중 Entity를 절대 요청 파라미터나 응답에 포함시켜서는 안된다는 것을 배웠고, 프로젝트 중 DTO를 적용하기로 정했습니다. 그러다보니 이 DTO를 어느 시점에 Entity로 변환시켜야될까 고민이 되었고 그에 대해 공부한 내용입니다. Spring의 3계층 기본적으로 Spring에서는 3개의 계층으로 나눈다. Presenta...
프로젝트를 진행하다 builder 패턴을 적용하면서 배운 것들을 정리한 글이다. 문제점 처음 JPA를 프로젝트에 사용하면서 Entity 객체의 생성에 많은 제약이 필요하다는 점을 배웠다. 그래서 처음에는 생성자를 private를 막아 캡슐화 한 뒤 팩토리 메서드를 사용해 create method를 구현했다. 생성자 + 팩토리 메서드 (생성자와 ...
프로젝트 진행하면서 db 연관관계를 설계하면서 foreign key를 어떤 식으로 연결 해야할지 고민을 많이했다. 그러던 중 github에서는 foreign key를 사용하지 않는다는 것을 보았다. 링크 이에 대해 한번 정리해보자. foriegn key를 사용했을 때 발생할 수 있는 문제점 외래 키는 데이터베이스 샤딩을 방해 외래 키는 ...
함수형 인터페이스 정확히 하나의 추상 메서드만 존재하는 인터페이스이다. 이를 통해 우리가 동적 파라미터화 된 메소드에 람다나 익명 클래스로 직접 코드를 보낼 수 있다. 또한 `디폴트 메서드를 통해 하나의 추상 메서드 외에 다양한 메서드를 사용할 수 있다. 쉽사리 이해가 되지 않는다면 Comparator 인터페이스를 참고해보자. 람...