FireDrago

[Spring] Spring 기본기능 본문

프로그래밍/Spring

[Spring] Spring 기본기능

화이용 2024. 1. 30. 13:47

Http 요청을 처리하고 Http 응답을 전송하는것이 웹 프로그램의 기능이다.

Spring 에서 Http 요청을 받고 Http 응답을 전송하는 기본적인 기능을 사용해보자

 

Http 요청

  - HTML Form 전송 (post)

  - 쿼리 스트링 (get)

  - HTTP 메세지 바디에 직접 전송 (post,put,delete,patch)

 

<HTML 폼, 쿼리스트링 요청>

 1. @RequestParam

 이 두가지 요청은 같은 방식으로 처리할 수 있다. 가장 기본적인 방법부터 살펴보자

@RequestParam 애너테이션으로 파라미터를 직접 받아오는 방법이다. 

- @RequestParam(required = true / false) : 필수인지 선택인지 설정을 할 수 있다.
- @RequestParam(defaultValue = "1") : 기본값을 설정할 수 있다. 아무것도 입력 없으면 "1"

 

2. @ModelAttribute

두번째 방법은 @ModelAttribute 애너테이션을 이용하는 방법이다.

지정된 객체로 파라미터를 받아온다. 

 

Lombok의 @Data 애너테이션을 사용하면 getter, setter, 생성자, equals 와 hascode 메서드를

자동으로 생성해준다. 

 

< HTTP 메세지 바디에 직접 전송 - Text>

1. InputStream 사용

문자열로 HTTP 바디 정보를 가져올때 ServletInputStream을 사용하는 방법이 있다.

HTTP 바디 정보 스트림으로 가져오기

- 먼저 Request 객체의 getInputStream() 을 통해 ServletInputStream 객체를 생성한다.

- Stream 객체를 String으로 변환하기위해 StreamUtils.copyToString( 스트림, 인코딩방법); 을 사용한다.

- response.getWriter() 메서드로 Writer 객체를 가져온뒤 write(문자열) 로 응답메시지 바디에 문자열을 직접입력

 

2. HttpEntity 사용

HttpEntity 객체는 HTTP 바디 정보를 가져올때, HTTP 응답 메시지에 바디 정보를 입력할때 둘다 사용할 수 있다.

HttpEntity 객체를 반환하는 경우, 스프링은 View 객체를 생성하지 않고,

HttpMessageConverter를 통해 HTTP 응답메시지 데이터를 생성한다. 나중에 더 자세히 알아보자

 

3. @RequestBody 사용

@RequestBody 애너테이션도 사용할 수 있다.

HttpEntity와 차이점은 HTTP 상태코드를 동적으로 작성할 수 없다는 점 (@RequestStatus)과

헤더정보를 조회하려면 HttpEntity를 사용해야한다는 점이다.

 

< HTTP 메세지 바디에 직접 전송 - JSON>

1. InputStream 사용

 

Json 데이터를 InputStream으로 받아올때, 문자열과의 차이점은 ObjectMapper를 통해 문자열을 객체로 Mapping

해야한다는 점이다. 그 외에는 큰 차이가 없다

 

2. @RequestBody 사용

 

@RequesBody 애너테이션을 사용하면, HttpEntity 객체와 마찬가지로, HttpMessageConverter 가 사용된다.

입력된 데이터를 HelloData 객체로 변환하기위해, MappingJackson2HttpMessageConverter가 사용된다.

 

 

HTTP 응답 

- 정적 리소스

- 동적 리소스 (뷰 템플릿)

- HTTP 메세지 바디에 직접 전송

 

정적 리소스를 응답할때는 resource/static 패키지 안의 정적리소스를 호출 할 수 있다.

동적 리소스를 응답할때는 resource/templates 패키지 안의 리소스를 View 객체를 이용하여 렌더링 후 전송한다.

 

정적리소스와 동적 리소스 둘다 Html 파일을 전송한다.

 

< HTTP 메세지 바디에 직접 전송>

 

 

이 포스팅은 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 수강하고 작성되었습니다

'프로그래밍 > Spring' 카테고리의 다른 글

[Spring] 검증처리  (0) 2024.02.09
[Spring] HttpMessageConverter  (0) 2024.02.01
[Spring] Spring MVC 기본구조  (0) 2024.01.26
[Spring] 빈 생명주기 콜백  (0) 2024.01.11
[Spring] 의존성 자동주입  (0) 2024.01.09