JPA의 N+1문제는 연관관계가 설정된 엔티티를 조회할 경우, 조회된 데이터 개수(N)만큼 연관관계의 조회 쿼리가 추가로 발생하는 현상입니다.ex) 유저 한명이 쓴 게시글들을 조회할 때, 유저-게시글을 join한 형태의 쿼리문을 원했지만, N개의 게시글을 또 조회하는 쿼리가 날아가는 경우라고 생각하면 될 것 같습니다. N+1 문제를 어떻게 해결할 수 있을까요?N+1문제를 해결하기 위해서는 fetch join 또는 @EntityGraph를 사용해 볼 수 있습니다.fetch join연관관계에 있는 엔티티를 한번에 즉시 로딩하는 구문입니다.쿼리 한번에 모든 데이터를 가져오기 때문에 JPA가 제공하는 Paging API 사용 불가능 (Pageable 사용 불가)1:N 관계가 두 개 이상인 경우 사용 불가fet..
자잘한 cs
엔티티 매니저는 엔티티의 상태를 변경하고, 영속성 컨텍스트와 상호작용함으로써 영속 로직을 수행하는 역할을 가지고 있습니다. +) 영속성 컨텍스트는 엔티티를 영구 저장하는 환경으로 1차 캐싱, 쓰기 지연, 변경 감지를 통해 영속 로직을 효율적으로 할 수 있게 해줍니다. 이런 효율적인 영속 로직 수행을 위해서 엔티티는 영속성 컨텍스트에 관리되어야 합니다. 이러한 작업을 도와주는 것이 엔티티 매니저입니다. → 엔티티 매니저는 엔티티가 영속성 컨텍스트에서 효율적으로 관리되도록 도와주는 것이다. 조금 더 구체적으로 엔티티 매니저의 역할을 설명해주세요.엔티티는 영속성 컨텍스트와 관련하여 비영속, 영속, 준영속, 삭제 4가지 상태를 가질 수 있습니다. 엔티티 매니저는 persist, merge, remove, clo..
먼저ddl-auto 옵션은 스프링 부트 어플리케이션에서 Hibernate와 같은 JPA 구현체를 사용할 때 데이터베이스 스키마 관리를 제어하는 설정입니다. 이 옵선은 application-properties 또는 application.yml 파일에서 설정할 수 있으며, 다양한 값에 따라 데이터베이스 스키마에 대해 다른 동작을 수행합니다. ddl-auto 옵션에는 none, validate, update, create, create-drop 등이 존재합니다. 그래서 각 옵션들은 언제 사용하나요?nonenone으로 설정하면 데이터베이스 스키마와 관련된 어떠한 작업도 수행하지 않습니다. 데이터베이스 스키마를 수동으로 관리하고 싶을 때 유용하며, 프로덕션 환경에서 주로 사용합니다.validate어플리케이션이 ..
Bytebytego 블로그를 읽으면서 최근에 관심이 생긴 Redis에 대해서 글을 찾다가, Redis가 빠른 이유에 대한 글을 읽고 정리하게 되었습니다. Ram 기반 데이터베이스디스크 대신 메모리에 데이터 저장메모리는 CPU와 직접 연결되어 있기 때문에 CPU에서 빠르게 데이터를 검색 가능높은 읽기/쓰기 처리량과 낮은 latency가 장점데이터 저장시 메모리 크기에 제한된다는 단점IO 멀티플렉싱 & 단일 스레드비동기 IO를 사용하여 여러 클라이언트 요청을 동시에 처리가능높은 처리량을 유지단일 스레드인 레디스는 멀티 스레드를 사용하는 데이터베이스의 컨텍스트 전환 비용이 들지 않음멀티 스레드는 스레드 간의 컨텍스트 전환 비용 발생 & 락을 사용하고 동기화를 위한 메커니즘으로 인해 처리량이 떨어질 수 있음네이..
@Transactional 어노테이션에 대해서 공부를 하던 중 @Transactional 어노테이션을 사용하게되면 스프링에서 해당 메서드에 대한 프록시를 만든다는 글을 보고 프록시 패턴에 대한 궁금증이 생겨 정리하게 되었습니다. 개념대상 원본 객체를 대리하여 대신 처리하게 함으로써 로직의 흐름을 제어하는 행동 패턴이다.어떤 객체를 사용하고자 할 때, 객체를 직접적으로 참조하는 것이 아닌 해당 객체의 프록시 객체를 통해 대상 객체에 접근하는 방식을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고, 실제 객체의 기능이 필요한 시점까지 객체의 생성을 미룰 수 있다. 사용 시기접근을 제어하거나 기능을 추가하고 싶은데, 기존의 특정 객체를 수정할 수 없는 상황일 때초기화..
이번 글은 reverse proxy의 개념을 간단하게 알아보고자 합니다.아래 첨부된 sse 블로그에서 nginx 부분을 보다가 reverse proxy에 대해서 궁금증이 생겨서 찾아보게되었습니다. 먼저 리버스 프록시는 웹서비스의 성능 향상, 보안 강화 및 유연한 확장성 제공 등 다양한 이점을 제공하며, 많은 서비스에서 활용되고 있습니다. 개념리버스 프록시란 클라이언트와 웹 서버 간의 중개자 역할을 하는 서버입니다.클라이언트로부터 요청을 대신 받아 웹 서버에 전달하고, 웹 서버의 응답을 클라이언트에게 전달하는 역할을 합니다.이를 통해 웹 서버의 부하를 분산시킬 수 있고, 보안을 강화하는 등 다양한 기능을 수행하게 됩니다. 동작 방식클라이언트가 리버스 프록시에 요청을 보낸다.리버스 프록시는 요청을 웹 서버..