[스프링부트와 AWS로 혼자 구현하는 웹서비스] chap.1,2

JoongHyeok.Velog·2022년 2월 14일
0
post-thumbnail

👋 시작 계기

이동욱님의 "스프링부트와 AWS로 혼자 구현하는 웹서비스"책이 너무 재밌다고들 해서 2월초에 나도 그 스프링에 재미를 느끼려고 책을 구매했다.

[ Chap.1 인텔리제이로 스프링 부트 시작하기 ] 는 기본적인 IntelliJ설명이랑 Git 연동에 관한 부분은 책만 보고 따라할 수 도 있도록 잘 설명이 되어있었다.

그래서 [ Chap.2 스프링부트에서 테스트 코드를 작성하자 ]부터 블로그 글을 정리해나가면서 앞으로 꾸준하게 이 책을 공부하면서 챕터마다 공부한 내용을 기록할 예정이다.현재 Chap.3 번까지 공부를 했는데 시간가는줄도 모르고 나도 모르게 책을 계속 넘기면서 따라하고 있었다..(그만큼 재밌다는 뜻)
더 늦기 전에 내가 몰랐던 내용들은 정리를 해나가려
한다.

🚩테스트 코드 소개

먼저 TDD단위테스트는 다른 이야기이다.
TDD는 테스트가 주도하는 개발 을 뜻하고 테스트 코드를 먼저 작성하는 것 부터 시작하는 것이다.
반면 단위 테스트는 TDD의 첫 번째 단계인 기능단위의 테스트 코드를 작성하는 것을 이야기한다.

❓이렇다면 단위 테스트를 통해 얻는 이점은 무엇이 있을까?

  • 단위 테스트는 개발단계 초기에 문제를 발견하게 도와줍니다.
  • 단위 테스트는 개발자가 나중에 코드를 리팩토링하거나 라이브러리 업그레이드 등에서 기존 기능이 올바르게 작동하는지 확인할 수 있습니다.
  • 단위 테스트는 기능에 대한 불확실성을 감소시킬 수 있습니다.
  • 단위 테스트는 시스템에 대한 실제 문서를 제공합니다. 즉, 단위 테스트 자체가 문서로 사용할 수 있습니다.

⏩ 새로운 기능이 추가될 때, 기존 기능이 잘 작동되는 것을 보장해주는 것이 테스트 코드이다.

테스트 코드 작성을 도와주는 프레임워크는 여러가지가 있는데 가장 대중적인 테스트 프레임워크는 xUnit이 있다.. 이는 개발환경(x)에 따라 Unit테스트를 도와주는 도구라고 생각하면 된다. 대표적인 xUnit 프레임워크의 종류는 다음과 같다.

  • JUnit - Java
  • DBUnit - DB
  • CppUnit - C++
  • NUnit - .net

JUnit은 현재 5까지 나와있고 프로젝트도 JUnit5로 진행했었는데 이 책에서는 JUnit4를 사용한다. 이유는 아직 많은 회사에서 JUnit4를 사용하고 있기 때문이라고 한다.


🚩 HelloController 작성하기

@RestController

  • 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 줍니다.
  • 예전에는 @ResponseBody를 각 메서드마다 선언했떤 것을 한번에 사용할 수 있게 해준다고 생각하면 됩니다.

@GetMapping

  • HTTP Method인 Get의 요청을 받을 수 있는 API를 만들어 줍니다.
  • 예전에는 @RequestMapping(method = ReqeustMethod.GET)으로 사용되었지만 이 프로젝트는 이제 /hello로 요청이 오면 문자열 hello를 반환하는 기능을 가지게 되었습니다.

테스트 코드 작성

테스트 클래스는 대상 클래스 이름에 Test를 붙입니다. 그러므로 HelloControllerTest로 생성합니다.

코드 설명

@RunWith(SpringRunner.class)

  • 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킵니다.
  • 여기서는 SpringRunner라는 스프링 실행자를 사용합니다.
  • 즉, 스프링 부트 테스트와 JUnit사이에 연결자 역할을 합니다.

@WebMvcTest

  • 여러 스프링 테스트 어노테이션 중 ,Web(SpringMVC)에 집중할 수 있는 어노테이션입니다.
  • 선언할 경우 @Controller, @ControllerAdvice 등을 사용할 수 있습니다.
  • 단 @Service, @Component, @Repository 등은 사용할 수 없습니다.

@Autowired

  • 스프링이 관리하는 빈을 주입받습니다.

@private MockMvc mvc

  • 웹 API를 테스트할 때 사용합니다.
  • 스프링 MVC 테스트의 시작점입니다.
    이 클래스를 통해 HTTP GET,POST 등에 대한 API테스트를 할 수 있습니다.

@mvc.perform(get("/hello"))

  • MockMvc를 통해 /hello 주소로 HTTP GET 요청을 합니다
  • 체이닝이 지원되어 아래와 같이 여러 검증 기능을 어이서 선언할 수 있습니다.

@.andExpect(status().isOk())

  • mvc.perform의 결과를 검증합니다.
  • HTTP Headere의 Status를 검증합니다.
  • 우리가 흔히 알고 있는 200,404,500등의 상태를 검증합니다.
  • 여기선 OK, 즉 200인지 확입합니다.

@.andExpect(content().string(hello))

  • mvc.perform의 결과를 검증합니다.
  • 응답 본문의 내용을 검증합니다.
  • Controller에서 "hello"를 리턴하기 때문에 이 값이 맞는지 검증합니다.

롬복 소개

롬복이란 Getter,Setter,기본생성자,toString 등을 어노테이션으로 자동 생성해주는 자바 개발자들의 필수 라이브러리이다. 인텔리제이에서는 build.gradle dependencies에

implementation('org.projectlombok:lombok')

를 추가해주고 오른쪽 상단의 코끼리모양의 새로고침을 해주거나 옆 사이드에 있는 Gradle 탭에서 새로고침을 해주면된다.

profile
영차영차

0개의 댓글