SlideShare uma empresa Scribd logo
1 de 50
Baixar para ler offline
Spring 4.x Web
Application Overview
최 신 웹 트 렌 드 를 따 르 는 스 프 링 더 듬 기
발 표 자 소 개
•이 름 : 김 지 헌 (== honeymon)
­ ihoneymon@gmail.com
­ http://honeymon.io
­ 이 노 트 리 (http://innotree.com) 근 무
­ KSUG 일 꾼 단 소 속 잡무 수 행
­ 개 발 자 …
­ 종 합레 저 스 포 츠 인 을 표 방
Spring framework
● 2003, JDK 1.4
● https://spring.io/blog/2004/03
/24/spring-framework-1-0-
final-released
● Annotation, REST, SPAs,
WebSocket 가 요 구 되 기 전
Programming Model Version
@Controller 2.5(2007)
REST 3.0(2009)
Async HTTP 3.2(2012)
WebSocket 4.0(2013)
Programming Model
스 프 링 프 레 임 워 크 의
성 공 포 인 트
간결 하 고 , 깔 끔 하 고 , 안 정 적 인 설 계
확장의 자 유 로 움
HTTP, REST, Messaging
등 다 양 한 지 원
강력 한 커 뮤 니 티 !!
http://ksug.org
변 화하 는 환경 에 따 라 끊 임 없 이 진 화!
?WHY
@Controller method
• @InitBinder
• @ModelAttribute
• @RequestMapping
• @ExceptionHandler
@RestController
@Controller
public class MyController {
@RequestMapping @ResponseBody
public Foo handleFoo() {
}
@RequestMapping @ResponseBody
public Boo handleBoo() {
}
}
@RestController
public class MyController {
@RequestMapping
public Foo handleFoo() {
}
@RequestMapping
public Boo handleBoo() {
}
}
@RestController = @Controller + @ResponseBody
@ControllerAdvice
• InitBinder
• ModelAttribute
• ExceptionHandler
@ControllerAdvice
• @ControllerAdvice
• @ControllerAdvice(annotations=RestController.class)
• @ControllerAdvice(basePackages="org.ksug")
• @ControllerAdvice(assignableTypes=
{MyController.class})
ResponseEntityExceptionHandler - v3.2
• @ControllerAdvice를 함께 사 용 하 는 예 외
처 리 추 상 클 래 스
• Spring MVC 예 외 처 리
• REST API 친 화적 임
ResponseBodyAdvice
• @ControllerAdvice와 함께 사 용 하 는 인 터 페 이 스
• v4.1에 추 가 됨
• 컨 트 롤 러 에 서 반 환된 응 답 결 과를
HttpMessageConverter가 다 루 기 전 에
작 업
RequestBodyAdvice + v4.2
Jackson 이 야 기
• Jackson: JSON & XML 조 작
• Jackson2ObjectMapperBuilder 를 이 용 해 서
ObjectMapper 인 스 턴 스 를 생 성
• LastestJackon integration improvements
in spring
– @JsonView: Jackson's Serialization View
– JSONP: @ResponseEntity & ResponseEntity
@RequestMapping
• java.util.Optional(JDK 8) 지 원
• ResponseEntity/RequestEntity buider-style method
• MvcUriComponentBuilder를 사 용 하 여 다 른 컨 트 롤 러 의 메
서 드 를 호 출 할 수 있 는 URI 생 성
• @ModelAttribute 사 이 의 의 존 성 부 여
정 적 자 원 지 원
• ResourceHttpRequesthandler < 4.1
• ResourceResolver, ResourceTransformer, ResourceUrlProvider 4.1+
• 컨 텐 츠 기 반 해 시 를 가 진 Versioned URL
– e.g. "/css/font-awesome.min-7fbe76cdac.css"
• 보 다 자 세 한 사 항은 !!
– Resource Handling Spring MVC 4.1 - SpringOne 2014
– Resource handling Spring MVC - Adieu 2014, 봄 싹(박 용 권 )
Groovy markup template
• HTML 템 플 릿 용 DSL을 Groovy 로 컴 파일
• Groovy 의 강력 한 힘 으 로 !
• See GroovyMarkup View
Javascript Templating + v4.2
MVC 설 정
• ViewResolver 등 록 지 원
• ViewController 설 정
• Path matching 설 정
비 동 기 HTTP 요 청
• Servlet 3.0+ Async Request
• 클 라 이 언 트 에 이 벤 트 푸 시 , 긴 연 산
• 상 당 히 쉽 게 할 수 있 다 .
• 조 금 더 복 잡한 상 황에 대 해 서 는 구 현 이 어
려 움
Web Messaging Architecture
• WebSocket -> Low-level transport
• SockJS -> fallback options
• STOMP -> application-level protocol
STOMP Frame
>>> SEND
destination:/app/hello
content-length:19
{"name":"honeymon"}
stomp.js:130
<<< MESSAGE
destination:/topic/greetings
content-type:application/json;charset=UTF-8
subscription:sub-0
message-id:9n_v3m2s-0
content-length:30
{"content":"Hello, honeymon!"}
Handle Messages from WebSocket clients
@Controller
public class PortfolioController {
@MessageMapping("/greetings")
public void add(String payload) {
// …
}
}
Broadcast Messages to WebSocket Clients
@Autowired
private SimpMessagingTemplate messagingTemplate;
@RequestMapping(value = "/boardcast-echo", method = RequestMethod.POST)
public void broadcastEcho() {
this.messagingTemplate.convertAndSend("/app/stomp/echo", "Hello, KSUG");
}
Spring Framework 4.2
HTTP Streaming
• New return type ResponseBodyEmitter
• Write a series of Objects to response body
• via HttpMessageConverter
• Also works with ResponseEntity
HTTP Streaming Example
@RequestMapping
public ResponseBodyEmitter handle() {
ResponseBodyEmitter emitter = new ResponseBodyEmitter();
// …
return emitter;
}
// Later from some other thread
emitter.send(new Foo());
emitter.send(new Bar());
emitter.complete()
HTTP Streaming: SSE-style
• SseEmitter extends ResponseBodyEmitter
• ResponseBodyEmitter와 같은 동 작 을 하 지
만 다 른 점 하 나 !
– SSE-style: W3C Server-Send Event
specifications
Server-sent events example
@RequestMapping
public SseEmitter handle() {
SseEmitter emitter = new SseEmitter();
// ...
return emitter;
}
// Later from some other thread
emitter.send(event().name("foo").data(new Foo()));
emitter.send(event().name("bar").data(new Bar()));
emitter.complete();
HTTP Streaming: Directly to Response
@RequestMapping
public StreamingResponseBody handle() {
return new StreamingResponseBody() {
@Override
public void writeTo(OutputStream out) {
// ...
}
}
}
HTTP caching update
• CacheControl builder
• Configurable in various places
– WebContentGenerator/Interceptor
– ResourceHttpRequestHandler
– ResponseEntity
• Improved ETag/Last-Modified support in
WebRequest
CORS support
• 계 층 적 인 접 근
• 세 밀 한 설 정
– @CrossOrigin 컨 트 롤 러 에 사 용
• URL 패 턴 을 기 반 으 로 한 전 역 설 정
How CORS is supported
• AbstractHandlerMapping 에 의 해 생 성
• 하 위 클 래 스 에 대 한 CORS 메 타 데 이 터 제 공
– @CrossOrigin
– CorsConfigurationSource
• AbstractHandlerMapping 안 에
CorsProcessor 설 정
– CORS 체 크 수 행 , 응 답 헤 더 설 정
@RequestMapping meta annotation
@RequestMapping(method = RequestMethod.POST, produces =
MediaType.APPLICATION_JSON_VALUE, consumes =
MediaType.APPLICATION_JSON_VALUE)
public @interface PostJson {
String value() default "";
}
//..
@PostJson("/account")
public ResponseEntity<Account> add(Account account) {
return ResponseEntity.ok(account);
}
Javascript View Templating
• Server and Client-side rendering
– using same template engine(e.g. React)
• `ScriptTemplateView`, `ViewResolver`
– built on Nashorn(JDK 1.8)
• 서 버 에 서 초 기 화해 두 고 , 서 버 에 서 가 져 온
코 드 를 가 지 고 클 라 이 언 트 사 이 드 에 서 랜
더 링
다 음 세 션 !! + 정 성 용 Isomorphic!!
MISC == 기 타 등 등
• 정 적 자 원 에 대 한 byte-range 요 청 지 원
• @ExceptionHandler 메 서 드 에 메 서 드 인 자
로 HandlerMethod 사 용
• MvcUriComponentsBuilder custom baseUri
STOMP/WebSocket
• @ControllerAdvice 기 반 으 로 메 서 드 전 역 에
@Exceptionhandler 적 용 가 능
• @SendTo/SendToUser Destination value
placehodler 정 의 : @DestinationVariable
• 다 중 앱 서 버 사 이 에 서 사 용 자 목 적 지 사 용
• SockJS 내 에 서 CORS 향상
Simple Broker(STOMP over WebSocket)
• HeartBeat support
• SpEL-based message selector
SUBSCRIBE
destination:/app/greetings
selector:headers.foo == ‘bar’
STOMP client
• 자 바 를 사 용 하 여 WebSocket 혹 은 TCP 접 근
• 테 스 트 에 유 용 함
• 서 버 사 이 드 에 서 STOMP broker 접 근
정 리
• 설 정 의 응 집 도 를 높 이 고 !
• 세 부 설 정 은 진 입 지 점 에 서 도 가 능 !
• 웹 소 켓 의 기 능 을 HTTP에 서 도 !
• 조 금 더 ! 빠르 게 ! 쉽 게 !
?WHY
발 표 자 료
• 예 제 :
– https://github.com/ihoneymon/rocking-the-
spring-4x-web-application
참 조 자 료
• Spring Framework - wikipedia
• 4.0.0 release
• Spring 4 Web applications
• Spring Framework 4.0 Web Applications - SpringOne 2014
• Overview of Spring 4.0 - 박 용 권 , KSUG
• Spring MVC 4.2: New and Noteworthy
• Workshop - From Spring 4.0 To 4.2
• Exception handling in Spring MVC
• Spring - Modify response headers after controller processing
• Using WebSocket to build an interactive web application
• CORS support in Spring Framework
• Isomorphic templating with Spring Boot, Nashorn and React
• Script template
• HTTP Streaming
KSUG 일 꾼 단 모 집 !
끝 !!
궁 금 하 신 것 이 있 으 시 다 면 ,
ihoneymon@gmail.com
@ihoneymon

Mais conteúdo relacionado

Mais procurados

Spring MVC
Spring MVCSpring MVC
Spring MVCymtech
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정Arawn Park
 
Spring mvc
Spring mvcSpring mvc
Spring mvcksain
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)EunChul Shin
 
