스프링 프레임워크 입문

Udemy라는 교육/강의 웹 사이트에 “스프링 프레임워크 입문”이라는 아주 짧은 강좌를 만들어 올렸습니다. 1시간 남짓의 강좌이며, 스프링 프레임워크 학습에 부담을 느끼고 계신 분들을 위해 아주 쉽게 핵심만 설명했습니다.

https://www.udemy.com/zakmvzfj/?couponCode=KEESUN

이 링크를 사용해서 결제 하시면 $10.99에 결제하실 수 있습니다. 유데미에서 할인 하는 가격보다 싼지 비교해 보시고 혹시 저 링크로 결제하는게 더 싸다면 그렇게 구매하세요.

아래는 참고 영상입니다.

감사합니다.

스프링 부트 2.0 레퍼런스 코딩 소회

스프링 부트 2.0 정식 버전이 나왔다. 그리고 예전부터 하고 싶던 방송도 시작했다.

시작한 날부터 주말도 거르지 않고 매일 대략 1시간씩 방송을 했고 오늘은 아마도 15일차 레퍼런스 코딩 방송을 진행할 것 같다. 목표는 레퍼런스를 (거의) 다 보며 웬만큼 중요해 보이는 것들은 (거의) 전부 코딩해 보는 것이다.

일종의 갈증을 해소하는 방법 중 하나이고 어느 정도 효과가 있는 것 같다. 바람이 있다면 조금 더 많은 피드백을 받고 싶고 더 많은 커뮤니케이션을 하고 싶지만, 시간대가 안맞다는 걸 감안하면 현재 실시간 시청자와 댓글로도 충분히 감사하게 생각하고 있다.

스프링 부트 2.0 레퍼런스 코딩이 끝나면 또 다른 레퍼런스를 읽을지 아니면 또 다른 형태의  컨텐츠를 만들지 고민 중이다. 지금 상태에서는 스프링 데이타 JPA 레퍼런스나 스프링 소셜 또는 스프링 시큐리티쪽이 유력한데… 좀 더 고민해 봐야겠다.

 

[스프링 웹플럭스] 1.2.1. HttpHandler

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

모든 HTTP 서버는 HTTP 요청을 처리하는데 필요한 API를 제공한다. HttpHandler는 요청과 응답을 처리하는데 사용하는 메서드 하나를 정의한 간단한 컨트랙이다. 의도저으로 최소화했다. 주요 목적은 각기 다른 서버에서 리액티브 스프림 기반 API에서 HTTP 요청을 처리할 때 사용할 공통 인터페이스를 제공하는 것이다.

spring-web 모듈은 여러 서버를 지원하는 어댑터를 제공한다. 아래 테이블은 지원하는 서버와 어떤 리액티브 스트림을 사용하는지 보여준다.

Server name Server API used Reactive Streams support

Netty

Netty API

Reactor Netty

Undertow

Undertow API

spring-web: Undertow to Reactive Streams bridge

Tomcat

Servlet 3.1 non-blocking I/O; Tomcat API to read and write ByteBuffers vs byte[]

spring-web: Servlet 3.1 non-blocking I/O to Reactive Streams bridge

Jetty

Servlet 3.1 non-blocking I/O; Jetty API to write ByteBuffers vs byte[]

spring-web: Servlet 3.1 non-blocking I/O to Reactive Streams bridge

Servlet 3.1 container

Servlet 3.1 non-blocking I/O

spring-web: Servlet 3.1 non-blocking I/O to Reactive Streams bridge

다음은 필요로 하는 의존성과, 지원하는 버전과 각 서버 코드 예제다.

Server name Group id Artifact name

Reactor Netty

io.projectreactor.ipc

reactor-netty

Undertow

io.undertow

undertow-core

Tomcat

org.apache.tomcat.embed

tomcat-embed-core

Jetty

org.eclipse.jetty

jetty-server, jetty-servlet

Reactor Netty:

HttpHandler handler = ...
ReactorHttpHandlerAdapter adapter = new ReactorHttpHandlerAdapter(handler);
HttpServer.create(host, port).newHandler(adapter).block();

Undertow:

HttpHandler handler = ...
UndertowHttpHandlerAdapter adapter = new UndertowHttpHandlerAdapter(handler);
Undertow server = Undertow.builder().addHttpListener(port, host).setHandler(adapter).build();
server.start();

Tomcat:

HttpHandler handler = ...
Servlet servlet = new TomcatHttpHandlerAdapter(handler);

Tomcat server = new Tomcat();
File base = new File(System.getProperty("java.io.tmpdir"));
Context rootContext = server.addContext("", base.getAbsolutePath());
Tomcat.addServlet(rootContext, "main", servlet);
rootContext.addServletMappingDecoded("/", "main");
server.setHost(host);
server.setPort(port);
server.start();

Jetty:

HttpHandler handler = ...
Servlet servlet = new JettyHttpHandlerAdapter(handler);

Server server = new Server();
ServletContextHandler contextHandler = new ServletContextHandler(server, "");
contextHandler.addServlet(new ServletHolder(servlet), "/");
contextHandler.start();

ServerConnector connector = new ServerConnector(server);
connector.setHost(host);
connector.setPort(port);
server.addConnector(connector);
server.start();

핸들러를 ServletHttpHandlerAdapter를 사용해서 Servelt으로 감싸서 서블릿 3.1 컨테이너에 WAR로 배포할 수도 있다.

[스프링 웹플럭스] 1.2. 리액티브 스프링 웹

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

spring-web 모듈은 저 수준 기반 시설과 HTTP 추상화를 제공한다. 리액티브 웹 애플리케이션을 개발하는데 필요한 클라이언트와 서버를 제공한다. 모든 공개 API는 리액티브 스트림으로 만들었고 리액터를 그것을 받쳐주는 구현체로 사용했다.

서버 기능은 두 계층으로 구성되어 있다.

  • HttpHandler와 서버 어댑터 –  HTTP 요청을 리액티브 스트림 백 프레셔로 처리하는 가장 기본적이고 공통적인 API
  • WebHandler API – 그보다 약간 높은 계층이지만 필터 체인 스타일의 프로세싱을 담고 있는 일반적인 목적의 서버 웹 API