Spring (10) 썸네일형 리스트형 Spring Event UnderTheHood Spring을 이용해 개발하다보면, 모듈간 결합도를 낮추기 위해 Spring Event를 활용하는 케이스가 있다. Spring Event를 편리하게 사용하고 있다 문득 내부 동작 원리가 궁금해 코드를 살펴봤다. 이번글은 Spring Event 동작 방식에 대해 설명하는 글이다. 크게 2가지 동작의 원리를 살펴보겠다.1. @EventListener 애노테이션을 통한 Handler 등록 과정2. ApplicationEventPublisher를 이용해 Event를 발행할 때 Event가 Listener로 전송되는 과정 @EventListener 애노테이션을 통한 Handler 등록 과정FlowApplicationContext Refresh 과정에 EventListenerMethodProcessor 부터 @Ev.. Spring @Transactional 동작원리 완벽 정리 들어가면서 Spring을 이용해 개발하다보면 누구나 한 번은 @Transactional을 사용해 본 경험이 있을 것이다. 나 또한 애플리케이션을 개발하며 @Transactional을 굉장히 많이 사용한 경험이 있다. 그러다 문득 @Transactional의 동작원리를 제대로 이해하지 않고 사용하고 있다는 생각이 들었다. 어렴풋이 @Transactional을 사용하면 비지니스 로직중 예상하지 못한 문제로 예외가 발생했을때 데이터 정합성을 보장하기 위해 그동안 수정된 데이터를 원복한다고만 이해하고 있었다. 그래서 이번기회에 @Transactional이 내부적으로 어떻게 동작하는지 이해하고 싶어 Spring 코드를 뜯어봤다. 이번 글에서는 Spring 코드를 뜯어보면서 이해한 내용을 정리해 공유하려고 한다.. Spring MVC에서 MappingJacksonValue 활용하기 들어가면서 Spring MVC를 사용해 애플리케이션을 개발하는 중이였다. 개발을 하다 응답 DTO 필드 중 일부를 운영 환경에서 노출하지 않고 싶은 상황이 생겼다. 이를 어떻게 개발하면 좋을지 고민했다. 그 과정에서 MappingJacksonValue를 알게 되었고, 이를 이용해 문제를 해결했다. 이번글에서는 MappingJacksonValue를 이용해 응답 DTO에서 특정 필드를 노출하지 않는방법과 동작원리를 공유하겠다. MappingJacksonValue ? MappingJacksonValue는 Spring Framework에서 제공하는 라이브러리로, 응답 DTO를 HTTPResponseBody에 직렬화 하기 전 내가 원하는 로직을 추가해 직렬화 과정을 커스터마이징 할 수 있다. A simple ho.. Spring Data Redis Pub/Sub 파헤치기 들어가면서 Pub/Sub을 지원하는 도구라 하면 보통 RabbitMQ, Apache ActiveMQ, Amazon SQS 와 Apache Kafka를 생각할 것이다. 하지만 Redis도 NoSQL 기능에 더해 Pub/Sub을 지원한다. 이번 글에서는 Redis Pub/Sub과 Spring Data Redis가 어떻게 Redis Pub/Sub을 지원하는지 알아보겠다. 목차 1. Redis Pub/Sub 2. Spring Data Redis로 Redis Pub/Sub 사용하기 3. Spring Data Redis 코드 파헤치기 Redis Pub/Sub Redis의 Pub/Sub 지원은 일반적인 Pub/Sub 기술들과 유사하다. 1. 구독자는 토픽을 구독한다. 2. 토픽에 메시지가 발행될때 메시지가 구독자들에.. Spring's STOMP support 파헤치기 들어가면서 실시간 채팅 서비스와 같이 클라이언트와 서버 간 양방향 소통이 필요한 서비스는 어떤 기술을 사용해 개발할까? 가장 많이 사용되는 기술은 WebSocket이다. WebSocket을 사용하면 HTTP보다 효율적으로 데이터를 주고받을 수 있다. 따라서 Spring의 WebSocket 지원 기능을 활용해 실시간 채팅 서비스를 개발할 수 있다. 하지만 WebSocket을 직접 이용해 채팅 서비스를 만들기 위해서는 번거로운 작업이 필요하다. 그리고 Spring에서도 WebSocket을 직접 이용하는 게 아니라, 상위 프로토콜을 사용하는 걸 권장한다. As explained in the introduction, direct use of a WebSocket API is too low level for ap.. Spring Websocket Trobleshooting!! (feat. Decorator Pattern) 글을 쓰게된 배경 Spring Websocket을 공부하기 위해 간단한 채팅서버를 만들기로 결정했다. 처음에 생각했던 것과 다르게 직접 찾아보니, 너무나 쉽게 채팅서버를 만들 수 있었다. (물론 간단한 채팅서버다.) 채팅서버를 만드는 과정은 Spring 공식 문서와 블로그 글들을 참고했다. 만드는 과정은 간단했지만, 채팅서버가 내가 원하는대로 동작하지 않았다. 문제를 해결하기 위해 공식 문서와 코드를 참고했고, 원인을 찾아 문제를 해결했다. 이 과정에서 배운점들을 기록하고 공유하고 싶어 글로 남기게 됐다. 만난 문제 Spring 공식문서를 참고하면 정말 몇 줄 안되는 코드로 간단한 채팅서버를 만들 수 있다. 추가로 블로그 글도 많은 도움이 되었다. 위 링크의 내용을 간략하게 요약하면 다음과 같다. 1. .. Spring Cloud GateWay의 non-blocking server Spring Cloud GateWay를 사용한 프로젝트를 진행하면서 로깅을 통해 내부적으로 netty가 사용되는걸 확인했다. 하지만 netty가 무엇인지 정확한 개념이 없었다. 그래서 관련 내용을 공부했고 해당 내용을 공유하려한다. 공식문서에 따르면 Spring Cloud GateWay는 Spring WebFlux 위에서 동작한다. This project provides a library for building an API Gateway on top of Spring WebFlux Spring WebFlux의 중요한 특징 중 하나는 non-blocking server를 사용한다는 것이다. 여기서 궁금증이 생겼다. non-blocking server와 blocking server의 차이점은 무엇이고, sp.. @SpringBootTest의 비밀! Spring과 JUnit을 사용해 개발하면서 통합 테스트를 위해 @SpringBootTest를 많이 사용해왔다. 하지만 누군가 @SpringBootTest에 대해 물어보면 Spring의 통합 테스트를 도와주는 애노테이션이라고 밖에 말할 수 없었다. 그래서 @SpringBootTest가 정확히 어떤 기능을 제공하고 내부적으로 어떻게 동작하는지 궁금해졌다. 이번 글을 통해 공부한 내용을 공유하겠다. 공식문서에서 설명하는 @SpringBootTest 가장먼저 공식문서를 통해 정확히 어떤 기능을 제공하는지 알아봤다. Annotation that can be specified on a test class that runs Spring Boot based tests. Provides the following fea.. 이전 1 2 다음