Lined Notebook

🍃 스프링 입문 스터디 3일 차 정리

by juraffe juraffe
이 글은 김영한 님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 학습하며 작성된 글입니다.

스프링 입문 스터디 3일 차 정리

 

MVC와 템플릿 엔진

MVC는 각각 Model, View, Controller를 의미한다. MVC란 패턴을 사용하는 이유는 각 코드의 의미에 따라서 구분하여 관리하기 쉽고 이해하기 쉬운 프로젝트를 구상하기 위함이라 생각된다.

// Controller & Model
@Controller
class HomePageController {

    @GetMapping("hello")
    fun hello(model: Model): String {
        model.addAttribute("name", "world")
        return "hello"
    }
}

// VIEW
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Hello, World!</title>
</head>
<body>
Hello, <span th:text="${name}">placeholder</span> !!!
</body>
</html>

스프링에선 MVC를 이용해 웹을 개발하게 되는데 가장 기본적인 스프링 MVC 구조의 코드를 보면 위 코드와 같다.

  • Controller
    • @Controller 어노테이션을 붙여 스프링 애플리케이션에게 빈으로 등록되게 된다.
    • 사용자에게 요청된 주소에 따라 적절한 Controller에서 처리 후 결과를 돌려주게 된다.
  • Model
    • Controller 클래스의 메서드들은 Model을 매개변수로 받는다. 이 Model은 Controller에서 View로 보낼 데이터를 가지고 있고 최종적으로 템플릿 엔진을 통해 View에서 처리된다.
  • View
    • View는 Controller의 결과를 보여주기 위한 화면으로 사용자와 가장 가까운 위치에 존재하게 된다. View에서는 Controller에서 함께 보낸 Model 데이터를 적절한 위치의 HTML에 삽입하는 등 사용자에게 보여질 페이지를 담당한다.

 

API (Application Programming Interface)

앞서 설명한 정적 페이지, MVC와 템플릿 엔진등의 탄생은 기존의 문제를 해결하기 위해서 였다. 정적 페이지에서 MVC, 템플릿 엔진에서는 코드 관리와 다양한 데이터를 동적으로 전달하기 위해 변화하였고, 이번 API에서는 서비스가 제공되는 장치&환경의 다양성을 해결하기 위함이라 생각된다. 앞서 설명한 정적 페이지, MVC와 템플릿 엔진은 웹 브라우저라는 제한된 환경을 통해서 사용자에게 필요한 정보를 제공한다. 하지만 현대 사회에서는 대형/소형 기계, 휴대폰, 태블릿, PC 등 다양한 환경이 존재하고 안타깝게 모든 환경은 다르게 동작하게 된다. 따라서 서비스를 개발함에 있어 각 장치별로 개발을 하게 된다면 개발자의 수고로움은 이로 말할 수 없을 것이다. 하지만 API를 이용하면 다양한 환경에 대응하기 위한 통일된 인터페이스를 제공하여 유지 보수와 개발 비용을 효과적으로 확보할 수 있다.

@Controller
class HomePageController {

    @GetMapping("hello")
    @ResponseBody
    fun hello(model: Model): List<Result> =
        listOf(Result("Byeongju, Shin", "Earth"))

    data class Result constructor(val name: String, val address: String)
}

/* Output
[
  {
    "name": "Byeongju, Shin",
    "address": "Earth"
  }
]
*/

스프링에서는 이런 API를 개발하기 위해 위와 같은 코드를 사용할 수 있다. 먼저 @ResponseBody를 통해서 HTTP 응답에서 데이터에 결과값을 보내주게 할 수 있다. 여기서 단순히 문자열, 숫자같은 literal type이 아닌 객체를 넘겨준 경우 serializer로 인해 응답 가능한 JSON 형태로 변환되어 보내지게 된다.

블로그의 정보

🦒 Juraffe's note

juraffe juraffe

활동하기