깃허브 레포지토리 https://github.com/phdljr/Hotel
자바로 팀 프로젝트를 진행하는 시간을 갖게 되었고, 성공적으로 마무리를 지을 수 있었다. 이러한 경험을 토대로 KPT 회고를 작성하려 한다.
KPT 회고란 Keep, Problem, Try의 약자
로 회고 방법 중 하나라고 한다.
다른 프레임워크나 라이브러리에 의존하지 않고 오직 자바로만 프로젝트를 진행하게 되었다. 요구사항을 처음 봤을 땐 쉽게 느껴졌고 애들 장난처럼 느껴지는 프로젝트였지만, 생각보다 많은 작업량이었고 고민할 부분도 많았다. 또한 팀원들과 협업하는 것이다 보니 혼자서 작업하는 것과는 느낌이 많이 달랐다.
주어진 요구사항대로 설계를 진행해 보며 프로젝트 구조는 어떻게 설계할 것인지, UI는 어떻게 할 것인지, 깃허브는 어떻게 사용할 것인지 등 처음부터 끝까지 팀원들과 항상 함께 진행하였으며 많은 고생을 하였다. 노션
과 피그마
를 통해 기초 설계와 UI 설계를 진행해 보았고, 구조는 스프링을 사용했을 때처럼 MVC 패턴
으로 진행해 보기로 하였다.
여태까지 계속 스프링 프레임워크에 의존하다 보니, 프레임워크가 없는 상태에서 구현하는 것이 조금 낯설게 느꼈다. 그러한 도구 없이 MVC 패턴 구조로 설계를 진행하며 나아가 보니 스프링이 개발자에게 많은 도움을 준다는 것 또한 느꼈다.
구현을 다 했을 땐, 마치 스프링을 사용하는듯한 구조가 보였으며 유지 보수하기 좋은 형태가 된 것 같았다. 각각의 클래스는 하나의 역할만 책임
지는 형태였으며(SRP, Single Responsibility Principle)
데이터베이스같은 클래스는 싱글톤 패턴
을 적용하였다. 출력단은 웹 프로젝트에서 html을 사용하는듯한 느낌으로 클래스를 작성하였다. 단순히 데이터를 인자 값으로 전달받아 출력하는 역할이 끝이다. 출력시킬 데이터는 서비스단에서 가공시켜서 출력단으로 값을 반환시키는 역할이 전부였다.
데이터를 가져오고 이를 출력단으로 전달시키는 과정에서, 이 부분을 어떻게 해결해 나아가야 할지 고민이 많았다. 마치 스프링의 Dispatcher Servlet
을 구현하는 듯한 느낌이 들었다. 그렇게 우리는 HotelLounge
라는 클래스를 만들어, 마치 컨트롤러와 비슷한 역할을 갖도록 설계하여 개발을 진행하게 되었다.
결과는 만족스러웠다. 구조가 기능별로, 클래스 별로 나뉘다 보니 팀원들과 역할을 분배할 때도 유연했으며, 구현할 때 코드가 겹치는 부분도 많이 없어서 깃허브로 협업할 때 충돌 문제가 별로 없었다. 또한, 마무리 작업으로 리펙토링을 진행하였는데도 용이했다.
한 가지 아쉬웠던 점은, 테스트 코드
가 적용되지 않은 부분이다. 테스트 케이스를 미리 작성하여 개발하는 방식인 TDD
를 적용해 보았다면, 좀 더 좋은 경험이 되지 않았을까 싶다. 또한, Github Actions
처럼 CI/CD
를 적용해 보면 더 나은 협업 환경이 될 것 같았다. 다음 프로젝트 때는 무조건 이를 먼저 적용하고 개발을 진행하면 어떨까 싶다.
다음으로, 팀 프로젝트를 진행하며 느꼈던 점들을 KPT로 정리하려고 한다.
자바 프로그래밍은 스프링이 전부가 아니며, 이는 하나의 도구일 뿐이라는 사실이 프로젝트를 진행하며 크게 와닿았다. 즉, 설계의 중요성을 크게 느끼게 되었다.
여태 너무 스프링에 의존하다 보니 소프트웨어 설계의 본질을 잠깐 잊은 듯하였다.
또한, Github의 PR
을 통해 기능도 합쳐보고 코드 리뷰
도 받아보니 다양한 개발 시각을 얻게 된 듯 하다. 혼자서 생각하며 좋은 것이라 판단했던 것이, 팀원들과 공유하며 의견을 나눠보니 그리 좋지 않았던 것과 더 나은 의견이 있다는 사실 또한 느꼈다.
이번 프로젝트를 통해 중요한 사실을 되찾는 시간이 되었으며, 소프트웨어의 더 나은 구조와 개발 방법에는 어떤 것이 있는지 다시 알아보게 되는 시간을 가져보려 한다.
(Clean Architecture와 TDD 책을 읽어보려 한다.)