본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.




패스트캠퍼스의 '9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online' 강의 수강 3일차!
오늘은 커뮤니티 피트 서비스의 유저, 게시글 및 댓글 기능의 초안을 설계하는 실습을 진행하였다.
강의 자료로 주어진 커뮤니티 피드의 유즈 케이스 문서를 보며 기능을 어떻게 구현해야 할지
혼자서 개발할 때는 db 작업은 repository, 요청은 controller와 같이 외운 것처럼 기능을 쪼개어 구현했는데, 이번 강의를 통해 서비스의 flow를 바탕으로 개발의 flow를 적어본 후, 각 단계를 어느 레이어에서 처리하는 것이 좋을지 선택하는 방법을 알게 되었다.
이 단계는 얼마만큼의 책임을 가져야 할지, 이 책임을 쪼개어서 다른 레이어로 위임시킬 수 있는지 등의 고민을 하게 되고, 이는 더 나은 방안을 찾을 수 있게 해주는 것 같다.
지금까지는 개발할 때 (시간에 쫓김으로 인해...) 최대한 빠르게 기능을 개발하는 것이 가장 큰 목표였기 때문에 효율적이고 깔끔한 구조로 도메인을 구축하지 못하고, 이곳저곳에서 중복되는 필드들을 가진 DTO만 계속해서 생성하여 사용했었다.
이번 강의를 들으면서 그동안의 작업 방식이 얼마나 비효율적이고 재사용성이 떨어지는 방식이었던 건지 깨닫게 되었다...ㅎㅎ
기능 전체에 초점을 맞추고 개발했던 이전과 달리, 강사님께서 가장 중요하게 말씀하신 행동 기반의 단위로 쪼개는 것에 초점을 맞춰 개발을 해보았다.
확실히 위 방법대로 기능을 구현하니 어느 부분에서 리팩토링을 하면 좋을지가 조금씩 눈에 들어오는 것 같다. 예를 들어 '좋아요/좋아요 취소' 기능은 게시글과 댓글에서 모두 사용되는 기능이니 이것을 두 도메인에서 중복되는 코드로 사용하는 것보다 해당 역할을 수행하는 객체를 만들어 컴포지션으로 사용하면 중복된 코드 제거는 물론, 기능을 수정하게 되는 상황이 왔을 때 관련된 코드를 모두 수정할 필요 없이 한 곳에서 수정하면 모든 도메인에 반영이 되기 때문에 유지보수성도 높아지는 장점이 있다.
좋은 코드를 작성하는 법을 알아가고 있는 것 같아 기쁘다.