spring.io를 통해 배우는 spring 개발사례
spring.io를 통해 배우는 spring 개발사례spring.io를 통해 배우는 spring 개발사례
spring.io를 통해 배우는 spring 개발사례Daehwan Lee
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)sung yong jung
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례선협 이
 
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Choonghyun Yang
 
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처 Sungchul Park
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석uEngine Solutions
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계Jinho Yoo
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatisSomang Jeong
 
SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기Myung Woon Oh
 
Spring IoC
Spring IoCSpring IoC
Spring IoCSuan Lee
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Sungjoon Yoon
 
[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희NAVER D2
 
JSP 빠르게 시작하기
JSP 빠르게 시작하기JSP 빠르게 시작하기
JSP 빠르게 시작하기Park JoongSoo
 

Mais procurados (20)

Spring MVC
Spring MVCSpring MVC
Spring MVC
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
 
spring.io를 통해 배우는 spring 개발사례
spring.io를 통해 배우는 spring 개발사례spring.io를 통해 배우는 spring 개발사례
spring.io를 통해 배우는 spring 개발사례
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례
 
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)
 
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatis
 
SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기
 
Spring IoC
Spring IoCSpring IoC
Spring IoC
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
 
[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희
 
Express 프레임워크
Express 프레임워크Express 프레임워크
Express 프레임워크
 
JSP 빠르게 시작하기
JSP 빠르게 시작하기JSP 빠르게 시작하기
JSP 빠르게 시작하기
 

Destaque

VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기
VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기 VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기
VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기 Jae-il Lee
 
[Spring Camp 2013] Java Configuration 없인 못살아!
[Spring Camp 2013] Java Configuration 없인 못살아![Spring Camp 2013] Java Configuration 없인 못살아!
[Spring Camp 2013] Java Configuration 없인 못살아!Arawn Park
 
"허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기""허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기"Ji Heon Kim
 
마크다운 소개
마크다운 소개마크다운 소개
마크다운 소개Sejong Park
 
Powerful persistence layer with Google Guice & MyBatis
Powerful persistence layer with Google Guice & MyBatisPowerful persistence layer with Google Guice & MyBatis
Powerful persistence layer with Google Guice & MyBatissimonetripodi
 
모던자바의 역습
모던자바의 역습모던자바의 역습
모던자바의 역습DoHyun Jung
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
씹고 뜯고 맛보고 즐기는 스트림 API
씹고 뜯고 맛보고 즐기는 스트림 API씹고 뜯고 맛보고 즐기는 스트림 API
씹고 뜯고 맛보고 즐기는 스트림 APIArawn Park
 
Spring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trendsSpring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trendsArawn Park
 
Spring framework 4.x
Spring framework 4.xSpring framework 4.x
Spring framework 4.xArawn Park
 
Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트Jin wook
 
무식하게 배우는 gradle
무식하게 배우는 gradle무식하게 배우는 gradle
무식하게 배우는 gradleJi Heon Kim
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVCArawn Park
 
웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다
웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다
웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다동수 장
 
Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며DK Lee
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)beom kyun choi
 
