시작할 때만 해도 혼자 서버 개발을 할 수 있는 양의 프로젝트처럼 보였다. 소프트웨어 관련 자원을 등록하고 관리하며, 사내 자원 관리 진행 사항에 대한 인터뷰도 진행할 수 있는 웹 서비스였다. 추가로 데이터베이스 설계도 정해져서 전달받으면 된다고 하였다. 정말 간단한 프로젝트라고 생각하였고 혼자 서버 전체를 맡아 볼 수 있는 기회라 생각하여 흔쾌히 프로젝트를 진행하겠다고 자원하였다.
12월 중순부터 12월 말까지가 자세한 기획 및 기능이 확정되고, 1월 한달 동안 개발을 진행하고 2월에 테스트를 진행하면 된다는 이야기를 철썩같이 믿었다. 한번도 하드한 마감 기한이 있는 프로젝트를 진행해 본 적이 없었고, 그렇기에 당연히 개발 기간을 보호해줄 것이라 여겼다.
그러나 1월 중순까지 기획이 확정되지 않고 계속 흔들렸고, 어느 정도 기획이 확정됐을 때는 순수 개발에 집중할 수 있는 기한이 2주밖에 남지 않은 상황이었다. 심지어 데이터베이스 구조 설계마저 기획과 대조하며 추가 수정하느라 1월 중순에나 거의 완료되었다. 그전에 기획이나 데이터베이스와 상관없이 개발 환경및 배포 프로세스, 스웨거, 로그인 등은 어느 정도 미리 해놓았지만 메인 API들은 정말 2주안에 전부 개발해야되는 상황이 된 것이다.
1주간 밤을 새면서 약 70개가 넘는 API(물론 자원들에 대한 CRUD이기에 쿼리가 테이블별 컬럼만 다르고 대부분 중복이다)를 작성하려고 노력하였다. 하지만 자원 현황 통계 API 및 인터뷰 현황 통계 API 와 자원 CRUD API 작성을 1주안에 다 못마치면서, 중간 점검 회의 때 추가 인력 보충을 요청하게 되었다.
추가 인력 보충이라 해도 무슨 프로젝트인지를 설명하고 맡길 부분에 대하여 인수인계를 하고 API 개발을 요청해야 한다. 머리 속에 있던 API 구현들을 최대한 큰 차이 없게 빠르게 구현을 해줘야 하는데, 어떻게 API를 분배하고 인수인계를 해야 1주일 안에 큰 문제 없이 테스트를 진행할 수 있을 정도의 서버를 개발 할 수 있을까 고민하게 되었다.
인수인계할 서비스에 대해서는 큰 고민이 없었다. 어느 정도 독립적인 서비스들이 있었기 때문이다. 문제는 구현된 API에 대한 문서는 있었지만, 구현할 API에 대한 Request, Response가 제대로 작성된 문서도 없어서 해당 서비스를 "1주일안에 구현해주세요" 한다고 해서 1주일안에 구현을 해줄 수 있을 것같지가 않았다.
이 때 본부장님께서 조언을 해주셨다.
지금 하고 있는 API 구현을 멈추고 인수인계할 API들에 대하여 Interface와 Input, Output 클래스, Controller를 작성해라
어떻게 보면 당연하다면 당연했을지도 모를 해결 방안이었다. 서비스 Interface와 Input, Output 그리고 Controller까지 작성해서 넘기고 내부 서비스 로직에 대하여 설명만하면 인수인계가 원활하게 될 것이 분명하였다.
프로젝트 디렉토리 구조부터 어디에 무슨 코드가 있다고 간단히 설명하고 이 위치에 해당 Interface 상속받아서 메소드 구현하면 된다 인수인계하니 너무 편했다.
물론 작은 프로젝트였기에 파악하는데 시간이 적었을 수 있다. 그래도 follow up이 반나절도 안됐으며, 1주일 안에 구현은 물론 놓치고 있던 부분에 대한 의논까지 할 수 있었다.
결국 다행히 구현이 1월안에 끝났으며 2월에 테스트 및 배포를 진행할 수 있었다.
협업에서의 Interface를 그렇게 소중하게 생각하지 않았다. Interface로 의존 관계를 약하게 하여 어떠한 수정에 대한 나비 효과를 막을 수 있다 정도로 생각하고 있었다. 그러나 이번 기회에 팀원과의 협력에 있어서 설계에 대한 의도를 전달할 때, Interface를 보여주는 것만으로 아주 원활하고 효과적으로 의도를 전달할 수 있다는 것을 알았다.