*이해를 위해 메모장처럼 활용한 포스트로, 신뢰하지 말고 참고용으로 활용
1. 테스트 코드 작성
단위 테스트 코드 작성 장점(위키)
- 문제점 발견
유닛 테스트의 목적은 프로그램의 각 부분을 고립시켜서 각각의 부분이 정확하게 동작하는지 확인하는 것이다. 즉, 프로그램을 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지 검사하고 이를 통해 문제 발생 시 정확하게 어느 부분이 잘못되었는지를 재빨리 확인할 수 있게 해 준다. 따라서 프로그램의 안정성이 높아진다. 유닛 테스트는 일견 개발 시간을 증가시키는 것처럼 보이지만 개발 기간 중 대부분을 차지하는 디버깅 시간을 단축시킴으로써 여유로운 프로그래밍을 가능케 한다. - 변경이 쉽다
프로그래머는 언제라도 유닛 테스트를 믿고 리팩토링을 할 수 있다. 리팩토링 후에도 해당 모듈이 의도대로 작동하고 있음을 유닛 테스트를 통해서 확신할 수 있다. 이를 회귀 테스트(Regression testing)라 한다. 어떻게 코드를 고치더라도 문제점을 금방 파악할 수 있고 수정된 코드가 정확하게 동작하는지 쉽게 알 수 있게 되므로 프로그래머들은 더욱더 의욕적으로 코드를 변경할 수 있게 된다. 좋은 유닛 테스트 디자인은 그 유닛이 사용되는 모든 경로를 커버할 수 있는 테스트 케이스를 만들어 준다.
지속적인 유닛 테스트 환경을 구축하면 어떠한 변화가 있더라도 코드와 그 실행이 의도대로 인지를 확인하고 검증 할 수 있게 된다. 확립된 개발 방법과 유닛 테스트의 범위에 따라서 프로그램의 정확성이 좌우된다. - 통합이 간단하다
유닛 테스트는 유닛 자체의 불확실성을 제거해주므로 상향식(bottom-up) 테스트 방식에서 유용하다. 먼저 프로그램의 각 부분을 검증하고 그 부분들은 합쳐서 다시 검증하는 통합 테스트에서 더욱더 빛을 발한다.
테스트 코드는 매번 패키지를 적용할 때마다 하는 회귀시험을 한 번에 해결하는 방법인 것 같다.
프로젝트의 시작부터 차근차근 테스트 코드를 만들어나가지 않는다면 나중엔 걷잡을 수 없이 많아져버려서
기능을 추가 or 보완 할 때마다 테스트 코드의 작성은 필수라고 생각한다.
테스트 프레임워크 중 대표적으로 xUnit 이 있음
JUnit / DBUnit / CppUnit / NUnit ..
2. Hello Controller 테스트 코드 작성
인텔리제이는 인텔리센스(자동완성)이 VSCode처럼 단축키 입력 없이 바로 보였는데
이클립스는 [ Ctrl + Space ] 단축키를 눌러야 자동완성을 위한 리스트가 아래 나온다.(귀찮)
- Application 메인 클래스 작성
- @SpringBootApplication 어노테이션
- 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성을 모두 자동으로 해줌
- 스프링부트는 이 어노테이션이 있는 위치부터 설정을 읽어가기 때문에 항상 프로젝트의 최상단에 위치해야 한다.
- SpringApplication.run()
- 내장 WAS (Web Application Server)를 실행함.
- @SpringBootApplication 어노테이션
내장 WAS를 쓰면 언제 어디서든 동일한 환경에서 스프링 부트를 배포할 수 있고, 성능적 이슈는 무시해도 될 정도로 차이가 크지 않음
어노테이션 지옥
- @RestController
- 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어줌
- 난 컨트롤러가 뭔지 잘 모른다 (opentutorials.org/course/697/3828) 참고하자
- @GetMapping
- Get 요청을 받을 수 있는 API를 만들어줌
- @RunWith(SpringRunner.class)
- @WebMvcTest
- @Autowired
너무 많다. 헷갈리지 않게 정리해놓기로..
STS에서는 인텔리제이처럼 줄 번호 옆에 실행 버튼이 안 보인다.
Run As -> JUnit Test (단축키 : cmd + opt + x 이후 오른쪽 구석탱이에 창이 뜨면 t ... 그냥 마우스를 쓰자)
누르면
오른쪽 구석에 테스트 결과가 뜬다(실패..)
이클립스에서 코드를 동일하게 작성하면
이런 에러가 발생하게 된다.
그래서 하라는 대로 하면 테스트에서 에러가 발생한다.
왜일까 자세히 보니
content() 가 ContentRequestMatchers / ContentResultMatchers 두 군데 있다..
1회독 하면서 이렇게 이름이 같아서 잘못 사용한 경우가 매우 많았는데 문제 원인을 찾기가 힘들었다.
잘 생각하면서 인텔리센스를 사용하자..
잘 된다.
3. 롬복 (Lombok)
자바 기반에서 자주 사용하는 Getter, Setter, ToString, hashCode 등 을 어노테이션으로 자동 생성해준다! (사실 잘 모름)
보기엔 좋지만 단점은 소스 분석이 난해해질 수 있다는 것 등이 있겠다.
인텔리제이에서는 플러그인 설치로 한방에 끝나지만 STS 에서는 좀 복잡하다.
projectlombok.org/setup/eclipse
롬복 홈페이지 및 여러 블로그를 참고하자.
참고로 맥(Mac)에서 STS의 기본 설치 경로는 아래와 같다 (Application-STS4-Contents-Eclipse-SpringToolSuite4.ini)
롬복에 대해선 추가로 작성해야 할 것 같다.
우선 책에 있는 어노테이션 정리
- @Getter
- 선언된 모든 필드의 get 메소드 생성해줌
- @RequiredArgsConstructor
- 선언된 모든 final 필드가 포함된 생성자를 자동 생성
- final이 없는 필드는 생성자에 포함되지 않음
'Back-End > SpringBoot' 카테고리의 다른 글
스프링부트와 AWS로 혼자 구현하는 웹 서비스 (chap.3) - JPA (0) | 2021.01.20 |
---|---|
스프링부트와 AWS로 혼자 구현하는 웹 서비스 (chap.1) - 프로젝트 생성 (0) | 2021.01.12 |