Spring에서 데이터를 전송할 수 있는 방법은
- 정적 컨텐츠
- MVC 패턴
- API
이렇게 세 종류가 있다. 이 때 정적 컨텐츠는 정적인, 즉 어떤 경우에도 변하지 않는 데이터를 전송하므로 잘 사용되지 않는다. 나머지 두 방법, 즉 MVC 패턴과 API를 이용해 데이터를 전송하는 방법은 아래와 같다.
- 공통 부분
데이터를 전송하는 코드는 src/main/java/에 있는 패키지 아래에 있는 하위 패키지 controller에 존재해야 한다. url의 매개변수로 입력받은 사람의 성과 이름을 그대로 전송하는 코드를 만들 때, 해당 기능을 가진 객체는 다음과 같은 형식을 갖는다.
// src/main/java/{package}/controller/ControllerDemo.js
package com.example.demo.controller;
import com.example.demo.domain.Person;
import org.springframework.stereotype.Controller;
@Controller
public class ControllerDemo {
// MVC 패턴 방식으로 데이터를 전송하는 메소드
public String mvcDemo(...) { ... }
// API 방식으로 데이터를 전송하는 메소드
public Person apiDemo(...) { ... }
}
- MVC 패턴
MVC 패턴 방식으로 데이터를 전송하기 위해선, 우선 src/main/resources/templates/에 템플릿 엔진을 이용한 파일을 만들어 데이터를 전송할 형식 또한 지정해주어야 한다. 또, 데이터를 전송하는 코드에는 MVC 형식으로 데이터를 전송하는 메소드를 작성해야 한다. 이 메소드는 반드시 인자로 Model타입 변수를 받고, Model 클래스의 메소드 addAttribute를 이용해 model에 데이터를 적재해야 하며, 반환값으로는 템플릿 엔진을 이용한 파일의 이름을 가져야 한다. 이 예제에서는 템플릿 엔진으로 Thymeleaf를 이용하도록 하겠다.
// src/main/java/{package}/controller/ControllerDemo.js
package com.example.demo.controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class ControllerDemo {
@GetMapping("mvc_demo")
public String mvcDemo(
@RequestParam("first") String first,
@RequestParam("last") String last,
Model model
) {
model.addAttribute("first", first);
model.addAttribute("last", last);
return "mvc_demo";
}
}
<!-- src/main/resources/templates/mvc_demo.html -->
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="${first} + ' ' + ${last}">placeholder</p>
</body>
</html>
위 코드를 입력한 뒤 URL에 경로로 mvc_demo(@GetMapping의 인자)를, 매개변수로 함수의 인자를 입력한다면 아래와 같은 페이지를 얻게 된다.
- API
API 방식으로 데이터를 전송하기 위해선, 전송할 데이터를 묶은 클래스와 해당 클래스 타입 객체를 만들어야 한다.
// src/main/java/{package}/domain/Person.js
package com.example.demo.domain;
public class Person {
private String first, last;
private Long id;
public Person() {}
public Person(String first, String last) {
this.first = first;
this.last = last;
}
public String getFirst() { return first; }
public String getLast() { return last; }
public Long getId() { return id; }
public void setFirst(String first) { this.first = first; }
public void setLast(String last) { this.last = last; }
public void setId(Long id) { this.id = id; }
}
// src/main/java/{package}/controller/ControllerDemo.js
package com.example.demo.controller;
import com.example.demo.domain.Person;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class ControllerDemo {
static class Person {
@GetMapping("api_demo")
@ResponseBody
public Person apiDemo(
@RequestParam("first") String first,
@RequestParam("last") String last
) {
return new Person(first, last);
}
}
위 코드를 입력한 뒤 URL에 경로로 api_demo(@GetMapping의 인자)를, 매개변수로 함수의 인자를 입력한다면 아래와 같은 페이지를 얻게 된다.
'웹 > Spring' 카테고리의 다른 글
JUnit / AssertJ를 이용하여 테스트하기 (0) | 2022.03.17 |
---|---|
Repository / Service / Controller (0) | 2022.03.17 |
Container와 Bean (0) | 2022.03.15 |
프로젝트 build하기 (0) | 2022.03.10 |
VS Code에서 Spring 프로젝트 생성 및 실행 (0) | 2022.03.10 |