스프링에서 @Controller 와 @RestController 를 언제 어떻게 구분할까 목차 왜 두 어노테이션이 나뉘었을까 반환값은 어디로 가는가: 뷰 이름과 응답 본문 @ResponseBody 로 이해하는 핵심 차이 Spring Boot에서 화면용과 API용을 나누는 방법 같은 기능을 두 방식으로 구현해보기 브라우저와 curl 로 바로 확인하는 방법 자주 발생하는 실수와 디버깅 포인트 빠른 답 HTML 화면을 내려주면 보통 @Controller, JSON API를 만들면 보통 @RestController를 사용합니다. @RestController는 사실상 @Controller와 @ResponseBody를 함께 적용한 형태입니다. 문자열 반환값이 뷰 이름인지 응답 본문인지 헷갈릴 때는 어노테이션과 @ResponseBody 유무를 먼저 확인하면 됩니다. 응답 JSON 변환은 HttpMessageConverter가 담당하므로 헤더와 직렬화 설정도 함께 봐야 합니다. 빠른 답 HTML 화면을 렌더링해 내려주면 보통 @Controller 를, JSON 같은 API 응답을 내려주면 보통 @RestController 를 사용합니다. @RestController 는 사실상 @Controller 와 @ResponseBody 를 합친 형태라서 반환값이 뷰 이름이 아니라 HTTP 응답 본문으로 처리됩니다. String 을 반환했는데 동작이 기대와 다르면 먼저 @ResponseBody 유무와 클래스의 어노테이션 종류를 확인하면 됩니다. JSON 응답은 HttpMessageConverter 가 직렬화하므로 Content-Type , DTO 구조, Jackson 설정까지 함께 봐야 정확히 이해할 수 있습니다. 왜 두 어노테이션이 나뉘었을까 스프링 MVC의 출발점은 서버가 HTML을 만들어 브라우저에 내려주는 구조였습니다. 이 흐름에서 컨트롤러는 요청을 받고, 필요한 데이터를 준비한 뒤, 어떤 화면을 렌더링할지 결정합니다. 그래서 @Controller ...