트랜잭션 프록시 내부 호출 시 문제점 클래스 내에 트랜잭션을 적용한 메서드가 있고 그렇지 않은 메서드가 있다. 만약 적용하지 않은 메서드 내에 트랜잭션을 적용한 메서드가 있다면 적용하지 않은 메서드를 실행 시 과연 내부에 있는 적용된 메서드의 트랜잭션이 실행할까? 답은 그렇지 않다. 아래 문제점과 해결 예시를 통해 알아보았다. 예제@Slf4j@SpringBootTestpublic class InternalCallV1Test { @Autowired CallService callService; @Test void internalCall() { callService.internal(); } @Test void externalCall() { ..
@SessionAttribute이란? @SessionAttribute은 세션을 편리하게 사용할 수 있도록 스프링에서 지원하는 어노테이션이다. @SessionAttribute 속성 값name: 기본 값은 빈 문자열이며, 세션에 저장된 값을 불러온다. ex) name="login" 으로 지정하면 세션에 저장된 key 값인 login의 value 값을 불러온다.required: 기본 값은 true이며, 만약 true일 경우 무조건 세션에 저장된 값을 불러온다. 만약 세션이 없을 경우 예외가 발생한다. 만약 false로 변경할 경우 세션 값이 없으면 null로 반환된다.예제@SessionAttribute 적용 X@GetMapping("/")public String sessionUnAnnotation(HttpS..
List, Map으로 빈 주입받기 List랑 Map으로 여러 개의 빈을 주입받을 수 있다. 아래 코드를 통해 어떻게 주입을 받는지 테스트하였다. 예제 우선 인터페이스 하나를 정의하고 하나의 인터페이스를 통해 두 클래스(@Component를 통해 빈 등록)를 구현하였다. 만약 아래와 같이 인터페이스를 통해 빈을 주입한다면 아래와 같이 경고 또는 오류가 발생할 것이다. 위 캡처의 오류는 인터페이스를 구현한 객체가 2개인데 어느 빈을 주입할지 몰라서 오류가 발생한 것이다. 만약 특정한 객체를 주입하고 싶다면 구현한 객체에 @Primary, @Qualifier 어노테이션으로 주입해 주면 된다. @Qualifier이란?" data-og-description="@Qualifier이란? @Qualifier은 @Pr..
@RequiredArgsConstructor이란? Lombok에서 제공해 주는 어노테이션으로 final이 붙은 필드와 @NonNull이 붙은 필드에 자동으로 생성자를 생성해 준다. 어떻게 @RequiredArgsConstructor만으로 객체가 주입이 되는지? @RequiredArgsConstructor를 사용하지 않는 생성자 주입은 아래와 같다. @Autowired가 붙은 생성자를 통해 객체를 주입하고 final 키워드를 통해 불변성을 보장한다.@Servicepublic class SampleService { private final SampleDAO event; @Autowired // @Autowired 생략 가능. 생성자가 1개뿐이기 때문 SampleService(Samp..
