Microservice 프로젝트 로그
저는 보통 하나의 웹 애플리케이션을 구축할 때, 아래와 같은 순서도를 따라 기획을 시작합니다
- 어떤 앱을 구축?
- 커뮤니티는 이미 많이 존재하지만, 정말 바르셀로나만을 위한 커뮤니티가 있었으면 좋겠다는 간단한 아이디어에서 출발한 프로젝트입니다.
- 커뮤니티에 존재해야할 기본적인 기능은 포함시키고, 추가적으로 레퍼런스 사이트들의 장점들을 다 합치는 실험적인 프로젝트인 측면도 존재합니다.
- 필요한 서비스/기능
- Auth → 기본적으로 자체 로그인/회원가입 기능을 구현하고, 추가적으로 소셜 로그인까지 구현하는 서비스입니다.
- Post, Comment → 트위터에서 흔히 피드라 불리는 것입니다, 기본적으로 게시글, 댓글 형식은 트위터를 많이 참고하였습니다.
- Recommend → 로그인 후 처음 커뮤니티 화면에 접속 시 보이는 게시글을 표시하는 서비스, 기본적인 아이디어는 여러 한국 커뮤니티에 추천 또는 댓글이 많은 베스트 글을 표시하는 것을 참고하였습니다.
- Notification → 자신의 글 또는 댓글에 어떠한 반응이 발생하면 이를 알려주는 서비스입니다.
- Filter → 자신이 설정한 필터에 의해 게시글들을 필터링해주는 서비스입니다
- Profile → 자신의 정보를 업데이트하고, 여러 설정을 할 수 있는 서비스입니다.
- Chat? Message? (미정) → 사용자가 다른 사용자와 소통할 수 있는 서비스입니다
- Batting, Order, Payment…(미정): 승부예측을 통해 간단한 포인트 제도를 운영 / 포인트로 무언가 구매할 수 있는 시스템
- 사용할 기술
- 이 프로젝트를 구축하는데 모놀릭서비스가 아닌 마이크로서비스를 선택한 이유는 크게 3가지 입니다.
- 장애 격리
- 마이크로서비스를 선택할 때 가장 먼저 얻을 수 있는 이점입니다. 하나의 서비스에서 장애가 발생해도 다른 서비스에는 영향을 최소화시켜 사용자에게 신뢰성을 줄 수 있습니다.
- 확장성
- 어떠한 이유로 트래픽이 증가하여 시스템 규모를 확장해야 한다는 상황을 가정했을 때 모놀릭서비스에서는 전체 애플리케이션을 복제해야 합니다. 이는 특정 서버스에서 집중적으로 많은 트래픽을 받을 때는 비효율적입니다.
- 반면 마이크로서비스에서는 모든 서비스가 독립적이므로 이러한 확장성에 유연하게 대처할 수 있습니다. 예를 들어 이 프로젝트에서 가장 트래픽이 많을 것으로 예상되는 Post, Comment 서비스만을 독립적으로 확장시킬 수 있습니다
- 기술 독립성
- 하나의 기술로 모든 서비스를 구현하는 것이 아닌, 각 서비스에 맞는 기술을 사용할 수 있는 장점이 있습니다.
- 예를들어 Post, Comment, Filter에는 대용량 데이터를 유연하게 저장하고 검색할 수 있는 mongoDB를 선택할 수 있고, Recommend, Notification에는 사용자 활동에 따라 빠른 반응 필요하므로 Redis를 선택할 수 있습니다.
- 장애 격리
- Auth, Profile → PostgreSQL, Prisma
- PostgreSQL은 확장 가능한 관계형 데이터베이스로, 트랜잭션, ACID 규정 준수 등의 기능을 제공합니다. 이러한 특성은 회원 관리와 같은 기능에서 중요한 역할을 합니다. 또한, Prisma는 Node.js와 TypeScript에서 PostgreSQL을 사용할 때 개발자 경험을 크게 향상해 주는 ORM 도구로, 개발 속도를 높이고 코드의 신뢰성을 향상합니다.
- Post, Comment → MongoDB, Mongoose
- MongoDB는 JSON-like 문서를 기반으로 하는 비관계형 데이터베이스로, 데이터를 유연하게 저장하고 검색할 수 있습니다. 이는 게시물과 댓글 같은 동적인 데이터를 처리하는 데 이상적입니다. 또한, Mongoose는 MongoDB를 위한 객체 모델링 도구로서, 데이터 유효성 검사, 쿼리 구축, 비즈니스 로직 훅 등을 쉽게 구현할 수 있게 도와줍니다.
- Recommend, Notification, Filter → Redis
- Redis는 인 메모리 데이터 구조 저장소로, 데이터베이스, 캐시, 중개인 역할을 모두 수행할 수 있습니다. 빠른 읽기 및 쓰기 속도로 인해, 사용자 활동에 대한 빠른 반응이 필요한 서비스에 적합합니다. 따라서 추천 및 알림 서비스를 효율적으로 처리할 수 있습니다.
- 또한 Filter의 경우 주로 가장 트래픽이 몰릴것으로 예상되는 Post 서비스를 필터링 해야 하므로 Reids를 사용하여 간단한 식별자로 데이터를 트랜잭션하고, queue와 query를 활용하여 빠르게 필터링할 수 있습니다
- Client → Next.js, Redux Toolkit & RTK-Query, Styled-components
- Next.js
- Next.js는 서버 사이드 렌더링(SSR)을 지원하므로 클라이언트에서 페이지를 렌더링 하는 대신 서버에서 페이지를 미리 렌더링 하여 제공함으로써, 웹사이트의 성능을 향상하고 검색 엔진 최적화(SEO)에 유리합니다.
- Redux Toolkit & RTK-Query
- Redux Toolkit은 웹 애플리케이션의 상태 관리를 돕는 라이브러리입니다. Redux Toolkit을 사용하여 상태 관리 코드를 더 짧고 가독성이 좋게 작성할 수 있습니다. 또한 RTK-Query는 Redux Toolkit의 일부로, API 쿼리를 쉽게 구성하고 캐싱, 동기화, 폴링 등의 기능을 제공합니다.
- Styled-components
- Styled-components는 CSS-in-JS 라이브러리 중 하나로, 컴포넌트 단위로 스타일을 관리할 수 있게 해 줍니다. 이를 통해 컴포넌트의 재사용성을 높이고, 렌더링 시 스타일이 적용되는 과정을 간소화할 수 있습니다
- Next.js
- 이 프로젝트를 구축하는데 모놀릭서비스가 아닌 마이크로서비스를 선택한 이유는 크게 3가지 입니다.
- 각 서비스에 대한 솔루션
- 이것은 다음 글에서 각 서비스에 모델, 라우터, 디자인 시스템 등을 살펴보려 합니다.
'OLD > MicroService_Project' 카테고리의 다른 글
[Project] 05_Microservice 프로젝트 서비스간 커뮤니케이션-Event-Bus (NATS-streaming-server) (0) | 2023.07.10 |
---|---|
[Project] 04_Microservice 프로젝트 세팅하기-Skaffold, Ingress (0) | 2023.07.10 |
[Project] 03_Microservice 프로젝트 세팅하기-Docker, Kubernetes (0) | 2023.07.08 |
[Project] 02_Microservice 프로젝트 시작하기-기획02 (0) | 2023.07.07 |