⌨️ 기존에 구현했던 서비스의 V2 버전에 대한 본격적인 고민하기
이커머스에 대한 이해가 부족한 상태에서 만든 애플리케이션이므로, 부족한 점이 많았다.
조금은 이커머스에 대한 이해를 가지고 다시 만들어보자.
1. 이커머스 서비스에 대해
1.1. 구현 한 프로젝트의 비즈니스 모델
첫째로 구현 한 서비스는 '무신사'같은 Vertical Market 형식이다.
불특정 다수가 상품을 올리는 Open Market 이 아닌 , 쉽게 말하면 관리자가 전 상품을 관리하여 올리는 형식이라고 보면 된다.
B2C의 방식이고 그렇기에 Admin의 구현이 있어야 했지만, 개발 공정 상 편의를 위해 배제를 했었다.
1.2. 이커머스 서비스에서의 MSA
MSA가 핫해서가 아니라, 이커머스는 알 수록 그냥 monolithic 보단 MSA가 적합하다는 생각이 든다.
-> 이 부분에서 나는 예전에 MVC 패턴과 MSA를 같은 선상에서 봤었다. 아주 멍청하고 어딘가에다가 이걸 당당히 말했다면 수치스러웠을 것이다..
소프트웨어 디자인 패턴과, 서버 아키텍처를 명확히 구분하자
이야기가 잠시 다른 길로 갔지만, 내가 생각하고 찾아본 장점은
- 서비스의 잦은 변경 : 개별 서비스 별로 배포 전략을 다르게 세울 수 있음
- 기능별 유연한 스케일링 : 전체 서버의 스케일업 없이 트래픽이 몰리는 서버만 수평적으로 확장 가능
- 신규 기능의 접목 편이 : 새로운 서비스를 도입할 때 기존 서비스에 접목하기 용이함
- 여러 가지의 언어 사용 가능 : 개발하는 서버마다 장점을 가진 언어로 구현 가능
반면에, 단점으로는 역시 관리의 어려움과 구현의 난도일 것 같다.
신입 개발자가 취직을 위한 포트폴리오 간에 적용하는 것이 쉽지는 않을 것 같다.
그럼에도, 최소한의 흉내는 내보려 한다. 고수준의 아키텍처 설계는 불가하지만 향후 확장의 가능성을 염두의 둔 서비스 개발을 위해 분리는 해야 할 것 같다. MSA라고 칭할 순 없겠지만, 가능하다면 각각의 도메인 별로 서버를 잘게 쪼개어보고는 싶다( 배포는 금전적 요인으로 불가할 듯 하지만..)
1.3. 이커머스 프로젝트의 서비스
위에서 아키텍처에 대해 고민했으니 이제 서비스에 대한 고민을 해 볼 차례다.
스스로는 이 부분이 아주 중요하다고 생각한다.
우선 구현되어 있는 서비스를 나열하자면 (구현 기술에 대한 상세는 차치하고)
- 회원가입/로그인/로그아웃
- 상품 조회(검색 필터링 등 전반)
- 상품 구매(장바구니 담기, 결제 등 전반)
- 리뷰 작성/ 문의 작성
막상 구현 기술에 대한 상세를 제 하고 나니 남는 게 크게 없다.
이미지 업로드니, OAuth2 니, 외부 API를 활용한 결제 구현 등 결국 그래서 빼면 뭐 했는데?
라고 묻는다면 정말 초라한 서비스 밖에 안 남은 것 같다.
아래는 추가로 더 생각해 본 서비스의 목록들이다.
- 가입/탈퇴
- 배송서비스
- 반품/교환서비스
- 이력서비스 (상품 등록이나 상품의 재고 관리 등)
- 분석서비스 (소비 패턴이나 매출 등 분석)
- 회원 관리 서비스
가볍게 생각해 본 것 만도 이 정도는 나온다.
이 중 'Admin'을 구현하면 더욱 고도화될 부분들이 있지만, 아니더라도 적용되었어야 할 서비스들이 많다.
1.4. 결론과 방향성
우선 만들어진 서비스를 다듬는 일부터 들어가야 할 것 같다.
- 도메인별로 굵직한 서비스의 분리가 가능한 지? 가능하다면 구현
- 기존에 구현해 놨던 서비스들의 성능 향상
- 추가 서비스들의 우선순위를 정해 구현 가능한 것들 위주로 추가
정도 될 것 같다. 사실 위의 두 항을 제외하고 기존 서비스의 새로운 기능만을 추가할 것을 맹목적으로 생각하여
Redis, Kafka에 대한 것만 쫓았었다. 대용량 트래픽 관리라던지..
프로젝트를 뜯어보고 공부할수록 기본 틀이 부실하단 생각에 마음을 다시 먹게 되었다.
기본으로 돌아가 이커머스 서비스에 대한 목적과 방향성에 부합하게 프로젝트를 설계하고, 조회 성능을 어느 정도는 개선해야지만, 추가적인 서비스의 구현이 아귀가 맞을 것 같다.
공부하면서 이렇게 까지 해야 해?라는 생각을 하지 말고, 상용 서비스처럼 만드는 걸 목표로 하자.
지금 한 고민들이 결국은 다 도움이 될 것이란 생각으로 꾸준히 한 발씩 내딛는 개발자가 되자