2018. 1. 17. 15:24 개발
Java9과 Spring5 로 바라보는 Java의 변화와 도전
Java9과 Spring5 로 바라보는 Java의 변화와 도전
이일민(Toby)님의 발표
2017년 9월 21일
- Java SE 9
- Spring Framework 5.0
기존의 EJB부터 이전의 자바버전과 최근의 자바까지해서
코드의 간결성과 유지보수, 퍼포먼스까지 고려를 해서 코드로 비교를 해서 직접적으로 이해를 도움.
언어의 발전과 함께 코드 호환성도 지킨다 -> 새로운 기술이 들어오더라도 다시 컴파일 할 필요가 없이 호환됨.
애노테이션 기반의 메타프로그래밍과 영리한 디폴트로 무장한 관례의 적극 도입 -> SpringBoot로 Ruby on rails와 비교해도 더 간결해짐.
함수형 프로그래밍 스타일의 자바와 비동기 논블록킹 지원 서블릿, 스프링 등장
- Java8
- 함수형 인터페이스와 람다식
- 메소르 레퍼런스
- 디폴트 메소드
- CompletableFuture
ex) IntStream.iterate(1, a -> a+1).limit(10).reduce(0, (a,b)-> a+b);
애노테이션과 메타프로그래밍, 관례의 범람
함수형 스타일 프로그래밍이 도입된 업그레이드 된 자바의 기본으로 돌아가자
스프링5.0 - 새로운 함수형 스타일 웹 개발 지원
- 서블릿의 의존성 제거
- 서블릿 컨테이너를 비동기 HTTP서버로 활용 가능
- 새로운 HTTP 요청과 응답의 추상화 - 불변 객체
- ServerRequest
- ServerResponse
- 두 개의 함수를 이용해 개발
- HandlerFunction
- RouterFunction
- Mono<T>, Flux<T> 리액리브 방식
웹 핸들러(컨트롤러)가 웹 요청 처리하는 방식
- 요청 매핑
- 요청 바인딩
- 핸들러 실행
- 핸들러 결과 처리(응답 생성)
public static void main(String[] args) throws Exception{
HandlerFunction helloHandler = (ServerRequest req) -> {
String name = req.pathVariable("name");
return ServerResponse.ok().syncBody("Hello " + name);
};
RouterFunction router = req -> RequestPredicates.path("/hello/{name}").test(req) ?
Mono.just(helloHandler) : Mono.empty();
HttpHandler httpHandler = RouterFunctions.toHttpHandler(router);
ReactorHttpHandlerAdapter adapter = new ReactorHttpHandlerAdapter(httpHandler);
HttpServer server = HttpServer.create("localhost", 8080);
server.newHandler(adapter).block();
System.in.read();
}
==========================================================
public static void main(String[] args) throws Exception{
HttpServer
.create("localhost", 8080)
.newHandler(new ReactorHttpHandlerAdapter(toHttpHandler(route(path("/hello/{name}"), req -> ServerResponse.ok().syncBody("Hello " + req.pathVariable("name")))))).subscribe();
}
Mono/Flux
- 정보를 전달할 때 컨테이너 사용
- Mono - 단일 오브젝트
- Flux - 스트림 오브젝트
- 데이터 가공, 변환, 조합을 위한 다양한 연산 제공
- 스케줄러를 이용해 비동기 작업 수행
- 지연 연산, 자유로운 조합
- 스프링 함수형 웹 개발의 모든 기능이 Mono/Flux기반으로 재개발
발표 뒤쪽부분은 이해를 못하는 부분도 많았지만 토비님의 발표를 들으면서
그동안 공부했던 부분과 함수형 프로그래밍 부분이 이해가 되었고 언어자체도 중요하지만
생태계의 중요성을 또 한번 느끼게 됨.
출처
'개발' 카테고리의 다른 글
NoSQL (0) | 2018.03.24 |
---|---|
Spring 1 (0) | 2018.02.03 |
Hypothesis test (0) | 2018.01.06 |
PriorityQueue(Java) (0) | 2018.01.05 |
MVC 아키텍처 (0) | 2018.01.05 |