상세 컨텐츠

본문 제목

[Spring 1팀] 4장. 컨트롤러 구현

25-26/Spring

by soyee_ 2025. 10. 10. 10:00

본문

728x90

 

 

 

 

 

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 등)
    }
}

 

 

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)으로 전송
    }
}

 

 

 

 

 

 

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. [도서 쇼핑몰] 도서 목록 표시하기

  1. @Controller 컨트롤러 생성(BookController.java)
  2. @RestController 컨트롤러 생성 (WelcomController.java)
  3. @RequestMapping을 적용한 클래스 생성 - 도서 목록 페이지 수정(books.html)
  4. 메서드 수준의 @RequestMapping 작성하기 (BookController.java)
  5. 단순화한 @RequestMapping 작성하기 (@GetMapping) (BookController.java)
  6. ModelAndView 클래스로 결과 반환하기 (BookController.java)

결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 


출처: 송미영, 스프링 부트 완전 정복 , 길벗(2024).

Coner Spring1

Editor: Marin

728x90

관련글 더보기