학습 주제
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으로 자동 변환한다.
→ 아래 코드와 같이 리턴하면 조금 더 세련된 방식으로 응답 데이터를 생성할 수 있다.
- produces 속성: 클라이언트에게 전송할 응답 데이터의 미디어 타입을 정한다.
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 메서드에 대해서도 다시 천천히 공부하는 시간이 필요할 듯 싶다!
★★★★★
'Etc > BootCamp : TIL' 카테고리의 다른 글
[Day 62] Spring MVC : 서비스 계층 (0) | 2022.08.23 |
---|---|
[Day 61] Spring MVC : API 계층 - DTO (0) | 2022.08.22 |
[Day 57] 기술 면접, Section 2 KPT 회고 (0) | 2022.08.18 |
[Day 50] Spring Framework 핵심 개념 : DI (0) | 2022.08.11 |
[Day 49] Spring Framework Ⅱ (0) | 2022.08.10 |
댓글