Spring

    [Spring] @Transactional -> 같은 클래스 내 메서드 호출 시 트랜잭션 전파 안되는 이슈

    [Spring] @Transactional -> 같은 클래스 내 메서드 호출 시 트랜잭션 전파 안되는 이슈

    여기 간단한 서비스 클래스가 있다.@Serviceclass UserService( private val userRepository: UserRepository, private val teamService: TeamService,) { @Transactional(propagation = Propagation.REQUIRED) fun saveUser(user: User) { teamService.saveTeam(user.team) userRepository.save(user) }}@Serviceclass TeamService( private val teamRepository: TeamRepository,) { @Transactional(propa..

    [Spring] ObjectMapper -> Jackson2ObjectMapperBuilder vs 생성자

    1. 기본생성자가 없는 객체에 대한 역직렬화 차이여기 객체 1개가 있다.@Getter@AllArgsConstructorpublic class TestDto {    private String id;} 기본생성자가 없는 객체를 만들었다. 직렬화/역직렬화 테스트를 해보자.@RestControllerpublic class TestController {    @GetMapping    public TestDto test(@RequestBody TestDto dto) {        return dto;    }}// input{    "id": "1"}// output{    "id": "1"}문제 없이 성공한다. 성공하는 이유는 JacksonHttpMessageConvertersConfiguration 클래스..

    [Spring] jackson 역직렬화, 필드가 1개일 때 HttpMessageNotReadableException

    jackson 2.17 문제 상황개발환경java 21spring 3.3.0jackson 2.17.1 다음과 같은 java 코드가 있다.@RestControllerpublic class TestController { @GetMapping public TestDto test(@RequestBody TestDto dto) { return dto; }}@Getter@AllArgsConstructorpublic class TestDto { private String id;} 1. TestDto는 필드가 1개 & 기본 생성자 없이 전체 생성자만 갖고 있다.2. 컨트롤러에서는 필드가 1개인 TestDto를 @RequestBody로 역직렬화해야 한다. HttpMessageNotRead..

    [Spring] Pointcut 유형에 따라 Proxy 생성 방식이 달라진다? (CGLIB or JDK Proxy)

    [Spring] Pointcut 유형에 따라 Proxy 생성 방식이 달라진다? (CGLIB or JDK Proxy)

    "토비의 스프링 3.1 Vol.1 > 6.5.3 포인트컷 표현식을 이용한 포인트컷"을 공부하면서 배운 부분을 기록. 여기 프록시 관련 빈 설정 파일이 있다.@Configurationclass BeanConfig { @Bean fun userService(): UserService = UserServiceImpl(userLevelUpgradePolicy(), userDao()) @Bean fun defaultAdvisorAutoProxyCreator(): DefaultAdvisorAutoProxyCreator = DefaultAdvisorAutoProxyCreator() @Bean fun transactionAdvisor(): DefaultPointcutAdvisor = ..

    [리액티브 프로그래밍] Operator

    [리액티브 프로그래밍] Operator

    스프링으로 시작하는 리액티브 프로그래밍 책 정리 스프링으로 시작하는 리액티브 프로그래밍 | 황정식 - 교보문고스프링으로 시작하는 리액티브 프로그래밍 | *리액티브 프로그래밍의 기본기를 확실하게 다진다*리액티브 프로그래밍은 적은 컴퓨팅 파워로 대량의 요청 트래픽을 효과적으로 처리할 수 있는product.kyobobook.co.kr Operator란?✅ Operator리액티브 스트림즈에서 연산자 역할.ex) just(), create(), fromArray(), filter(), map()-> Reactor에서 가장 중요한 구성요소. +) Operator를 처음 이해할 때는 마블 다이어그램을 보는 것이 좋은데, 마블 다이어그램에 대한 설명은 다음 글을 참고하자.https://gksdudrb922.tistor..

    [리액티브 프로그래밍] Testing

    스프링으로 시작하는 리액티브 프로그래밍 책 정리 스프링으로 시작하는 리액티브 프로그래밍 | 황정식 - 교보문고스프링으로 시작하는 리액티브 프로그래밍 | *리액티브 프로그래밍의 기본기를 확실하게 다진다*리액티브 프로그래밍은 적은 컴퓨팅 파워로 대량의 요청 트래픽을 효과적으로 처리할 수 있는product.kyobobook.co.kr 시작하기에 앞서, reactor-test 모듈의 기능을 사용하기 위해, build.gradle 파일에 다음 의존성을 추가한다.dependencies { testImplementation 'io.projectreactor:reactor-test'}  StepVerifier를 사용한 테스팅Reactor에서 가장 일반적인 테스팅 방식은,구독 시점에 Operator 체인이 시나리오..

    [리액티브 프로그래밍] Debugging

    [리액티브 프로그래밍] Debugging

    스프링으로 시작하는 리액티브 프로그래밍 책 정리 스프링으로 시작하는 리액티브 프로그래밍 | 황정식 - 교보문고스프링으로 시작하는 리액티브 프로그래밍 | *리액티브 프로그래밍의 기본기를 확실하게 다진다*리액티브 프로그래밍은 적은 컴퓨팅 파워로 대량의 요청 트래픽을 효과적으로 처리할 수 있는product.kyobobook.co.kr Reactor에서의 디버깅 방법✅ Reactor 디버깅의 어려움동기식 또는 명령형 프로그래밍 방식은 Exception이 발생했을 때,스택트레이스를 확인하거나, 예외 상황 발생이 예상되는 코드에 브레이크포인트를 걸어 문제가 발생한 원인을 단계적으로 찾아가면 된다.반면에, Reactor는 대부분 비동기적으로 실행되고, 선언형 프로그래밍 방식으로 구성되므로 디버깅이 쉽지 않다.-> 이..

    [리액티브 프로그래밍] Context

    스프링으로 시작하는 리액티브 프로그래밍 책 정리 스프링으로 시작하는 리액티브 프로그래밍 | 황정식 - 교보문고스프링으로 시작하는 리액티브 프로그래밍 | *리액티브 프로그래밍의 기본기를 확실하게 다진다*리액티브 프로그래밍은 적은 컴퓨팅 파워로 대량의 요청 트래픽을 효과적으로 처리할 수 있는product.kyobobook.co.kr Context란?✅ 프로그래밍에서 Context어떠한 상황에서 그 상황을 처리하기 위해 필요한 정보ex)ServletContext: Servlet이 Servlet Container와 통신하기 위해 필요한 정보를 제공하는 인터페이스.ApplicationContext: SpringFramwork에서 애플리케이션 정보를 제공하는 인터페이스. (ex. Spring Bean)Securit..