본문 바로가기
Memo/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 메서드에 대해서도 다시 천천히 공부하는 시간이 필요할 듯 싶다!

 

 

★★★★★

댓글