SPRING BOOT

[스프링부트 4] Spring MVC Controller 만들기 1탄

내. 일. 을 바꾸는 업무 자동화 2021. 11. 9. 16:59
반응형

지난 포스팅에이어, 이번에는 Spring MVC를 사용하여 컨트롤러에서 페이지를 호출하는 예제를
작성해 보려고 합니다.

먼저, 다들 아시겠지만 간단히 MVC를 짚어 보자면 Model View Controller의 의미이며
스프링이 제공하는 웹 구축을 위한 프레임워크로 이해하시면 됩니다.

Model은 무엇을 할 지에 대한 로직을 담고 비지니스 로직을 처리하기 위한 역할을 담당합니다.
View는 최종 사용자에게 결과를 화면(UI)로 보여주기 위한 역할을 하게 됩니다.
Controller은 이 두 사이에 있는 컴포넌트로 Model이 데이터를 어떻게 처리할 지를 알려주는 역할을 담당합니다.

즉, 클라이언트의 요청에 대해 Model이 업무 수행을 완료하면 그 결과를 가지고 화면을 생성하도록 View에 전달 하는 역할을 하게 되며, 일종의 조정자를 담당합니다.


위와 같은 관계에서 예를 들어 볼까요?
Controller의 가장 많이 쓰이는 어노테이션(Annotation) 중 @Controller는 Controller의 역할을 할 것이다라는 명시하는 용도로 사용되며, 비지니스 로직을 호출하여 전달할 Model과 View를 반환합니다.
@RequestMapping은 클라이언트의 요청에 대해 어떤 컨트롤러 또는 어떤 메서드가 담당하여 처리할 지 매핑하는 명시자 입니다. 보통 메서드 선언부에 URL을 명시하여 사용하게 됩니다.

(ex:@RequestMapping(value="/main", method=@RequestMethod.GET)


이제 설명은 이만하고, 실습을 통해 알아보도록 하겠습니다.
SampleController (@Controller)를 생성하면서 진행해 보도록 하겠습니다.

com.mobile.mis 하위에 sample.controller 패키지를 생성합니다.

그 안에 SampleController 파일(Java Class)을 생성해 봅시다.

Controller의 내용은 아래의 소스를 참고하여 http://localhost:8080/main 호출 시, static/index.html 이 호출되도록
컨트롤러의 내용을 작성해 봅시다.

1
2
3
4
5
6
7
8
9
10
11
12
package com.mobile.mis.sample.controller;
 
import org.springframework.stereotype.Controller;
import org.sprsssingframework.web.bind.annotation.RequestMapping;
 
@Controller
public class SampleController {
    @RequestMapping(value = "/main")
    public String main(){
        return "index.html";
    }
}
cs

아래와 같이 작성이 되었으면 완성된 것입니다.

자, 이제 서버를 기동하여 http://localhost:8080/main 를 호출해 보도록 하겠습니다.
지난번과 마찬가지로 MisApplication 파일을 우클릭하여, Run MisApplication.main()을 실행합니다.

아래와 같이 지난번에 만들어 둔, index.html이 실행되는 것을 알 수 있습니다.

물론, http://localhost:8080으로 호출해도 같은 html 파일이 호출될 것입니다.

지금까지는 View로 반환하는 컨트롤러를 작성해 보았고, 이번에는 문자열 Data를 View로 반환하는 예제를 만들어 보겠습니다.
데이터 반환을 위해서 사용해야 하는 어노테이션은 @ResponseBody를 사용하며 문자열, 맵, json등 반환이 가능합니다.
위의 내용에 이어, SampleController에 아래와 같이 소스를 추가해 줍시다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.mobile.mis.sample.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 
@Controller
public class Controller {
    @RequestMapping(value = "/main")
    public String main(){
        return "index.html";
    }
 
@ResponseBody
   @RequestMapping("/sample")
   public String sample() {
       String data = "@ResponseBody 어노테이션을 통해 반환";
       return data;              
   }
}
cs

위와 같이 코드를 작성하면, 에러가 발생할 것입니다. 눈치 채셨겠지만 @ResponseBody 어노테이션을 사용하려면 import class 를 해야 하는데 import문이 빠져 있기 때문이죠... 간단하게 단축키를 통해 입력이 가능한데요..
빨갛게 에러표시가되는 13번째 줄 @ResponseBody에 마우스를 가져다 댄 상태에서 ctrl + 1을 누르면 [import class]를
클릭하여 간편하게 import문이 자동 생성되는 것을 알아보기 위해서 였습니다.

완성되었다면 아래와 같이 나타나야 합니다.

이제 컨트롤러의 코드구성은 끝나고, View에서 데이터를 받아서 보여 줄 수 있도록 static/index.hml 파일을 수정해 보도록 합시다.

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
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>스프링부트 index.html</title>
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <!-- @Controller와, @ResponseBody 어노테이션으로 데이터 View 구현 -->
    <script>
     $.ajax({
     type: "GET",
     url: "/sample",
     success: (data) => {
         console.log(data);
         $('#sample1').html(data);
       }
      })
     </script>
 
</head>
<body>
<h1>스프링부트 첫 화면 입니다.</h1>
<p> 이 페이지는 인덱스 페이지 입니다. </p> </ br>
<p> 스프링부트는 resources/static 폴더를 기본으로 인식합니다. </p> </ br>
 
<div id="sample1"> </div>
 
</body>
</html>
cs

http://localhost:8080/main 으로 접속하여 테스트를 진행해 보면,
아래와 같이 ajax를 사용하여 get 방식으로 /sample 의 결과를 받아 div(sample1) 영역에 보여지게 됩니다.

다음 포스팅에서는 @Controller 어노테이션과 @RestController 어노테이션에 대해 살펴보도록 하겠습니다.

반응형