기술용어 선호도 조사 결과
기술용어 선호도 조사 결과기술용어 선호도 조사 결과
기술용어 선호도 조사 결과장현 한
 
WAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apmWAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apm엑셈
 
톰캣 #03-설치
톰캣 #03-설치톰캣 #03-설치
톰캣 #03-설치GyuSeok Lee
 

Destaque (20)

VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기
VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기 VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기
VAADIN으로 스크립트 없는 자바 웹 애플리케이션 만들기
 
[Spring Camp 2013] Java Configuration 없인 못살아!
[Spring Camp 2013] Java Configuration 없인 못살아![Spring Camp 2013] Java Configuration 없인 못살아!
[Spring Camp 2013] Java Configuration 없인 못살아!
 
"허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기""허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기"
 
마크다운 소개
마크다운 소개마크다운 소개
마크다운 소개
 
Spring Boot 소개
Spring Boot 소개Spring Boot 소개
Spring Boot 소개
 
Powerful persistence layer with Google Guice & MyBatis
Powerful persistence layer with Google Guice & MyBatisPowerful persistence layer with Google Guice & MyBatis
Powerful persistence layer with Google Guice & MyBatis
 
모던자바의 역습
모던자바의 역습모던자바의 역습
모던자바의 역습
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
씹고 뜯고 맛보고 즐기는 스트림 API
씹고 뜯고 맛보고 즐기는 스트림 API씹고 뜯고 맛보고 즐기는 스트림 API
씹고 뜯고 맛보고 즐기는 스트림 API
 
