[Spring in Action] Ch.1 스프링 시작하기

이신영·2023년 1월 5일

Spring in Action

목록 보기
1/4
post-thumbnail

강의를 통해 맛본 스프링을 책을 통해 다시금 공부해보자!

📝 핵심 내용

  • 스프링과 스트링 부트 핵심 사항
  • 스프링 프로젝트 생성
  • 스프링 개요

1. 스프링이란?

스프링은 웹개발을 위한 프레임워크이다.

  1. 스프링은 스프링 애플리케이션 컨텍스트 또는 bean factory라는 컨테이너를 제공하는데, 이것이 bean들을 생성하고 관리한다.
  2. 빈(bean)은 스프링 컨테이너와 생성과 관계설정, 사용 등을 제어해주는 제어의 역전이 적용된 객체다. 빈의 상호 연결은 의존성 주입(DI)이라고 알려진 패턴을 기반으로 수행한다.
  3. 스프링은 주로 자동구성기능을 활용하는데, 자동연결 ex) 어노테이션컴포넌트 검색이 있다.
  4. 최근에는 스프링부트(Spring Boot)가 소개되면서 자동구성기능이 향상되었다.

2. 스프링 애플리케이션 초기 설정하기

책에서는 STS로 실습했지만 필자는 IntelliJ에서 실습하기위해 Initializr로 프로젝트를 생성하고 인텔리제이를 사용했다 😅

Initializr으로 생성한 taco-cloud 프로젝트 구조(메이븐)

3. 스프링 애플리케이션 작성하기

컨트롤러와 뷰, 그리고 테스트 클래스를 작성해보자

1. 홈페이지 컨트롤러

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이라는 뷰 찾을수있음
		
	}
}

2. 홈페이지 뷰

<!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>

3. 홈페이지 컨트롤러 테스트

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쪽을 다뤄보고싶다!
다 할수있을까 😅

profile
후회하지 않는 사람이 되자 🔥

0개의 댓글