Spring Boot
Controller
stophyeon
2024. 1. 7. 15:17
728x90
Controller란
Controller란 Spring 어플리케이션의 구조중 개발자가 정의한 코드에서 사용자의 요청을 처음으로 받는 부분입니다.
Controller의 역할은 간단하게 사용자의 요청을 구분하는 것입니다.
요청을 구분하는 방법은 URI를 통해 구분합니다. 사용자가 버튼을 누르면 HTML코드에 URI가 작성되어있습니다.
그런 뒤 해당 요청이 Controller에 전달되고 Controller에서 어떤 Service 클래스에 전송할지 결정합니다.
Controller 구현
@Controller
@Controller 어노테이션을 클래스에 선언하면 해당 클래스를 Controller로 사용하겠다는 것입니다.
@Controller는 다수의 어노테이션을 묶어놓은 형태입니다. 그중 @Component가 포함되어 있어서
해당 클래스가 Bean으로 등록됩니다. Bean으로 등록된 클래스는 IoC 컨테이너에서 관리되므로 앞으로 따로
생성할 필요가 없어집니다.
@RequestMapping()
Controller클래스에 구현되는 메서드는 URI를 통해 들어온 요청이 어떤 요청인지 구분하는 기능을 해야합니다.
위 기능을 Mapping이라고 합니다.
우선 Controller 클래스를 구현할 때도 어떤 요청을 처리할 것인지를 구분해 Controller를 구현해야 합니다.
에를 들어 로그인/회원가입/나의 정보 조회 같은 User에 관련된 요청을 처리하는 UerController
영화 제목으로 검색, 영화 상세정보와 같은 Movie에 관련된 요청을 처리하느 MovieController
위와 같이 기능별 Controller 클래스를 여러 개 구현합니다.
그렇다면 URL은 영화에 관련된 것이라면 '/movie'가 포함되어야 합니다.
@RequestMapping은 큰 단위로 해당 Controller클래스가 어떤 요청을 처리하는 클래스인지 알려줍니다.
Controller 클래스 선언위에 @Controller @RequestMapping("/movie")라고 선언되어 있다면
"..../movie/..."와 같은 형태의 요청은 MovieController에게 요청이 전달됩니다.
HTTP Method
HTTP요청을 사용자가 서버에게 보낸다면 다음과 같은 형식으로 전송됩니다.
GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
HTTP의 버전과 URI가 있는 것을 확인할 수 있습니다.
가장 앞쪽의 GET이라고 쓰여진 부분이 HTTP Method에 해당하는 부분입니다.
HTTP MEthod에는 4가지 종류가 있습니다.
GET - 서버에서 데이터를 가져오는 요청
POST - 서버에 데이터를 추가하는 요청
PUT - 서버에 데이터를 추가,수정 요청
DELETE - 서버에서 데이터를 삭제하는 요청
@GetMapping()/@PostMapping()/@PutMapping()/@DeleteMapping()
GET방식의 "..../movie/..." 요청이 MovieController에게 전송되었다면
Controller 클래스에 구현된 메서드중 어떤 메서드로 전송될지 정해야 합니다.
이때 사용하는 것이 @GetMapping()입니다. 만약 요청이 GET방식의 ".../movie/detail/..."이라면
영화의 상세정보를 처리하는 Service를 호출한 메서드에 요청을 전달해야 합니다.
@GetMapping("/detail")이라고 선언된 메서드에 요청을 전달합니다.
다른 어노테이션들도 같은 방식으로 동작합니다.
@PathVariable
https://fastcampus.co.kr/courses/203525/clips/
https://stophyeon.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F#
현재 사용하고 있는 URI를 본다면 위의 형태로 되어있습니다.
이 중 첫번째 URI를 보면 경로에 숫자가 들어가있습니다. 이 경우에는 URI에 변수를 포함시킨 것입니다.
예를 들어 사용자가 로그인을 성공한 상황에서 사용자의 고유 식별 index를 URI에 포함시키고 싶다면 아래와 같이 선언을 해줘야 합니다.
@GetMapping("/{id}")
public String detail(Model model, @PathVariable String id)
URI에 {}안에 있는 변수를 메서드의 인수로 받고 싶을 때 @PathVariable이라는 어노테이션을 사용합니다.
단, 인수의 변수명과 URI의 변수명이 다르다면 @PathVariable(name="id") String user_id 라고 선언해줘야 합니다.
@RequestParam
두 번째 URI를 보면 '?변수명 = value' 형식이 있습니다.
위의 형식을 URL Query라고 합니다. 사용자가 요청을 보낼 때 URI를 통해 Data를 넘겨주는 방식입니다.
Data를 매핑 시킬 변수의 앞에 @RequestParam을 선언하면 ?뒤의 Data가 각각 변수에 매핑됩니다.