Spring/Spring Boot

[Spring MVC] 03. Controller

생각없이 해도 생각보다 좋다. 2022. 10. 22. 13:05

Spring Boot 기반 애플리케이션
>설정 조건


>애플리케이션 경계 및 요구 사항
우선은 간략하게만...!
-버거 가게를 위한 애플리케이션
-멤버(고객, 점장) 정보
-버거 정보
-주문 정보

1. Entrypoint Class
애플리케이션의 시작점이 되는 클래스를 Entrypoint Class라고 한다.
Spring Boot를 이용했다면, Entrypoint Class는 자동 생성된다. 위의 조건대로 설정한 상태에서는 아래 경로를 따른다.
src -> main -> java -> com.example -> PracticingControllerApplication

@SpringBootApplication
-자동 구성 활성화
-애플리케이션 패키지 내의 @Component가 붙은 클래스를 검색(Scan)한 후, Spring Bean으로 등록하는 기능 활성화
-@Configuration이 붙은 클래스를 찾고, Spring Bean으로 등록하는 기능 활성화

SpringApplication.run(PracticingControllerApplication.class, args);
-Spring 애플리케이션을 실행 가능한 단계로 준비시키고 실행하는 역할
-Bootstrap : 애플리케이션의 실행 전, 설정 작업을 수행하고 준비하는 것을 Bootstrap이라고 한다.

 

Controller
>MemberController

@RestController
-해당 애너테이션이 붙은 클래스는 Rest API의 리소스를 처리하기 위한 API 엔드포인트로 동작하게 된다.
-해당 애너테이션이 붙은 클래스는 애플리케이션 로딩 시, Spring Bean으로 등록된다.

@RequestMapping
-해당 애너테이션은 클라이언트의 요청(URL)과 요청을 처리하는 핸들러 메서드를 매핑하는 역할을 한다.
-클래스 전체에 사용되는 공통 URL을 attribute로 설정한다.

@PostMapping
-HTTP 메서드 중 POST 요청이 들어왔을 경우, @PostMapping이 붙은 메서드(핸들러 메서드)가 작동되게 하는 애너테이션
-@GetMapping, @PatchMapping, @DeleteMapping도 존재함!
-Mapping Attribute로 URL을 지정할 수 있음.
: URL의 일부를 지정하여 이를 매개변수로 사용 가능

@PathVariable
-해당 애너테이션의 Attribute는 문자열 형태로 지정하며, Mapping Attribute의 {}안과 일치해야한다.
-일치하지 않으면 MissingPathVariableException 발생
-해당 URL의 경로를 변수로 받을 수 있게 만드는 애너테이션

@RequestParam
-클라이언트의 요청 데이터를 쿼리 파라미터, 폼 데이터, x-www-form-urlencoded 형식으로 제공할 때, 서버가 이를 받기 위해 사용하는 애너테이션
-key와 value 값으로 데이터를 받는다.

ResponseEntity
-HttpEntity 클래스를 상속하는 클래스
-생성자에 인자로 HttpStatus를 같이 제공할 수 있음.
-응답 데이터(JSON 형식)와 HttpStatus를 동시에 반환할 수 있는 방법으로 쓰임
-내부에서 HttpMessageConverter가 작동하기 때문에 가능하다.

(참고)https://itvillage.tistory.com/46

@RequestBody
-클라이언트의 요청 데이터 중 바디에 해당하는 부분을 RequestBody라고 한다.
-JSON 형태의 Request Body를 전달받을 때, 해당 애너테이션이 붙은 클래스의 객체 형태로 변환시킨다.
-역직렬화를 담당하는 부분
-Request Body가 JSON 형식이 아니라면, Unsupported Media Type 에러를 배출한다.

@ResponseBody
-클래스(DTO)의 객체를 JSON 형식의 Response Body로 만드는 애너테이션이다.
-하지만 리턴 값을 ResponseEntity를 사용하는 것 또한 JSON형태의 Response Body를 보내는 방법이다. 상황에 맞게 쓰면 된다.