
1. 컨트롤러 개요
1. 컨트롤러

- 스프링 부트는 MVC 설정과 톰캣서버 설정(실행과 배포)을 자동으로 해준다.
- 웹에서 사용자 요청 → 디스패처 서블릿이 요청을 받고 컴트롤러가 처리
- 컨트롤러: 웹에서 사용자 요청으로 구현된 메서드를 처리하고 결과를 뷰에 전달한다.
2. 컨트롤러 구현과정

- BookController 클래스를 컨트롤러(@Controller, @RestController)로 사용
- BookController 클래스는 웹요청 URL을 받아(@RequestMapping) 웹페이지에 화면 출력
2. 컨트롤러 정의
1. @Controller로 컨트롤러 정의하기
- 이 컨트롤러로 정의하면 특정 자바 클래스가 컨트롤러 역할을 하게 됩니다.
- 웹 어플리케이션에서 사용자의 요청과 응답을 처리하는 컨트롤러
package com.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller // ① Controller 선언
public class Example01Controller {
@RequestMapping(value = "/exam01", method = RequestMethod.GET) // ② URL 매핑
public String requestMethod() { // ③ 반환 타입은 String
return "viewPage01"; // ④ 뷰 이름 반환 (JSP, Thymeleaf 등)
}
}
- @Controller
- 스프링 MVC의 컨트롤러임을 선언.
- 주로 뷰(JSP, Thymeleaf) 를 반환할 때 사용.
- @RequestMapping
- /exam01 요청이 들어오면 requestMethod() 실행.
- GET 방식만 허용.
- requestMethod()
- 반환 타입이 String.
- 리턴 값 "viewPage01" 은 뷰 파일 이름.
- 즉, viewPage01.jsp 또는 viewPage01.html 을 찾아서 렌더링.
2. @RestController로 컨트롤러 정의하기
- Restful웹 서비스: HTTP 요청에 대한 응답을 RESTful 아키텍처 스타일에 맞춰 처리하는 자바 클래스
- 뷰 없이 문자열과 JSON 형식의 데이터를 반환
package com.springboot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController // ① RestController 선언
public class Example02Controller {
@RequestMapping(value = "/exam02", method = RequestMethod.GET) // ② URL 매핑
public String requestMethod() { // ③ 반환 타입 String
return "@RestController 예제입니다"; // ④ 응답 본문(body)으로 전송
}
}
- @RestController
- @Controller + @ResponseBody 합친 기능.
- 뷰를 거치지 않고, 데이터를 그대로 응답.
- @RequestMapping
- /exam02 요청이 들어오면 실행.
- GET 요청만 허용.
- requestMethod()
- 반환 값 "@RestController 예제입니다" 가 HTML 뷰가 아닌 그대로 클라이언트에 출력.
- 즉, 브라우저에서 보면 그냥 문자열 응답.

3. @RequestMapping을 이용한 요청 매핑 경로 설정
- 사용자 요퐁이 들어오면 컨트롤러와 메서드가 호출되어 요청을 처리합니다.
- 이때 사용자 URL에 맞는 컨트롤러와 메서드를 연결시키는 것
1. 컨트롤러에 @RequestMapping 적용하기
- 컨트롤러에 선언되는 경우: 클래스 수준의 @RequestMapping. 이때, 기본 매핑 경로를 설정하지 않은 매서드여야 한다.
- @RequestMapping(value="웹 요청 URL", method=RequestMethod.HTTP_요청방식)
| 속성 | 타입 | 설명 |
| value | String | 기본 매핑 경로 이름 |
| method | RequestMethod | HTTP 요청 방식 (GET, POST, PUT, DELETE) |
| headers | String | 매핑된 요청의 헤더 |
| name | String | 매핑 이름 지정 |
| params | String | 매핑된 요청 파라미터 |
| path | String | 서블릿 환경만의 경로 매핑 URI |
| consumes | String | 매핑된 요청의 소비 가능한 미디어 유형 |
| produces | String | 매핑된 요청의 생산 가능한 미디어 유형 |
2. 메서드에 @RequestMapping 적용하기
- 컨트롤러 안에 어떤 메서드를 처리할지 선언하는 경우: 메서드 수중의 @RequestMapping. 이때 method는 GET이 default
package com.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping(value = "/exam03", method = RequestMethod.GET) // 클래스 레벨 매핑
public class Example03Controller {
@RequestMapping // 메소드 레벨 매핑
public String requestMethod() {
return "viewPage03";
}
}
3. @RequestMapping 단순화하기
변형 @RequestMapping
| 애너테이션 | 설명 | method 속성 대응 |
| @GetMapping | GET 요청 매핑 | method=RequestMethod.GET |
| @PostMapping | POST 요청 매핑 | method=RequestMethod.POST |
| @PutMapping | PUT 요청 매핑 | method=RequestMethod.PUT |
| @DeleteMapping | DELETE 요청 매핑 | method=RequestMethod.DELETE |
| @PatchMapping | PATCH 요청 매핑 | method=RequestMethod.PATCH |
- @RequestMapping(method=RequestMethod.GET) 대신 @GetMapping으로 더 간단하게 사용 가능.
4. 요청 처리 매서드와 모델 유형
- 요청처리 메서드: 웹에서 사용자의 요청을 처리, 사용자 요청을 처리하고 결과 데이터를 관리하고 전달하는 모델과 처리된 모델과 데이터를 웹에서 출력하는 뷰를 포함
1. Model 인터페이스로 메서드 작성하기
- 모델 인터페이스는 사용자 요청 처리 결과를 뷰에 보여주는데, addAttribute() 객체에 담아 전달합니다.
- Model 객체는 키-값 쌍(attribute) 으로 데이터를 저장.
package com.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.ui.Model;
@Controller
public class Example06Controller {
@GetMapping("/exam06")
public String requestMethod(Model model) {
model.addAttribute("data1", "Model 예제");
model.addAttribute("data2", "웹 요청 URL은 /exam06 입니다");
return "viewPage";
}
}
2. ModelMap 클래스로 메서드 작성하기
- ModelMap 은 Model 과 비슷하지만, Map 기반이라 put() 대신 addAttribute() 사용.
- Model 과 기능적으로 큰 차이는 없지만, 키-값 관리가 조금 더 유연.
package com.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.ui.ModelMap;
@Controller
public class Example07Controller {
@GetMapping("/exam07")
public String requestMethod(ModelMap model) {
model.addAttribute("data1", "ModelMap 예제");
model.addAttribute("data2", "웹 요청 URL은 /exam07 입니다");
return "viewPage";
}
}
3. ModelAndView 클래스로 메서드 작성하기
- 사용자 요청 결과 데이터를 ModelAndView 객체의 addObject()에 답고 setViewName() 뷰 이름을 설정.
package com.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class Example08Controller {
@GetMapping("/exam08")
public ModelAndView requestMethod() {
ModelAndView mav = new ModelAndView();
mav.addObject("data1", "ModelAndView 예제");
mav.addObject("data2", "웹 요청 URL은 /exam08 입니다");
mav.setViewName("viewPage");
return mav;
}
}
- ModelAndView 는 데이터(Model)와 뷰(View 이름)를 동시에 설정할 수 있음.
- addObject() → 데이터 전달, setViewName() → 뷰 설정.
- 주로 데이터와 뷰 이름을 한 번에 제어하고 싶을 때 사용.

