서비스 운영시, 데이터 트래픽에 대해 기획자가 알아야할 것들
서비스를 기획하고, 설계하는 시점에서는 서버 트래픽 (Server Traffic : 서버 내에서 오고가는 데이터의 양, 상황)에 대한 지점을 예측하기가 쉽지 않다. 하지만 서비스가 런칭되고, 실제 서비스를 운영하는 입장에서는 서버 트래픽만큼 중요한 내용이 없다. 너무 많은 사람들이 몰려 서비스가 멈춰버리거나, 접속장애가 생길 수 있기 때문이다. 오늘은 기획자나 서비스 운영자 입장에서 서버 데이터 트래픽에 대해 이야기를 해보도록 하자.
왜 서비스에 접속할 때 네트워크가 필요할까?
1.
앱 서비스나, 웹 서비스는 각자 정해진 규격의 데이터를 담고있다. 그래서 네트워크가 연결된 상태에서 그 서비스에 접속하게되면 '정해진 데이터'들을 다운받고, 화면에 표기해준다. 워낙 빠른시간 안에 이 과정이 이뤄지다보니, 사용자 입장에서는 '다운로드'가 이뤄진다는걸 인식하지 못할 뿐이다. 네트워크가 불안정한 상태에서는 서비스 이용이 어려워지는 것도 이런 이유다. 보여줘야할 내용을 아직 받아오질 못했으니, '화면을 표현해줄 수가' 없는 것이다.
그렇다면 이 파일들은 '어디에서' 다운을 받는걸까? 바로 실제 서비스가 '업로드' 되어있는 서버로부터 받게된다. 이런 서버는 서비스 구축시 '어떤 서비스'를 쓰는가에 따라 달라진다. 물리적인 서버를 직접 구매하거나, 사용중인 컴퓨터를 사용한다면, 그 기기가 접속할 수 있는 위치가 된다. AWS나 구글같은 클라우드 서비스라면, 전 세계에 퍼져있는 여러 데이터센터들 중 한 곳에 서비스 데이터가 들어갈 것이다. 그러니 네트워크가 꺼져있거나, 불안정한 상태에서는 서비스에 접속할수도, 기능을 이용할 수도 없는 것이다.
- 모든 서비스에는 접속시 보여줘야할 이미지 파일이나, 개발 로직등의 파일이 있다
- 각 사용자는 서비스에 접속시, 이 파일들을 다운로드 받는 과정이 필요하다
- 그래서 네트워크에 접속한 상태여야 서비스 이용이 가능하다.
모든 서버에는 처리할 수 있는 적정 트래픽이 있다
2.
우리는 이제, '서버'에 서비스용 데이터를 저장한다는것을 알게됐다. 그리고 그 데이터를 접속한 사람마다 다운로드 받아야한다는 것도 확인했다. 그렇다면 그 데이터가 '엄청나게 무겁거나, 동시 접속자가 많은 상황'이라면 어떻게 될까? 이 부분은 우리에게 익숙한 온라인 게임의 사례를 확인해보면 이해가 쉽다. 바로 '대기줄'을 만드는 것이다. 실제로 많은 사람들이 식당이나, 쇼핑몰 등에 몰렸을 때, 번호표나 예약번호를 사용한다. 이 부분은 실제 데이터 접속도 마찬가지다. 너무 많은 사람이 한번에 몰리면 서비스가 마비될수도 있으니, 순서대로 온 사람들에게 번호표를 건네주게 된다.
물론, 번호표를 건네줘서 수천, 수만명을 기다리게하는 것도 한가지 방법이다. 하지만 가장 좋은 방식은 '서버에서 오고가는 데이터의 한계치를 늘리는 것이다. 그렇다면 서비스에 접속하는 한계치는 어떻게 바꿀수 있을까? 데이터가 저장되어있는 '기계나 클라우드 환경'의 하드웨어를 고급 스펙으로 사두면 된다. 마치 우리가 게임용 PC나, 콘솔게임용 디바이스를 업그레이드하듯이. 이런 서버 하드웨어도 스펙에 따라 접속 속도나, 저장할 수 있는 데이터의 양이 결정된다. 하지만 모든 디바이스가 그렇듯이, 고급 스펙으로 처리하려면 더 많은 비용이 들어간다.
PC를 갖고있는 사람이라면 가정용 인터넷에도 여러 상품이 있다는걸 알고있을 것이다. 예를 들어 "100mbps면 1달마다 얼마. 1기가면 1달에 얼마." 하는 식으로, 속도에 따라 가격이 달라진다. 서버도 마찬가지다. 돈을 많이 들여서 서버를 만들면, 더 많은 사람이, 빠른 속도로 서비스를 사용할 수 있다. 하지만 모든 디바이스가 그렇듯이, 고급 스펙으로 처리하려면 더 많은 비용이 들어간다. 그렇다면 서버 트래픽에 드는 비용을 줄이는 방법은 없는지 생각해볼 수 있다. 예를 들어 '오고가는 데이터의 양 자체를 줄여본다면' 어떻게 될까?
다운받을 데이터를 가볍게 만드는 경량화 작업
3.
서비스 운영을 위해 데이터를 업로드할 때는 데이터의 양을 압축시키거나, 가볍게 만드는 '경량화 작업'이 꼭 필요하다. 이부분을 신경쓰지 않고, 각각의 데이터를 '무거운'상태로 만들어둔다면, 접속하는 사람마다 다운받아야할 양이 더 많아진다. 예를 들어 10kb로 만들어둬야할 이미지를, 실수로 10mb로 처리했을 경우. 1천명 기준 10기가 바이트가 넘는 트래픽을 이미지 하나에 소모하게된다. 물론 이런 일이 생기면 안되기때문에, 별도로 백엔드 개발자들은 각각의 파일이 얼마나 무거운지. 또 각 리소스 다운로드에 얼마나 시간이 걸리는지를 체크하게된다.
실제로 서버 트래픽을 다루는 백엔드 개발자들은, 웹브라우저의 '개발자 관리 화면'을 자주 들여다본다. 한 화면을 표현해주기 위한 '사진'이나 '개발 로직'같은 것들이 얼마나 많은지. 그리고 그 내용을 불러와 표현하는데 얼마나 많은 시간이 걸리는지를 확인할 수 있기 때문이다.
웹 서비스를 만들 때, 이미지 파일들을 vector 형식으로 처리하거나, 아이콘을 폰트타입 형태로 처리하는 것도 이런 이유에서다. '극도로 가벼운' 형태를 추구해야, 실제 로딩속도도 빨라지기 때문이다. 심지어 웹 서비스에 들어가는 CSS 파일이나, java script 파일들을 압축시키거나, 'ABC' 순서대로 정리하는 극단적인 사례도 존재한다. 실제 기계가 내용을 읽어내고, 표현하는 단계를 조금이라도 줄이기 위해 고민한 결과다.
실제로 일반 PC 환경보다, 모바일 환경의 네트워크 속도는 훨씬 느린 편이다. 가장 큰 이유는 네트워크에서 처리할 수 있는 물리적인 '크기'가 다르기 때문이다. 일반 PC는 별도의 커다란 모뎀에서 데이터를 처리한다. 하지만 스마트폰은 PC와 달리 작은 크기를 갖고있기에, 모뎀 유닛의 크기도 훨씬 작다. 그래서 모바일을 기준으로 서비스하는 경우, '다운받아야할 데이터'를 줄이기 위해, 수많은 고민이 필요하다. 특히 서버 데이터 상에서 주고받아야할 정보가 많은 상황이라면, 이 부분은 더욱더 많은 고민이 필요할 것이다.
- 다운받을 데이터가 무거워질수록, 접속자 수가 많아질수록 더 좋은 서버가 필요하다.
- 다운받을 데이터가 가벼워질수록, 모바일 환경에서도 손쉽게 접속할 수 있다.
- 데이터를 가볍게 하기 위해, 이미지와 동영상 등을 압축할 방법에 대해 고민해야한다.
서비스의 평균적인 트래픽 / 주기별 최대 트래픽
4.
마지막으로 중요한 지점이 하나 있다. 바로 '실제 서버관리자에서 확인할 수 있는 데이터 통계다. 이 데이터 통계에서는 특정 기간동안 얼마나 많은 데이터를 사용했는지를 확인할 수 있다. 처음 보면 조금 생소하게 느껴질 수 있겠지만, 이 그래프에서는 한가지만 확인하면 된다. 바로 OUT 이라고 되어있는 그래프의 값이다. IN은 서버를 기준으로 '관리자가 업로드하는' 데이터의 양을 말한다. 일반적인 경우라면 서비스에 들어갈 데이터를 업로드하는건 서비스 초기의 경우나, 신규 기능을 업데이트할 때다. 이외에는 간단한 데이터들을 서로 주고받는 정도만 처리하기 때문에, IN 이라고 되어있는 값은 굳이 신경쓰지 않아도 된다.
OUT이란 내용은 - 다른 사용자들이 접속해서 '파일을 다운로드 받는 과정'에서 사용된 데이터의 양을 말한다. 그러니 실제 서비스를 운영하면서 '얼마나 트래픽이 발생했는가'는 바로 이 지점을 말한다. 서비스를 사용하는 사람마다 '얼마나 다양한 컨텐츠를 즐겼는지. 또 얼마나 많은 시간을 서비스에 접속했는지'에 따라 데이터 이용량이 달라진다. 하지만 동시에 많은 사람이 접속해서 데이터를 다운받을 경우, 미리 설정해둔 한계값을 초과할수도 있다. 이런 경우
가장 중요한 지점은 두가지다. '데이터가 가장 많이 사용된 값'과 '평균적으로 사용된 값'. 이 두가지만 확인해도 서비스를 운영하는데에는 문제가 없다.
1) 데이터 최대 사용값
서비스를 운영하다보면, 특정 시기에 수많은 사람들이 몰려서 의도치않은 트래픽이 발생할 수가 있다. 이 경우는 서비스의 특징에 따라 상황이 다르다. 예를 들어 '특정 시즌'에 서비스 이용자가 많아지는 경우, 해당 시즌은 항상 더 많은 사용자가 들어올 수 있다는 걸 의미한다. 반대로 특정 이벤트나, 홍보 등을 진행한 경우, 사용자가 많아지는 경우는 반복될 가능성이 매우 적다. 그러니 서비스를 운영하는 입장에서는 트래픽이 많아지거나, 적어지는 이유를 화인하고, 거기에 맞는 트래픽을 대비해두어야한다.
2) 데이터의 평균 사용값
서비스를 운영하면서 통계를 확인해보면, '기간별 평균값'이 나온다. 이 평균값에 보통 3을 곱하여 서비스 트래픽을 준비해두면 큰 문제가 없다. 다만 서비스의 트래픽 발생시기가, '특정 시기에만 몰리는' 패턴을 확인했다면, 이 공식을 굳이 따를 필요는 없다. 클라우드 서비스를 사용중이라면, 로드밸런싱 기술을 활용하여, 자동으로 트래픽 증가에 따라 서버를 확장하는 것도 한가지 방법이다.
일반적인 트래픽 공식
평균 트래픽 값 X 3 = 서비스의 안전 트래픽
예시) 평균 트래픽 값이 20mbps일 경우, 60mbps가 서비스의 안전 트래픽.
서비스의 규모나, 크게아따라서 오고가는 트래픽 크기도 차이가 난다. 이미지나 영상이 많이 사용되는 서비스의 경우, 접속해서 다운받는 사람이 많아질수록 데이터 사용량이 미칠듯이 늘어난다. 이 경우 호스팅업체를 사용하거나, 클라우드를 사용하는 경우에도 비용이 상당히 많이 든다. 그러니 서비스를 운영하기 전에, 이 부분에 대해서 '미리 인지하고, 대략적인 데이터 사용량을 측정하는 과정이 필요하다. 다만 이 부분을 '미리 대비하는 설계자'가 되려면, 위에서 이야기한 내용들을 먼저 이해해두는것이 중요하다.
-
본인의 회사에 백엔드 개발자가 있고, 그들이 서비스에 대해서 충분한 이해를 하고있다면, 큰 문제는 발생하지 않을 것이다. 다만 새로 들어온 인원들은 이 지점을 잘 알지 못하는 경우도 많으니, 팀장급 인원들이 이 부분을 체크해두는 것이 좋다. 세상에는 유능한 백엔드 개발자만 있는 것이 아니기 때문에, 가능하면 '세세한 지점까지' 체크해서 물어볼 수 있는 개발 상식을 길러두도록 하자.