같은 팀원의 코드리뷰 중 JPA 변경감지를 사용하지 않고 명시적으로 saveAll 메서드를 호출하고 있는 코드를 발견하였습니다.변경감지를 사용하여 처리하는 게 어떻겠냐고 제안하였고 팀원 분께서는 변경감지가 동작하지 않는다고 하였습니다.메서드에는 @Transactional 어노테이션이 걸려있었고 트랜잭션 커밋 시 영속성 컨텍스트가 flush 되기 때문에 저는 동작할 것이라고 예상했는데 말이죠. 팀원 분께 괜찮다면 제가 한 번 실행해 봐도 되냐고 여쭤본 후 실행해 보니 정말 변경감지가 동작하지 않았습니다!🫨계속 확인해 보다가 이상한 점을 발견했습니다.팀원 분이 작성하신 코드는 다음과 같은 구조를 가지고 있었습니다.@Servicepublic class SelfInvocation { public Stri..
@Trasactional 어노테이션의 propagation에 대해 알아보고 중첩된 트랜잭션을 사용하게 될 때 생기는 문제에 대해 알아보겠습니다. @Transactional 어노테이션의 propagation 속성에는 총 7가지의 속성이 있습니다. public enum Propagation { REQUIRED(0), SUPPORTS(1), MANDATORY(2), REQUIRES_NEW(3), NOT_SUPPORTED(4), NEVER(5), NESTED(6); private final int value; private Propagation(int value) { this.value = value; } public int value() { return this.value; } } Propagtaion 속성 ..
스프링의 주요 개념에 대해 간단히 알아보겠습니다. IoC (Inversion of Control) 제어의 역전 제어의 역전, 즉 초기에 개발자가 객체를 생성하고 주입해 주던 것을 프레임워크에 의해 동작되는 것을 말합니다. 스프링에서는 Application Context에서 Bean을 생성하고 주입시켜 줍니다. DI (Dependency Injection) 의존성 주입 IoC의 대표적인 동작원리로 외부로부터 다이내믹하게 오브젝트를 주입받는 것을 말합니다. 다음과 같은 원칙을 따릅니다. 클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않는다. 즉 인터페이스에 의존하고 있어야 합니다. 런타임 시점의 의존관계는 컨테이너나 팩토리 같은 제3의 존재가 결정합니다. 의존관계는 사용할 오브젝트에 대한 레퍼런..
Java ChcekdException, UncheckedException과 Srping에서 DB @Transactional 어노테이션을 사용했을 때 어떻게 되는지에 대한 글입니다. Exception은 자바에 대한 부분이고, @Transactional은 Spring에 대한 부분이라 카테고리를 Java로 잡아야 할지, Spring 으로 잡아야 할지 굉장히 고민되었던 부분입니다.😅 일단 자바의 Exception은 크게 두 부류로 나뉩니다. Checked Exception과 RuntimeException을 상속받은 Unchecked Exception으로 나뉘어집니다. RuntimeException은 이름에서도 알 수 있듯이 실행 시 발생하는 Exception이고, Checked Exception은 컴파일 시 확..
1. 순환 참조를 방지할 수 있다. - 애초에 이렇게 코딩을 하는 경우는 드물겠지만....... 순환 참조가 발생하는 경우 애플리케이션이 구동되지 않는다. 2. 테스트 코드 작성이 편리하다. - 단순 POJO를 이용한 테스트 코드를 만들 수 있다. > bean으로 등록하지 않아도 됨. 3. immutable 하다. - 실행 중에 객체가 변하는 것을 막을 수 있다. (final 사용)