항해99/TIL

31일차-7/07 수 -항해99

고로케 2021. 7. 7.
반응형

하루 회고

  • 과제를 다 완성했지만 mySQL과 에러가 생겨서 고치느라 고생했다.
    앞으로 남은 기간 중 협업을 할 일이 있을 때를 대비해서 localhost 로 연결을 시키는데,
    테이블이 정상 작동을 하지 않았다. 알고보니 ddl-auto = update 설정을
    안해줘서 생기는 것이 었는데 해당 부분의 부족함을 못찾아서 한참을 헤매였다.

  • 앞으로 이런 에러 부분이나 어려웠던 부분을 문서로 작성해서 정리해나가야겠다.

주저리 주저리

  • 항해99의 다음주 일정은 선택을 할 수 있다.
    재정비를 할 것인지, 프론트와 협업 미니프로젝트를 할 것인지.
    항해99의 메리트는 다른 사람과의 협업 경험이라고 생각하기 때문에
    짧은 기간동안 최대한 많은 것들을 경험하고 싶다.
    무엇보다 사람들과 같이 같은 목표를 향해 달려나가는 것이
    너무 좋고 재밋다 😝

오늘 배운 것

  • 테스트 코드

TTD란?

"테스트 주도 개발: 테스트가 개발을 이끌어 나간다."라고 정의할 수 있다.

메소드 나 함수 같은 프로그램 모듈을 작성할 때

‘작성 종료조건을 먼저 정해놓고 코딩을 시작 한다’는 의미로 받아들이면 편하다.

  • RED : 항상 실패하는 테스트를 먼저 작성
  • GREEN : 테스트에 통과하는 프로덕션 코드 작성
  • REFACTOR : 테스트가 통과하면 프로덕션 코드를 리팩토링

위의 레드 그린 사이클 처럼 우선 테스트를 작성하고 그걸 통과하는 코드를 만들고 해당 과정을 반복하면서

제대로 동작하는지에 대한 피드백을 적극적으로 받는 것이다.

TDD를 왜 사용하는가?

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

Application 클래스는 앞으로 만들 프로젝트의 메인 클래스가 됩니다.

  • @SpringBootApplication으로 인해 스프링 부트의 자동설정,
    스프링 Bean 일기기와 생성을 모두 자동으로 설정된다.
  • @SpringBootApplication이 있는 위치부터 설정을 읽어가기 때문에
    이 클래스는 항상 프로젝트의 최상단에 위치해야 한다.
  • main 메소드에서 실행하는 SpringApplication.run으로 인해
    내장 WAS(Web Application Server, 웹 어플리케이션 서버)를 실행한다.
  • 내장 WAS란 별도로 외부에 WAS를 두지 않고 애플리케이션을 실행할 때 내부에서 WAS를 실행하는 것을 이야기한다. 이렇게 되면 항상 서버에 톰캣(Tomcat)을 설치할 필요가 없게 되고, 스프링 부트로 만들어진 Jar 파일(실행 가능한 Java 패키징 파일)로 실행하면 된다.
  • Controller 코드설명
    1. @RestController
      • 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 줍니다.
      • 예전에는 @ResponseBody를 각 메소드마다 선언했던 것을 한번에 사용할 수 있게 해준다.
    2. @GetMapping
      • HTTP Method인 Get인 요청을 받을 수 있는 API를 만들어 준다.
      • 예전에는 @RequestMapping(method = RequestMethod.GET)으로 사용되었습니다.
      1. @RunWith(SpringRunner.class)
        • 테스트를 진행할 때 JUint에 내장된 실행자 외에 다른 실행자를 실행시킵니다.
        • 여기서는 SpringRunner라는 스프링 실행자를 사용합니다.
        • 즉, 스프링 부트 테스트와 JUnit 사이에 연갈자 역할을 합니다.
      2. @WebMvcTest
        • 여러 스프링 테스트 어노테이션 중, Web(Spring MVC)에 집중할 수 있는 어노테이션입니다.
        • 선언할 경우 @Controller, @ControllerAdvice 등을 사용할 수 있습니다.
        • 단, @Service, @Component, @Repository 등은 사용할 수 없다.
        • 여기서는 컨트롤러만 사용한다.
      3. @Autowired
        • 스프링이 관리하는 빈(Bean)을 주입 받는다.
      4. private MockMvc mvc
        • 웹 API를 테스트할 때 사용
        • 스프링 MVC 테스트의 시작점
        • 이 클래스를 통해 HTTP GET,POST 등에 대한 API 테스트를 할 수 있다.
      5. mvc.perform(get("/hello"))
        • MockMvc를 통해 /hello 주소로 HTTP GET 요청을 한다.
        • 체이닝이 지원되어 아래와 같이 여러 검증 기능을 이어서 선언할 수 있다.
      6. .andExpect(status().isOk())
        • mvc.perform의 결과를 검증한다.
        • HTTP Header의 Status를 검증합니다.
        • 우리가 흔히 알고 있는 200,404,500 등의 상태를 검증한다.
      7. .andExpect(content().string(hello))
        • mvc.perform의 결과를 검증한다.
        • 응답 본문의 내용을 검증한다.
  • DTO 코드설명
    1. @Getter
      • 선언된 모든 필드의 get 메소드를 생성해 줍니다.
    2. @RequiredArgsConstructor
      • 선언된 모든 final 필드가 포함된 생성자를 생성해 줍니다.
      • final이 없는 필드는 생성자에 포함되지 않습니다.
      1. assertThat
        • assertj라는 테스트 검증 라이브러리의 검증 메소드입니다.
      2. isEqualTo
        • 검증하고 싶은 대상을 메소드 인자로 받는다.
        • 메소드 체이닝이 지원되어 isEqualTo와 같이 메소드를 이어서 사용할 수 있다.
    3. @RequestParam
      • 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션
      1. param
        • API 테스트할 때 사용될 요청 파라미터를 설정
        • 단, 값은 String만 허용됩니다.
        • 숫자/날짜 등의 데이터도 작성할 때는 문자열로 변경해야한 가능
      2. jsonPath
        • JSON 응답값을 필드별로 검증할 수 있는 메소드입니다.
        • $를 기준으로 필드명을 명시합니다.

 

 

 

반응형

'항해99 > TIL' 카테고리의 다른 글

33일차-7/09 금 -항해99  (0) 2021.07.10
32일차-7/08 목 -항해99  (0) 2021.07.09
30일차-7/06 화 -항해99  (0) 2021.07.06
29일차-7/05 월 -항해99  (0) 2021.07.05
28일차_7/04_항해99 -4주차 WIL(회고록)  (0) 2021.07.04

댓글