본문 바로가기

우아한테크코스/코드 리뷰

지하철 1

14주차에는 새로운 미션으로 지하철 미션을 진행하였다.

새롭게 인수 테스트(Acceptance Test)에 대해 배울 수 있었다. 인수 테스트는 간단하게 말해서 사용자의 관점에서 올바르게 작동하는지 확인하는 테스트이다.

인수 테스트에 Rest-Assured를 사용했는데, 공부해보니 인수 테스트에는 Rest-Assured를 사용하는 것이 권장했다.

Rest-Assured는 @SpringBootTest로 전체 context를 로드하여 빈을 주입하기 때문에 속도가 많이 느리다. 속도가 느린데도 불구하고 왜 인수테스트에는 Rest-Assured를 사용하는 것이 권장할까?

이런 글을 찾을 수 있었다.

Rest-Assured is gaining acceptance over the other frameworks to test REST services in Java. Having BDD style fluent interface, its easy to read the test scripts also, with minimal learning curve.
I am using this framework for verifying REST services as an end user, and it has been easier to implement test scripts for them. Hence I cannot comment much on Spring MVC part of REST-assured. -stack overflow

핵심적인 이유는 BDD 스타일을 통해 최소한의 학습 곡선으로 쉽게 읽을 수 있기 때문이라고 생각한다.

BDD는 Behaviour-Driven Development(행위 주도 개발)로 시나리오를 기반으로 테스트 케이스를 작성한다. 이 시나리오는 개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 레벨을 권장한다.

'인수 테스트가 사용자 관점의 테스트라는 점을 생각해봤을 때 인수 테스트에서는 MockMvc가 아닌 Rest-Assured를 사용하는 것이 맞겠다'라고 생각했다.

14 주차의 핵심은 인수 테스트 뿐 아니라, 프론트엔드 공부도 있었다. 시간의 70% 정도는 프론트 엔드쪽을 구현하는데 사용했다.

프론트에 대한 지식이 부족하고 자바스크립트를 잘 다루지 못했었는데, 이번 미션을 통해 자바스크립트에 대한 지식을 많이 알게되었다..

나는 자바스크립트를 잘 모르고, 페어는 잘했다. 페어가 짠 자바스크립트 코드를 보면서 질문하고 이해하고 집에서 따라쳐보는 식으로 자바스크립트 공부를 많이했다.

백엔드 개발자라 해도 프론트를 어느정도 다룰 줄 알아야 한다고 생각하기 때문에 마냥 싫지만은 않았다. 자바스크립트가 나름 재밌기도했다. 참 매력있는 언어이다.

예전에 Vue.js를 공부할 때, 자바스크립트도 모르는 상태로 했었다. 이번에 자바스크립트를 공부하면서 내가 Vue를 할 때 짰던 코드가 이해되기도 했었다.

이번 미션을 통해 Spring, Acceptance Test, JavaScript 대한 많은 양의 지식을 학습했다. 배운 내용이 너무 많아서 글로 전부 정리하는건 비용이 너무 클 것 같다.

이제 리뷰 받은 내용 중 의미있는 내용을 정리해보자.


'굳이 예외를 custom해야 할까?'라는 생각이 나에게 지배적이였는데, 다시 생각하게 해준 리뷰였다. 리뷰어님의 말대로 IllegalArgumentException같은 예외는 내가 예상치 못한 상황에도 충분히 터질 수 있는 예외이고 예상하지 못한 예외를 getMessage()로 클라이언트에게 전부 보내버리면 좋지 않겠다라는 생각이 들었다.

예상하지 못한 예외와 예상한 예외를 custom 유무로 구분 짓고 custom한 예외는 정의해준 예외 메세지를 클라이언트에게 보내고 기본 예외들은 로그를 찍고 알 수 없는 에러 등의 메세지로 클라이언트에게 보내는 식으로 수정했다.

또, 발생한 예외를 처리 해야만하는 상황이면 반드시 custom해서 예상한 예외만 처리 하는게 바람직할 것 같다.


엔티티는 반드시 식별성을 가져야한다. Station객체의 식별성은 id 이기 때문에
equals와 hashcode는 id만을 가지고 비교하는 것이 맞았다.

엔티티에 대한 개념이 확실치 않아서 인스턴스 변수 전부를 비교했었다. 엔티티와 VO의 핵심적인 차이는 식별성에 있다는 것을 배울 수 있었다.


e.printStackTrace()를 통해 예외가 왜 터졌는지 확인했었는데 e.printStackTrace()에서 리플렉션 기반으로 찾는 것은 몰랐다. 리플렉션이 성능에 안좋다는 건 익히 들어서 알고있었다.

다음 부터는 slf4j를 사용해서 예외를 확인하는 습관을 가질 것이다.


이번 미션은 전체적으로 해야할 양은 많고 마감 기한은 짧아서 미션에 굉장히 많은 시간을 쏟았다. 그 만큼 몸이 피곤하고 힘들었다.

하지만 다 끝내고보니 배운게 진짜 많았다. 배운 내용을 100% 이해하고 기억했는지는 의문이지만 다시 한번 마주치면 완벽히 이해하고 기억할 바탕을 마련했다고 생각한다.

'우아한테크코스 > 코드 리뷰' 카테고리의 다른 글

지하철 3  (0) 2020.05.23
지하철 2  (0) 2020.05.13
체스 게임 3  (0) 2020.05.05
체스 게임 2  (0) 2020.04.25
체스 게임 1  (2) 2020.04.17