3.1 Spring MVC - Controller

yeonseong Jo·2023년 6월 9일
0

SEB_BE_45

목록 보기
32/47
post-thumbnail

드디어 spring 시작이다.
(봄은 끝났지만..)

Section3에 들어가기 전에 처음 배운 것일 거라 생각되어
두려움과 기대가 있었지만,

오늘 배운 것은 MVC이다.
django를 공부하면서 MTV패턴에 대해 들어봤고,
이 Spring MVC는 이 MTV와 크게 차이가 없었다.

그래서 첫 걸음이 좀 가벼웠던걸지도..?


MVC

Model View Controller에서 각 앞부분을 딴 용어로
클라이언트의 요청을 처리하는 디자인 패턴이다.

Model

어플리케이션의 정보, 데이터를 의미

View

Model 데이터를 클라이언트 어플리케이션에 제공

Controller

Controller는 클라이언트의 request를 받아

Model에서 받은 데이터를 다듬거나 확인하고,
View에 전달하거나,
View에서 전달된 요청 데이터를 받아 유효성 등의 검사를 하고,
Model에 전달한다.

그래서 내 생각엔
코드를 수정해서 가장 쉽게 효율을 높이는 부분이 아닐까 싶다.


Spring에서 Controller

RestController

@RestController
@RequestMapping("/post")
public class Controller{
	...
}

REST API의 리소스를 처리하는 class에
RestController annotation달면,
해당 class는 API 엔드포인트로 동작하게 된다.
또한, 자동으로 Bean에 등록된다고 한다.

RequestMapping

@RestController
@RequestMapping(value = "/post", produces = {MediaType.APPLICATION_JSON_VALUE})
public class Controller{
	...
}

클라이언트의 request와 handler method를 매핑해주는 annotation이다.
value 파라미터를 통해 url을 정할 수 있고,
produces 파라미터를 통해 response Content-Type을 정할 수 있다.
(produces는 잘 사용 안하는듯..)

~Mapping

@RestController
@RequestMapping("/post")
public class Controller{
	@PostMapping
    public ResponseEntitiy postMethod(
    ...
}

RestController 클래스의 method에서
HttpMethod+Mapping 형태의 annotation으로 사용되며
ex) GetMapping, PostMapping 등

클라이언트가 요청한 method에 따라 호출되는 method가 달라진다.

@RestController
@RequestMapping("/post")
public class Controller{
	@PostMapping("{postId}")
    public ResponseEntitiy postMethod(
    	@PathVariable("postID") long postId){
    	...
    }
}

RequestMapping에서 url을 설정하는 방식처럼 path 변수를 받을 수 있고,
method에 파라미터의 타입 앞에
PathVariable annotation을 통해 1대1 매칭 시킬 수 있다.

ResponseEntitiy

ResponseEntitiy를 method의 반환값으로 정하면서
RequestMapping에 produces값을 넣을 필요가 없어졌다.

ResponseEntitiy는 보통 response 데이터와 status code를
넣어 클라이언트에 전달하고,
header를 같이 넣어 전달 할 수도 있다.
클라이언트가 요청할 때 header에 값을 추가하기도 하기 때문

(사용자가 로그인을 할 때, AccessToken을 header에 담아 전달)


이거 완전 django에서 function base view를 짜는 것과
차이가 없었다.
그래서 그런지 실습과제도 금방 끝내서
수업시간이 끝나기도 전에 이 글을 작성하고 있다...

profile
뒤(back)끝(end)있는 개발자

0개의 댓글