프로젝트/42프로젝트

비용을 아끼자(모닝글로리 웹페이지 제작 5)

susong 2023. 3. 17. 22:22
728x90

돈이 너무 많이 나간다!!

배포 2개월차 12월의 비용 총 54.91달러가 지출되었다.

42모글의 서비스 볼륨은 결코 크지 않다. 분명히 작은 간단한 출석용 사이트인데.. 비용이 너무 많이 나간다. 첫 달은 도메인 등록 비용을 고려해서 많이 나갔다고 해도 2번째 달부터는 변명의 여지가 없었다. 내 첫 배포 프로젝트라서 일단 어떻게든 서비스를 올리겠다는 일념으로 올리긴 했지만, $55는 용납할 수 있는 범위를 넘었다. 일단 서비스가 안정되었으니 어떻게든 가격을 줄이는 방법을 찾아야만했다. 

 

42서울에서는 클라우드 공부를 독려하기 위해서 AWS크레딧을 내부 재화로 구매하게 해준다. 덕분에 나는 지금 200만원 이상의 크레딧을 보유하고 있지만, 이 속도라면 2년 후면 서비스를 내려야했다. 내가 엄청나게 크고 많은 컴퓨팅 용량을 이용하는 서비스를 하면서 2년을 유지한다면 대단한 일이지만, 이런 간단한 서비스를 2년도 유지못한다는 것은 스스로조차도 납득할 수 없었다.

 

그래서 나는 이 비용을 줄이기로 마음먹었다.


비용을 줄이기 위한 노력들

가장 먼저 실시한 것은 쓸데없는 서비스들을 없애는 것이었다. 처음에는 아무것도 모르고 VPC 등등 이것 저것 다 건드려봤었는데, 그 때 만들어둔 서비스 하나하나가 다 비용으로 돌아왔다. 그래서 일단 16.89의 비용을 지불하고 있는 EC2-기타를 제거하기로 마음먹었다.

첫번째 목표 퍼블릭 IP들

Cloud 내부에서 작동하는 EC2들에게 기본적으로 제공되는 IP들은 고정적이지 않다. 즉, EC2를 껏다가 키면 바뀌는 동적인 IP주소들이다. 그러면, DNS에 등록해야되는 서비스들은 어떻게 도메인을 등록할 수 있을까? 그건 바로 Elastic IP를 이용하면 된다. Elastic IP는 EC2 1개당 (EC2에 묶여있고, 해당 인스턴스가 켜져있을 경우) 무료다. 즉, 만들어놓고 인스턴스를 끄거나 바인딩해두지 않으면 비용이 나간다.

 

나는 처음에 이 Elastic IP에 대한 개념이 없어서, 사용하지도 않는 IP들을 받아두고 낭비하고 있었다. 그래서 가장먼저 바로 제거할 수 있는 이 친구들부터 없앴다. (공짜인줄알고 막 만들었던 것 같다..)

 

내가 지금 사용하고 있는 인스턴스 유형들(4개의 서비스를 운영중이다)

두번째로는, 인스턴스를 낮췄다. 처음에 t2.micro를 이용하다가 몇 가지 문제들이 발생해서 인스턴스를 높은 수준으로 높였는데, 이는 전혀 필요없는 돈낭비였다. 물론 수업비라고 치면 저렴했지만, 이것 또한 불필요한 낭비였기에 바로 t2.micro로 변경하였다.

 

내게 발생했던 문제는 리액트 프로젝트 인스턴스 멈춤 현상이었는데, 이는 렘이 부족해서 발생하는 문제였다. 처음 이 문제를 인지했을 때 프로젝트 빌드 중에 렘이 부족하다는 것을 알았고 즉시 인스턴스를 키움으로써 문제를 해결했다. 하지만, 생각해보니 해당 메모리는 늘 사용해야되는 메모리가 아니었고, 프로젝트 빌드같은 특수한 상황에서만 부족한 것이었다. 그런데도 불구하고 전체적인 렘을 늘리는 것은 1차원적인 상황판단이었다.

