[102호] 서버비 0원, 클라우드 큐 도입으로 해냈습니다!

💡 By 조현영 카카오모빌리티

열심히 서버를 만들어 출시한 여러분, 기대 반 걱정 반으로 서버가 잘 돌아가는지 지켜보고 계실 겁니다. 조금씩 이용자가 늘다 보면 어느새 서버 수용량에 한계가 오기 시작하고, 여러분은 서버를 스케일업 할지 스케일아웃 할지 고민하실 텐데요. 주니어 서버 개발자들은 여기서 한 가지 선택지가 더 있다는 걸 잘 모르는 경우가 많습니다. 바로 간단한 큐 서버의 활용입니다.

오늘의픽업 CTO로 있으면서 서버 비용을 최소화하여 운영한 노하우를 공개합니다. 큐 서버 도입이 장점만 있는 것은 아니라 도입 시 주의할 점과 생각해야 할 점도 알려드립니다.

Q. 큐를 도입한 이유는 무엇인가?

  • 어드민 서버가 장애가 나면 접수를 못 받음

  • 앱 서버가 터지면 배송완료 처리가 안됨

  • 불안감이 있었다.. → 찜찜하지만 그냥 넘어갔다..

  • 실제로 어드민 서버가 터졌다..

    • 엑셀 업로드 - 엑셀 메모리가 어마어마…

      • 임시방편 : 엑셀을 개발자들한테 전닳해서 데이터를 포워딩함(개발서버 활용)

    • 배송 중에 서버가 터지면 다음 배송 진행이 안됨..ㅜ

  • 서비스 특성상 그날의 문제는 그날 해결했어야 했다..(에러가 안나게 하는게 제일 좋긴 하지만..ㅜ)

  • 새벽에도 서버 터지고.. 주말에도 터지고..ㅜㅜㅜ

  • 해결 방법..?

    1. 스케일 업 : 스몰 → 미듐 → 라지(트래픽 분포를 봤지만 시간별로 유동적임.. 아침,점심 시간에만 효과적이다..)

    2. 스케일 아웃 : 서버를 여러대 늘려간다..(그래도 서버가 터진다..ㅜ)

      1. 오토스케일링 원리 : CPU나 메모리가 70%이상이면 서버 대수 1개씩 늘림,, 반대로 30% 미만이면 1대씩 줄임(알아서 조절되니 편리, 트래픽 변화 대응 가능)

      2. 그러나 트래픽이 한번에 100%가 되면.. 이미 장애가 나버리고 연달아서 장애가 나게 됨..

  • 장애를 겪으면서 발견한 점

    • 나는 나를 믿을 수가 없다

    • 돈도 없다

    • 누가 중간에서 천천히 보내줬으면 좋겠다..

  • 그럼 답을 찾아보자

    • 그럼 누구를 믿을 수 있나? → 나보다는 AWS(99.? % 장애 복구 보장)

    • 돈이 안 드는게 있나? → 클라우드 큐?

    • 중간에서 천천히 보내줄 수 있는게 있나? → 클라우드 큐?

Q. 큐를 도입하면서 개선된 부분은 어느게 있는가?

  • SQS는 JSON 데이터를 저장한다

  • 데이터를 어떻게 쓸지는 자유다

  • 어드민 서버가 데이터를 받아서 쓴다

  • 큐당 데이터 12만건 제한 → 두개 만들어서 24만건 쓰면 된다

  • 서버 에러나면 거래처가 다시 올려줘야 함..(본의 아니게 민폐)

  • SQS 도입후 처리 실패시 데드레터큐로 보냄..(실패건은 데드레터큐로 확인)

Q. 큐 도입시 주의해야 할 점은 무엇이 있을까?

  • Pub/Sub을 쓰면 안되나?

    • 다수에게 받아서 다수에게 전달…?

  • 클라우드 큐 꼭 안써도 된다

    • 서버에 남는 코어가 있다면 그 코어를 활용해 큐 서버를 띄우면 됨

  • 서버를 한 대 띄울 수 있다면..?

    • 래빗앰큐, 카크카 등을 설치해 메시지 큐 서버로 활용하면 됨

    • 우리가 만든건 장애가 발생할수 있다는걸 꼭 명심해라

  • 언제 쓰면 좋을까?

    • 특정 기능만 부하가 몰릴 때

    • 특정 시간에만 부하가 몰릴 때

    • 갑작스럽게 몰려서 오토스테일링이 안 될 때..

  • 서버 구조상의 문제

    • 서버 전반적으로 부하가 증가할 때는 스케일업, 스케일아웃과 같이 할것

    • 대기열이 생기므로 느릴수 있다

    • 클라우드 큐 서비스면 매우 낮은 확률로 장애 발생

  • 큐 자체의 문제

    • 하나씩 받아서 처리하므로 전체 개수가 몇 개인지 파악 어려움..(한 시간 단위로 전체 갯수를 파악)

    • GCP로 전환할때 서비스 종속성 문제때문에 이슈가 있을 수 있다..

Last updated