Controller Annotation @Controller vs @RestController

@Controller

  • 개인적으로 Monolithic으로 반환값은 String타입을 주로 사용하며, 반환값에 Templates 경로를 넣어줍니다. 따라서 SSR(Server Side Rendering)으로 생각되며 자세한 작동 원리는 좀 더 알아본 뒤 보강 하거나 따로 다뤄보겠습니다.

@RestController

  • @Controller와 상반되는 MSA(MicroService Architecture)로 반환값은 데이터와 Status Code가 주입니다. 따라서 API로 데이터(객체)를 제공하여 CSR(Client Side Rendering)로 생각되지만 이것 또한 같이 알아본 뒤 보강 하거나 따로 다뤄보겠습니다.

예시로 MyBatis를 사용할 경우, 데이터를 제공하는 API와 페이지를 제공하는 API가 각각 사용했습니다.

//file: `DataController.java`

@RestController
@RequestMapping("/api")
public class DataController {
    @PostMapping("/userDetail")
    public ResponseEntity<UserDTO> getUserDetail(@RequestBody Map<String, String> request) {
    	String mbrSqno = request.get("mbrSqno");
    	UserDTO userDetail = boardService.getUserDetail(mbrSqno);
    	return ResponseEntity.ok(userDetail);
}
//file: `ViewController.java`

@Controller
public class ViewController {
    @GetMapping("/board")
	public String viewBoard(Model model) {
		
	    return "board";
	}
}