애노테이션 @RestController 를 사용하려는 컨트롤러에 붙이게 되면

해당 컨트롤러를 new 해서 spring 이 집어넣어줄거고 (bean)

생성된 컨트롤러 객체는 개발자와 상관 없이 dispatcher 가 사용

→ dispatcher 는 사용자가 request 요청할 때 작동 된다

(request 요청은 웹브라우저를 통해서 이루어진다)

따라서 웹브라우저 요청이 들어오면 제일 처음으로 dispatcher 가 발동 되고

얘가 요청 주소를 받아 IoC 컨테이너에서 해당 컨트롤러를 찾아냄

찾아내서 맞는 주소로 함수를 호출해준다.

⇒ parsing 해서 분기시켜준다는 얘기야

🤔 그래서 @RestController 가 다른 컨트롤러랑 다른 점이 뭔데ㅡㅡ?

그냥 컨트롤러랑 똑같은데 파일이 아니라 데이터를 리턴해줌!!

예시 보고 가세요~~.~~

@RestController // IoC -> 컨테이너 등록 => 해당 객체는 디스패쳐가 사용함
// 데이터를 리턴
public class UserController {

	@CrossOrigin // 다른 포트에서 요청 가능하도록 (cors 정책 무시)
	@GetMapping("/user/{id}")
	public User findById(@PathVariable int id) {
		System.out.println("findById 나 실행 됨?");
		User user = new User(id, "ssar", "1234", "[email protected]");
		return user;
	}

	// POST : <http://localhost:8080/user>
	// BODY : x-www-form-urlencoded (key=value) -> 자바의 기본 MIME 타입
	// BODY : json ({"key" : "value"}) -> 그래서 이런 형식의 데이터가 오면 파싱 못. 그래서
	// BufferedReader로 읽어준다고
	@PostMapping("/user")
	public User save([*@RequestBody*](<https://jungspin.notion.site/RequestBody-32d55334d94f4c27b0861ba18372a3fd>) User user) { // BufferedReader로 읽는게 @RequestBody
		user.setId(2);
		return user;
	}

}