부트캠프 기록/Section3

[Spring MVC] API계층_Controller

bbangduck 2022. 10. 29. 14:42

✅ 학습 목표

  • API 엔드 포인트인 Controller 의 구성요소 이해
  • 실제 동작하는 Controller의 기본 기능 구현

 

Controller 클래스 설계 및 구조 생성

계층형 아키텍처에서 API 모습

 

1. 애플리케이션의 경계 설정

2. 애플리케이션 기능 구현을 위한 요구사항 수집

3. 패키지 구조 생성 (Spring Boot에서 계층 기반 패키지 구조보다  기능 기반 패키지 구조 권장)

4. Controller 설계

  • '클라이언트로부터 발생할 요청에는 어떤 것들이 있을까'
  • REST API 기반의 애플리케이션에서는 애플리케이션이 제공해야 될 기능을 리소스(Resource, 자원)로 분류
  • 리소스에 해당하는 Controller 클래스를 작성하면 됨

5. main() 메서드가 포함된 애플리케이션의 엔트리포인트(Entrypoint, 애플리케이션 시작점) 클래스 작성

  • Sprintg Initializr 를 통해 생성한 프로젝트에는 이미 작성 돼 있음

 

@SpringBootApplication 의 역할

자동 구성 활성화

애플리케이션 패키지 내 @Component 가 붙은 클래스를 스캔

@Configuration이 붙은 클래스를 찾아서 Spring Bean을 등록하는 기능 활성화

 

Controller Annotation

- @RestController

해당 클래스가 REST API의 리소스를 처리하기 위한 API 엔드포인트로 동작함을 정의

해당 클래스는 Spring Bean으로 등록됨

- @RequsetMapping

클라이언트의 요청과 클라이언트 요청을 처리하는 핸들러 메서드를 매핑해주는 역할

클래스 전체에 사용되는 공통 URL(Base URL) 설정

 

더보기

REST API Resource 접근 URI 작성 규칙

https://itvillage.tistory.com/35

 

@SpringBootApplication 의 구체적인 기능

https://itvillage.tistory.com/36

 

Spring 애플리케이션의 부트스트랩(Bootstrap) 과정

https://itvillage.tistory.com/37

 

핸들러 메서드(Handler Method)

- Spring MVC 에서 HTTP Method 유형과 매치되는 @GetMApping, @PostMApping 등의 애너테이션을 지원

- @PathVariable 애너테이션을 사용하면 클라이언트 요청 URI에 패턴 형식으로 지정된 변수의 값을 피라미터로 전달받을 수 있음

- @RequestParam 애너테이션을 사용하면 쿼리 파라미터, 폼 데이터, x-www-form-urlencoded 형식의 데이터를 파라미터로 전달 받을 수 있음

 

더보기

Controller의 핸들러 메서드 파라미터 추가 내용

https://itvillage.tistory.com/41

 

HTTP 미디어 타입(Media Type)

 

 

응답 데이터에 ResponseEntity 적용

return new ResponseEntity<>(map, HttpStatus.CREATED);

 

- Map 객체를 리턴하게 되면 내부적으로 ‘이 데이터는 JSON 형식의 응답 데이터로 변환해야 되는구나’라고 이해하고 JSON 형식으로 자동 변환

- 리턴 값으로 단순히 Map객체를 리턴해도 클라이언트 쪽에서는 정상적으로 JSON 형식의 응답 데이터를 받을 수 있음

- 하지만 ResponseEntity 객테로 응답 데이터를 래핑함으로써 좀 더 세련된 방식으로 응답 데이터 생성 가능

 

 

 

 

출처