
강의를 통해 맛본 스프링을 책을 통해 다시금 공부해보자!
스프링은 웹개발을 위한 프레임워크이다.
스프링 애플리케이션 컨텍스트 또는 bean factory라는 컨테이너를 제공하는데, 이것이 bean들을 생성하고 관리한다. 빈(bean)은 스프링 컨테이너와 생성과 관계설정, 사용 등을 제어해주는 제어의 역전이 적용된 객체다. 빈의 상호 연결은 의존성 주입(DI)이라고 알려진 패턴을 기반으로 수행한다.ex) 어노테이션과 컴포넌트 검색이 있다. 책에서는 STS로 실습했지만 필자는 IntelliJ에서 실습하기위해 Initializr로 프로젝트를 생성하고 인텔리제이를 사용했다 😅
Initializr으로 생성한 taco-cloud 프로젝트 구조(메이븐)
컨트롤러와 뷰, 그리고 테스트 클래스를 작성해보자
package tacos;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller //이곳이 컨트롤러다
public class HomeController {
@GetMapping("/") //루트경로인 "/"이 처리되면 home 메소드 실행하는 어노테이션
public String home() {
return "home"; //"home"이라는 스트링을 리턴해줘서 home이라는 뷰 찾을수있음
}
}
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<title>Taco Cloud</title>
</head>
<body>
<h1>Welcome to...</h1>
<img th:src="@{/images/TacoCloud.png}"/>
</body>
</html>
package tacos;
import static org.hamcrest.Matchers.containsString;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
@RunWith(SpringRunner.class)
@WebMvcTest(HomeController.class)
public class HomeControllerTest {
@Autowired
private MockMvc mockMvc; //테스트 객체
@Test
public void testHomePage() throws Exception {
mockMvc.perform(get("/"))
.andExpect(status().isOk())//응답은 OK상태여야함
.andExpect(view().name("home"))//뷰의 이름은 home이어야함
.andExpect(content().string(
containsString("Welcome to...")));//뷰에는 Welcome to...가 포함되어야함
}
}
테스트가 성공한 모습
TacoCloudApplication을 실행한 웹 페이지
잠시 잊었단 스프링의 개념들을 다시금 정립하고자한다. 스프링의 목표는 개발자의 노력을 줄여주는것이고 스프링부트를 통해 의존성이나 자동구성과같은 복잡한 요소들을 쉽게 지원해주는것을 느꼈다. 스프링부트는 신이다!
일상) 드디어! 종강을 했다 😃 이번 방학에는 스프링에 대해 책을 통해 다시금 공부해볼것이다. 또한 스프링이후에는 하이버네이트나 도커나 TDD쪽을 다뤄보고싶다!
다 할수있을까 😅