일반적으로 2기가로 설정해두고 있다.

해당 문제는 가상메모리로 해결할 수 있는 문제라고 판단하였고 가상메모리를 설정 후에 다시 인스턴스를 내렸다. t2.small이 t2.micro에 비해서 가격이 2배정도가 되니, 간단한 판단으로 비용의 50%를 아낄 수 있었다.

오후 6시 ~ 오전 6시에는 해당 화면이 나온다.

세번째로는, 서버 이용시간을 줄였다. 내가 작동시키는 서비스 42Mogle은 아침 출석사이트이다. 즉 대부분의 트래픽은 아침에 발생한다. 그렇다면 이 서비스를 심야시간과 새벽시간에 작동시킬 필요가 있을까? 나는 없다고 판단했고, 해당 판단을 우리 개발팀 및 운영팀과의 공유 후에 저녁 6시 ~ 오전 6시 시간에는 작동을 멈추기로 했다.

 

저녁 6시까지 작동시킨 이유는 우리 출결 사이트 데이터 통계를 볼 수 있는 사이트가 작동하고 있었기 때문이다. 보컬(42운영진) 입장에서는 이 데이터를 출근한 시간에 확인할 수 있어야했기 때문에 해당시간에는 접속할 수 있도록 조치했다. 그렇게 또 40%정도의 돈을 아꼈다(서버가 꺼지면서 Elastic IP가격이 조금 나가긴 했지만.. 받아들였다 나중에는 해결하겠노라 마음먹으며)

 

마지막으로는, ELB(Elastic Load Balancer)를 제거했다. 처음 ELB를 사용한 이유는 아마존에서 제공하는 TLS를 이용하기 위해서 사용했다. 로드밸런서에 대한 이해가 결여된 상태에서 마치 이것이 TLS를 적용해주는 장치라고만 생각하고 적용시켰었다. 이렇게 사용해봄으로써 실력은 AWS에 대한 이해는 넓어졌지만, 이는 너무나도 큰 낭비였다. 심지어 약 17달러! 거의 30%에 해당하는 예산을 낭비하는 셈이었다.

 

그렇게 ELB를 제거하기로 마음먹고 로드밸런서에 대하여 깊이있게 공부하기 시작했다. 그 결론으로, Nginx를 ELB대용으로 사용하기로 마음먹었고 지금은 Nginx를 통해서 TLS/SSL 문제가 해결되었다. Nginx는 EC2 내부에서 Proxy 서버로써 작동하고 있다.


비용을 절약하고 보니

덮어놓고 쓰다보면 거지꼴을 못 면한다는 말처럼, 클라우드는 정말 엄청나게 편리한 도구이지만 막 쓰다보면 돈이 줄줄 샌다는 것을 알 수 있었다. 또한, 이렇게 부담없이 클라우드를 사용할 수 있는 환경에서 공부하는 것이 참으로 행운이라는 생각도 많이했다. 많이 낭비해봤기 때문에 다음에는 어떻게 해야 낭비하지않을 수 있을지에 대해 부딪치면서 배울 수 있었고, 덕분에 AWS 자체에 대한 이해도 넓어졌다. 이번 낭비를 통해 AWS에 있는 기능들을 하나하나 다 알기에는 너무 넓지만, 이렇게 하나씩 정복해가다보면 불가능하지 않겠다는 자신감도 얻었다.

 

결론적으로, 원래 $55에 달했던 비용은 현재 $9선에서 유지되고 있다. 42모글 서비스를 마무리한 후에 3개의 프로젝트를 더 하게 되면서 지금은 4개의 서비스를 운영하고 있지만, 현재도 내 예산은 40 안팎으로 유지되고있다.

 

결론 : 클라우드를 쓸 때는 늘 예산에 집중하자. 그리고 참 좋은 경험이었다. 

728x90