본문 바로가기

Spring

스프링 부트를 이용하여 웹을 개발하는 3가지 방법

Spring Boot는 간단하게 말하자면 스프링을 편리하게 사용할수있게 여러 기능들을 제공하는 툴이다.

거대한 스프링을 감싸고 있는 스프링부트는 기능들 또한 어마어마하게 많아서 일일이 모두 외우지 못한다.

그러므로 필요한걸 찾는 능력이 중요하다.

 

*정식문서를 자주 봐주는게 좋다!

 

웹을 개발하는 방법은 기본적으로 세가지가 있다

 

첫번째는 서버 통신 없이 내가 만든 html 파일 그대로 웹 브라우저에 내려주는 정적 컨텐츠가 있다.

 

 

정적페이지 적어놓은 글을 그대로 읽어주는 정적페이지

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"></html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
<p th:text="'안녕하세요. '+ ${data}"></p>
</body>
</html>
package com.example.spring.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data", "hello");
        return "hello";
    }
}

 

<html xmlns:th="http://www.thymeleaf.org"></html> 설정으로 thymeleaf 기능을 th로 줄여서 사용 가능하다.

data라는 키에 hello라는 값을 model에 담아 hello.html파일로 리턴한다는 controller 구문!

 

두번째는 mvc 템플릿 엔진으로 model-view-controller의 약자로 html을 서버에서 프로그래밍으로 동적으로 변경하여 내리는 패턴이다. (내가 원하는 값만 가져와서 뷰 페이지에 보일 수 있는 동적 컨텐츠에 많이 사용한다.)

 

예전에는 분류하지 않고 jsp 파일 하나에 모든 소스를 넣어 뷰페이지에 모든 정보를 넣어 관리하였다. 하지만 그건 너무 비효율적이다. 그래서 비즈니스 로직이나 db에 접근하는것은 컨트롤러가 관리하며 정보들을 모델에 담아 뷰페이지에 전달하여 뷰페이즈는 보여지는 페이지로만 이용하는 방식이 mvc 방식이다. 이 방식은 유지보수시에도 결합도를 낮춰 수정이 용이하고 재사용성을 높일 수 있다. 

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"></html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello-template</title>
</head>
<body>
<p th:text="'안녕하세요. '+ ${name}"></p>
</body>
</html>
    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model){
        model.addAttribute("name", name);
        return "hello-template";
    }
    
    //controller에 mvc 패턴 추가

@RequestParam("name")으로 변수명이 name인 매개변수 값을 넣어 줘야하기 때문에 주소인 hello-mvc 뒤에 ?를 통해 매개변수를 넘겨준다 변수 name=eunmi라는 매개변수를 넣어주면 그것이 컨트롤러에서 String name으로 담겨 컨트롤러로 넘어가고, 그게 다시 모델에 담겨 hello-template.html로 갔기 때문에 페이지에 안녕하세요. eunmi가 출력될 수 있었다.

 

세번째 방법은 api 방법으로 데이터를 바로 내릴 수도 있다!

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

    static class Hello{
        private String name;

        public String getName(){
            return name;
        }

        public void setName(String name){
            this.name = name;
        }
        
//api방식 추가

 

api 방식은 어노테이션 @ResponseBody를 이용하여 응답하는데

@ResponseBody는 http에서 헤더부와 바디부 중 이 바디부에 이 데이터를 직접 넣어주겠다는 의미이다.

문자열이 온다면 문자열 그대로를 출력하는데 뷰가 필요없이 문자열 그대로 내려간다.

또  api 방식은 문자열이 아닌 객체도 내려줄 수 있다. 그렇게 되면 key와 value로 이루어진 구조인 Json 방식으로 출력된다. 그 이유는 api 방식은 스프링 컨테이너에서 리턴 값으로 객체가 오면 기본값으로 제이슨 방식으로 데이터를 만들어 응답하고 문자열이 오면 문자열 그대로 응답하기 때문이다.

 

api방식은 view는 완전히 따로 관리할 수 있으며 데이터만 내려주면 되기때문에 프론트와 백엔드의 분업이 확실하고 서버끼리만 통신할때 view를 이용하지않고 api끼리만 통신하면 되기에 더욱더 편리하게 이용할 수 있다.

(*jackson: 객체를 json으로 바꿔주는 유명한 라이브러리이다.)

 

'Spring' 카테고리의 다른 글

JdbcTemplate  (0) 2023.11.01
순수 Jdbc  (0) 2023.10.26
스프링 빈과 의존 관계 설정  (0) 2023.10.25
강의 들으며 스프링 다시 시작!  (0) 2023.10.21