개발자
springboot 프로젝트를 gcp인스턴스에 docker컨테이너로 배포하려합니다. 웹서버 인스턴스를 따로 둬서 nginx를 설치하고 실행합니다. 문제는 프리티어 gcp라 그런지 springboot 컨테이너를 한 인스턴스에 두 개를 띄우고, 추가로 mariadb와 redis로 컨테이너로 띄워 총 4개의 컨테이너가 실행되는데, 이렇게 하니 인스턴스 접속이 점점 느려지다 어느 순간 멈춰버립니다. 결국 인스턴스를 중단했다가 다시 켜야 다시 원 상태로 돌아옵니다. 물론 해결방법은 구글 클라우드에서 지원하는 cloud storage같이 방법이 있고, 다른 인스턴스를 만들어 로드밸런싱 되는지 확인할 수 있지만,.. 궁금한 게 생겨 확인해봐야할 것 같습니다. 정말 gcp의 프리티어로는 이렇게 여러 컨테이너들을 띄우는 게 어려운 지 궁금합니다.
답변 2
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 11월 02일
GCP 프리티어는 일정 사용량까지 무료로 제공하는 서비스이기 때문에, 자원에 대한 제한이 있습니다. 여러 도커 컨테이너를 실행하는 것은 각 컨테이너가 필요로 하는 CPU와 메모리 자원을 고려해야 합니다. Google Kubernetes Engine (GKE) 같은 관리형 서비스를 이용하면 쿠버네티스 클러스터의 확장성과 유연성을 활용할 수 있지만, 이 역시 프리티어에는 포함되어 있지 않습니다. Springboot, MariaDB, Redis의 세 가지 서비스 모두 도커 컨테이너 내에서 실행하고 있으며, 이들 각각은 전부 비교적 높은 리소스 요구량을 가집니다. 특히 데이터베이스와 같은 스토리지 인텐시브 작업을 수행하는 서비스일수록 많은 메모리와 디스크 I/O를 필요로 합니다. 따라서 당신의 현상은 아마도 GCP 인스턴스의 리소스가 모두 소진되어 발생한 것으로 예상됩니다. 이 문제를 해결하기 위해 몇 가지 방법을 제안드립니다: 1) 기본적인 해결방식은 더 많은 리소스를 가진 인스턴스 유형을 사용하는 것입니다. 단, 이 경우 비용이 발생할 수 있습니다. 2) 서비스들의 리소스 사용량을 최적화합니다. 예를 들어, Spring Boot 애플리케이션의 JVM 사이즈 등을 조절하여 메모리 사용량을 줄일 수 있습니다. 3) 필요한 모든 서비스를 동일한 인스턴스에서 실행하는 대신, 각각 다른 인스턴스에 분산시킬 수 있습니다. 이 방식도 추가 비용이 발생할 것입니다. 4) 마지막으로 GCP에서 제공하는 관리형 SQL과 Redis 서비스를 활용하면 리소스 부족 문제를 해결할 수도 있습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!