자바 JAVA/스프링프레임워크

자바 스프링 MVC 모델

땅콩아놀자 2023. 4. 7.

MVC 모델 : 프로그램의 처리 역할을 나누어 프로그램을 작성하는 방법

서비스 처리모델, 보기 뷰, 제어 컨트롤러로 분류함으로써 프로그램의 독립성이 높아진다

  • 역할 분담을 통해 효율적인 개발이 가능하다.
  • 개발하는 엔지니어의 분업화가 용이하다.
  • 설계 변경에 유연하게 대응 가능하다.

 

Model : M - 비지니스 로직의 내용을 작성하는 역할

모델은 시스템에서 비즈니스 로직(Business Logic)을 담당한다.

비즈니스 로직은 시스테임의 코어 부분으로 시스템의 목적을 처리하는 부분이다.

 

View: V - 입력/출력 등을 표시하는 역할

뷰는 외형이다, 사용자 입력과 결과 출력 등 시스템에서 표현 부분을

담당하고 웹 애플리케이션에서는 주로 화면을 담당한다.


Controller: C - 모델과 뷰를 제어하는 역할

컨트롤러는 서비스 처리를 담당하는 모델과 화면 표시를 담당하는 뷰를 제어하는 역할을 한다.

사용자가 입력한 내용을 뷰에서 받고, 받은 데이터를 기준으로 모델에 내용을 전달한다.

또 모델에서 받은 데이터를 뷰에 전달해서 화면에 표시하는 역할을 한다.

 

 

스프링 MVC : 웹 애플리케이션을 간단히  만들 수 있는 기능을 제공하는 프레임워크

디자인 패턴(Design Pattern)

설계 패턴의 하나로, 모든 요청을 프런트 컨트롤러가 받아 그 후 담당하는 컨트롤러에 적절하게 할당하는 설계이다.

 

스프링 MVC 의 주요 기능으로 화면 전환이나

사용자가 사용하는 브라우저와 서버 간의 입출력 데이터 전달을 단순화하는 등의 기능이 있다.

  • Dispatcher : 모든 요청을 수신하는 프런트 컨트롤러
  • Model : 컨트롤러에서 뷰에 넘겨주는 표시용 데이터 등을 저장하는 객체 (HttpServletRequest나 HttpSession과 같은 기능 제공)
  • 컨트롤러 : 요청에 대응해서 처릴할 내용이 있는 곳
  • 서비스 처리 : 데이터베이스에 접속해서 데이터를 취득하거나 데이터를 가공하는 등 여러 가지 작업을 실행한다. 개발자가 설계하고 구현한다.(스프링 MVC와 관계없음)
  • 뷰 : 화면 표시 처리를 한다.(구체적으로 JSP 등의 처리)

요청을 받고 응답을 보낼 때 까지의 흐름

① 프런트 컨트롤러인 DispatcherServlet이 클라이언트로 부터 요청을 수신

② DispatcherServlet이 컨트롤러의 요청 핸들러 메서드를 호출

③ 컨트롤러는 비지니스 로직 처리를 호출하고, 처리 결과를 받는다

받은 처리 결과를 모델로 설정하고 뷰 이름을 반환한다

반환된 뷰 이름을 받아 DispatcherServlet이 뷰 이름에 대응하는 뷰에 대해 화면 표시 처리를 의뢰한다

⑥ 마지막으로 클라이언트가 응답을 받고 브라우저에 화면이 표시된다.

 

 

스프링 MVC 사용

컨트롤러 생성 

어노테이션

@Controller

인스턴스 생성 어노테이션으로 클라이언트와 데이터 입출력을 제어하는 애플리케이션 레이어의 컨트롤러를 부여한다. 요청 핸들러 메서드의 반환값을 뷰 이름으로 하여 템플릿 엔진의 뷰가 응답 HTML을 생성한다.

 

@RequestMapping의 속성

클래스나 메서드에 부여하는 것으로 컨트롤러의 요청 핸들러 메서드와 URL을 매핑하게 된다. 해당 어노테이션은 여러가지 속성을 지정할 수 있다.

value 속성

- 매핑할 URL 경로(path)를 지정한다
- value는 처음의 /를 생략할 수 있다
- URL 경로만 지정하는 경우에는 속성에서 value를 생략할 수 있다.
- URL 경로를 여러 개 지정할 수 있다
method 속성

- GET과 POST 등의 HTTP 메서드를 지정한다.
- GET을 지정하는 경우에는 RequestMethod.GET을 사용한다
- POST를 사용하는 경우에는 RequestMethod.POST를 사용한다
- HTTP 메서드를 여러 개 지정할 수 있다.
- 클래스에 @RequestMapping을 부여하는 경우에는 지정할 수 없다.
속성에 처리 대상의 URL 경로를 매핑
@RequestMapping(value = "hello")

속성만 지정하는 경우엔 value 생략 가능
@RequestMapping("hello")

