Spring을 이용한 웹 개발 방식

Jongwon·2022년 2월 22일
0

Java/Spring

목록 보기
3/12
post-custom-banner

정적 컨텐츠를 통한 웹 개발 방식

  정적 컨텐츠(Static Contents)는 말그대로 사용자에게 내용물이 변화없이 전달되는 형태입니다. 즉, 단순히 html파일만으로 작성된 웹 페이지를 말합니다.
IntelliJ로 정적 컨텐츠를 만드는 방법은 간단합니다.

 앞선 글에서 언급한 바와 같이 Spring Initializr로 실행한다면 위의 사진처럼 resources > static 폴더가 이미 만들어져 있을텐데, 여기의 static 폴더안에 HTML파일을 작성하고, 웹 페이지에 접속하면,

 해당 HTML파일에 해당하는 페이지가 로딩이 됩니다.



MVC와 API방식은 @GetMapping등의 Annotation을 이용하여 컨트롤러에서 특정 웹페이지에 접근하면 처리 -> 렌더링을 하겠다는 의미를 전달해줄 수 있습니다.

@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
}

MVC 모델

  MVC모델은 기업에서 가장 많이 채용한 디자인 패턴 중 하나입니다. 이번 스프링 강의를 듣기 전에도, 전공 과목으로써 디자인패턴 방법 중 하나로 배웠고, 실제 프로젝트에도 적용해본 적이 있는 만큼 저와는 친숙한 모델링이라 할 수 있습니다.

MVC는 Model-View-Controller를 뜻합니다.

  • Model
    데이터 구조와 비즈니스 로직을 관리하는 부분으로 웹 개발에서는 대체로 DB와 직접적인 연관이 있는 부분들(DB에 저장할 방식, 제약사항 등)을 관리하는 클래스들이 모델 파트에 해당합니다.
  • View
    사용자에게 출력되는 부분입니다. HTML부분과 직접적으로 연관되어 있는 부분들, 또는 HTML 자체를 View 파트라고 보시면 됩니다.
  • Controller
    웹페이지의 동작을 담당하는 부분으로, View와 Model을 이어주는 역할을 합니다. DB에서 데이터를 가져와서 사용자의 화면에 제공을 해야하는데, 이 사이에 처리하는 부분을 Controller에서 진행합니다.

  이 패턴의 가장 중요한 점은, View나 Model은 독립적으로 이루어져야 한다는 점입니다. View와 Model, 아니면 View끼리, Model끼리 연관되는 것은 MVC모델의 취지에 어긋납니다.

  자바 SpringBoot에서는 주어진 웹주소에 해당하는 Controller를 접근한 뒤, Controller 메서드를 실행하고, Model을 View에 넘겨줍니다. ViewResolver가 이를 확인한 뒤 알맞게 렌더링을 하여 사용자에게 제공합니다.

 Package명 아래에 controllers 폴더를 만들어 Controller를 작성하고, resources 아래 templates 폴더를 만들어 View를 저장하면 됩니다.
 MVC를 이용한 웹페이지 구현과 관련된 내용은 추후에 더 추가가 될 예정입니다.



API

  API방식은 사실 포괄적인 의미를 가집니다. 정적 컨텐츠가 아닌 웹 페이지는 거의 API 방식을 사용한다고도 말할 수 있습니다. 데이터를 그대로 전달한다면 HTML은 그 데이터가 무엇인지 알기 위해서 많은 코드가 필요해질 것입니다. 또한 사용하는 디바이스에 따라 데이터 처리 방식을 변환해야 할 수도 있습니다.
 API 방식을 통해 데이터를 XML이나 JSON방식으로 변환하여 HTML에 전달한다면, HTML페이지를 아래와 같이 좀더 유연하게 작성할 수 있습니다.

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="'hello ' + ${name}">Hello Empty</p>
</body>
</html>





<참고자료>
정적 컨텐츠: https://blog.stackpath.com/static-content/

profile
Backend Engineer
post-custom-banner

0개의 댓글