본문 바로가기

Back-end & Server/Spring Boot with Kotlin

[Spring Boot] MVC(Model, View, Controller)

728x90
반응형

 

 

MVC 패턴은 Web Application 개발에 있어서 Model, View Controller의 세 가지 주요 구성 요소를 기반으로 하는 디자인 패턴이다.

이 패턴은 Application의 구조를 명확하게 분리함으로써, 유지보수성, 확장성 및 개발 효율성을 향상 시킨다.

 

Model

  • 애플리케이션의 데이터와 비즈니스 로직을 담당한다.
  • 모델은 데이터베이스, 서비스 또는 다른 소스로부터 데이터를 가져와 컨트롤러에 전달한다.

 

 

View

  • 사용자에게 정보를 표시하는 역할을 한다.
  • HTML, JSP 등 다양한 템플릿을 사용하여 사용자 인터페이스를 구성할 수 있다.

 

 

Controller 

  • 사용자의 요청을 받아 처리한 후, 그 결과를 뷰에 전달한다. 
  • Controller는 사용자의 입력을 Model로 전달하고, Model로 받은 데이터를 View로 전송하여 사용자에게 표시한다.

 

 

Spring MVC 작동 원리

1. DispatcherServlet

  • Spring MVC에서는 DispatcherServlet이 Front Controller을 한다.
  • 모든 웹 요청은 먼저 DispatcherServlet을 통과하게 되며, 이는 요청을 적절한 Controller로 라우팅한다.

 

2. Handler Mapping

  • 요청 URL을 어떤 컨트롤러가 처리할지 결정한다.
  • Spring MVC는 다양한 방식의 Handler Mapping을 제공한다.

 

3. Controller 실행

  • Handler Mapping에 의해 결정된 Controller가 요청을 처리한다.
  • Controller는 필요한 데이터를 Model로부터 가져오고, 결과를 View에 전달하기 위해 Model 객체를 생성하거나 업데이트한다.

 

4. View Resolver

  • Controller가 반환한 View 이름을 기반으로 실제 View를 찾아 사용자에게 응답을 제공한다.
  • View Resolver는 View 이름을 실제 View 경로로 변환하는 역할을 한다.

 

5. View Rendering

  • 최종적으로 View가 Rendering되어 사용자에게 응답으로 전송된다.

 

 

Spring Boot는 Tomcat, Dispatcher Sevlet자동으로 구성(Auto-configuration)해주고 pom.xml, build.gradle 파일에 의존성 추가로 다양한 라이브러리를 쉽게 관리할 수 있도록 해준다.

 

 

Example

// main : KotlinexampleApplication.kt
package com.springboot.kotlinexample

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class KotlinexampleApplication

fun main(args: Array<String>) {
	runApplication<KotlinexampleApplication>(*args)
}
package com.springboot.kotlinexample.controller

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController

@RestController
class MessageController {
    @GetMapping("/")
//    fun index(@RequestParam("name") name: String) = "Hello, $name!"
    fun index(@RequestParam("name") name: String):String {
        return "Hello, $name!"
    }
}

 

 

이렇게 파일을 나누고 별다른 연결이 없이도 동작하는 이유는 Spring Boot의 Auto-configurationComponent Scan 덕분이다.

 

Auto-Configuration

  • @SpringBootApplication 어노테이션은 Spring Boot의 자동 구성을 활성화 한다.
  • Spring Boot가 Application을 실행할 때 필요한 Bean들을 자동으로 설정하고 Application의 실행 환경을 구성하도록 돕는다.

 

 

Component Scan

  • @SpringBootApplication 어노테이션은 컴포넌트 스캔을 활성화 한다.
  • main 함수가 존재하는 파일이 위치한 패키지와 그 하위 패키지에서 Spring의 스테레오타입 어노테이션(@Component, @Service, @Repository, @Controller 등)이 붙은 클래스를 자동으로 찾아 Spring Application 컨텍스트에 Bean으로 등록한다.

 

 

 

728x90
반응형