Spring

    Spring Webflux - Netty access log customize

    Web service 에서 사용자 및 외부에서 어떤 요청이 들어왔는지, 혹은 response에 대한 header 에는 어떠한 정보가 담겨져 있는 지 access log를 통해 확인 및 handling이 가능합니다. access log를 logging system으로 저장하여, ELK(Elasticsearch, logstash, kibana) 를 활용하거나 EFK (Elasticsearch, Fluentd, Kibana) 를 통해 log monitoring 이 가능합니다. Spring MVC vs Spring Webflux Spring MVC 의 경우 embedded tomcat의 access log 를 이용하면 되지만, Webflux의 경우 default 로 netty 로 돌아가기 때문에 tomcat a..

    @Transactional Propagation와 Spring Transaction Proxy Pattern

    @Transactional Propagation(전파) propagation의 옵션 옵션 REQUIRED Default - 부모 트랜잭션이 존재한다면 부모 트랜잭션 내에서 실행, 없다면 새로운 트랜잭션 생성 중간에 자식 / 부모에서 rollback 발생 시, 부모, 자식 모두 rollback REQUIRES_NEW 무조건 새로운 트랜잭션 생성(시작) 만약 호출한 곳에 이미 트랜잭션이 있다면 기존의 트랜잭션은 메서드가 종료할 때까지 잠시 대기, 본인의 트랜잭션 실행 rollback은 각각 이루어짐 MANDATORY 무조건 부모 트랜잭션에 합류, 이 때 부모 트랜잭션이 없다면 예외 발생 SUPPORTS 메소드가 트랜잭션을 필요로 하지는 않지만,진행 중인 트랜잭션이 존재하면 트랜잭션을 사용한다는 것을 의미진행..

    Service Discovery 패턴

    Service Discovery 배경 : MSA 분산 환경 : 서비스 간 원격 호출 구성 (일반적으로 원격 서비스 호출 - IP / port 이용 ) 클라우드 환경 내에서 오토 스케일링 등에 의해 동적 생성, 컨테이너 기반 배포 등으로 서비스 IP가 동적으로 자주 변경될 수 있음 또한 책에 나온 것 처럼 파티션 리벨런싱에 의해 노드에 할당된 파티션이 바뀌는 상황 또한 결국 dest 노드를 찾아야하는 상황 → (service discovery가 필요) 따라서 클라이언트가 서비스를 호출하기 위해서는 서비스의 위치(or Ip/Port) 를 알아야하는데, 이를 보통 service registry 에 등록해놓음 Service Registry 서비스 디스커버리의 가장 중요한 포인트이며, 이 때문에 높은 가용성 및 ..

    Request Mapping Handler Adapter

    Spring MVC 에서 HTTP 메시지 컨버터의 동작 위치 애노테이션 기반의 컨트롤러, @RequestMapping을 처리하는 핸들러 어댑터 - RequestMappingHandlerAdapter에서 동작 # 전체 동작 개요 이 때 RequestMappingHandlerAdapter에서는 들어온 request에 대해서 어떠한 형식(파라미터, 애노테이션 정보)를 기반으로 ArgumentResolver가 전달 데이터를 생성 Controller 정보 - HttpServletRequest, Model, @RequestParam, @ModelAttribute, @RequestBody, HttpEntity 등 이후 ArgumentResolver가 전달해준 값을 RequestMappingHandlerAdapter가..