11장 WebFlux로 Reactive API 개발하기 🎯 이 장에서 배우는 내용 스프링 WebFlux 사용하기 리액티브 컨트롤러와 클라이언트 작성하고 테스트하기 REST API 소비하기 리액티브 웹 애플리케이션의 보안 11.1 스프링 WebFlux 사용하기 매 연결마다 하나의 스레드를 사용하는 스프링 MVC 같은 전형적인 서블릿 기반의 웹 프레임워크는 thread blocking과 다중 스레드로 수행된다. 즉 요청이 처리될 때 스레드 풀에서 작업 스레드를 가져와서 해당 요청을 처리하며, 작업 스레드가 종료될 때까지 요청 스레드는 블로킹된다. 이에 반해 비동기 웹 프레임워크는 더 적은 수의 스레드로 더 높은 확장성을 성취한다. 이벤트 루핑 Event looping 이라는 기법을 적용한 이런 프레임워크는 ..
10장 리액티브 프로그래밍 & 리액터 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 리액티브 프로그래밍 Reactive Programming 이해하기 프로젝트 리액터 Project Reactor 리액티브 데이터 오퍼레이션 Operating on data reactively 왜 리액티브 프로그램을 쓰는가? 신문을 구독받는다고 가정해보자. 1년 치 구독료를 지불하였는데 배달이 오지 않고 1년 치 신문이 모두 준비되면 그제야 배달을 시작한다면 어떻게 될까? 당연히 말이 되지 않는다. 실제로는 기사가 최신일 때 독자가 읽을 수 있도록 출간 후 가능한 빨리 배달된다. 또한 독자가 기사를 읽는 동안 기자는 새로운 다음 기사를 작성한다. ..
Spring Integration 스프링 통합 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 실시간으로 데이터 처리하기 통합 플로우 정의하기 스프링 통합의 자바 DSL 정의 사용하기 이메일과 파일 시스템 및 다른 외부 시스템과 통합하기 (이 장의 자세한 정리는 생략합니다.) 9.1 간단한 통합 플로우 선언하기 애플리케이션은 통합 플로우를 통해 외부 리소스나 애플리케이션 자체에 데이터를 수신, 전송 할 수 있다. 애플리케이션이 통합할 수 있는 리소스 중 하나가 파일 시스템이다. 9.1.1 XML 을 사용해서 통합 플로우 정의하기 9.1.2 Java 로 통합 플로우 구성하기 9.1.3 스프링 통합으로 DSL 구성 사용하기 9.2 ..
Kafka 로 메시지 전송하기 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 비동기 메시지 전송 JMS, RabbitMQ, 카프카 Kafka를 사용해서 메시지 전송하기 브로커에서 메시지 가져오기 메시지 리스닝하기 8.3 카프카 사용하기 카프카는 확장성을 제공하는 cluster 로 실행되도록 설계되었다. 클러스터의 모든 카프카 인스턴스에 걸쳐 토픽(topic) 을 파티션(Partition) 으로 분할하여 메시지를 관리한다. RabbitMQ 가 exchange 와 큐를 사용해서 메시지를 처리하는 반면 카프카는 토픽만 사용한다. 카프카의 토픽은 클러스터의 모든 브로커에 걸쳐 복제된다. (replicated) 클러스터의 각 노드는 하..
RabbitMQ 메시지 전송하기 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 비동기 메시지 전송 JMS, RabbitMQ, 카프카 Kafka를 사용해서 메시지 전송하기 브로커에서 메시지 가져오기 메시지 리스닝하기 8.2 RabbitMQ 와 AMQP 사용하기 AMQP(Advanced Message Queueing Protocol)의 가장 중요한 구현이라 할 수 있는 RabbitMQ 는 JMS 보다 더 진보된 메시지 라우팅 전략을 제공한다. JMS 메시지가 수신자가 가져갈 메시지 도착지 이름을 주소로 사용하는 반면, AMQP 메시지는 수신자가 리스닝하는 큐와 비리된 거래소(exchange) 이름과 라우팅 키를 주소로 사용한다. ..
8장 비동기 메시지 전송하기 : JMS 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 비동기 메시지 전송 JMS, RabbitMQ, 카프카 Kafka를 사용해서 메시지 전송하기 브로커에서 메시지 가져오기 메시지 리스닝하기 비동기(Asynchronous) 메시징은 애플리케이션 간에 응답을 기다리지 않고 간접적으로 메시지를 전송하는 반복이다. 따라서 통신하는 애플리케이션 간의 결합도를 낮추고 확장성을 높여준다. 스프링은 JMS(Java Message Service), RabbitMQ, AMQP(Advanced Message Queueing Protocol), 아파치 카프카(Apahche Kafka) 가 등의 비동기 메시징을 지원한..
7장 REST 서비스 사용하기 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 RestTemplate 을 사용해서 REST API 사용하기 스프링에서 사용하는 REST API RestTemplate: 스프링 프레임워크에서 제공하는 동기화된 REST client Traverson: 스프링 HATEOAS에서 제공하는 하이퍼링크를 인식하는 동기화 REST client WebClient: 스프링 5에서 소개된 반응형 비동기 REST client RestTemplate 는 다음 버전에서 deprecated 될 예정이다. WebClient 를 사용하자 7.1 RestTemplate으로 REST endpoint 사용하기 RestTamplat..
6장 REST 서비스 생성하기 💻 실습 : https://github.com/cusbert/spring-in-action-5th Front 코드와 Backend 코드 분리 Front-end tacocloud-ui directory 따로 생성 https://github.com/cusbert/spring-in-action-5th/tree/main/tacocloud-ui Back-end HATEOAS 실습 생략 https://github.com/cusbert/spring-in-action-5th/tree/main/ch6/taco-cloud HATEOAS 포함한 교재에서 제공한 샘플 코드는 실행되도록 수정하여 따로 directory 생성 https://github.com/cusbert/spring-in-acti..
5장 구성 속성 사용하기 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 자동-구성되는 빈 조정하기 구성 속성을 애플리케이션 컴포넌트에 적용하기 스프링 프로파일 사용하기 5.1 자동-구성 세부 조정하기 스프링 부트는 구성 속성(Configuration Property)을 사용하는 방법을 제공한다. 스프링 애플리케이션 컨텍스트에서 구성 속성은 빈의 속성이다. 그리고 JVM 시스템 속성, 명령행 인자, 환경 변수 등 여러 가지 원천 속성 중에서 설정할 수 있다. 스프링에는 다음 두 가지 형태의 구성이 있다. 빈 연결 (Bean wiring) 컨텍스트에서 빈으로 생성되는 애플리케이션 컴포넌트 및 상호 간에 주입되는 방법을 선언하는 구..
4장 스프링 시큐리티 💻 실습 : https://github.com/cusbert/spring-in-action-5th 책과는 달리 일부 코드 수정. 권한 관련 테이블을 sql로 생성하지 않고 spring.jpa.hibernate.ddl-auto 로 생성하도록 변경. 🎯 이 장에서 배우는 내용 스프링 시큐리티(Spring Security) 자동-구성하기 커스텀 사용자 스토리지 정의하기 커스텀 로그인 페이지 만들기 CSRF 공격으로부터 방어하기 사용자 파악하기 4.1 스프링 시큐리티 활성화 하기 스프링 부트 보안 스타터 의존성 추가 org.springframework.boot spring-boot-starter-security org.springframework.security spring-security..
3장 데이터로 작업하기 - JPA 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 스프링 데이터 (Spring Data) 를 사용해서 JPA 선언하고 사용하기 3.2 JPA 를 사용해서 데이터 저장하고 사용하기 대표적인 스프링 데이터 프로젝트 스프링 데이터 JPA : 관계형 데이터베이스 JPA 퍼시스턴스 스프링 데이터 MongoDB: 몽고 문서형 데이터베이스의 퍼시스턴스 스프링 데이터 Neo4: Neo4j 그래프 데이터베이스의 퍼시스턴스 스프링 데이터 Redis: 레디스 Key-value 스토어 퍼시스턴스 스프링 데이터 cassandra: 카산드라 퍼시스턴스 3.2.1 스프링 데이터 JPA 프로젝트에 추가하기 JPA 스타터는 J..
3장 데이터로 작업하기 - JDBC 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 스프링 JdbcTemplate 사용하기 SimpleJdbcInsert 사용해서 데이터 추가하기 3.1 JDBC를 사용해서 데이터 읽고 쓰기 관계형 데이터를 사용할 때 선택지는 JDBC, JPA 두 개다 스프링의 JDBC 지원은 JdbcTemplate 템플릿에 기반을 둔다 JdbcTemplate 를 사용해서 데이터베이스 쿼리하기 명령문이나 데이터베이스 연결 객체를 생성하는 코드가 없다. 메서드의 실행이 끝난 후 그런 객체들을 클린업하는 코드 또한 없다. catch 블록에서 올바르게 처리할 수 없는 예외를 처리하는 코드도 없다. @Override p..