[JPA/Hibernate] Flush 차이
·
Programming/Spring,JPA
FlushJPA와 Hibenate의 flush 동작은 개념적으로 동일하지만, 구현의 세부 사항에서 차이가 있다. JPA flushJPA는 표준 사양으로 구현체가 다양한데 Hibernate가 그 중 하나이다. JPA의 flush 는 엔티티 매니저를 통해 수행되며 아래와 같은 경우에 호출된다.트랜잭션이 커밋될 때JPQL 쿼리 실행 전명시적으로 flush 호출 Hibernate flushHibernate는 JPA 구현체 중 하나로, JPA 사양을 따르면서도 자체적으로 flush 실행 시점을 좀 더 세밀하게 제어한다. Hibernate에서 flush가 호출 되는 경우는 아래와 같다.트랜잭션을 커밋하기 전에 트리거 된다.JPQL 쿼리 결과가 영속성 컨텍스트의 변경 사항에 영향을 받을 수 있을 때, 쿼리를 실행하기..
[JPA] JPA 상속관계 매핑(@Inhertinace)
·
Programming/Spring,JPA
JPA 상속관계 매핑JPA 상속 관계 매핑이란, 객체지향 언어의 상속 개념을 데이터베이스 관계형 모델에 맞게 구현하는 기능이다.JPA는 객체 모델에서 상속 구조를 데이터베이스에 적절하게 매핑하기 위해 세 가지 전략을 제공한다.Joined TableSingle TableTable per ClassJPA에서 상속을 매핑할 때는 상위 클래스에 @Inheritance 어노테이션을 추가해 사용하며, 상속 전략을 지정할 수 있다.@Entity@Inheritance(strategy = InheritanceType.SINGLE_TABLE)public abstract class Product { @Id @GeneratedValue private Long id; private int price;} 1. Joined Tab..
[Spring] 예외 처리에만 국한되지 않는 @ControllerAdvice
·
Programming/Spring,JPA
@ControllerAdvice란?Spring MVC에서 컨트롤러 전역 설정을 정의하기 위해 사용하는 어노테이션이다. 해당 어노테이션을 사용하면 특정 컨트롤러에 국한되지 않고, 애플리케이션의 모든 컨트롤러에 적용할 전역 설정을 정의할 수 있다. @ControllerAdvice 어노테이션을 통해, 컨트롤러는 좀 더 컨트롤러의 역할에 집중할 수 있고, 코드의 중복을 제거하며 관심사의 분리를 이뤄낼 수 있다.  "@ControllerAdvice는 예외 처리에만 국한된 게 아니다."주로 예외 처리를 위한 글로벌 핸들러를 제공하는데 사용되지만 이 외에도 다양한 용도로 사용할 수 있다. @ControllerAdvice 사용 용도1. 글로벌 데이터 바인딩 초기화@RestControllerAdvicepublic cla..
[Spring] 단일 행이 반환될때는 queryForObject가 항상 정답일까?
·
Programming/Spring,JPA
프로젝트를 진행하며 queryForObject에 대해 공부한것을 정리해보려 한다. List result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper(), id); 처음에 구현한 코드로, Member 테이블에서 "ID"는 unique한 컬럼이다. 따라서, 최대 단일 행이 조회되는것인데, List 객체를 반환하는것이 사실상 의미가 없다. queryForObject 사용 이유1.단일 행 반환이기에 List 필요없음2.내 코드를 보는 누군가에게 단일 행을 조회하는 것을 명시 이러한 이유들로 queryForObject를 사용하는것이 좋다고 생각했다.   🚫 에러처리그런데, 하나 더 유의할게 있었다. 최대 단일 행 반환이지, ..
[Spring] 스프링에서 사용되는 디자인 패턴들
·
Programming/Spring,JPA
디자인 패턴이란?반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션이다. 프로그램을 작성하다보면 프로그래머들은 비슷비슷한 상황에 직면하게 되는데, 그러한 상황에서 해결할 수 있는 솔루션이라고 생각하면 된다.어댑터 패턴✔️ 어댑터 패턴이란?호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 하는 디자인 패턴으로, 호출 당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴.  ✔️실생활에서의 어댑터우린 이미 실생화에서 어댑터를 사용하고 있다. 나는 아이폰 충전기를 가지고 있는데, C타입의 기기를 충전하기 위해선 어탭터를 이용하여 충전할 수 있다.  ✔️ 구현 방법구현 방법은 위 그림과 같다. 어댑터는 한 객체의 인터페이스를 구현하고 다른 객체를..
[Spring] 스프링 삼각형(IoC/DI, AOP, PSA)
·
Programming/Spring,JPA
✔️ DI(Dependency Injection)*의존성 주입 의존성 주입에 대해 살펴보기 전에 의존성(Dependency)이란 무엇인지에 대한 정의가 필요하다. 프로그래밍에서 이 의존성이란 무엇일까?  의존성/의존 관계란?1. 코드 레벨(클래스 레벨)의 의존 관계 : Supplier가 변경되면, Client 코드가 영향을 받는다. 2. 사용 의존 관계/오브젝트 의존 관계 : A 오브젝트가 B 오브젝트를 사용하면 A가 B를 의존하고 있다고 표현한다.​ 이러한 의존 관계에서 A는 B없이 작동할 수 없다. 또한, B의 기능이 추가 또는 변경되거나 형식이 바뀌면 그 영향이 A에 미친다. 스프링의 핵심은 코드 레벨(클래스 레벨)의 의존관계와 런타임 레벨의 오브젝트 의존 관계가 다를 수 있다는 것이다.그리고 이를..