Spring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trendsSpring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trends
 
Spring framework 4.x
Spring framework 4.xSpring framework 4.x
Spring framework 4.x
 
Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트
 
무식하게 배우는 gradle
무식하게 배우는 gradle무식하게 배우는 gradle
무식하게 배우는 gradle
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVC
 
웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다
웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다
웹 애플리케이션 프레임웍의 과거,현재 그리고 미래 - 봄날은 간다
 
Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며Starpl 20111012 스타플5를_만들기_시작하며
Starpl 20111012 스타플5를_만들기_시작하며
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)
 
기술용어 선호도 조사 결과
기술용어 선호도 조사 결과기술용어 선호도 조사 결과
기술용어 선호도 조사 결과
 
WAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apmWAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apm
 
톰캣 #03-설치
톰캣 #03-설치톰캣 #03-설치
톰캣 #03-설치
 

Semelhante a Spring 4.x Web Application 살펴보기

Restful web service
Restful web serviceRestful web service
Restful web servicesunguen lee
 
댓글 플러그인 아포가토
댓글 플러그인 아포가토댓글 플러그인 아포가토
댓글 플러그인 아포가토Goonoo Kim
 
웹소켓 (WebSocket)
웹소켓 (WebSocket)웹소켓 (WebSocket)
웹소켓 (WebSocket)jeongseokoh
 
WebSocket 기반 쌍방향 메시징
WebSocket 기반 쌍방향 메시징WebSocket 기반 쌍방향 메시징
WebSocket 기반 쌍방향 메시징trustinlee
 
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?Opennaru, inc.
 
REST with Spring
REST with SpringREST with Spring
REST with Spring강우 김
 
