1 어플리케이션 코드 작성
package com.example.boilerplate;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication
@SpringBootApplication으로 인해 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정됩니다. 특히나 @SpringBootApplication이 있는 위치부터 설정을 읽어가기 때문에 이 클래스는 항상 프로젝트의 최상단에 위치해야만 합니다.
💡 Annotation
Annotation은 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리해야하는지 알려주는 메타데이터라고 볼 수 있다.
Annotation은 다음 세 가지 용도로 사용된다.
- 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공
- 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공
- 실행 시(런타임 시) 특정 기능을 실행하도록 정보를 제공
2 간단한 Controller 작성
/hello 엔드포인트로 get 요청을 받으면 문자열 "hello"를 리턴하는 컨트롤러를 작성한다.
(이 프로젝트에서는 web 패키지에 컨트롤러와 관련된 클래스를 모두 담을 예정)
package com.example.boilerplate.web;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
@RestController
• 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 줍니다.
• 예전에는 @ResponseBody를 각 메소드마다 선언했던 것을 한번에 사용할 수 있게 해준다고 생각하면 됩니다.
@GetMapping
• HTTP Method인 Get의 요청을 받을 수 있는 API를 만들어 줍니다.
• 예전에는 @RequestMapping(method = RequestMethod.GET)으로 사용되었습니 다. 이제 이 프로젝트는 /hello로 요청이 오면 문자열 hello를 반환하는 기능을 가지게 되었습니다.
3 테스트 클래스 작성
JUnit 이라는 테스트 프레임워크를 이용해 /hello 엔드포인트로 get 요청을 보냈을 때, 응답이 hello인지 확인하는 테스트 코드 작성.
- 테스트 코드는 src/test/java 에 위치한다.
- 테스트 클래스는 대상 클래스 이름에 Test를 붙인다.
package com.example.boilerplate.web;
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(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void hello가_리턴된다() throws Exception {
String hello = "hello";
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
}
JUnit
java 테스트 프레임워크
@RunWith(SpringRunner.class)
• 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킵니다.
• 여기서는 SpringRunner라는 스프링 실행자를 사용합니다.
• 즉, 스프링 부트 테스트와 JUnit 사이에 연결자 역할을 합니다.
@WebMvcTest(controllers = HelloController.class)
• 여러 스프링 테스트 어노테이션 중, Web(Spring MVC)에 집중할 수 있는 어노테이션 입니다.
• 선언할 경우 @Controller, @ControllerAdvice 등을 사용할 수 있습니다.
• 단, @Service, @Component, @Repository 등은 사용할 수 없습니다.
• 여기서는 컨트롤러만 사용하기 때문에 선언합니다.
@Autowired
• 스프링이 관리하는 빈(Bean)을 주입 받습니다.
@Test
• JUnit에게 해당 method가 test case 임을 명시함
private MockMvc mvc;
• 웹 API를 테스트할 때 사용합니다.
• 스프링 MVC 테스트의 시작점입니다.
• 이 클래스를 통해 HTTP GET, POST 등에 대한 API 테스트를 할 수 있습니다.
mvc.perform(get("/hello"))
• MockMvc를 통해 /hello 주소로 HTTP GET 요청을 합니다.
• 체이닝이 지원되어 코드에 볼 수 있듯이 여러 검증기능을 이어서 선언할 수 있습니다.
'WEB > Java' 카테고리의 다른 글
static, final 키워드에 대하여 - ① static 키워드 (0) | 2022.02.08 |
---|---|
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 03-1 JPA 적용 (0) | 2022.02.02 |
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 02-2 lombok 적용 (0) | 2022.01.22 |
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 01 gradle 설정 (0) | 2022.01.08 |
Java 개발환경 설정하기 (Mac/IntelliJ) (1) | 2021.12.17 |