컨트롤러 및 핸들러 매핑 관련 애노테이션

 

@RequestParam

 - Controller 메소드의 파라미터와 웹 요청 파라미터를 매핑하기 위한 애노테이션이다.

 - @RequestParam이 붙은 메소드의 인수는 필수 요청 파라미터이다.

 요청 파라미터에 @RequestParam으로 설정한 파라미터가 존재하지 않으면 400에러가 발생한다.

 required 옵션 속성값을 false로 설정하면 해당 이름의 요청 파라미터가 존재하지 않은 경우, 메소드의 인수는 null을 갖는다. 

- defaultValue 속성에 기본값을 설정하면 해당 이름의 요청 파라미터가 존재하지 않은 경우, 메소드의 인수는 defaultValue속성에서 설정한 기본값을 갖는다. 

 

@ModelAttribute

1) 개요

 - Controller 메소드의 파라미터나 리턴 값을 Model 객체와 바인딩 하기 위한 애노테이션

 - @ModelAttribute는 실제적으로 ModelMap.addAttribute(이름, 값)와 같은 기능을 한다.

 - 사용 방법

 (1)요청 메소드의 매개변수에 사용

  요청 파라미터는 @ModelAttribute가 적용된 메소드의 파라미터(모델 객체)에 매핑되어 넘어온다.

 @ModelAttribute가 적용된 메소드의 파라미터는 포워딩 되는 View 페이지에서 사용 가능하다.

 (2)메소드 레벨(method level)로 사용

 View에서 사용할 데이터를 설정하는 용도로 사용

 @ModelAttribute가 설정된 메소드는 @RequestMapping이 적용된 메소드보다 먼저 호출

 @ModelAttribute 메소드 실행 결과로 리턴되는 객체는 자동으로 Model에 저장

 @ModelAttribute 메소드 실행 결과로 리턴된 객체를 View 페이지에서 사용 가능

 

2) 옵션

 - value : 바인드 하려는 Model 속성 이름 String

 

@RequestHeader

- HTTP 요청 헤더 값을 컨트롤러 메소드의 매개변수로 전달한다.

- @RequestHeader 로 설정한 헤더는 기본적으로 필수 헤더로 존재하지 않으면 400에러가 발생한다.

- required 속성을 이용해 필수여부를 설정할 수 있다.

- dafaultValue 속성을 이용해 헤더가 존재하지 않은 경우 기본 값으로 설정 가능하다.

 

@CookieValue

- HTTP 쿠키 값을 HttpServletRequest등을 통해 읽을 필요없이 컨트롤러 메소드의 인수로 전달 받을 수 있다.

- @CookieValue로 설정한 쿠키는 필수로 해당 쿠키가 존재하지 않으면 400 에러가 발생한다.

- required 속성을 이용해 필수여부를 설정할 수 있다.

- defaultValue 속성을 이용해 쿠키가 존재하지 않은 경우 기본 값으로 설정 가능하다.

 

@SessionAttributes

- Model 객체를 세션에 저장하고 사용하기 위한 애노테이션

- 클래스 레벨(type level)에서 선언할 수 있다.

- 지속적으로 사용자의 입력 값을 유지시키거나 여러 단계에 걸쳐 submit 되면서 완성되는 폼을 구성하는 경우에 사용 가능하다.

- 사용방법

 @SessionAttributes 는 컨트롤러에서 사용되며 애노테이션에서 설정한 모델객체를 세션에 저장하는 역할을 한다. 이후부터 해당 모델객체가 사용되면 세션에서 불러와서 사용하며, 뷰에서 이름으로 접근이 가능하다.

 @SessionAttribues를 컨트롤러 클래스에 붙이고 모델 이름을 인자로 넣어준다. 컨트롤러의 메소드가 만드는 모델 정보 중에 이름이 같은 것이 있으면 세션에도 저장하고 컨트롤러 메소드의 @ModelAttrbute 인자를 HTTP요청이 아니라 먼저 세션에서 검색하여 사용한다.

 @SessionAttributes로 세션에서 사용완료된 객체는 사용 후에 SessionStatus.setComplete() 메소드로 세션에 저장한 정보를 제거해야 한다.

 

@PathVariable

1) 개요

- @PathVariable은 메소드 매개 변수가 URI 템플릿 변수에 바인딩되어야 함을 나타내는 애노테이션이다. 요청 URI 매핑의 템플릿 변수를 처리하고 이를 메소드 매개 변수로 사용할 수 있다.

- @RequestMapping 애노테이션이 있는 핸들러 메소드에 지원된다.

- 메소드 매개 변수가 Map<String, String>이면 Map이 모든 경로 변수 이름 및 값으로 채워진다.

 

2) 옵션

- name : 바인드 할 경로 변수 이름으로 스프링 4.3.3부터 사용 가능 String

- required : 필수 여부 설정으로 기본값은 true이며 스프링 4.3.3부터 사용가능. boolean

- value : name의 별칭 String

 

3) REST(Representational State Transfer)

 (1) 개요

 - 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미

 - 월드 와이드 웹(www)과 같은 분산 하이퍼 미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식. REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일로 네트워크 상에서 Client와  Server 사이의 통신 방식 중 하나

 - HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미

 - REST는 자원 기반의 구조(ROA, Resource Oriented Architecture) 설계의 중심에 Resource가 있고 HTTP Method를 통해 Resource를 처리하도록 설계된 아키텍쳐를 의미

 - 웹사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID 인 HTTP URI를 부여

 - CRUD Operation : Create : 생성 (POST) READ : 조회 (GET) Update : 수정 (PUT) Delete : 삭제(Delete) HEAD : header 정보 조회(HEAD)

 

 (2) REST API

 - API(Application Programming Interface) 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것

 - REST API의 정의

 REST 기반으로 서비스 API를 구현한 것

 OpenAPI, 마이크로 서비스(하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처) 등을 제공하는 업체 대부분은 REST API를 제공한다.

 - REST API 설계 기본 규칙

 -- URI는 정보의 자원을 표현해야 한다.

 -- 자원에 대한 행위는 HTTP Method(GET, PUT, POST, DELETE 등)로 표현한다.

 --- URI에 HTTP Method가 들어가면 안된다.

 --- URI에 행위에 대한 동사 표현이 들어가면 안된다. (CRUD 기능을 나타내는 것은 URI에 사용하지 않는다.)

 

(3) RESTful 서비스

- RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다. "REST API"를 제공하는 웹 서비스를 "RESTful"하다고 할 수 있다.

- RESTful 서비스는 URI를 사용하여 리소스 이름을 지정한다.

- Spring은 @RequestMapping을 사용하여 요청에 대한 URI 템플릿을 정의하여 RESTful 서비스를 한다. @PathVariable은 템플릿 변수의 값을 추출하고 해당 값을 메소드 매개변수에 할당하는 데 사용한다.

+ Recent posts