클라우드 서비스운영 플랫폼 가루다
클라우드 서비스운영 플랫폼 가루다클라우드 서비스운영 플랫폼 가루다
클라우드 서비스운영 플랫폼 가루다상욱 송
 
클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱
클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱
클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱uEngine Solutions
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석Tommy Lee
 
모바일 메신저 아키텍쳐 소개
모바일 메신저 아키텍쳐 소개모바일 메신저 아키텍쳐 소개
모바일 메신저 아키텍쳐 소개Hyogi Jung
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론Hankyo
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기Jaewoo Ahn
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)DK Lee
 
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST APIWooyoung Ko
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.xTerry Cho
 
WoO 2012-Web 서비스 기술
WoO 2012-Web 서비스 기술WoO 2012-Web 서비스 기술
WoO 2012-Web 서비스 기술Changhwan Yi
 

Semelhante a Spring 4.x Web Application 살펴보기 (20)

Restful web service
Restful web serviceRestful web service
Restful web service
 
댓글 플러그인 아포가토
댓글 플러그인 아포가토댓글 플러그인 아포가토
댓글 플러그인 아포가토
 
웹소켓 (WebSocket)
웹소켓 (WebSocket)웹소켓 (WebSocket)
웹소켓 (WebSocket)
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
Html5
Html5 Html5
Html5
 
WebSocket 기반 쌍방향 메시징
WebSocket 기반 쌍방향 메시징WebSocket 기반 쌍방향 메시징
WebSocket 기반 쌍방향 메시징
 
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
 
REST with Spring
REST with SpringREST with Spring
REST with Spring
 
클라우드 서비스운영 플랫폼 가루다
클라우드 서비스운영 플랫폼 가루다클라우드 서비스운영 플랫폼 가루다
클라우드 서비스운영 플랫폼 가루다
 
클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱
클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱
클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
모바일 메신저 아키텍쳐 소개
모바일 메신저 아키텍쳐 소개모바일 메신저 아키텍쳐 소개
모바일 메신저 아키텍쳐 소개
 
Portfolio
PortfolioPortfolio
Portfolio
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
 
RHAMT 소개
RHAMT 소개RHAMT 소개
RHAMT 소개
 
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
WoO 2012-Web 서비스 기술
WoO 2012-Web 서비스 기술WoO 2012-Web 서비스 기술
WoO 2012-Web 서비스 기술
 

