Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

백엔드 개발 공부 일지

Java Spring - MVC 본문

Java Spring

Java Spring - MVC

JungCat 2023. 1. 16. 15:42

● MVC

스프링 MVC는 프론트 컨트롤로 패턴을 적용한다. 프론트 컨트롤러 패턴이란, 하나의 핸들러 객체를 통해서 요청을 할당하고, 일관된 처리를 작성할 수 있게 하는 개발 패턴이다.

Spring MVC 패턴 기본 구조

브라우저로부터 받은 요청은 스프링 MVC가 제공하는 DispatcherServlet 클래스가 모두 관리한다. web.xml 파일에는 다음 내용이 작성 되어 있다.

 

● Annotation in Spring MVC

1) @Controller

Spring MVC의 Controller 클래스 정의를 단순화 시켜준다.

스프링의 컨트롤러는 상속 구문을 적용할 필요가 없으며, @Controller로 등록된 클래스 파일에 대한 bean 을 자동으로 생성해준다. Controller로 사용하고자 하는 클래스에 @Controllser 를 지정해 주면 component-scan 태그에 등록된 패키지 정보를 기반으로 하여 컨트롤러 객체로 자동 등록 된다.

 

<context:component-scan base-package="패키지명"/>

2) @RequestMapping

RequestMapping 애노테이션은 url을 class 또는 method와 mapping 시켜주는 역할을 한다. 

이 애노테이션을 사용하면 Controller등록을 위한 url bean 설정을 생략할 수 있다.

class에 하나의 url mapping을 할 경우, class 위에 @RequestMapping("/url")을 지정하며, GET 또는 POST 방식 등의 옵션을 줄 수 있다.

해당되는 method가 실행 된 후, return 페이지가 따로 정의되어 있지 않으면 RequestMapping("/url")에서 설정된 url로 다시 돌아간다.

 

상세 속성

value : 매핑 URL 값

method : GET, POST, HEAD 등으로 표현되는 HTTP Request method를 지정

(method=RequestMethod.GET) ==> @GetMapping

(method=RequestMethod.POST) == > @ PostMapping

params : HTTPRequest로 들어오는 파라미터 표현

package my.spring.springedu;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MultiController {	
	@RequestMapping(value="/select")
	public String select_proc() {
		System.out.println("select ............");
		return  "viewTest";
	}
	@RequestMapping(value="/search")
	public String search_proc() {
		System.out.println("search ............");
		return "viewTest";
	}
	@RequestMapping(value="/insert")
	public String insert_proc(int pageno) {
		System.out.println("insert ............"+pageno);
		return  "viewTest";
	}
	@RequestMapping(value="/viewTest")
	public void void_proc(int pageno) {
		System.out.println("viewTest ............");
	}	
}

3) @RequestParam

요청 파라미터(Query 문자열)을 메서드의 매개변수로 1:1 대응해서 받는 것이 @RequestParam 이다.

 

public String hello(@RequestParam("name") String name,
@RequestParam(value="pageNo", required = false) String pageNo){   }

 

 ++ @ModelAttribute

요청 파라미터를 메서드의 매개변수로 1:1 대응해서 받는 것이 @RequestParam 이고, 도메인 오브젝트나 DTO 또는 VO의 프로퍼티에 요청 파라미터를 바인딩해서 한 번에 받으면 @ModelAttirbute 이다. 하나의 오브젝트에 클라이언트 요청 정보를 담아서 한 번에 전달되는 것이기 때문에 이를 커맨드 패턴에서 말하는 커멘드 오브젝트라고 부르기도 한다.

 

@RequestMapping(value="/user/add", method=RequestMethod.Post)
public String add(@ModelAttribute User user){
...
}
public String update(@ModelAttribute("currentUser") User user){
...
}

위와 같이 정의하면 update() 컨트롤러가 DispatcherServlet 에게 돌려주는 모델 맴에는 "currentUser"라는 키로 User 오브젝트가 저장되어 있게 된다.

4) @Service

@Service를 적용한 Class는 비즈니스 로직이 들어가는 Service로 등록이 된다.

 

Controller에 있는 @Autowired는 @Service("xxxService")에 등록된 xxxService와 변수명이 같아야 하며 Service에 있는 @Autowired에는 @Repository("xxxDao")에 등록된 xxxDao와 변수명이 같아야 한다.

 

@Service("myHelloServic")
public class HelloServiceImpl implements HelloService{
	@Autowired
    private HelloDao helloDao;
    public void hello(){
    	System.out.prinln("HelloServiceImpl :: hello()");
        helloDao. selectHello();
    }
}

5) @PathVariable

url의 특정 부분을 변수화 하는 기능을 지원하는 애노테이션이다.

 

@RequestMapping에서는 변수를 {}로 감싸주고, 메서드의 파라미터에 @PathVariable을 지정하여 메서드에서 파라미터로 활용한다.

 

@RestController
public class HomeController {
	@RequestMapping("/{name}")
    public String home(@PathVariable String name){
    	return "Hello, " + name;
    }
}

 

6) @RequestBody, @ResponseBody

웹 서비스REST 방식시스템을 구성하는 주요 요소로 자리잡으면서 웹 시스템 간의 XML이나 JSON 등의 형식으로 데이터를 주고 받는 경우가 증가하고 있다.

이에 따라 스프링 MVC도 클라이언트에서 전송한 XML 데이터 JSON 또는 기타 데이터를 컨트롤러에서 DOM 객체나 자바 객체로 변환해서 받을 수 있는 기능(수신)을 제공하고 있으며, 

비슷하게 자바 객체를 XML 이나 JSON 또는 기타 형식으로 변환해서 전송할 수 있는 기능(송신)을 제공하고 있다.

 

@RequestBody 애노테이션과 @ResoponseBody 애노테이션은 각각 HTTP 요청 몸체를 자바 객체로 변환하고 자바 객체를 HTTP 응답 몸체로 변환하는 데 사용된다.

 

@RequestBody 애노테이션을 이용하면 HTTP 요청 몸체를 자바 객체로 전달받을 수 있다. 비슷하게 @ResponseBody 애노테이션을 이용하면 자바 객체를 HTTP 응답 몸체로 전송할 수 있다.

 

@GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam("name") String name) {
        return "hello" + name;
    }

    @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name){
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }
    static class Hello{
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

 

7) @RestController

@RestController 애노테이션은 @Controller를 상속하여 @Conroller + @ResponseBody의 기능을 지원한다.

 

Restful 웹 서비스를 구현할 떄 응답은 항상 응답바디(responsebody)에 보내져야 하는데 이를 위해 스프링 4.0에서는 특별히 @RestController 를 제공한다.

 

도메인 객체를 Web Service 로 노출 가능하며 각각의 @RequestMapping method에 @ResponseBody할 필요가 없어진다. 그러므로 Spring MVC에서 @ResponseBody를 이용하여 JSON or XML 포맷으로 데이터를 넘길 수 있다. 

 

'Java Spring' 카테고리의 다른 글

JAVA Spring - JPA  (0) 2023.02.03
JAVA Spring - MyBatis  (0) 2023.01.19
Java Spring - Spring IOC  (0) 2023.01.12
JAV WEB - Servelt & JSP (2)  (0) 2022.12.30
JAV WEB - Servelt & JSP (1)  (0) 2022.12.28
Comments