회고

20220525 TIL #서버에서 프론트까지 작업하기 #테스트코드 작성하기

paran21 2022. 5. 25. 23:58

현재 진행하는 프로젝트는 TDD는 아니지만 관심이 많은 맴버들이 참여하고 있고,

나도 프로젝트를 하면서 테스트코드가 있으면 리펙토링 하기 훨씬 쉽다는 걸 느꼈기 때문에 가급적 테스트코드를 짜려고 노력하고 있다.

(일단 수정 후 테스트코드로 확인하면 된다는 마음의 안정이 생긴다!)

 

그런데 테스트코드를 짜는 것도 쉽지 않다.

어떤 목적에서, 어떤 것을 테스트할지도 고민이 많이 되고, 생각이 있어도 코드로 구현하는 것 자체가 어렵다. 

그래도 팀 맴버 중에 관심이 많은 분이 있어서 그분 코드를 많이 참고 하고 있고, 서비스 단에서 간단하게 정말 기능만 정상적으로 작동하는지 확인하는 정도는 이제 작성할 수 있게 되었다.

 

repository에 Mock 대신 Fake 객체를 사용하는 것도 재밌었다.

Mock을 사용하면 어떤 값을 return할지 미리 다 지정해주어야 하는데 Fake객체로 repository안에서 아에 return 값을 지정해주면 이 객체를 또 사용할 수 있어서 좋은 것 같다.

 

controller나 repository 쪽도 테스트해보려고 코드를 짜보고 있는데 잘 되지는 않다.

검색만으로는 좀 한계가 있고, 책을 하나 찾아서 그것도 같이 보면서 Jnuit이나 테스트 코드 자체에 대해서도 계속 공부해야겠다.

 

그래서 이번 프로젝트 끝내기 전에는 우리 프로젝트에 맞는 더 좋은 테스트코드를 작성하고 싶다.

 


 

오늘 간단한 기능 구현을 맡게 되었다!

사실 처음에 얘기를 들었을 때는 정말 금방 끝낼 수 있었는데 생각보다 오래걸렸다...

그래도 단위테스트 하나를 포함해서(근데 정말 기본적인 검증밖에 안하는 코드라서 고민이 좀 필요해보인다) 뷰까지 기능구현을 다 할 수 있었다.

 

조건에 맞는 데이터를 조회해서 보여주는 거였고, 뷰도 이미 구현된 걸 참고하면 되서 자신있게 시작했는데

역시나 생각못한 문제들이 터졌다.

 

일단 조회하고 나서 Page<dto>로 리턴해야 했는데, jpa로 찾아온 엔티티를 리턴할 객체로 담는 과정에서 page처리가 어려웠다.

결국 기존에 있던 코드를 참고해서 queryDSL로 해결하긴 했다.

근데 queryDSL을 쓰는 것과 jpa로 페이징 처리하는 것이 어떤 차이가 나는지, 뭐가 더 나은 선택인지는 더 고민해봐야할 것 같다.

 

뷰는 html로 그리는건 금방했는데 script가 좀 힘들었다.

일단 Vue 문법과 js가 익숙하지 않았고, 여기서도 page 처리가 힘들었다.

코딩이 항상 그렇듯이 될 것 같은데 계속 안되고 있었고 마침 옆에서 코드를 봐주셨는데, uri에서 오타가 있었다....!

 

그리고 구현하고 보니 에러처리가 필요한 것 같아서 특정 경우 팝업으로 에러메시지를 보여주기로 하였다.

그런데 이 에러처리 부분을 코드 어디에 넣어야 할지 고민이 되었다.

두 군데에 넣어야 했는데, 이거를 한번에 처리할 수 있으면 처리할 수 있는 지점에 넣는게 나은지, 아니면 queryDSL 코드 중에 에러 처리를 넣어서 처리할 에러라면 이후의 로직을 타지 않도록 하는게 나은지 고민된다.

 

우선 후자로 처리하긴 했는데, 가독성이 좀 떨어지는 것 같아서 내일 더 고민해봐야겠다.

 

그래도 간단한 기능이나마 서버에서 프론트까지 쭉 구현해서 재밌는 경험이었다!