본문 바로가기
Today I Learned/Spring

[Spring] Controller

by 프로그래 밍구 2022. 9. 23.

Controller

부트스트랩(Bootstrap)

애플리케이션이 실행되기 전에 여러가지 설정 작업을 수행하여 실행 가능한 애플리케이션으로 만드는 단계를 의미한다.

@RestController

 Spring MVC에서는 특정 클래스에 @RestController를 추가하면 해당 클래스가 REST API의 리소스를 처리하기 위한 API 엔드포인트로 동작함을 정의한다. 또한 @RestController가 추가된 클래스는 애플리케이션 로딩 시, Spring Bean으로 등록해준다.

@RequestMapping

@RequestMapping은 클라이언트의 요청과 클라이언트 요청을 처리하는 Handler Method를 매핑해주는 역할을 한다. @RequestMapping을 Controller 클래스 레벨에 추가하여 클래스 전체에 사용되는 공통 URL을 설정할 수 있다.

Handler Method( 핸들러 메서드)

Controller 클래스에 핸들러 메서드를 추가하여 클라이언트의 요청을 처리할 수 있다.

produces

 produces Attribute는 응답 데이터를 어떤 미디어 타입으로 클라이언트에게 전송할 지 설정한다. JSON 형식의 데이터를 응답 데이터로 전송하겠다는 의미로 MediaType.APPLICATION_JSON_VALUE 값을 설정할 수 있다.

@PostMapping

 @PostMapping은 클라이언트의 요청 데이터(request body)를 서버에 생성할 때 사용하는 애너테이션이다. 클라이언트 쪽에서 요청 전송 시, HTTP Method 타입을 동일하게 맞춰야 한다.

@RequestParam 

 핸들러 메서드의 파라미터 종류 중 하나이다. 주로 클라이언트 쪽에서 전송하는 요청 데이터를 쿼리 파라미터(Query Parmeter 또는 Query String), 폼 데이터(form-data), x-www-form-urlencoded 형식으로 전송하면 이를 서버 쪽에서 전달 받을 때 사용하는 애너테이션이다.

@GetMapping

@GetMapping은 클라이언트가 서버에 리소스를 조회할 때 사용하는 애너테이션이다.

응답 데이터에 ResponseEntity 적용

ResponseEntity

@RestController
@RequestMapping("/v1/members")
public class MemberController {
    @PostMapping
    public ResponseEntity postMember(@RequestParam("name") String name) {
    
        Map<String, String> map = new HashMap<>();
        map.put("name", name);
 
 
        // 리턴 값을 ResponseEntity 객체로 변경
        return new ResponseEntity<>(map, HttpStatus.CREATED);
    }
}

 위 코드처럼 ResponseEntity 객체를 생성하면서 생성자 파라미터로 응답 데이터(map)와 HTTP 응답 상태를 함께 전달할 수 있다이처럼 HTTP 응답 상태를 명시적으로 함께 전달하면 클라이언트의 요청을 서버가 어떻게 처리했는지를 쉽게 알 수 있다. 클라이언트 쪽에서는 이 HTTP 응답 상태를 기반으로 정상적으로 다음 처리를 할지 에러 처리를 할지 결정하면 되는 것이다.

POST Method 형식의 클라이언트 요청에 대한 응답 상태는 HttpStatus.OK보다는 HttpStatus.CREATED가 조금 더 자연스럽다.

 

기타 다른 HTTP 응답 상태 종류: https://developer.mozilla.org/ko/docs/Web/HTTP/Status

댓글