순간을 기록으로

[Spring] 스프링 웹 개발의 방법 3가지 본문

Development/Spring

[Spring] 스프링 웹 개발의 방법 3가지

luminous13 2021. 11. 17. 15:55

스프링을 이용한 웹 개발에는 3가지 방법이 있습니다.

  1. 정적 컨텐츠
  2. MVC와 템플릿 엔진
  3. API

 

1.정적 컨텐츠

클라이언트(브라우저)가 요청하면 서버에서 어떠한 연산도 없이 파일 그대로 웹브라우저에게 주는 방법

 

소스코드

더보기
<!DOCTYPE HTML>
<html>
<head>
<title>static content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>

 

 

정적 컨텐츠 제공 방식

브라우저에서 localhost:8080/hello-static.html입력하면(요청하면) 내장 톰캣 서버가 요청을 받습니다. 요청을 받은 내장 톰캣 서버는 우선 'hello-static'과 관련된 컨트롤러가 있나 찾습니다. 만약 관련 컨트롤가 없다면 resoruce 디렉토리 아래에서 'hello-static.html'을 찾습니다. 그리고 찾은 hello.static.html을 클라이언트(브라우저)에게 주면서 응답합니다.

 

2.MVC와 템플릿엔진

현재 가장 많이 사용되는 웹 개발 방식. 서버에서 정보를 추가하여 파일을 주는 방식

 

Movel: 도메인, 엔티티 역할

View: 화면을 그리는 역할

Controller: 로직을 처리하는 역할

 

Controller

controller/HelloController.java

더보기
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}

 

View

resource/templates/hello.html

더보기
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>

 

실행

localhost:8080/hello-mvc?name=spring

 

구조

웹브라우저에서 localhost:8080/hello-mvc?name=spring하고 요청을 보낸다. 뒤에 ?를 사용하여 GET방식으로 파라미터를 넘기는 방식이다. 톰캣 서버는 요청을 받고 hello-mvc와 관련된 컨트롤러로 연결해준다. 컨트롤러에서 연산처리를 하고 viewResolver로 넘어간다. viewResolver는 해석하면 화면해결사로 관련있는 view(html)을 찾고 연결해준다. 그리고 타임리프(템플릿 엔진)은  렌더링(조합)을 해서 html에 자바코드가 있는 것을 값으로 다 바꾸어 브라우저에게 반환을 한다.

 

3.API 방식

클라이언트에게 html 파일을 반환하는 게 아닌  데이터(문자열, 객체 등..)을 반환하는 방식

 

1.@ResponseBody 문자 반환하기

@Controller
public class HelloController {

	@GetMapping("hello-string")
	@ResponseBody
	public String helloString(@RequestParam("name") String name) {
		return "hello " + name;
	}
    
}

 

@ResponseBody를 사용하면 뷰리졸버(viewResolver)를 사용하지 않는다. 왜냐하면 뷰리졸버는 관련있는 view(html)을 찾고 연결해주는 역할이다. 하지만 이번에는 html을 반환하지 않는다. 대신 HTTP의 Body에 문자 내용을 직접 반환할 예정이다.

 

실행

localhost:8080/hello-string?name=spring

 

결과

url로 요청을 보내고 결과 화면에서 페이지 소스보기를 누르면 문자열 "hellospring"만 반환된 것을 알 수 있다.

 

2.@ResponseBody를 이용해 객체 반환하기

 

@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() {   // Getter, Setter은 자바 빈 규약이다. property 접근 방식이라고도 한다.
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

 

@ResponseBody를 사용해서 return에 객체를 넣으면 JSON 타입으로 변환되어 객체가 반환된다.

 

실행

localhost:8080/hellp-api?name=spring

 

해당 url로 접속을하면 결과 화면으로 JSON 형식으로 객체를 받은 것을 알 수 있다.

 

구조

@ResponseBody를 사용해서 HTTP Body 부분에 문자 내용을 직접 반환한다. MVC에서는 뷰리졸버가 동작했지만 API 방식에서는 HttpMeesageConverter가 동작한다. 기본 문자는 StringHttpMessageConverter 라이브러리가 사용되고 기본 객체는 MappingJackson2HttpMessageConverter 라이브러리가 사용된다. byte 와 기타 처리는 HttpMesaageConverter에 기본적으로 등록되어있다.

Comments