Spring 4.x Web Application 살펴보기

  • 1. Spring 4.x Web Application Overview 최 신 웹 트 렌 드 를 따 르 는 스 프 링 더 듬 기
  • 2. 발 표 자 소 개 •이 름 : 김 지 헌 (== honeymon) ­ ihoneymon@gmail.com ­ http://honeymon.io ­ 이 노 트 리 (http://innotree.com) 근 무 ­ KSUG 일 꾼 단 소 속 잡무 수 행 ­ 개 발 자 … ­ 종 합레 저 스 포 츠 인 을 표 방
  • 3. Spring framework ● 2003, JDK 1.4 ● https://spring.io/blog/2004/03 /24/spring-framework-1-0- final-released ● Annotation, REST, SPAs, WebSocket 가 요 구 되 기 전
  • 4. Programming Model Version @Controller 2.5(2007) REST 3.0(2009) Async HTTP 3.2(2012) WebSocket 4.0(2013) Programming Model
  • 5. 스 프 링 프 레 임 워 크 의 성 공 포 인 트
  • 6. 간결 하 고 , 깔 끔 하 고 , 안 정 적 인 설 계
  • 8. HTTP, REST, Messaging 등 다 양 한 지 원
  • 9. 강력 한 커 뮤 니 티 !!
  • 11. 변 화하 는 환경 에 따 라 끊 임 없 이 진 화!
  • 12. ?WHY
  • 13. @Controller method • @InitBinder • @ModelAttribute • @RequestMapping • @ExceptionHandler
  • 14. @RestController @Controller public class MyController { @RequestMapping @ResponseBody public Foo handleFoo() { } @RequestMapping @ResponseBody public Boo handleBoo() { } } @RestController public class MyController { @RequestMapping public Foo handleFoo() { } @RequestMapping public Boo handleBoo() { } } @RestController = @Controller + @ResponseBody
  • 16. @ControllerAdvice • @ControllerAdvice • @ControllerAdvice(annotations=RestController.class) • @ControllerAdvice(basePackages="org.ksug") • @ControllerAdvice(assignableTypes= {MyController.class})
  • 17. ResponseEntityExceptionHandler - v3.2 • @ControllerAdvice를 함께 사 용 하 는 예 외 처 리 추 상 클 래 스 • Spring MVC 예 외 처 리 • REST API 친 화적 임
  • 18. ResponseBodyAdvice • @ControllerAdvice와 함께 사 용 하 는 인 터 페 이 스 • v4.1에 추 가 됨 • 컨 트 롤 러 에 서 반 환된 응 답 결 과를 HttpMessageConverter가 다 루 기 전 에 작 업 RequestBodyAdvice + v4.2
  • 19. Jackson 이 야 기 • Jackson: JSON & XML 조 작 • Jackson2ObjectMapperBuilder 를 이 용 해 서 ObjectMapper 인 스 턴 스 를 생 성 • LastestJackon integration improvements in spring – @JsonView: Jackson's Serialization View – JSONP: @ResponseEntity & ResponseEntity
  • 20. @RequestMapping • java.util.Optional(JDK 8) 지 원 • ResponseEntity/RequestEntity buider-style method • MvcUriComponentBuilder를 사 용 하 여 다 른 컨 트 롤 러 의 메 서 드 를 호 출 할 수 있 는 URI 생 성 • @ModelAttribute 사 이 의 의 존 성 부 여
  • 21. 정 적 자 원 지 원 • ResourceHttpRequesthandler < 4.1 • ResourceResolver, ResourceTransformer, ResourceUrlProvider 4.1+ • 컨 텐 츠 기 반 해 시 를 가 진 Versioned URL – e.g. "/css/font-awesome.min-7fbe76cdac.css" • 보 다 자 세 한 사 항은 !! – Resource Handling Spring MVC 4.1 - SpringOne 2014 – Resource handling Spring MVC - Adieu 2014, 봄 싹(박 용 권 )
  • 22. Groovy markup template • HTML 템 플 릿 용 DSL을 Groovy 로 컴 파일 • Groovy 의 강력 한 힘 으 로 ! • See GroovyMarkup View Javascript Templating + v4.2
  • 23. MVC 설 정 • ViewResolver 등 록 지 원 • ViewController 설 정 • Path matching 설 정
  • 24. 비 동 기 HTTP 요 청 • Servlet 3.0+ Async Request • 클 라 이 언 트 에 이 벤 트 푸 시 , 긴 연 산 • 상 당 히 쉽 게 할 수 있 다 . • 조 금 더 복 잡한 상 황에 대 해 서 는 구 현 이 어 려 움
  • 25. Web Messaging Architecture • WebSocket -> Low-level transport • SockJS -> fallback options • STOMP -> application-level protocol
  • 26. STOMP Frame >>> SEND destination:/app/hello content-length:19 {"name":"honeymon"} stomp.js:130 <<< MESSAGE destination:/topic/greetings content-type:application/json;charset=UTF-8 subscription:sub-0 message-id:9n_v3m2s-0 content-length:30 {"content":"Hello, honeymon!"}
  • 27. Handle Messages from WebSocket clients @Controller public class PortfolioController { @MessageMapping("/greetings") public void add(String payload) { // … } }
  • 28. Broadcast Messages to WebSocket Clients @Autowired private SimpMessagingTemplate messagingTemplate; @RequestMapping(value = "/boardcast-echo", method = RequestMethod.POST) public void broadcastEcho() { this.messagingTemplate.convertAndSend("/app/stomp/echo", "Hello, KSUG"); }
  • 30. HTTP Streaming • New return type ResponseBodyEmitter • Write a series of Objects to response body • via HttpMessageConverter • Also works with ResponseEntity
  • 31. HTTP Streaming Example @RequestMapping public ResponseBodyEmitter handle() { ResponseBodyEmitter emitter = new ResponseBodyEmitter(); // … return emitter; } // Later from some other thread emitter.send(new Foo()); emitter.send(new Bar()); emitter.complete()
  • 32. HTTP Streaming: SSE-style • SseEmitter extends ResponseBodyEmitter • ResponseBodyEmitter와 같은 동 작 을 하 지 만 다 른 점 하 나 ! – SSE-style: W3C Server-Send Event specifications
  • 33. Server-sent events example @RequestMapping public SseEmitter handle() { SseEmitter emitter = new SseEmitter(); // ... return emitter; } // Later from some other thread emitter.send(event().name("foo").data(new Foo())); emitter.send(event().name("bar").data(new Bar())); emitter.complete();
  • 34. HTTP Streaming: Directly to Response @RequestMapping public StreamingResponseBody handle() { return new StreamingResponseBody() { @Override public void writeTo(OutputStream out) { // ... } } }
  • 35. HTTP caching update • CacheControl builder • Configurable in various places – WebContentGenerator/Interceptor – ResourceHttpRequestHandler – ResponseEntity • Improved ETag/Last-Modified support in WebRequest
  • 36. CORS support • 계 층 적 인 접 근 • 세 밀 한 설 정 – @CrossOrigin 컨 트 롤 러 에 사 용 • URL 패 턴 을 기 반 으 로 한 전 역 설 정
  • 37. How CORS is supported • AbstractHandlerMapping 에 의 해 생 성 • 하 위 클 래 스 에 대 한 CORS 메 타 데 이 터 제 공 – @CrossOrigin – CorsConfigurationSource • AbstractHandlerMapping 안 에 CorsProcessor 설 정 – CORS 체 크 수 행 , 응 답 헤 더 설 정
  • 38. @RequestMapping meta annotation @RequestMapping(method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) public @interface PostJson { String value() default ""; } //.. @PostJson("/account") public ResponseEntity<Account> add(Account account) { return ResponseEntity.ok(account); }
  • 39. Javascript View Templating • Server and Client-side rendering – using same template engine(e.g. React) • `ScriptTemplateView`, `ViewResolver` – built on Nashorn(JDK 1.8) • 서 버 에 서 초 기 화해 두 고 , 서 버 에 서 가 져 온 코 드 를 가 지 고 클 라 이 언 트 사 이 드 에 서 랜 더 링 다 음 세 션 !! + 정 성 용 Isomorphic!!
  • 40. MISC == 기 타 등 등 • 정 적 자 원 에 대 한 byte-range 요 청 지 원 • @ExceptionHandler 메 서 드 에 메 서 드 인 자 로 HandlerMethod 사 용 • MvcUriComponentsBuilder custom baseUri
  • 41. STOMP/WebSocket • @ControllerAdvice 기 반 으 로 메 서 드 전 역 에 @Exceptionhandler 적 용 가 능 • @SendTo/SendToUser Destination value placehodler 정 의 : @DestinationVariable • 다 중 앱 서 버 사 이 에 서 사 용 자 목 적 지 사 용 • SockJS 내 에 서 CORS 향상
  • 42. Simple Broker(STOMP over WebSocket) • HeartBeat support • SpEL-based message selector SUBSCRIBE destination:/app/greetings selector:headers.foo == ‘bar’
  • 43. STOMP client • 자 바 를 사 용 하 여 WebSocket 혹 은 TCP 접 근 • 테 스 트 에 유 용 함 • 서 버 사 이 드 에 서 STOMP broker 접 근
  • 44. 정 리 • 설 정 의 응 집 도 를 높 이 고 ! • 세 부 설 정 은 진 입 지 점 에 서 도 가 능 ! • 웹 소 켓 의 기 능 을 HTTP에 서 도 ! • 조 금 더 ! 빠르 게 ! 쉽 게 !
  • 45. ?WHY
  • 46. 발 표 자 료 • 예 제 : – https://github.com/ihoneymon/rocking-the- spring-4x-web-application
  • 47. 참 조 자 료 • Spring Framework - wikipedia • 4.0.0 release • Spring 4 Web applications • Spring Framework 4.0 Web Applications - SpringOne 2014 • Overview of Spring 4.0 - 박 용 권 , KSUG • Spring MVC 4.2: New and Noteworthy • Workshop - From Spring 4.0 To 4.2 • Exception handling in Spring MVC • Spring - Modify response headers after controller processing • Using WebSocket to build an interactive web application • CORS support in Spring Framework • Isomorphic templating with Spring Boot, Nashorn and React • Script template • HTTP Streaming
  • 48. KSUG 일 꾼 단 모 집 !
  • 50. 궁 금 하 신 것 이 있 으 시 다 면 , ihoneymon@gmail.com @ihoneymon