해당 게시글은 (케인)멘토님께 멘토링 세션을 통해 주고받은 질의응답의 내용을 정리한 글 입니다.
😲 Q1. ec2인스턴스의 메모리 부족 관련해서, spring 어플리케이션의 가용 메모리에 제한을 걸어주거나 connection 생성에 제한을 두는 방법이 있을까요?
제 개인 포트폴리오를 위한 aws 인스턴스에서 스케일 관련 이슈가 있어 질문드립니다. 현재 aws 프리티어 ec2서버인 t2.micro에 docker-compose를 이용해 spring application 3개와 nginx를 띄워 리버스 프록싱을 적용함으로써 운영중입니다.
어플리케이션을 띄울때에는 조금 느리다는 부분 말고는 정상적으로 구동이 되는데, 이틀간격으로 어플리케이션이 다운되는 현상을 마주했습니다.
해당 부분 관련해서 파악을 해보니, 스프링 부트 어플리케이션에서 특정 주기마다 메모리 사용량이 증가함을 확인했는데, docker-compose로 한날 한시에 모든 어플리케이션이 run되었기에 메모리 사용량도 동시에 증가하였고… 관련해서 모든 어플리케이션이 가용 가능한 ram을 A라고 인식했지만, 사실은 A가 아닌 A를 4개의 docker-contailer에서 돌아가는 서비스들이 나눠서 사용해야 하는 부분이기에 applicaion이 종료되는것 같습니다. 관련해서 RDS측도 확인해보니 ec2서버의 어플리케이션들이 비정상 종료되기 직전 connection 이 급격하게 증가하는 현상을 확인했습니다.
물론, 스케일이 매우 작은 서버에 무리한 설정을 해두었다는 점은 알고있으며 스케일 업이 필요하다는 점은 분명히 인지하고 있지만, 메모리와 connectionr관련 궁금증이 들어 관련해서 혹시 spring 어플리케이션의 가용 메모리에 제한을 걸어주거나, connection 생성에 제한을 두는 등의 방법으로 혹시 해당 이슈를 잡을수도 있을까요?
👨🎓 A1. 물론 JVM의 메모리 사용 설정이나 hikariCP의 connection 에 대한 제한을 둘 수는 있습니다.
해당 상황은 알다시피 스케일업이 필수인 것이, spring 어플리케이션과 nginx 그리고 RDS connection관련 이슈 뿐 아니라, 쿠버네티스가 아닌 docker를 활용하는 점에서도 발생할수밖에 없는 유실등이 있기 때문입니다.
따라서 클라우드 환경이 아니라, 값싼 linux 컴퓨터를 중고로 구매해서 가정에서 직접 하드웨어로 서버를 운영해보는 경험을 해보는것을 추천드립니다. 저 또한 해당 방법으로 개인 서버를 운영했었으며, 현아님께도 좋은 경험이 될 것이라고 봅니다.
😲 Q1-1. 관련해서 이전에 집에서 사용하지 않는 notebook을 이용해 포트를 열어 서버를 운영하다가, 보안이슈와 인터넷 비용이 기하급수적으로 많이 나올수 있다는 이야기를 들어 다시 모든 포트를 닫았던 상황입니다. 조금 우려가 되는데 괜찮을까요?
👨🎓 A1-1. 8080, 80, 22, 443처럼 각 서비스 주력포트를 사용하지 않는다면 개인 서버에 대해서 모든 포트를 찔러보는 노력은 하지 않을것이라고 봅니다.
만약 당한다고 하더라도… 좋은 경험이 될것으로 보기도 합니다. 관련해서 네트워크를 훔쳐라라는 도서를 개인적으로 추천합니다.
오늘 멘토링과 관련해서 생각/공부해봐야 할 주제 🤔
- 왜 3개의 어플리케이션 동시 구동까지는 성공하지만, 일순간에 서버가 뻗는걸까?
이번 멘토링과 관련되어 작성한 글 📖
'Project > (공통)troubleshooting' 카테고리의 다른 글
야나의 코딩 일기장 :) #코딩블로그 #기술블로그 #코딩 #조금씩,꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!