본문 바로가기
Etc/BootCamp : TIL

[Day 58] Spring MVC : API 계층 - Controller

by 달의 조각 2022. 8. 19.

학습 주제

 

Spring MVC
동작 방식과 구성 요소

Controller : API 엔드 포인트
기본 기능 구현

 


 

새롭게 배운 내용

 

 

🍎 엔트리포인트 클래스

main() 메서드가 포함된 애플리케이션 시작점이다.

@SpringBootApplication
  • 자동 구성 활성화
  • @Component와 @Configuration이 붙은 클래스를 자동으로 찾아 주고 스프링 빈으로 등록하는 기능을 활성화
SpringApplication.run(~.class, args);
  • 애플리케이션을 부트스트랩 하고 실행하는 역할
    • 부트스트랩: 애플리케이션 실행 전 여러 작업을 수행하여 실행 가능한 애플리케이션으로 만든다.

 

🍎 Controller 구조

  • `@RestController`: 해당 클래스가 REST API의 리소스를 처리하기 위한 API 엔드포인트로 동작함을 정의하고, 해당 클래스를 스프링 빈으로 등록한다.
  • `@RequestMapping`: 클라이언트 요청과 이 요청을 처리하는 핸들러 메서드를 매핑해 주는 역할로, Controller 클래스 레벨에 추가하여 클래스 전체에 사용되는 공통 URL(Base URL) 설정을 한다.
    • produces 속성: 클라이언트에게 전송할 응답 데이터의 미디어 타입을 정한다.
      → 생략하고 Map 객체를 생성하여 리턴하면 내부적으로 JSON으로 자동 변환한다.
      → 아래 코드와 같이 리턴하면 조금 더 세련된 방식으로 응답 데이터를 생성할 수 있다.
new ResponseEntity<>(map, HttpStatus.CREATED);

 

  • `@PathVariable`: 클라이언트 요청 URI에 패턴 형식으로 지정된 변수의 값을 파라미터로 전달받는다.
  • `@RequestParm`: 핸들러 메서드의 파라미터 종류 중 하나
    쿼리 파라미터나 폼 데이터, `x-www-form-urlencoded` 형식의 데이터를 파라미터로 전달 받을 수 있다.
  • 클라이언트의 요청을 전달 받아서 처리하기 위해서는 요청 핸들러 메서드(Request Handler Method)가 필요하다.
  • POST Method 형식의 클라이언트 요청에 대한 응답 상태는 `HttpStatus.OK`보다는 `HttpStatus.CREATED`가 조금 더 자연스럽다.

 

 

보강할 내용

 

REST API Resource 접근 URI 작성 규칙: https://itvillage.tistory.com/35
@SpringBootApplication 의 역할: https://itvillage.tistory.com/36
Spring Boot 애플리케이션의 부트스트랩(Bootstrap) 과정: https://itvillage.tistory.com/37

Postman 기본 사용법: https://itvillage.tistory.com/38
@RequestMapping 추가 내용: https://itvillage.tistory.com/40
Controller의 핸들러 메서드 파라미터 추가 내용: https://itvillage.tistory.com/41
미디어 타입(Media Type)이란? : https://ko.wikipedia.org/wiki/미디어_타입
미디어 타입(Media Type), MIME Type, Content Type
https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_Types
https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
HTTP Method: https://developer.mozilla.org/ko/docs/Web/HTTP/Methods
HTTP POST Method의 요청 데이터 형식 관련 내용: https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/POST
HTTP 응답 상태(Response Status): https://developer.mozilla.org/ko/docs/Web/HTTP/Status

ResponseEntity 더 알아보기: https://itvillage.tistory.com/44

 

 

회고

 

벌써 Spring MVC에 대해 학습하다니 시간이 너무 빠르다. MVC 패턴의 시작에 주말이 걸려 있으니, 강의를 들으며 이전에 작성한 글들을 정리해야겠다.

  Spring MVC라는 큰 주제 안에서 오늘 학습한 내용은 API 계층에 대한 것이다. 개발에서 API(Application Programming Interface)라는 단어는 참 많이 사용되는데 와닿지가 않았었다. API 계층이란 클라이언트 요청을 직접적으로 받는 계층이다. 음식점에 비유를 하자면 클라이언트와 주방(서버)을 연결하는 주문서의 역할을 한다고 볼 수 있다.

클라이언트의 HTTP 요청을 Controller가 직접적으로 받는다. 이 세부 동작 과정을 이해하는 것이 오늘 학습의 중요한 포인트라고 생각한다. 클라이언트의 요청을 `DispatcherServlet` 클래스가 받아서 이 요청을 처리할 Controller를 `HandlerMapping` 인터페이스에게 찾게 한다. 매핑되는 핸들러 객체를 반환하면 `HandlerAdpater`에게 클라이언트 요청을 처리할 `Handler` 메서드 호출을 위임하게 된다. `HandlerAdpater`는 해당 Contoller의 `Handler` 메서드를 호출한다.

Controller는 비즈니스 로직을 실행하고 반환된 Model 데이터를 거꾸로 `HandlerAdpater`에게 전달한다. 그리고 Model 데이터와 View 정보를 `DispatcherServlet`에게 전달하면 `ViewResolver`에게 View 검색을 요청하여 `View` 객체를 받는다. 이제는 View에게 Model 데이터를 넘기며 클라이언트가 요청한 데이터를 생성하길 요청하고, View가 응답 데이터를 생성하면 이를 `DispatcherServlet`가 클라이언트에게 전달한다.

이해하면 쉬운 것 같은데 말로 설명하려고 하면 어렵다. 계속 보면 익숙해질 것이라 믿고 코드로 적용하는 연습을 해야겠다. HTTP 메서드에 대해서도 다시 천천히 공부하는 시간이 필요할 듯 싶다!

 

★★★★★

댓글