개발서적읽기/Spring in Action 제 5판
-
[스프링 인 액션] Chapter 8 - 비동기 메시지 전송하기 :: RabbitMQ와 AMQP 사용하기개발서적읽기/Spring in Action 제 5판 2020. 9. 16. 02:13
AMQP(Advanced Message Queuing Protocol)의 가장 중요한 구현이라 할 수 있는 RabbitMQ는 JMS보다 더 진보된 메시지 라우팅 전략을 제공한다. JMS 메시지가 수신자가 가져갈 메시지 도착지의 이름을 주소로 사용하는 반면, AMQP 메시지는 수신자가 리스닝하는 큐와 분리된 거래소 이름과 라우팅 키를 주소로 사용한다. 거래소(Exchange)와 큐 간의 관계는 아래와 같다. 메시지가 RabbitMQ 브로커에 도착하면 주소로 지정된 거래소에 들어간다. 거래소는 하나 이상의 큐에 메시지를 전달할 책임이 있다. 이때 거래소 타입, 거래소와 큐 간의 바인딩, 메시지의 라우팅 키 값을 기반으로 처리한다.다음을 포함해서 여러 종류의 거래소가 있다. - 기본(Default) : 브로커..
-
[스프링 인 액션] Chapter 7 - REST 서비스 사용하기 :: Traverson으로 REST API 사용하기개발서적읽기/Spring in Action 제 5판 2020. 8. 25. 16:37
Traverson은 스프링 데이터 HATEOAS에 같이 제공되며 스프링 애플리케이션에서 하이퍼미디어 API를 사용할 수 있는 솔루션이다. 이것은 자바 기반의 라이브러리이며, 같은 이름을 갖는 유사한 기능의 자바스크립트 라이브러리로부터 영감을 얻은 것이다. Traverson은 '돌아다닌다'는 의미로 붙여진 이름이며, 여기서는 관계 이름으로 원하는 API를 이동하며 사용할 것이다. Traverson을 사용할 때는 우선 해당 API의 기본 URI를 갖는 객체를 생성해야 한다.Traverson traverson = new Traverson( URI.create("http://localhost:8080/api"), MediaTypes.HAL_JSON);여기서는 Traverson을 타코 클라우드의 기본 URL로 지..
-
[스프링 인 액션] Chapter 7 - REST 서비스 사용하기 :: RestTemplate으로 REST 엔드포인트 사용하기개발서적읽기/Spring in Action 제 5판 2020. 8. 25. 13:03
이번 장에서는 REST API 클라이언트를 작성하고 사용하는 방법을 알아본다. 그리고 REST API 클라이언트가 추가된 타코 클라우드 애플리케이션을 빌드하고 실행해 볼 것이다. 스프링 애플리케이션은 다음과 같은 방법을 사용해서 REST API를 사용할 수 있다. RestTemplate 스프링에서 제공하는 간단하고 동기화된 REST 클라이언트 Traverson 스프링 HATEOAS에서 제공하는 하이퍼링크를 인식하는 동기화 REST 클라이언트로, 같은 이름의 자바스크립트 라이브러리로부터 비롯됨 WebClient 스프링 5에서 소개된 반응형 비동기 REST 클라이언트 WebClient는 11장 스프링 반응형 웹 프레임워크에서 알아볼 것이다. 지금은 나머지 두 개의 REST 클라이언트부터 알아볼 것이다. 우선..
-
[스프링 인 액션] Chapter 6 - REST 서비스 생성하기 :: 데이터 기반 서비스 활성화하기개발서적읽기/Spring in Action 제 5판 2020. 8. 20. 00:16
3장에서 보았듯이, 스프링 데이터는 우리가 코드에 정의한 인터페이스를 기반으로 리퍼지터리 구현체를 자동으로 생성하고 필요한 기능을 수행한다. 그에 더해 스프링 데이터에는 애플리케이션의 API를 정의하는 데 도움을 줄 수 있는 스프링 데이터 REST라는 기능도 있다.스프링 데이터 REST는 스프링 데이터의 또 다른 모듈이며 스프링 데이터가 생성하는 리퍼지터리의 REST API를 자동 생성한다. 따라서 스프링 데이터 REST를 빌드에 추가하면 정의된 각 리퍼지터리 인터페이스를 사용하는 API를 얻을 수 있다. 스프링 데이터 REST를 사용하기 위해 아래와 같이 의존성을 추가하자. org.springframework.boot spring-boot-starter-data-rest 이렇게 의존성만 지정하면 스프링..
-
[스프링 인 액션] Chapter 6 - REST 서비스 생성하기 :: 하이퍼미디어 사용하기개발서적읽기/Spring in Action 제 5판 2020. 8. 18. 01:22
지금까지 생성했던 기본적인 API에서는 해당 API를 사용하는 클라이언트가 API의 URL 스킴을 알아야 한다. 만약 API의 URL 스킴이 변경되면 어떻게 될까? 하드코딩된 클라이언트 코드는 API를 잘못 인식하여 정상적으로 실행되지 않을 것이다.이를 극복할 수 있는 REST API 구현 방법이 있다. 바로 HATEOAS(Hypermedia As The Engine Of Application State)이다. HATEOAS는 API로부터 반환되는 리소스에 해당 리소스와 관련된 하이퍼링크들이 포함되는 방식이다. 따라서 클라이언트가 최소한의 API URL만 알면 반환되는 리소스와 관련하여 처리 가능한 다른 API URL들을 알아내어 사용할 수 있다. 이러한 응답 JSON 형식을 HAL(Hypertext A..
-
[스프링 인 액션] Chapter 6 - REST 서비스 생성하기 :: REST 컨트롤러 작성하기개발서적읽기/Spring in Action 제 5판 2020. 8. 11. 00:09
이번 장에서는 스프링을 사용해서 타코 클라우드 애플리케이션에 REST API를 제공할 것이다. 우선, 몇 가지 새로운 스프링 MVC 컨트롤러의 작성부터 시작한다. ■서버에서 데이터 가져오기 http://localhost:8080/design/recent 위 경로로, 가장 최근에 생성된 타코의 내역을 보여주는 REST API를 생성해보자. hateoas 형식으로 REST API return type을 사용할 것이기 때문에 아래와 같이 관련 dependency를 추가하자. org.springframework.boot spring-boot-starter-hateoas 그리고 DesignTacoController 클래스를 정의하자. DesignTacoController 클래스는 원래 html view를 retu..
-
[스프링 인 액션] Chapter 5 - 구성 속성 사용하기 :: 프로파일 사용해서 구성하기개발서적읽기/Spring in Action 제 5판 2020. 7. 31. 01:22
애플리케이션이 서로 다른 런타임 환경에 배포, 설치될 때는 대개 구성 명세가 달라진다. 이때 각 환경의 속성들을 application.yml에도 설정할 수 있고 또한 운영체제의 환경 변수를 사용해서 설정할 수도 있다. 하지만 하나 이상의 구성 속성을 환경 변수로 지정하는 것은 번거롭다. 게다가 환경 변수의 변경을 추적 관리하거나 오류가 있을 경우에 변경 전으로 바로 되돌릴 수 있는 방법이 마땅치 않다. 따라서 스프링 프로파일을 이용하는 것이 선호된다. 런타임 시에 활성화되는 프로파일에 따라 서로 다른 빈, 구성 클래스, 구성 속성들이 적용 또는 무시되도록 하는 것이 프로파일이다.예를 들어, 개발과 디버깅 목적으로 내장 H2 DB를 사용하고 타코 클라우드 코드의 로깅 수준을 DEBUG로 설정한다고 해보자...
-
[스프링 인 액션] Chapter 5 - 구성 속성 사용하기 :: 우리의 구성 속성 생성하기개발서적읽기/Spring in Action 제 5판 2020. 7. 31. 01:22
스프링 빈에서는 구성 속성들을 어떻게 사용할까? 스프링 빈에 구성 속성을 주입하기 위해 스프링 부트는 @ConfigurationProperties 애노테이션을 제공한다. 그리고 어떤 스프링 빈이건 이 애노테이션이 지정되면 해당 빈의 속성들이 스프링 환경의 속성으로부터 주입될 수 있다. @ConfigurationProperties가 어떻게 동작하는지 알아보기 위해 다음의 ordersForUser 메서드를 OrderController에 추가하자.@GetMapping public String ordersForUser(@AuthenticationPrincipal User user, Model model) { model.addAttribute("orders", orderRepo.findByUserOrderByPl..