일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 백엔드
- s3
- spring
- 스터디
- MSA
- serverless
- aws
- 오블완
- mapping
- sqs
- Redis
- jpa
- Docker
- orm
- codebuild
- codedeploy
- CICD
- rds
- CodeCommit
- Spring Boot
- goorm
- ec2
- goorm x kakao
- bootcamp
- 개발자
- QueryDSL
- 자격증
- 티스토리챌린지
- backenddeveloper
- DynamoDB
- Today
- Total
gony-dev 님의 블로그
5. MSA 도커 파일 테스트 본문
지난 시간에는 서비스 코드를 리팩터링하여 가독성이 좋고, SOLID 원칙에 근거하도록 코드를 재구성해 보았다.
이번에는 개선된 코드를 도커를 통해 컨테이너 실행하고 잘 되는지 테스트해 보겠다.
사실 많은 시간이 걸렸다. 팀원들 모두 MSA 환경을 처음 접해보았기 때문에
서비스 간의 통신과 라우팅을 직접 접해보고 이해하는 시간이 필요했기 때문이다..!
순서는 각 모듈에 대한 도커 컴포즈 파일의 구성, 그리고 이를 실행했을 때의 결과를 차례대로 보이도록 하겠다!
Docker-compose.yml
version: '3.8'
networks:
msa-network:
driver: bridge
services:
rabbitmq:
image: rabbitmq:3-management
container_name: rabbitmq
ports:
- "5672:5672" # AMQP 기본 포트
- "15672:15672" # 관리 콘솔 포트
networks:
- msa-network
mongo:
image: mongo:latest
container_name: mongo
ports:
- "27017:27017"
volumes:
- ./mongodb/:/docker-entrypoint-initdb.d/
environment:
MONGODB_PASSWORD: ${MONGODB_PASSWORD}
networks:
- msa-network
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
config:
build:
context: ./config
container_name: config-service
ports:
- "8888:8888"
environment:
CONFIG_SERVICE_PASSWORD: ${CONFIG_SERVICE_PASSWORD}
networks:
- msa-network
account-service:
build:
context: ./account-service
container_name: account-service
ports:
- 6000:6000
environment:
CONFIG_SERVICE_PASSWORD: ${CONFIG_SERVICE_PASSWORD}
ACCOUNT_SERVICE_PASSWORD: ${ACCOUNT_SERVICE_PASSWORD}
SPRING_APPLICATION_NAME: account-service
MONGODB_URI: ${MONGODB_URI}
depends_on:
config:
condition: service_healthy
mongo:
condition: service_started
registry:
condition: service_started
auth-service:
# oauth2 client 역할이므로 auth-service가 먼저 실행되어야 함(jwks uri를 가져와야 함), 그렇지 않으면 예외 발생하고 서버 실행 안됨
# service_healthy로 하고 싶은데 auth-service가 health check가 안되서 일단 service_started로 함
condition: service_started
networks:
- msa-network
statistics-service:
build:
context: ./statistics-service
container_name: statistics-service
ports:
- 7000:7000
environment:
CONFIG_SERVICE_PASSWORD: ${CONFIG_SERVICE_PASSWORD}
SPRING_APPLICATION_NAME: statistics-service
#MONGODB_URI: ${MONGODB_URI}
MONGODB_PASSWORD: ${MONGODB_PASSWORD}
STATISTICS_SERVICE_PASSWORD: ${STATISTICS_SERVICE_PASSWORD}
depends_on:
- config
- statistics-mongodb
- registry
networks:
- msa-network
statistics-mongodb:
environment:
MONGODB_PASSWORD: ${MONGODB_PASSWORD}
image: sqshq/piggymetrics-mongodb
restart: always
logging:
options:
max-size: "10m"
max-file: "10"
networks:
- msa-network
registry:
build:
context: ./registry
container_name: registry
# healthcheck:
# test: [ "CMD", "curl", "-f", "http://localhost:8761/actuator/health" ]
# interval: 10s
# timeout: 5s
# retries: 3
# start_period: 10s
environment:
CONFIG_SERVICE_PASSWORD: ${CONFIG_SERVICE_PASSWORD}
SPRING_APPLICATION_NAME: registry
restart: always
depends_on:
config:
condition: service_healthy
ports:
- 8761:8761
logging:
options:
max-size: "10m"
max-file: "10"
networks:
- msa-network
gateway:
build:
context: ./gateway
container_name: gateway
environment:
CONFIG_SERVICE_PASSWORD: ${CONFIG_SERVICE_PASSWORD}
restart: always
depends_on:
config:
condition: service_healthy
ports:
- 8000:8000
logging:
options:
max-size: "10m"
max-file: "10"
networks:
- msa-network
auth-service:
build:
context: ./auth-service
container_name: auth-service
ports:
- 5000:5000
# healthcheck: # 왜 안될까..
# test: [ "CMD", "curl", "-f", "http://localhost:5000/.well-known/openid-configuration" ]
# interval: 10s
# timeout: 5s
# retries: 3
# start_period: 30s # 초기화 시간 10초 대기
environment:
CONFIG_SERVICE_PASSWORD: ${CONFIG_SERVICE_PASSWORD}
BROWSER_CLIENT_PASSWORD: ${BROWSER_CLIENT_PASSWORD}
NOTIFICATION_SERVICE_PASSWORD: ${NOTIFICATION_SERVICE_PASSWORD}
STATISTICS_SERVICE_PASSWORD: ${STATISTICS_SERVICE_PASSWORD}
ACCOUNT_SERVICE_PASSWORD: ${ACCOUNT_SERVICE_PASSWORD}
MONGODB_PASSWORD: ${MONGODB_PASSWORD}
SPRING_APPLICATION_NAME: auth-service
depends_on:
config:
condition: service_healthy
auth-mongodb:
condition: service_started
registry:
condition: service_started
networks:
- msa-network
auth-mongodb:
image: mongo:latest
container_name: auth-mongodb
environment:
MONGO_INITDB_DATABASE: authdb
MONGODB_PASSWORD: ${MONGODB_PASSWORD}
# volumes:
# - auth-mongodb:/data/db
ports:
- 25000:27017
networks:
- msa-network
#volumes:
# auth-mongodb:
Network
- 각 컨테이너들은 서로 연결될 필요가 있기에 msa-network라는 하나의 네트워크로 통신되게 설정하였다.
DB
- auth-service, account-service, statistics-service, notification-serivce는 각각의 db를 사용하기에 이에 대한 mongoDB를 생성해주었다.
Eureka Server
유레카 서버에 잘 등록이 되었는지 확인하기 위해 해당 주소를 통해 들어가면..
각 서비스들이 잘 등록되어있는 것을 확인할 수 있다!
이를 통해 우리는 서비스간의 라우팅을 할 준비를 마쳤다!
Test
만들어진 템플릿을 통해 잘 작동되는지 확인하고, 로그 또한 확인해보자!
이렇게 로그인을 진행하면..
성공적으로 들어와진 것을 확인할 수 있다!
이는 OAuth2 토큰을 발급받은 시점으로 이제부터는 토큰이 다른 서비스로 라우팅될 때 진입하기 위한 열쇠 역할을 한다!
이제 메인화면으로 들어가 Incomes에 대해 수입을 작성해보자.
"SAVE CHANGES"를 누르면 account-service에 대한 변경 내용을 statistics-service에 전달한다!
이때의 로그를 확인해보자.
Account-Service Log
로그를 보면 토큰을 확인하고 FeignClient 설정을 통해 Statistics-service에 접근하는 것을 확인할 수 있다!
Statistics-Service Log
Statistics-service도 요청을 잘 받아와 토큰을 확인한 후, 해당 변경 사항에 대한 로직을 처리하였다!
이렇게 각 서비스 간의 통신이 원활히 이루어지는 것을 확인할 수 있었다!
다음은..
지금은 성공적으로 보이지만..실행해 보니 재로그인을 하였을 때 일전의 기록들이 전부 사라지는 문제가 있었다..
왜인지는 모르겠으나 클라이언트 측에서 ajax를 요청할 때 아예 초기화를 시켜버리는 것 같다..
이제 서버에만 집중하던 것을 html이나 js를 건드려보며 집중력을 분산시켜야 한다는 불안감이 엄습해왔다..
다음에는 문제를 해결하고 프로젝트를 마무리하는 방식으로 포스팅해보겠다.
감사합니다 ㅎㅎ
'Goorm x Kakao Project > 1회차 프로젝트' 카테고리의 다른 글
4. 서비스 리팩터링 (0) | 2024.12.28 |
---|---|
3. Maven에서 Gradle (0) | 2024.12.18 |
2. Spring Cloud MSA (0) | 2024.12.18 |
1. MSA를 사용하는 이유 (1) | 2024.12.13 |