지난주부터 개인프로젝트에 대한 준비를 해왔다. 기획을 하면서는 어떤 비즈니스 문제를 해결할까 하는 고민과 혼자서 설계하고 구현하는 과정에서 어느정도가 적절할까 하는 고민 사이에서 우선은 기본기를 갖추자고 다짐했다.
그렇게 결정된 프로젝트는 흔한 쇼핑몰이 되었다. 그래도 나름의 가치를 담아 책과 예술을 파는 웹 서비스를 구현하게 되었다. 이름은 쇼핑몰이지만 카페와 같은 분위기에서 사람들이 책과 예술에 대해 도란도란 이야기할 수 있길 바라며 '도란'이라고 지었다. 이름이 정해지면서 바로 깃헙 리포지토리를 새로 만들었다.
사실 쇼핑몰을 하게 되면 결제 시스템은 어떻게 해야할지 몰랐었는데, 이 부분은 포트원이라는 곳을 통해 테스트용으로 결제 시스템과 연동해볼 수 있다는 것을 알게 되었다. 이전 이름은 '아임포트'였는데, 검색하면 사용방법에 대해 잘 나와있는 것 같다.
그리고 프로젝트를 처음 구상할 때에는 단순 모놀리식 시스템이었는데, 기획하고 설계하면서 여러 서비스가 필요함을 느꼈고, 그러면서도 하나의 프로젝트에서 모듈로 분리할 수 있는 '모듈러 모놀리식(매크로서비스)'을 고려하게 되었다. 그러나 모듈러 모놀리식 아키텍처는 MSA로의 확장 가능성에서는 닫혀 있었기에, 확장성을 고려하여 서비스들을 분리된 프로젝트로 생성할 필요를 느끼면서 MSA와 근접한 '미니서비스' 아키텍처 시스템으로 정하게 되었다. 팀 프로젝트가 아니기에 자세한 아키텍처 설계는 생략했지만, 쿠버네티스 클러스터에 올릴 목적까지는 아직 없기 때문에 개발로 비교적 간단하게 구현할 수 있는 Spring Cloud를 활용하고자 한다. 물론 개발 환경과 운영 환경의 분리와 효율을 위해 CI/CD도 구축할 예정이다. 그만큼 새롭게 알아야하는 것도 많고 또 알고 있는 부분에 대해서도 많은 재점검을 해야하는 상황이다.
ERD 설계는 빠르게 끝날 것으로 예상했지만, 생각보다 쉽지 않았다. 구현하면서 이 설계가 많이 변경될 여지도 있다. 대략적으로는 아래 그림과 같은 형태로 이루어질 예정이다.

지난 6일에 구현을 시작해서 현재 구현 3일차 진행중이다. 여러 서비스들 중 회원 서비스를 개발하고 있으며, 개발해야 할 서비스로는 인증/인가 서비스, 주문 서비스, 상품 서비스 등이 있고 여기에 어드민 서비스와 이벤트 서비스가 추가될 수도 있다. 개발하면서 애매하게 막히는 부분들이 꽤 많아 인프런 강의자료와 이전의 프로젝트를 많이 참고하고 있다.
재정립이 필요한 부분들에 대해 간략히 나열하면 다음과 같다.
- QueryDSL 설정 방법
@NoArgsConstructor(access = AccessLevel.PROTECTED)@SpringBootTest- 리포지토리와 엔티티 매니저의 관계
- 즉시로딩을 해야하는 경우
- 다대일/일대다 매핑
- VO, DTO, DAO, Entity
이들에 대해서는 별도로 정리해보고자 한다.