본문 바로가기
IT 도서/스프링 부트 실전 활용 마스터

1. 스프링 부트 웹 어플리케이션 만들기

by 이민우 2021. 7. 31.
728x90
반응형

출처 : https://book.naver.com/bookdb/book_detail.nhn?bid=20551523 

 

스프링 부트 실전 활용 마스터

대규모 트래픽을 적은 비용으로 처리할 수 있는 고성능 서버의 비밀은 무엇일까? 스프링 부트 개발, 테스트, 문서화, 보안, 도커화, 운영까지 모두를 한 권에 마스터하는 것을 목표로, 익숙하고

book.naver.com

*해당 글은 학습을 목적으로 위의 도서 내용 중 일부 내용만을 요약하여 작성한 포스팅입니다.

 상세한 내용 및 전체 내용 확인을 원하신다면 도서 구매를 추천드립니다.

 

 

 

스프링 부트

 

스프링 부트는 스프링 포트폴리오를 신속하게, 미리 정의된 방식으로, 이식성을 높이고 실제 서비스 환경에서 사용할 수 있도록 조립해놓은 것이다.

 

해당 도서에서는 스프링 프레임워크 5.0에 포함된 새로운 패러다임의 리액티브 프로그래밍에 무게를 둔다.

 

 

리액티브 프로그래밍

 

위키피디아의 글을 인용하면

 

리액티브 프로그래밍은 데이터 흐름과 변화 전파에 중점을 둔 프로그래밍 패러다임이다. 이것은 프로그래밍 언어로 정적 또는 동적인 데이터 흐름을 쉽게 표현할 수 있어야 하며, 데이터 흐름을 통해 하부 실행 모델이 자동으로 변화를 전파할 수 있는 것을 의미한다.

 

이러한 리액티브 프로그래밍에서 기존 자원을 더 효율적이고 일관성 있게 사용하는 방법은 리액티브 스트림이다. 

리액티브 스트림은 발행자와 구독자 사이의 간단한 계약을 정의하는 명세로, 트래픽을 가능한 한 빨리 발행하는 대신 구독자는 수신 메시지의 개수를 미리 정하여 발행자에게 알림으로써 수요를 조절, 즉 트래픽을 제어하게 된다.

 

 

스프링 웹플럭스

https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html

HTTP를 이용한 시스템 범위가 확대되고 동시 액세스가 늘며 웹 어플리케이션의 컴퓨터 리소스 대기 시간이 많이 늘어났다. 이로 인해 비동기 처리를 이용한 웹 어플리케이션이 필요해졌으며, 웹 플럭스는 이에 대한 해결책이다.

 

스프링 웹플럭스는 스프링 5.0 에서 새로 등장한 웹 어플리케이션에서 리액티브 프로그래밍을 제공하는 프레임워크이다.

 

기존의 MVC 패턴에서는 어노테이션을 사용해서 개발했다. 웹플럭스는 어노테이션은 물론 함수형 프로그래밍도 지원한다.

 

비동기-논블로킹 리액티브 개발, 고성능 웹 어플리케이션 개발, 마이크로 서비스 아키텍처 개발에 많이 사용된다.

 

 

스프링 부트로 이커머스 플랫폼 만들기

 

가장 먼저 새 프로젝트 생성

프로젝트명 설정
의존관계 추가

* Spring Reactive Web : 스프링 웹플럭스 + 내장형 네티

* Thymeleaf : 템플릿 엔진

 

 

프로젝트 요소 확인

pm.xml의 프로젝트 요소이다.

parent는 스프링 부트의 버전을 프로젝트의 기준으로 지정한다.

이렇게 parent를 지정하면 미리 정의된 여러 가지 속성 정보, 의존관계, 플러그인을 상속받아, 이러한 의존관계를 사용할 수 있게 된다.

만약 스프링 부트 버전이 업그레이드 되었다면 이 부분만 변경하면 된다.

 

groupId 부터는 어플리케이션의 메타 데이터이다.

 

그 밑의 dependency 들은 스프링에서 사용할 수 있는 라이브러리들이다.

 

 

다음은 스프링 이니셜라이저 확인이다.

SpringBootApplication자동설정(autoconfiguration)과 컴포넌트 탐색 기능을 포함하는 복합 annotation이다.

 

SpringApplication.run(xx.class, args)해당 클래스를 어플리케이션의 시작점으로 등록하는 스프링 부트의 훅이다.

 

 

*자동설정 (autoconfiguration)

스프링 부트 어플리케이션의 설정 내용을 분석하여 발견되는 정보에 맞게 다양한 빈을 자동으로 확성화하는

조건 분기 로직

 

 

이제 스프링 웹플럭스의 컨테이너를 생성하여보자.

그 전에 먼저 Dish 클래스 (name만을 가진 단순한 DTO 클래스) 와 KitchenService 클래스를 만든다.

KitchenService

@Service 클래스는 스프링 빈을 나타내는 어노테이션으로, 컴포넌트 탐색 과정에서 스프링 부트에 의해 자동으로 생성되어 빈으로 등록되고 필요시 주입된다.

 

그 후 RestController 클래스 제작

@RestController는 화면 구성을 위한 탬플릿을 사용하는 대신 결과 데이터를 직렬화하고 HTTP 응답 본문에 직접 써서 반환하는 컨트롤러이다.

 

생성자는 어플리케이션 실행 시 스프링이 알아서 생성자에 주입한다.

 

@GetMappingHTTP GET 요청을 value의 주소로 받겠음을 의미하고, 반환 미디업 타입은 produces로 지정한다.

 

그리고 실행을 시켜보면 다음의 결과가 출력된다.

 

 

 

 

해당 책은 여기서 그치지 않고 실제 웹을 만들기 위해 템플릿 적용까지 학습한다.

 

리액티브 프로그래밍을 도입했다면 리액티브 스트림을 완벽하게 지원하는 타임리프를 사용하는 것이 좋고, 타임리프는 HTML과 100% 호환된다는 장점을 가지고 있다.

 

사이트 초기 홈 화면을 보여주는 홈 컨트롤러를 만든다.

 

@Controller는 JSON이나 XML같은 데이터가 아니라 템플릿을 사용한 웹 페이지를 반환하는 스프링 웹 컨트롤러임을 나타낸다.

 

@GetMappingGET 요청을 처리하는데, 사이트 초기 홈 화면은 아무런 하위 경로가 없기에 기본값은 / 이다.

 

Mono<String>템플릿의 이름을 나타내는 문자열을 리액티브 컨테이너인 Mono에 담아 반환한다.

 

메소드는 홈 화면 템플릿을 나타내는 home이라는 단어를 Mono.just 로 감싸 반환한다.

 

이렇게 127.0.0.1:8080/ 으로 들어온 GET 요청은 home으로 가게된다. 그리고 Mono클래스는 src/main/resources/templates 아래의 home.html을 반환하게 된다.

 

대충 home.html을 만들어서 실행을 시켜보면 아래의 결과물이 나온다.

728x90
반응형