-
[토이프로젝트] 스프링 클라우드 기반 MSA 앨범 판매 사이트Project/토이프로젝트 2023. 12. 10. 17:25
0. Docker Yaml 파일 레포지토리
https://github.com/JEONSEUNGREE/msa-docker-compose
1. 전체 소스 코드 레포지토리
spring cloud config 프로젝트를 제외한 나머지는 한 레포지토리에 생성
전체 소스
https://github.com/JEONSEUNGREE/msa-project
config-server (spring cloud config)
https://github.com/JEONSEUNGREE/config-server_1
spring-cloud-gateway
https://github.com/JEONSEUNGREE/msa-project/tree/main/api-gateway
spring-cloud-netflix-eureka
https://github.com/JEONSEUNGREE/msa-project/tree/main/eureka-server
order-service
https://github.com/JEONSEUNGREE/msa-project/tree/main/order-service
product-service
https://github.com/JEONSEUNGREE/msa-project/tree/main/product-service
user-service
https://github.com/JEONSEUNGREE/msa-project/tree/main/user-service-msa
2. docker-compose 파일 작성 시 이슈
docker-compose는 지정한 서비스 컨테이너들이 별다른 설정이 없다면 비동기적으로 한번에 실행된다.
docker-compose로 프로젝트 띄울때 발생한 문제점
user-service, product-service, order-service, eureka-service 들이 config-service를 의존하고 있다.
config-service는 스프링 클라우드 컨피그 프로젝트로 모든 스프링부트 서비스의 공통 properties를 설정하고 있다.
config-service는 깃허브에 application-properties 정보를 로드하고 다른 서버는 이 config 서버를 참고하여 초기 구성이 설정된다.
따라서 제일 먼저 config-service가 떠야하고 완전히 HTTP STATUS가 OK 되어야한다. ( 쿠버네티스 liveness probe와 같은 상태 확인이 필요 했다 )
급하게 서버가 마무리 하고 싶은 마음에 healthcheck문을 제대로 걸지 않았고 5초뒤에 OK가 뜨도록만 설정 했다.
curl로 서버 uri를 정확히 호출해서 ok를 받는 작업이 필요하다.
만일 처음 docker-compose시 config-service가 5초 안에 OK 되지 않으면 다른 서버는 뜨지 않는다.
단순히 depends_on에 특정 서비스가 실행된 후에 실행되도록 설정한다면 무조건 실패한다.
depends_on은 서비스가 완전히 실행가능한지 여부를 확인하지않고 서비스 run 순서만 결정한다.
// 예시 eureka-service: ports: - "8761:8761" image: acoursove2/eureka-service:1.0 container_name: eureka-service environment: spring.rabbitmq.host: rabbitmq spring.rabbitmq.port: 5672 spring.cloud.config.uri: http://config-service:10002 healthcheck: // test에 curl config-service로 요청해 ok 상태 확인 필요 단순히 sleep 5초로 걸어서 5초 뒤에 ok test: "sleep 5 || exit 0" interval: 5s timeout: 10s retries: 3 start_period: 5s // config-service 실행 후 바로 실행 depends_on: config-service: condition: service_healthy networks: ecomm:
3. 프로젝트 실행방법
docker desktop은 실행 불가 컨테이너가 VM환경으로 실행되면 네트워크가 설정이 안맞아서 정상적인 프로젝트를 볼 수 없다.
프로젝트내에서 서로 호출시 도커 네트워크에 생성한 브릿지 네트워크로 호출하기 때문에 -> 172.18.0.1
우분투 환경에 CLI로 도커 구성시 정상 구동 확인
1. 도커 설치 && 도커 컴포즈 설치
( 맥에서 docker desktop 설치시 VM에서 돌기 때문에 정상 확인 불가 -> 172.18.0.1이 아닌 로컬호스트로 접근 해야 된다 )
2. 도커 네트워크 생성
새로운 브릿지 네트워크로 프로젝트간 맵핑 -> 로컬 포트 충돌 방지
docker network create --gateway 172.18.0.1 --subnet 172.18.0.0/16 ecommerce-network3. 프로젝트 클론 && all 디렉토리로 이동 && 도커 컴포즈 실행
git clone https://github.com/JEONSEUNGREE/msa-docker-compose.git
cd msa-docker-compose/all
docker compose up
4. 전체 컨테이너 프로세스 확인
docker ps -a
죽은 컨테이너 있으면 다시 docker start 해주기 ( health check PC 사양에 따라서 느리게 뜰 수도 있기 때문 healthcheck가 시간초로 설정되었기에 )
5. 도커 네트워크 확인 해보기
sudo docker network inspect ecommerce-network
네트워크 검사 -> 브릿지명, IP, IP내에 연결된 서비스들 확인
16개 서버를 확인하면 정상 동작 확인 가능하다
sudo docker network inspect ecommerce-network | grep IPv4 | wc -l
16개 서버 확인 (개별 서비스 DB 포함)
6. 프론트 서버 접속
프론트 서비스 접속 : http://localhost:1221
우측 하단에 + 버튼을 통해서 연동된 서비스 확인 가능
4. 기능
4.0 기본 MSA 서비스 구성
유레카 서버
http://localhost:8761/
1. 유레카 서버로 서비스 구성
2. 스프링 클라우드 게이트 웨이로 로드밸런스 및 L7레벨에서 MSA 서비스 적용
4.1 서버에서 프로퍼티 변경시 알림
1. 깃허브에 스프링 클라우드 컨피그 레포 정보 수정 커밋 && 푸쉬
2. POST로 http://172.18.0.1:4001/user-service/actuator/busrefresh URI 호출
3. 스프링 클라우드 버스 와 RabbitMq를 통해서 각 서버에 수정된 properties 반영
spring cloud gateway에서 서비스 동적으로 추가 설정
4.2 Kafa를 통한 서비스 통신
단 상품에 대한 데이터 정합성은 프로젝트에서 고려하지 않음
회원, 로그인, 상품 구매, 목록 확인, 상품 조회 기능
회원가입
로그인
앨범 구매
앨범 구매 목록 확인
DB 확인 1003, 1004, 1005 으로 각 유저, 상품, 주문 DB 포워딩 확인
예시)
유저 - 상품 - 주문간의 이벤트 형성 (상호간의 pub, sub), circuitbreak로 resilience4j사용
@FeignClient를 통해 각 서비스 간에 통신 코드 예시 링크
DB 툴 사용하여 확인 (Data Grip 사용)
id : root
pwd: admin
4.3 서비스에 요청 스레드 로그
Zipkin으로 요청 온 스레드로 api 상태 확인 가능
Zipkin URI : http://172.18.0.1:3011/zipkin/
4.4 prometheus 스프링부트 서버 metrics로 수집
prometheus.yml로 수집시간, 수집 서버 설정 가능
Prometheus URI : http://172.18.0.1:3018
4.5 grafana로 prometheus에서 수집한 정보를 모니터링
대쉬보드
http://172.18.0.1:3017/d/4XuMd2Iiz/kubernetes-cluster-prometheus?orgId=1
id: admin
pwd: admin4.6 SPRING REST DOCS
유저
http://172.18.0.1:4001/user-service/docs/index.html
주문
http://172.18.0.1:4001/order-service/docs/index.html
상품http://172.18.0.1:4001/product-service/docs/index.html
'Project > 토이프로젝트' 카테고리의 다른 글
[토이프로젝트] MyRoom (R3F + Blender + chatGPT) (0) 2024.01.11 [토이프로젝트] 스프링 클라우드 기반 MSA 앨범 판매 사이트 (0) 2023.12.10 [토이프로젝트] 객실 예약 사이트 - 3rd ~ 4th 스프린트 (0) 2023.12.09 [토이프로젝트] 객실 예약 사이트 - 2ed 스프린트 (0) 2023.12.08