2주간 데브코스 팀원들과 당근마켓의 기능을 클론 코딩하는 프로젝트를 진행하였습니다. 짧은 기간이지만 협업을 하면서 느꼈던 점을 정리하였습니다.
1. 쉽지 않은 협업
시작전에는 개발 프로젝트를 몇번 경험 해보았기 때문에 협업하는 것이 어렵지 않을 것이라는 생각을 가지고 있었는데 프로젝트를 진행하면 할 수 록 학교 과제 정도로만 경험한 프로젝트들은 동일한 내용을 배운 사람끼리 하였기 때문에 암묵적으로 많은 것이 갖춰진 프로젝트였구나라는 것을 느끼게 되었습니다. 다른 경험을 쌓은 사람들이 만나서하는 협업을 처음 경험하다보니 프로젝트를 진행하면서 컨벤션과 규칙에 대해서 명확하게 결정하고 구체화하는 것을 잘하지 못하여 쉽지 않고 작업을 하였던 시간들을 다시 하게되는 경우도 발생하였습니다.
2. 설계에 대한 중요성
프로젝트를 진행하면서 많이 알고 있었지만 이전에는 학교 친구들과 프로젝트를 하여 느낄 수 없었던 공통 부분에 대한 설계 문제를 느낄 수 있었다. 간단하게만 각 Entity의 필수 요소들에 대해서만 결정한 것이 큰 실수가 되어버렸다. 우선적으로 Entity에만 집중을 하여 기능을 구현하다 보니 각자가 필요한 내용들이 추가되고 임시적으로 만들어 사용하였지만 그 부분을 담당하는 사람은 다른식으로 작성을 하여 conflict가 발생하는 경우가 많았습니다. 또한 API의 동작들에 맞는 DTO를 제공하기 위해서는 각각 분리가 필요하였는데 예상하지 못하여 전체적으로 코드를 수정해야하는 상황도 발생하게 되었습니다. 이러한 상황을 격으면서 공통된 부분의 설계와 구현에 대해서는 조금 힘들더라도 처음에 확실하게 투자하여 명확하게 해야하는 것에 필요성을 느끼게 되었습니다. 또한 기능 구현을 할 때 Entity의 중점으로 생각을 하기 보다는 API가 제공할 값, 필요한 값을 기능 중점으로 생각하여 설계하고 구현해야한다고 체감하게되었습니다.
3. 적용하기 전에 정확하게 공부하여 사용하자
주로 생성자 패턴을 사용하였던 사용법에 대해서만 알고 있던 builder 패턴을 프로젝트를 통해서 사용하게 되었습니다. 아래와 같이 작성을 하여 기능을 구현하고 사용하였습니다.
@Builder
public class User{
...
private List<Product> products = new ArrayList<>();
...
}
하지만 이렇게 작성을 하면 products의 값을 builder로 주입하지 않으면 null 값으로 defualt 값인 ArrayList가 들어가지지 않는 다는 것을 몰라 버그가 발생하였고 이 버그를 찾는데 오랜시간을 들이게 되었습니다. (products를 호출하는데 null값이 계속 반환되어 이유를 찾느라 코드의 놓친 부분이 있나 몇 번을 확인과 실험을 함....ㅠ)
-> 해결 법은 생성자 위에 @Builder를 작성하거나 class 위에 @Builder.Default를 하여 작성하면 되는 것을 알게 되었습니다.
@Builder
public class User{
...
@Builder.Default
private List<Product> products = new ArrayList<>();
}
OR
public class User{
...
@Builder
public User(...){
...
}
}
배우는 중이기 때문에 새로운 것을 알게된 것은 기쁜일이 었으나 @Builder에 대해서 잘 알았다면 발생하지 않았을 문제(팀원 다같이 이유를 찾기 위해 꽤 많은 시간을 소비하여서 아쉬웠습니다.)였기 때문에 확실하게 알지 못한다면 사용하기전 관련 내용에 대해서 찾아보고 적용하자라고 많이 느끼게 되었습니다.
2주라는 짧은 기간동안 프로젝트를 진행하면서 아쉬움도 많이 남지만 협업에 대해서 신경쓸점, 중요한 점에대해서 많이 배웠고 느꼈습니다. 또한 평소에 사용하던 당근마켓의 API에 대해서 깊게 생각을 할 수 있었던 좋은 경험이었습니다. 다음 프로젝트에서는 이번에 발생했던 문제점들과 실수가 발생하지 않도록 어떻게 해야할지 감을 잡을 수 있고 필요한 것들이 생각들었습니다. 학교에서만 프로젝트를 경험하였다면 쉽게 할 수 없는 경험이어서 매우 의미 있었습니다.