✏️ 2023-01-10 Today I Learn

@mitoconcrete · January 10, 2023 · 4 min read

[회고] 220110: TDD 시작해보기

sql을 학습하면서 시간이 많이 남게되어, 무엇을 할지 고민하던 중 TDD라는 여태까지 피해왔던 카드를 다시꺼내보게 되었다. 번거롭다는 단점때문에 TDD를 받아들이지 못하고 있다가, 내 어플리케이션이 항상 의도대로 동작하지 않는 것을 보고, 또 스웨거에서 점점 길어지는 검증로직들을 보며 TDD의 필요성을 느끼게 되었다. 클라이언트를 통해 검증을 할 수도 있겠지만, 점점 과정이 길어질수록 로그인하고, 토큰발급받고하다보면 여간 귀찮은게 아니기 때문이다. 개발자가 본인이 작성한 코드를 코드로서 검증하는 것이 가장 빠르고 정확하다라는 판단을 했고, 따라서 TDD를 작은것부터 시작해보기했다.

처음엔 아예 감도 잘 오지 않았다. 그래서 이미 TDD를 잘 적용중이신 ㅁㅅ님께 가서 도움을 청했는데, 많은 정보를 얻을 수 있었다. TDD는 통합보단 단위테스트를 많이하며, given -> when -> then의 순서에서 given이 가장 중요한 파트라는 것도 이해 할 수 있었다.

테스트환경은 말그대로 목업 환경에서 이뤄지기때문에, 내 의도대로 동작하지 않는게 아직 많다.. 오늘은 timestamped로 작성해놓은 값에 null이 계속 할당되어, 넘어가지 못하는 상황이 있었는데, 좀 찾아보니 테스트환경은 기존 어플리케이션과 다르게 돌아가므로 테스트환경에도 EnableAudit을 해줘야한다는 사실을 알았다. 이외에도 mockmmvc를 이용해 api를 검증할 수 있는데, 아직 적용해보지 못했다.

아직 손에 잡히지 않는 부분이 많은데, 얼른 익숙해져서 자신있게 TDD에 대해서 말할 수 있게 되는 수준이 되었으면 좋겠다.

[TodayKeywords] 오늘 공부한 키워드

  • given -> when -> then:

    • given : 테스트 환경에서 어떤것을 셋팅 할 지, 결정 짓는 곳. TDD에서 가장 중요한 부분.
    • when : 어디서 해당 테스트를 실행할건지 결정하는 부분
    • then : when 에서 수행한 값이 실제로 원하는 결과 값을 뱉고있는지, 검증하는 부분 aasert, verify등을 이용하여, 검증한다.
  • @Mock : 실제 빈이 아닌, 실제 빈을 클론한 목업 객체를 테스트 환경에 넣어주는것.
  • @InjectMocks : @Mock으로 선언된 객체에, @InjectMocks으로 선언된 목업객체를 주입함으로서 테스트 환경이 구동되도록 한다.

[NextKeyworks] Study Queue

  • HTTPS
  • SOLID
  • loop label
  • CSV
  • 파일입출력
  • UML
  • UTC
  • epoch time / Instant time
  • MVC
  • URL ClassLoader
  • Secure ClassLoader
  • JNI
  • GC
  • HOF
  • 자바 해시코드(hashCode)
  • OSI 7 계층
  • PCB
  • 스프링 설계철학
  • RESTful
  • 준 영속성
  • 지연로딩
  • 프록시객체
  • jpa - mybatis 의 차이
  • orm - mapper 의 차이
  • 쿠키/세션/로컬 스토리지
  • HttpMessageConverter
  • 서블릿
  • ACID
@mitoconcrete
어제보다 조금 더 성장하기 위해 기록합니다.