Microservice 프로젝트 로그
최종적으로 사용하게 될 기술은 아래와 같습니다
- 프론트엔드 NextJs, Redux, RTK-query, Styled-componets, Typescript
- 백엔드 Node.js(MicroService), NATS-streaming-server, postgreSQL, Prisma, mongoDB, mongoose, Redis, Typescript
Microservice를 구축하기 위한 기본 아이디어는 다음과 같습니다
- 모든 서비스를 Docker 컨테이너로 만듭니다
- Kubernetes를 사용하여 docker로 구축한 컨테이너들을 배포 및 관리합니다
이러한 방식은 아래와 같은 문제를 해결해줍니다
- 이슈01: 환경에 대한 큰 가정
- 현재 앱을 실행하려면 개발 환경이 예상한 환경과 정확히 일치해야 합니다. 예를 들어, 운영 체제, 라이브러리 버전, 환경 변수 등이 모두 정확히 설정되어 있어야 합니다. 그렇지 않으면, 앱이 제대로 작동하지 않거나 원치 않는 방식으로 작동할 수 있습니다.
- 이슈02: 앱 시작 방법에 대한 정확한 지식 필요
- 앱을 시작하려면 'npm start'와 같이 앱을 어떻게 시작하고 실행하는지에 대한 정확한 지식이 필요합니다. 이는 앱을 배포하거나 다른 개발자에게 코드를 전달할 때 문제가 될 수 있습니다. 다른 개발자가 앱을 어떻게 실행해야 하는지 모르면 시간과 노력을 낭비하게 됩니다.
- 이슈03: 서비스 간 복잡한 상호 작용 관리
- 마이크로서비스는 서로 다른 서비스들이 복잡하게 상호작용하는 구조를 가지고 있습니다. 서비스 간의 통신, 서비스 발견, 로드 밸런싱 등을 수동으로 관리하려면 큰 노력이 필요합니다.
- 이슈04: 확장성과 고가용성
- 서비스의 트래픽이 변화하면 이에 따라 자동으로 스케일링하거나, 일부 서비스가 실패했을 때 전체 시스템에 영향을 미치지 않도록 관리해야 합니다. 이는 서비스의 확장성과 고가용성을 보장하는데 필요한 중요한 요소입니다.
- 이슈05: 배포 및 롤백
- 서비스를 업데이트하거나 문제가 발생했을 때 롤백하는 것은 복잡하고 시간이 많이 소요될 수 있습니다. 이는 서비스의 안정적인 운영에 큰 장애요소가 될 수 있습니다.
해결 01, 02: Docker를 통한 문제 해결
- Docker는 이러한 문제를 해결하는 데 매우 효과적인 도구입니다. Docker 컨테이너는 프로그램이 필요로 하는 모든 것(예: 코드, 런타임, 라이브러리, 환경 변수 등)을 한데 묶어줍니다. 그리고 컨테이너가 어떻게 시작되고 실행되어야 하는지에 대한 정보도 함께 제공합니다. 이렇게 하면, 개발 환경에 대한 가정을 줄이고, 앱을 시작하는 방법에 대한 지식이 없어도 앱을 쉽게 실행할 수 있습니다.
해결 03, 04, 05: 쿠버네티스를 통한 문제 해결
- 서비스 간의 네트워킹, 서비스 발견, 로드 밸런싱 등을 자동으로 처리하여 서비스 간의 복잡한 상호 작용을 관리하며, 자동 스케일링 기능을 통해 각 서비스가 독립적으로 확장 가능하게 합니다.
- 여러 인스턴스를 관리하여 단일 실패 지점이 없도록 하여 서비스의 고가용성을 보장합니다.
- 롤링 업데이트를 통해 서비스를 무중단으로 배포하고, 문제가 발생하면 이전 버전으로 롤백하는 기능을 제공합니다.
⇒ Skaffold 사용
최종적으로 아래와 같은 구조로 이루어지게 됩니다
'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] 02_Microservice 프로젝트 시작하기-기획02 (0) | 2023.07.07 |
[Project] 01_Microservice 프로젝트 시작하기-기획01 (0) | 2023.07.07 |