728x90

개발/Java & Kotlin 134

[JPA] JPA의 N+1 문제 알아보기

N+1에 대해서 알아보자  - 지난 번 만났던 N+1 문제[JPA] N+1 해결하기 [JPA] N+1 해결하기N+1은 한 번의 쿼리를 요청했는데 여러 번 쿼리가 요청되는 현상을 말한다.(1+N) Book 도메인에 아래와 같이 연관관계가 있었고, (각각 양방향 연관관계) @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Cdevhooney.tistory.com     - 개념N + 1 문제는 연관 관계가 설정된 엔티티를 조회할 경우에, 조회된 데이터 개수(N)만큼 연관관계의 조회 쿼리가 추가로 발생하는 현상.예를 들어, 블로그 게시글과 댓글이 있는 경우, 게시글을 조회한 후 각 게시글마다 댓글을 조회하기 위해 추가 쿼리가 발생한다면 N + 1 문제가 발생..

[JPA] 엔티티 매니저 알아보기

엔티티 매니저에 대해서 알아보자 !   1. 영속성 컨텍스트엔티티 매니저에 대해 알기 위해선 영속성 컨텍스트에 대해 알아야 한다. 영속성 컨텍스트는 엔티티를 영구 저장하는 환경으로 1차 캐싱, 쓰기 지연, 변경 감지를 통해 영속 로직을 효율적으로 할 수 있게 해준다. 이러한 효율적인 영속 로직 수행을 위해서 엔티티는 영속성 컨텍스트에 관리되어야 한다.     2. 엔티티 매니저영속성 컨텍스트를 도와주는 것이 바로 엔티티 매니저이다. 엔티티 매니저는 엔티티의 상태를 변경하고, 영속성 컨텍스트와 상호작용함으로써 영속 로직을 수행하는 역할을 가지고 있다.  - 역할엔티티는 영속성 컨텍스트와 관련하여 4가지 상태(비영속, 영속, 준영속, 삭제)를 가질 수 있다. 엔티티 매니저는 persist, merge, re..

[JPA] JPA의 ddl-auto 옵션 알아보기

JPA의 ddl-auto 옵션은 각각 어떤 동작을 하고 어떤 상황에서 사용하는 지 알아보자   ddl-auto 옵션은 스프링 부트 애플리케이션에서 Hibernate와 같은 JPA 구현체를 사용할 때 데이터베이스 스키마 관리를 제어하는 설정이다. 이 옵션은 application.properties 또는 application.yml 파일에서 설정할 수 있으며, 다양한 값에 따라 데이터베이스 스키마에 대해 다른 동작을 수행한다. ddl-auto 옵션에는 none, validate, update, create, create-drop 등이 존재한다 . 1. none데이터베이스 스키마와 관련된 어떠한 작업도 수행하지 않는다.데이터베이스 스키마를 수동으로 관리하고 싶을 때 유용하며, 프로덕션 환경에서 주로 사용된다...

[JPA] Spring Data JPA에서 새로운 Entity 판단하는 방법

Spring Data JPA에서 새로운 Entity를 저장할 때 public interface SaveTestRepository extends JpaRepository {} save @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null."); if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } } Repository의 save 메소드로 저장한다.   저장할 때 Entity가 insert 인지 update 인지 확인하는 로..

[Java] 웹 어댑터 구현하기

만들면서 배우는 클린 아키텍처 : 자바 코드로 구현하는 클린 웹 애플리케이션 읽고    - 의존성 역전- 웹 어댑터의 책임- 컨트롤러 나누기- 유지보수 가능한 소프트웨어를 만드는 데 어떻게 도움이 될까         " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스  "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

[Java] 유스케이스 구현하기

만들면서 배우는 클린 아키텍처 : 자바 코드로 구현하는 클린 웹 애플리케이션 읽고    - 도메인 모델 구성하기- 유스케이스 둘러보기- 입력 유효성 검증- 생성자의 힘- 유스케이스마다 다른 입력 모델- 비즈니스 규칙 검증하기- 풍부한 도메인 모델 vs 빈약한 도메인 모델- 유스케이스마다 다른 출력 모델- 읽기 전용 유스케이스는 어떨까?         ">HTML 삽입미리보기할 수 없는 소스  "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

[Java] 코드 구성하기

만들면서 배우는 클린 아키텍처 : 자바 코드로 구현하는 클린 웹 애플리케이션 읽고       - 계층으로 구성하기- 기능으로 구성하기- 아키텍처적으로 표현려겨 있는 패키지 구조- 의존성 주입의 역할     " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스  "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

[Java] 의존성 역전하기

만들면서 배우는 클린 아키텍처 : 자바 코드로 구현하는 클린 웹 애플리케이션 읽고       단일 책임 원칙과 의존성 역전 원칙  - 단일 책임 원칙- 부수효과에 대한 이야기- 의존성 역전 원칙- 클린 아키텍처- 육강형 아키텍처(헥사고날 아키텍처)- 유지보수 가능한 소프트웨어를 만드는 데 어떻게 도움이 되는지?    ">HTML 삽입미리보기할 수 없는 소스  "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

[Java] 계층형 아키텍처의 문제

만들면서 배우는 클린 아키텍처 : 자바 코드로 구현하는 클린 웹 애플리케이션 읽고        계층형 아키텍처의 문제는 무엇일까? - 계층형 아키텍처는 데이터베이스 주도 설계를 유도한다.- 지름길을 택하기 쉬워진다.- 테스트하기 어려워진다.- 유스케이스를 숨긴다.- 동시 작업이 어려워진다.- 유지보수 가능한 소프트웨어를 만드는 데 어떻게 도움이 될까    " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스  "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90