Spring8 [WebFlux] 기본 개념 / Mono와 Flux 🐻 WebFlux란? Spring WebFlux는 Spring 5에서 새롭게 추가된 모듈입니다. WebFlux는 클라이언트, 서버에서 reactive 스타일의 어플리케이션 개발을 도와주는 모듈이며, reactive-stack web framework이며 non-blocking에 reactive stream을 지원합니다. □ 장점 : 고성능, spring 과 완벽한 통합, netty 지원, 비동기 non-blocking 메세지 처리 □ 단점 : 오류처리가 다소 복잡하다. Back Pressure 기능 없음 스프링5는 Spring Boot 2 부터 도입이 되었으며, Spring Boot 2 의 stack 는 아래와 같습니다. Reactive Stack 를 사용할지, Servlet Stack 를 사용할지 선택.. 2022. 8. 23. [Spring] Event Driven (우아콘2020) 우아콘 강의 자료와 아래 책을 참고하여 정리하였습니다. 도메인 주도 개발 시작하기 [우아콘2020] 배달의민족 마이크로서비스 여행기 회원시스템 이벤트기반 아키텍처 구축하기 시스템 간 강결합 문제 쇼핑몰에서 구매를 취소하면 환불 처리를 해야 합니다. @Service public class CancelOrderService { private RefundService refundService; @Transactional public void cancel() { // order 취소 로직 // 환불 로직 try { refundService.refund(); } catch(Exception ex){ ??? } } } 보통 결제 시스템은 외부에 존재하므로 RefundService는 외부에 있는 결제 시스템이 제공하.. 2022. 8. 21. [Spring] 웹 소켓 연결 끊김 감지하기 Summary 클라이언트A가 서버와 소켓 연결을 끊을 경우(Disconnect) 서버에 해당 소식을 전달하고, 소식을 접한 서버가 나머지 클라이언트들에게 클라이언트A의 연결이 끊겼음을(퇴장했음을) 알리는 형태를 구성하고 싶었다. 사용자가 Disconnect 버튼을 직접 눌러서 서버와 소켓 연결을 끊을 경우엔 연결이 끊기기 직전 서버 쪽으로 알림 요청을 먼저 보내는 방법이 채택 가능하겠으나, 사용자들은 브라우저의 탭을 닫는 등 (개발자 기준)비정상적인 방법을 많이 이용한다. 그래서 우리는 Disconnect 버튼과 관계없이, 클라이언트와 연결이 끊기면 서버에서 이를 감지해내는 방법을 찾아야 했다. @EventListener + SessionDisconnectEvent @Configuration public.. 2022. 8. 17. JPA 기본 - 엔티티 매핑 1. @Entity @Entity가 붙은 클래스는 JPA가 관리 JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 JPA 스펙상 파라미터가 없는 public 또는 protected 기본 생성자 필수 임베디드 타입에도 기본 생성자 필수 생성자에 파라미터 줄 경우 기본 생성자가 자동으로 생성안되기 때문에 따로 만들어줘야 한다. 기본 생성자를 사용할 일이 없고 그냥 스펙상 만들어 준 경우라면 public 대신 protected로 범위를 지정한다. 이렇게 해두면 나중에 사용할 때 기본 생성자는 스펙상 둔거구나 하고 알 수 있다. 이런 제약을 두는 이유는 JPA 구현 라이브러리가 객체를 생성할 때 프록시나 리플랙션 같은 기술을 사용할 수 있도록 지원해야 하기 때문 final 클래스, enum, int.. 2022. 8. 14. JPA 기본 - 영속성 관리 1. 영속성 컨텍스트 엔티티를 영구 저장하는 환경이라는 뜻으로 EntityManager을 생성하면 영속성 컨텍스트가 J2SE 환경에서는 1:1로 눈에 보이지 않게 생성된다고 보면 된다.(스프링 프레임워크 같은 컨테이너 환경에서는 엔티티 매니저와 영속성 컨텍스트가 N:1의 관계를 가진다.) 즉, 애플리케이션 계층과 DB계층 사이에 영속성 컨텍스트가 있다고 생각하면 된다. persist 한다고 해서 바로 db에 쿼리가 날려지는게 아니라 1차적으로 영속성 컨텍스트의 관리하에 들어가 있는 것이다. EntityManager em // 주입 받았다고 가정 // Member은 Entity 클래스 Member member = new Member(); // member은 비영속 상태 em.persist(member); .. 2022. 8. 13. [Spring] 의존관계 자동 주입 (DI , IoC) DI (Dependency Injection) 아래 Dog 라는 내부 객체의 생성(new 선언)을 Zoo가 직접 할것인지, 아니면 외부의 누군가가 대신 생성하고 그걸 받아서 쓸건지의 차이이다. (C++ 도 new 선언이 코드의 시작과 끝임) public class Zoo { public Dog; } Zoo가 직접하면 무엇이 문제일가? Dog가 수정이 되면, Zoo도 같이 끌려다니게 된다 (의존성이 높아진다) 즉, 아래 정리글과 같은 행위를 하는 이유 : 스프링은 코드의 가독성과 의존성(클래스가 다른 클래스에 종속적임) 을 해결하기 위해 Application Context 라는 컨테이너를 제공한다. (new 선언을 대신 해줌) 이 컨테이너에서는 Bean 들을 관리하며 각 클래스에서 사용할 수 있도록 Bea.. 2022. 8. 4. 이전 1 2 다음