5. [도서 쇼핑몰] 도서 목록 표시하기
0. 오류 해결 - CSS
- 링크로 CSS 연결이 오류가 나서 bootstrap다운받아 적용했습니다.
- https://getbootstrap.com/docs/4.3/getting-started/download/
Download
Download Bootstrap to get the compiled CSS and JavaScript, source code, or include it with your favorite package managers like npm, RubyGems, and more.
getbootstrap.com
- @Controller 컨트롤러 생성(BookController.java)
- @RestController 컨트롤러 생성 (WelcomController.java)
- @RequestMapping을 적용한 클래스 생성 - 도서 목록 페이지 수정(books.html)
- 메서드 수준의 @RequestMapping 작성하기 (BookController.java)
- 단순화한 @RequestMapping 작성하기 (@GetMapping) (BookController.java)
- ModelAndView 클래스로 결과 반환하기 (BookController.java)
결과


연습문제
01. 컨트롤러로 쓰는 자바 클래스에 붙이는 애너테이션은?
정답: ① @Controller — 스프링 MVC 컨트롤러 클래스를 표기하는 기본 애너테이션.
02. 스프링 부트 컨트롤러 설명으로 옳은 것은?
정답: ① — 컨트롤러는 @Controller 가 선언된 특정 자바 클래스입니다.
03. 어떤 메서드가 어떤 URL을 처리할지 매핑하는 애너테이션은?
정답: ④ @RequestMapping — 요청 URL/HTTP 메서드를 메서드(또는 클래스)에 매핑.
04. 모델/뷰 유형으로 ‘옳지 않은’ 것은?
정답: ③ ModelAndMap — 존재하지 않는 타입(올바른 건 ModelAndView).
05. ModelAndView에 대한 설명으로 ‘옳지 않은’ 것은?
정답: ② — addAttribute()는 Model/ModelMap에서 쓰고, ModelAndView는 addObject() 사용.
06. requestMovies()로 가는 브라우저 주소는?
정답: ② http://localhost:8080/movies — 클래스 레벨 /movies + 메서드 경로 없음 → /movies.
07. requestBooks()로 가는 브라우저 주소는?
정답: ③ http://localhost:8080/movies/books — 클래스 /movies + 메서드 /books.
08. 메서드 수준 @RequestMapping의 단축 애너테이션이 ‘아닌’ 것은?
정답: ③ @UpdateMapping — 스프링엔 @PutMapping/@PatchMapping은 있어도 @UpdateMapping은 없음.
09. requestMovies()를 단축 애너테이션으로 매핑하려면?
정답: ① @GetMapping — 클래스 /movies가 있으니 메서드 경로 없이 GET만 지정하면 /movies.
10. requestBooks()를 단축 애너테이션으로 매핑하려면?
정답: ④ @GetMapping("/books") — 원래 method = RequestMethod.GET이므로 GET 전용 축약.
출처 : 송미영, 『 스프링부트 완전정복: 개념부터 실정 프로젝트까지 』길벗캠퍼스 (2024).
'DEVELOPMENT > Spring' 카테고리의 다른 글
| [스프링부트 완전정복] 5. 요청 처리 메서드의 파아미터 유형 (0) | 2025.11.03 |
|---|---|
| #1 트러블 슈팅 [스프링부트 완전정복] 5장 실습1 (0) | 2025.11.02 |
| [스프링부트 완전정복] 3. 스프링 부트의 구조 (2) | 2025.10.01 |
| [스프링부트 완전정복] 2. 스프링 부트 개발 환경 설정 및 예제 맛보기 (0) | 2025.10.01 |
| [스프링부트 완전정복] 1. 스프링 부트 소개 (1) | 2025.09.30 |