요르딩딩

Controller에 대해 알아보자 본문

[Web]/[Spring]

Controller에 대해 알아보자

요르딩딩 2021. 9. 9. 16:50
728x90
반응형

1. @Controller vs @RestController

@Controller는주로 View를 반환하고, @RestController는 주로 Data를 반환합니다.

즉, 역할을 구분따져보면 @Contoller(view) + @Responsebody(data) = @RestContoller(view+data)라고 생각하면 됩니다.

 

@Controller와 @RestController의 차이는 용도에 따른 차이입니다.

예전에는 백엔드에서도 @Controller를 사용하여 jsp나 html과 같은 View를 전달해 주었기 때문에 사용해 왔지만,

최근에는 프론트엔드, 백엔드를 따로두고, @RestController를 백엔드에서 json으로 Data만 편리하게 전달하기위해 사용합니다. 

 

즉, Rest API에서는@controller @restcontroller 선언한 두 개의 클레스 만들고,

@Controller 클레스는 view만 처리하고@Restcontroller 클레스는 Data 처리에 사용한다고 생각하면 될거 같습니다.

 

@ResponseBody

⇒ View 조회를 무시하고, HTTP message body에 직접 해당 내용을 입력

 

참고 :  https://hyeounstory.tistory.com/62?category=849984 

 

2. Restful (REpresentational State Transfer)

 RESTful API는 HTTP 통신에서 어떤 차원에 대한 CRUD 요청을 Resource와 Method로 표현하여,

특정한 형태로 전달하는 방식입니다. 

 

[구성]

- Resource(자원, URI)

- Method(요청 방식, GET or POST 등)

- Representation of Resource(자원의 형태, JSON or XML 등)

 

@Requestmapping

 @RequestMapping은 http request로 들어오는 url을 특정 controller 클래스나 메소드로 매핑(연결)시키는 역할을 합니다.

(@RequestMapping은 controller에 있어서 class에 적용할수도 있고 특정 method에 적용할수도 있습니다.)

 

⇒ 클래스 레벨에 매핑 정보를 두면 메서드 레벨에서 해당 정보를 조합해서 사용합니다.

 

⇒ 대부분의 속성을 배열[]로 제공하기에 다중 설정도 가능합니다.

(ex: {"/hello", "/hello-world"})

 

⇒ method 속성으로 HTTP 메서드를 지정하지 않으면 모든 메서드에 무관하게 호출됩니다.

(GET, HEAD, POST, PATCH, DELETE)

 

GetMapping, PostMapping, PatchMapping, DeleteMapping등 이름에 의미를 부여해 더 직관적으로 사용할 수 있습니다.

⇒ 어노테이션 내부에는 @RequestMapping과 method를 미리 지정돼 있는것입니다.

 

@RequestParam

@RequestParam 을 사용하면 getParameter 메소드를 통해 꺼내는 대신, 매개변수 레벨에서 더 빠르게 바로 꺼내 사용할 수 있다.

 

ResponseEntity<?>

ResponseEntity 는 헤더와 바디, 상태 코드로 구성되어 있고 http 응답을 나타낼 때 사용 합니다.
Http 응답을 편하게 구성하여 보낼 떄 사용 하는 클래스 이다.

 

@PathVariable

최근 HTTP API는  리소스 경로에 식별자(파라미터)를 넣는 스타일을 선호한다고 합니다.

 추출할 url depth에 중괄호({})를 감싸서 매핑할 수 있습니다. ( @GetMapping("/testurl/{type}/{id}"))

하나 이상의 PathVariable도 사용이 가능하다.

 

쿼리 스트링

쿼리 파라미터라고도 부른다. 주로 URL 끝에 붙여져 있다.
⇒  검색 사이트에 ?query=XXX 라든지, ?redirect=URL 이런 것이 쿼리 스트링이다.

 

@RequestParam.required

⇒ 파라미터 필수 여부

⇒ 기본값은 파라미터 필수 (true)입니다.

public String requestParamRequired(@RequestParam(required = true) String username, @RequestParam(required = false) Integer age)

 

- 해당 파라미터를 공백(ex: username=)으로 전송하면 빈 문자로 통과된다.

- required가 true인 파라미터를 보내주지 않으면 400 예외(BAD_REQUEST)가 발생한다.

- 원시타입은 null이 들어갈 수 없어서 required가 false여도 500에러가 발생한다.

  ⇒ int형으로 에러가 발생하면 Integer같은 wrapper 타입을 사용해야 한다.

  ⇒ 혹은 기본값을 설정해주는 defaultValue를 사용하면 된다.

 

@RequestParamController.requestParamDefault

파라미터가 없는 경우 기본값으로 설정한 값이 적용된다.

이미 기본값이 있기에 required는 의미가 없어 빼도 된다.

빈 문자("")의 경우에도 설정한 기본 값이 적용 된다.

public String requestParamDefault(@RequestParam(defaultValue = "catsbi") String username)

 

 

URI = URL + URN

참고 : https://hoyeonkim795.github.io/posts/rest_api/

 

@Autowired

- @를 이용한 주석, 자바코드에 주석을 달아 특별한 의미를 부여한 것

- 컴파일러가 특정 오류를 억제하도록 지시하는 것과 같이 프로그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공, 코드에 정보를 추가하는 정형화된 방법.


[용도]
- @Override 어노테이션처럼 컴파일러를 위한 정보를 제공하기 위한 용도

- 스프링 프레임워크의 @Controller 어노테이션처럼 런타임에 리플렉션을 이용해서 특수 기능을 추가하기 위한 용도

- 컴파일 과정에 어노테이션 정보로부터 코드를 생성하기 위한 용도

 


출처: https://sjh836.tistory.com/8 [빨간색코딩]

 

HttpServletRequest + RequestUtil.paramToHashMap(param)

728x90
반응형
Comments