Model, View, Controller를 분리한 디자인 패턴을 일컫는다.
Django와 비교했을 때 Model = Django Model
, View = Django Template
, Controller = Django View
역할이라고 보면 이해하기 쉽다.
✨MVC 패턴 흐름
하나 이상의 @Bean
메소드를 스프링 애플리케이션 컨텍스트에 제공하는 클래스임을 스프링에 알려준다.
구성 클래스의 메소드에 지정되어 있으며, 각 메소드에서 반환되는 객체가 애플리케이션 컨텍스트의 빈으로 추가되어야 함을 나타낸다.
@Configuration
public class gyull{
@Bean
public Eat eat(){
return new eat();
}
@Bean
public Run run(){
return new run();
}
}
REST API를 사용하는 브라우저 기반의 웹 애플리케이션이다.
Initializr가 생성한 스프링 프로젝트 구조는 다음과 같다.
파일 위치 : src/main/java/tacos/HomeController
package tacos;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/") //루트 경로인 /의 웹 요청을 처리
public String home() {
return "home";
}
}
cf) Django
#views.py
def home(request):
return render(request,"home.html")
#urls.py
urlpatterns=[
path('/',views.home,name="home"),
]
파일위치 : src/main/resources/templates/home.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="EUC-KR">
<title>Taco Cloud</title>
</head>
<body>
<h1>Welcome to...</h1>
<img th:src="@{/images/TacoCloud.png}"/>
</body>
</html>
cf) Django의 Template
파일위치 : src/test/java/tacos/HomeControllerTest.java
package tacos;
import static org.hamcrest.Matchers.containsString;
...
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;
@WebMvcTest(HomeController.class) // HomeController의 테스트
public class HomeControllerTest {
@Autowired
private MockMvc mockMvc; // 모의 테스팅을 위함
@Test
public void testHomePage() throws Exception {
mockMvc.perform(get("/"))
.andExpect(status().isOk()) // HTTP 200
.andExpect(view().name("home"))
.andExpect(content().string(
containsString("Welcome to...")));
}
}
다음 순서로 시행하면 Intellij Services 구성을 볼 수 있다.
Django를 주로 다뤄본 입장에서는 흐름이 어느정도 비슷해서 더 편안하게 다가오는 것 같다. Unit Test를 작성할 수 있는 것이 독특한 장점처럼 느껴진다.