
Karrot Market 소개1️⃣ 프로젝트 진행방식2️⃣ Infra3️⃣ ERD4️⃣ 어려웠던 점상품 수정시 정보 수정은 어렵지 않은데 여러 이미지들은 어떻게 처리해주는게 좋을까?상품 컨트롤러에 너무 많은 서비스가 의존하고 있는 것 같은데 이게 최선일까?5️⃣ 프로젝트 결과6️⃣ 피드백 및 새롭게 알게된 점상품 컨트롤러에 너무 많은 서비스가 의존하고 있는 것 같은데 이게 최선일까?상품 수정시 정보 수정은 어렵지 않은데 여러 이미지들은 어떻게 처리해주는게 좋을까?자바독을 적당히 작성해야한다. 많은 주석보다 의미있는 메서드 이름으로 작성해보자.
Karrot Market 소개
- 넘블에서 주최하는 약 2주간 당근마켓 서비스 구축하기 첼린지에 참여했습니다. 주어진 가이드 라인에 맞춰 확장성을 고려한 DB를 설계할 수 있도록 고민해 보면서 진행했습니다.
- 프로젝트를 진행하면서 댓글, 관심 상품, 상품의 상태(거래완료, 예약, 판매중) 등을 기본적인 필수기능 위주로 개발을 진행했습니다.
1️⃣ 프로젝트 진행방식
- 이벤트 스토밍의 영상을 흥미롭게 본 기억이 있어서 프로젝트를 진행하면서 한번 따라해보며 프로젝트를 진행하였습니다.

2️⃣ Infra

3️⃣ ERD

4️⃣ 어려웠던 점
상품 수정시 정보 수정은 어렵지 않은데 여러 이미지들은 어떻게 처리해주는게 좋을까?
이 프로젝트에서 어렵게 다가왔던 부분은 상품수정에 관한 부분 이였습니다. 단순히 테이블의 관계가 적은 예제만 다루다 보니 수정과 같은 부분은 어렵지 않을거라 생각했지만 상품의 이미지에서 고민을 하게 되었습니다.
상품 수정 시 이미지들이 수정 될 경우에 DB에는 이미지가 저장되어 있는 S3의 경로가 들어가 있고 실제 이미지는 S3버킷에 있었기 때문에 두 부분 모두 처리를 해줘야 했기 때문입니다.
기존에 있었던 이미지들과 새롭게 요청된 이미지들을 비교하여 새로운 이미지와 기존에 있었던 이미지 들 중 삭제한 이미지를 구분하는 로직을 작성하여 처리하도록 하는 것이 좋을 지 단순하게 기존 이미지들을 다 지우고 다시 새로 insert를 해줘야 하는지 고민이 많이 되었습니다.
두 방법 중 기존 이미지들을 다 지우고 새로 이미지들을 세팅해주는 로직이 더 보았을 때 현실적이고 가독성이 좋아보여 두번째 방법으로 처리하였습니다.
상품 컨트롤러에 너무 많은 서비스가 의존하고 있는 것 같은데 이게 최선일까?

프로젝트를 진행하면서 상품 컨트롤러에 생각했던 것 보다 많은 서비스가 의존하는 저의 코드를 보고 마음에 들지 않았습니다. 이런 경우에는 따로 위의 서비스 클래스를 의존하는 상품전용 서비스 클래스를 하나 더 따로 만들어줘서 관리하도록 해야할까? 결국 그거나 그거나 인 것 같지만 괜찮은 방법일까? 애초에 나의 설계가 잘못된걸까? 등 많은 생각이 들었습니다.
5️⃣ 프로젝트 결과
2주간 진행되는 프로젝트를 경험해 보면서 확실히 책과 강의를 보면서 예제를 따라하는 것 보다 작은 서비스라도 꾸준히 만들어보는게 생각할 수 있는 부분도 많고 어디가 부족한 지 알 수 있어서 좋았습니다.
- 이 넘블 프로젝트는 3년차 이상 백엔드 개발자분들 께서 코드를 검토하고 상위 10%안에 드는 개발자 분들에게 코드리뷰 or 10만원의 상금이 주어지는 프로젝트 였습니다.
- 저 또한 상위 10%안에 들어 코드리뷰를 받을 수 있는 좋은 기회를 얻을 수 있었습니다.


6️⃣ 피드백 및 새롭게 알게된 점
상품 컨트롤러에 너무 많은 서비스가 의존하고 있는 것 같은데 이게 최선일까?
실제 현업에 있는 프로젝트의 컨트롤러를 보면 더 많은 서비스클래스를 확인할 수 있다. 따라서 현재 컨트롤러에 있는 서비스는 많다고 할 수는 없다.
서비스를 줄이기 위해서 컨트롤러가 아닌 서비스 계층에서 필요한 리포지토리를 가져와서 처리하도록 만들면 줄어들지 않을까 라는 생각을 했었지만
저는 서비스 계층부터 처리하고 컨트롤러에서 DTO를 처리하도록 만들고 싶었다.
하지만 현재 소스코드를 보면 컨벤션에 맞지 않는 경우들이 몇개 있었다.
내가 컨트롤러에서 Entity를 사용하지 않겠다고 정했으면 모든 코드에 그렇게 적용하도록 해야한다.
상품 수정시 정보 수정은 어렵지 않은데 여러 이미지들은 어떻게 처리해주는게 좋을까?
- 각 이미지를 바로바로 지워 줄 이유가 딱히 없다.
- 따라서 이미지 테이블에 flag 컬럼을 추가하여 지워진 이미지는 false로 변경한 후 이러한 부분들을 배치를 통해서 처리하면 깔끔하게 처리할 수 있을 것 같다.
자바독을 적당히 작성해야한다. 많은 주석보다 의미있는 메서드 이름으로 작성해보자.

- 혼자 개발하는 것이 아니기 때문에 자바독 작성하는 습관을 들이려고 신경을 쓰면서 개발을 진행했었습니다.
- 하지만 역시 혼자 개발하는 것이 아니기 때문에 누군가 코드를 수정하면 주석 또한 수정을 해줘야 하는데 그렇지 못한 경우가 발생한다면 의미없는 주석이 될 수 있다는 피드백을 받았습니다.
- 따라서 주석도 적절히 사용해 가면서 메서드 이름을 더욱 의미있게 짓는게 좋다는 피드백을 받았습니다.