토이프로젝트와 사이드 프로젝트를 위한 AWS 아키텍쳐 설계하기
AWS를 쓰기는 하는데, 어느 정도가 적당할까?
토이 프로젝트와 사이드 프로젝트를 위해서, 우리는 AWS를 이용할 가능성이 크다. 물론, 뭐 GCP나 애져를 사용해도 상관은 없지만 나는 자주 AWS를 사용하기 때문에 AWS로 이야기를 해볼 것이다.
물론, 이 글을 쓰는 건 AWS SAA 자격증 공부 도중 대학생과 소수의 인원이 들어올 정도의 AWS 아키텍쳐는 어느 정도가 적합하냐에 대해서 생각을 해보았고, SAA 자격증 공부 도중 비슷한 블로그 포스팅을 보기도 했었기 때문에 정리 겸사 작성하게 되었다.
AWS를 가지고 토이프로젝트, 사이드 프로젝트를 하는 데 있어서 적정량의 서비스를 이용하는 것은 도대체 어느 정도 일까? 한 100명 정도 들어갈 수 있는 서버를 구성하고 싶은데, 도대체 AWS에 서비스를 어디까지 사용해야 하는 걸까..
처음 서버를 구성하는 입장에서는 이러한 문제에 대해서 해답을 찾기가 난감하다.. 도대체 어느정도가 내 프로젝트에 적합한 정도의 서비스를 구성할 수 있을까?
나는 그러한 궁금증에 대답해준 한개의 슬라이드를 찾았다.
출처는 이곳..
https://www.slideshare.net/awskorea/aws-aws-aws-summit-seoul-2019-141252077
매번 AWS Summit Seoul에서 같은 주제로 매년마다 이 주제를 바탕으로 매번 세션을 진행하는데 내용이 거의 비슷하며 반복되기 때문에, 한 슬라이드만 보아도 무방할 정도로 큰 상관이 없다. 전체적인 내용도 좋긴 하지만 국소적으로 토이 프로젝트와 사이드 프로젝트를 위해서 필요한 정도의 AWS 아키텍처는 어느 정도가 필요할지를 위의 슬라이드를 바탕으로 정리해서 써보겠다.
혼자만 즐기는 토이프로젝트
우리는 프로젝트를 만들 때 그냥 나만 즐기려고 만드는 프로젝트가 있을 수 있다. 테스트용으로 누가 들어오는 프로젝트가 아니라 굳이 혼자서 북 치고 장구를 치는 장소로써 만들려면 뭐 큰 신경을 쓰지도 않아도 된다. 단순하게 이런 포맷으로 만들 수 있다.
극단적으로 말하면 DB도 없이 굴려도 돌아갈 수는 있을 것이다. 물론, 귀찮은 작업들을 많이 해야겠지만... AWS EC2 프리티어에서 DB서비스를 운영하고, 운용 서버까지 동시에 운용하는 방식은 부하가 많을 것이다. 왜냐하면, EC2의 프리티어 메모리가 너무 적어서 서버만 돌리기에도 벅차기도 하다. 하지만 뭐 실제로 혼자만 즐길리는 없을 것이고 최소의 사용자 뭐 한 100명 정도 생각해볼 수 있을것이다. 학교, 지역 기반의 좁은 커뮤니티의 서비스를 운영하기에는 이 정도의 서버 구성으로는 잘 굴러가지 않을 것이다.
100명 이내의 서비스 프로젝트
그럼 조금 더 생각해보자면, 100명 내외 정도 되는 서비스에서는 어떤 식으로 구성하는 게 좋을까? 100명보다 적은 서비스를 구성할 때는 AWS에서는 다음과 같은 서비스를 구성 포맷을 추천한다.
놀랍게도, 100명보다 적은 서비스들은 DB인스턴스를 따로 구성해서 그냥 우리가 직접 설치해서 현재 서버 인스턴스로 연결해서 사용하게끔 구성하라고 조언합니다. DB의 인스턴스에 직접 DB를 설치하고, DB 튜닝을 하는 데 있어서 예상보다 시간이 많이 걸릴 수도 있습니다.
물론 이러면 좋긴 하겠지만, RDS 프리티어를 통해서 DB를 이용하는 방식도 저는 나쁘지 않다고 생각합니다. RDS의 free tier를 통해서 한 개의 RDS 서버를 운용하는 것은 금액이 나가지 않기 때문에 이 상태에서도 추천합니다 더 자세한 설명은 이 100명 이상의 서비스 프로젝트에 대해서 이야기해보도록 하겠습니다.
100명 이상의 서비스 프로젝트
개인적으로 느끼는 것이지만, 100명 이상의 프로젝트부터는 어느 정도 성공한 프로젝트라고 생각합니다. 학교단위 커뮤니티 단위의 서비스 정도라면, 폭발력 있게 들어오는 경우가 아니라면, 1000명 내외 정도라고 추측됩니다. 제가 직접적으로 서비스해보았던, 전시회 서비스의 경우 초기 오픈 때 한 번에 (추측이긴 하지만) 800명 내외로 들어왔었던, 경험상 이 정도의 서비스도 충분히 돌아가긴 합니다. 큰 무리 없이 돌아가기도 하며 실제 서비스를 운용할 때 EC2나 RDS의 서비스 오류로 서버 오류가 있었던 경우는 없었습니다.
참고해보실 만한 글:
DB를 구성할 때는 꼭 RDS를 선택해야 하는 것은 아니다. AWS에서 제공하는 DB서비스는 다양한데, 3~4개 내외에서 선택을 하면 된다.
RDS, Dynamo DB , AWS Aurora 각각의 서비스를 자기 입맛에 맞춰서 선택하면 된다.
RDS는 기존 RDBS서비스들을 그대로 이용할 수 있는 서비스이고 Dynamo DB는 Nosql DB서비스를 AWS에서 제공하는 서비스이다. (단, MongoDB의 경우 AWS에서는 제공되지 않는다. NoSQL라 당연히 MongoDB가 있을 거라고 생각했는데 없었다;) MongoDB는 직접 설치하는 방향으로 가야 한다.
AWS Aurora 서비스는 MySQL과 PostgreSQL 서비스를 이용할 수 있으며 자동 관리되는 서비스이다. Aurora는 자동으로 Auto Scaling도 가능하고 DB 오류 시 대기 DB도 가지고 있는 장점이 있으나.. 금액적인 문제가 있을 것이다. 이런 높은 수준의 DB를 무료로 사용할 수는 없기 때문이다. 한국 리전에서 가장 낮은 단계의 서비스가 시간당 0.063달러임을 감안해보면..
아까 100명 이하의 서비스에서 말했듯 아마 서브 프로젝트나 가볍게 시작한 프로젝트에서 큰 금액적인 부담을 느끼고 싶지 않은 사람들은 RDS free tier를 이용하는 것을 추천한다. RDS의 프리티어도 어느 정도의 부하는 견디게 되어있고 만약 문제가 생겼을 때 RDS나 EC2의 인스턴스의 단계를 높이는 방향으로 선택해보자.
1000명 이상의 서비스 프로젝트
1000명 이상의 서비스를 구성하는 경우라면, 이미 사업의 영역으로 가지 않았을까라는 생각이 들 정도로 사람들이 원하는 서비스라고 생각합니다. 토이 프로젝트를 통해, 홍보 혹은 마케팅이 없는 상태에서 1000명 이상의 서비스를 구현할 수 있다면, 이미 그 서비스는 사람들에게 관심을 많이 받아가는 좋은 서비스로 성공한 서비스가 아닐까...라는 저의 사견이 있습니다.
이때부터는 AWS에서는 부하 분산을 통해서 서버를 구성하는 방식을 취합니다.
실제 사용자가 최소 1000명이 넘어야지 LoadBalancer를 사용하여 이용자를 분산하여 서버를 운용해도 된다고 서비스를 구성한다. 물론, 이외에도 수평 확장(EC2의 인스턴스 개수를 늘리는 것), 수직확장(EC2의 서버의 성능을 높이기)을 고민해서 사용해서 이러한 서비스를 구성하면 된다. 이때부터는 메인 DB와 대기 DB를 두어서 이 서비스를 메인 DB가 죽었을 경우 발 빠르게 대기 DB로 연결할 수 있게끔 서비스를 구성하는 방식을 취해야 한다. 서비스 오류를 위해서 대비하는 것은 중요한 요건중 하나이니까.
더 높은 차원의 서비스를 구성하는 것은...
사실 이것보다 더 큰 정도의 서비스를 구성하는 경우는 사이드 토이 프로젝트에서는 매우 어려운 일이라고 생각한다. 만약 더 많은 인원의 서비스를 구성해야 하는 경우 직접 슬라이드를 보고 지식을 얻어가는 것이 좋을 것이다. 어차피 저 또한 엄청 큰 서비스를 구성해봤던 (1000명 이상의 서비스)를 구성해본 적도 없기도 하며, 슬라이드를 보면서 이러한 서비스에 대한 정보를 전달해주고 싶었기 때문에 이 블로그 포스팅을 했었던 터라...
앞서서 앞에서도 말했으나, 토이 프로젝트와 사이드 프로젝트를 하면서 배포할 때 가장 난감한 점은 AWS를 어느 정도 사이즈로 얼마큼 구성해야 할지에 대한 큰 문제일 것이다. 너무 크게 잡으면, 돈이 너무 나갈것이고 그렇다고 예상 인원에 비해서 작은 포멧을 사용하면 원할한 구성이 되지 않을것이기때문에 슬라이드에 대한 정보가 너무 좋았기도 했고 비슷한 고민을 하는 사람들이 많을 것이라고 생각한다. 내 포스팅으로 서비스 설계를 어떤식으로 해야할지에 대해서 알아보는 기회가 되면 좋을 것 같습니다.
많은 서비스를 구성한 사람이 아니다 보니까, 글의 오류점이 많기도 할 수 있습니다. 많은 피드백 부탁드립니다!
'DevOps > AWS' 카테고리의 다른 글
AWS CLI를 통해서 S3 파일 다운/업로드하는 방법 (0) | 2020.11.20 |
---|---|
AWS EC2 프리티어에서 메모리 부족현상 해결방법 (21) | 2020.11.20 |