URL 경로를 여러 개 지정 가능
@RequestMapping(value = { "hello", "hellospring" })
HTTP 메서드 'GET'을 지정
@RequestMapping(value = "hello", method = RequestMethod.GET)

메서드를 여러개 지정할 수 있다.
@RequestMapping(value = "hello", method = {RequestMethod.GET, RequestMethod.POST})

 

 

@RequestMapping의 GET / POST 요청용 어노테이션

이 어노테이션을 사용하는 것으로 작성 내용이 줄어들고 가독성이 높아진다. 속성으로는 @RequestMapping의 value 속성은 같지만, method 속성은 없다. 

@GetMapping @PostMapping
value 속성만이라면 생략 가능
@GetMapping("hello")

URL을 여러 개 지정할 수 있다
@GetMapping(value = {"hello", "hellospring"})
value 속성이라면 생략 가능
@PostMapping("hello")

URL을 여러 개 지정할 수 있습니다
@PostMapping(value = { "hello", "hellospring" })

 

 

스프링 부트에서 URL 표시

URL 매핑 코드 및 어노테이션

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("hello")
public class HelloViewController {

    @GetMapping("view")
    public String helloView() {
        // 반환값으로 뷰의 이름을 돌려줌
        return "hello";
    }
}

위의 컨트롤러 클래스 HelloViewController에서 @RequestMapping("hello") 어노테이션이 부여되었고, 요청 핸들러 메서드 helloView() 에는 @GetMapping("view") 어노테이션이 부여되었다. 이것은 클라이언트가 URL(http://localhost:8080/hello/view)을 통해서 GET 메서드로 보내면 컨트롤러 클래스와 메서드가 호출이 된다.

 

localhost는 자기 자신을 의미하는 서버 이름이다. 8080은 스프링 부트에 포함된 톰캣(tomcat) 서버의 포트 번호이다.

포트란 네트워크 상에서 데이터를 통신하기 위한 문 같은 것으로, 포트 번호가 그 문의 번호가 된다.

일반적으로 'http:// <서버 이름> (:포트번호) / <컨텍스트 패스> / <매핑 URL>' 형식으로 애플리케이션에 액세스하지만 스프링 부트에서는 기본적으로 컨텍스트 패스(애플리케이션 이름)은 생략된다.

 

스프링 부트의 프로젝트 : 템플릿으로 뷰 생성하기

 

의존관계 설정 및 세팅시 Thymeleaf(템플릿 엔진) 추가

Thymeleaf는 서버 측에서 실행되는 자바 템플릿 엔진이다. 해당 의존성은 Spring Framework와 함께 자주 사용되며, HTML, XML, JavaScript, CSS 등의 마크업 언어와 함께 사용되어 HTML 문서를 동적으로 생성하는 데 사용된다.

Thymeleaf는 서버 측 템플릿 엔진이므로, 서버 측에서 데이터를 처리하고 렌더링된 결과를 클라이언트에 전송한다.

데이터와 미리 정의한 템플릿을 바인딩(묶어주는)해서 뷰에 표시할 때 도움을 주는 '템플릿 엣진'의 한 종류로, 스프링 부트에서 사용하기를 추천하고 있다. 이를 통해 클라이언트 측에서 JavaScript를 사용하여 데이터를 가져와야 하는 번거로움을 줄일 수 있다. Thymeleaf는 Spring MVC와 Spring Boot 프레임워크와 함께 사용되어 매우 유용한 서버 측 웹 애플리케이션 개발 도구이다.

 

스프링부트는 타임리프 등의 템플릿 엔진과 같이 개발한다는 전제로 설계되어 템플릿 엔진을 사용하는 경우 스프링부트가 자동으로 src/main/resources/templates 폴더를 참조하게 된다.

이 때문에 뷰의 배치 장소가 지정될 수 있다.

 

 

 

템플릿을 사용하는 경우에 뷰를 두는 곳이 지정되어 다음과 같은 규칙을 지켜야 한다.

  • resource/templates 폴더 밑에 뷰를 생성한다.
  • 뷰가 많이 필요한 경우에는 기능별로 폴더를 만들어서 보관한다.
  • 폴더를 나눈 경우는 templates 폴더 이하의 폴더명을 요청 핸들러 메서드의 반환값에 지정해야 한다.
  • CSS나 자바스크립트 등은 resource/static 폴더에 배치한다.

실행 확인 방법

1. 프로젝트 폴더 내 스프링부트의 기동 클래스인 SpringMvcViewSampleApplication을 실행해서 웹 어플리케이션을 시작 [ 마우스 오른쪽 버튼을 클릭하여 실행을 누르거나 단축키 ctrl+shift+f10 이용]

 
 
2. 실행이 확인되면, 인터넷 브라우저 창에 위에서 설정해두었던 링크 localhost:8080/hello/view로 들어가서 확인한다.

 

 

반응형

댓글