베이스캠프 Sprint6

21.02.22부터 21.02.26까지 베이스캠프 Sprint6을 진행했다.

Sprint5에서 진행한 개발 결과물에 대해서 리뷰하는 스프린트였다. Sprint5에서는 어떻게든 기획대로 작동하는 결과물을 내는 것이 목표였다면, Sprint6에서는 그것을 조금 더 나은 방향으로 만드는 것이 목표였다.

여기서 말하는 더 나은 방향이라는 것은

  1. 성능과 구조적 이점을 위한 더 나은 DB 모델링
  2. 좋은 코드 작성
    1. 가독성이 좋은 코드 작성
    2. 불필요한 자원을 낭비하지 않는 코드 작성
    3. 버그 발생 여지가 적은 코드
    4. 목적에 맞는 독립적인 모듈 구분

라는 생각이 들었다. s

DB 모델링 교육

DB 모델링 교육은 사실 우리가 구성한 ERD 및 다른 팀들의 ERD들에 대한 피드백이 위주였다. 우리 팀의 피드백에 대해서는 테이블 구조를 바꿀만큼의 피드백은 들어오지 않아서 다행히 프로젝트를 갈아엎을 정도는 아니었다. 대신 여러 조직 및 사람과의 협업하기에 좋은 디비 모델링에 대해서도 알 수 있게되었고, 소문자를 대부분 많이 쓰고, MySQL에서는 연월일시분초에 대해 timestamp보다는 datetime을 많이 쓴다는 점 등 현업에서 많이 쓰는 규칙에 대해서 알 수 있었다. 우리팀은 테이블을 전부 대문자로 써서 전부 고치는데 단순 작업 시간이 들긴 했지만..

또, 성능을 위해서 반정규화 등의 방법을 사용하기도 한다는 것을 알게 되었다. 사실 난 이전까지 비즈니스 모델이 정해지면 그에 대한 디비 모델은 정답이 하나로 정해져있다고 생각했는데 현업에서는 그렇지 않을 수도 있겠다는 생각을 할 수 있었다.

Clean code

전반적으로 clean code를 컨셉으로 한 스프린트였던 것 같다. 이를 위한 교육도 들었는데 개인적으로 좋은 코드를 읽고 배우는 것을 좋아하기 때문에 교육 자체도 흥미롭게 들었다. 그리고 이사님께서 우리 팀에 대한 코드리뷰를 진행해주셨는데 생각보다 세세하게 코드리뷰를 해주셔서 놀라웠다. Spring의 annotation에 대한 리뷰부터 java String concatenation에 대한 메모리 이슈 등 정말 꼼꼼히 봐주셔서 놀랐다. 제한된 시간에 코드 리뷰를 하다보니 로그인과 예약 부분에 대한 코드리뷰만 진행해도 시간이 부족했고 그래서 내가 작성한 코드(검색 기능)에 대한 리뷰를 받지 못했는데 그게 정말 아쉬웠다. 사실 나보다 경험이 훨씬 많으신 분이 내 코드를 리뷰해준다는 것은 정말 소중한 기회이기 때문이다.

CLI controller 구현

웹 client로 들어오는 요청말고도 CLI로 들어오는 요청을 처리하는 컨트롤러도 구현했다. 원래 스프링으로 웹 client에만 대응할 수 있는 줄 알았는데 cli로도 할 수 있다는 걸 처음 알았다.

Controller는 서버의 문지기

CLI controller를 구현하면서 자연스럽게 컨트롤러의 목적도 알게 되었고, 그동안 불명확했던 컨트롤러와 서비스의 경계선에 대해서도 이해하게 되었다. 내가 이해하기에 컨트롤러는 서버의 문지기 역할인 것 같다. 서버에 들어오는 모든 요청을 받아내는 최전선이면서 잘못된 요청을 거르고, 제대로 된 요청에 대해서는 각 요청에 맞는 서비스로 보내주는 역할이라고 생각한다. 그렇게 보낸 요청에 대해 서비스가 결과를 내주면 그 결과를 다시 client에게 보내주는 역할을 하는 것이라고 이해했다. 그러면서 자연스럽게 서비스 layer의 역할에 대해서도 이해하게 되었는데, 결국 다양한 종류의 요청에 대해 어떤 식으로(어떤 로직을 이용하여) 답을 줄지는 서비스 layer에서 결정하고 구현하는 것이다. 즉, 비즈니스 로직은 모두 서비스 layer에서 구현되어야 하는 것이다.

개인적으로 구조화된 코드를 작성하는 것을 좋아하고, 또 그것이 좋은 코드라고 알고 있다. 좋은 코드의 기준은 여러가지가 있지만 여기서 좋은 코드라함은 각 코드의 기능이 독립적으로 분리되어 있어 수정 및 유지 보수가 용이한 코드를 말한 것이다. 그래서 지난 주에 개발을 진행할 때도 구조화된 코드를 작성하기 위해(각 layer의 역할 분리가 확실하고 독립적인) 많은 노력을 기울였는데 잘 된 것인지는 잘 모르겠다. 앞으로 유지 보수 및 개선을 위해 코드를 관리하다 보면 알게 될 것 같다.

Leave a comment