Spring

Spring Web MVC - @Controller / @RestController

chandlerxx 2023. 12. 26. 15:31

과거에 배웠던 개념인데 프로젝트를 진행하면서 떠오르지 않는다면, 해당 개념이 제대로 숙지되지 않다는 증거입니다.

또한 개념만 죽어라 공부한다고 해서 성장할 수 없습니다.

 

스스로 프로젝트를 진행해야만 보이는 것들이 있습니다.

1. 현재 나에게 "부족한 개념"은 무엇인가

2. 프로젝트를 완성하기 위해서 "무슨 개념"을 적용해야하는가

3. 그리고 완성할때까지 반복

4. 완성된 이후 개선작업 (서비스와 유지보수 측면 등 고려)

.

.

 

블로그를 만들때 중요한 서비스는 아래와 같습니다.

  • 게시글 등록/수정/삭제 → 현재 단계
  • 뷰 렌더링
  • 부가서비스(채팅방 등)

 

1. @Controller - 쿼리파라미터로 데이터 전달하기


요청 데이터를 전달할때 가장 기본적인 방법입니다.

HelloController를 생성하고 서버 연결 성공시, 화면에 Hello World를 출력하겠습니다

(예제를 참고해 학습해주세요)

 

1. HelloController 생성

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String helloWorld(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name);
        return "hello";
    }
}

 

2. hello.html 생성

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head> 
    <title>Getting Started: Serving Web Content</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="|Hello, ${name}!|" />
</body>
</html>

 

  • @Controller
    반환 값이 String 이면 View 이름으로 인식되며, View를 찾고 랜더링합니다.(src/main/resources/templates/hello.html)
  • @GetMapping
    RequestMapping(method = RequestMethod.GET) + /hello url 라우팅하면 helloWorld 메서드를 호출합니다.
  • @RequestParam 
    쿼리 스트링의 파라미터값으로 바인딩 처리
    만약 http://localhost:8080/hello?name=XXX로 조회시, VIew에서 "|Hello, ${name}!|"에 name 대신 XXX값 할당한 후에 출력
  • model.addAttribute
    View에 전달할 데이터를 key-value처리
    VIew에서 ${name} -> key
    쿼리 파라미터  http://localhost:8080/hello?name=XXX -> value

출력결과

 

 

 

2. @RestController 


앞서 살펴본 Controller방식의 단점은 너무 번거롭습니다. 좀더 간편하게 사용할 수 있는 방법이 @ResponseBody입니다.

 

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String helloWorld() {
        return "Hello World";
    }
}

 

  • @RestController 
    = @Contorller + @ResponseBody
    메세지 바디에 "Hello World"라는 문자열을 JSON형태로 반환
    합니다.
    코드가 매우 간편해지면서도 원했던 기능은 다 구현할 수 있고요.

 

 

 

 

감사합니다.