주식앱 실행하면 왜이렇게 오래걸릴까?, 로딩이 왜케 김? - 개발자가 말해드림

     

많은 사람들이 사용하는 영웅문 !

 

MTS, 로딩화면 왜 이렇게 길까?

 

제가 제일 많이 일한 업종은 "증권"입니다. 첫 회사에서 증권에 채널 백엔드 개발을 하면서 5년, 그리고 카카오페이에서 주식서비스를 구축하는데 2년 해서 총 7년 정도 증권회사에 몸담았는데, 증권앱하면 사람들이 가장 많이 불평하는 "주식앱(MTS)은 앱 실행 속도가 왜 이렇게 느려?"에 대해 얘기해 볼까 합니다 ㅋㅋ 

 

 

주식 트레이딩 시스템(MTS)의 특징

요즘에는 많은 앱 서비스가 출시되어 모바일로 거의 모든 일들을 할 수 있습니다. 주식도 마찬가지죠. 10~20년 전만 해도 사람들은 컴퓨터 앞에 앉아서 주식투자를 했습니다. 지금도 많은 화면을 보는 전문 투자자들은 컴퓨터를 사용한 HTS 프로그램을 많이 사용하고 있습니다. 하지만 간단하게 투자를 할 수 있는 MTS도 꽤나 성장했죠. 

 

이 앱이라는 건 서비스에 따라서 다양한 특징을 가지고 있는데, 예를 들어 메신저 같은 앱, 카카오톡을 보면 푸시가 아주 중요합니다. 나한테 온 메시지를 빠르게 알 수 있는 게 중요하죠. 은행이나 결제앱 같은 경우는 보안이 중요합니다. 따라서 앱을 실행할 때 다양한 인증을 거치게 됩니다. 

 

그럼 주식 앱에서 가장 중요한 것은 무엇일까요? 실제로 거래를 하기 대문에 인증도 중요하지만, 그보다 더 중요한 것은 바로 속도입니다. 여러분이 만약 가지고 있는 삼성 주식을 가장 높은 가격일 때 팔아야 하는데, 삼성주식을 선택했더니 종목상세화면을 로딩하느라 1초가 걸리고, 매도 버튼을 눌렀는데 매도 화면을 불러오는데 1초가 걸리고, 이렇게 다양한 화면을 누르면서 계속 로딩이 돼서 결국 원하는 가격에 매도를 하지 못한다면 앱을 탓하게 될 겁니다. (실제로 많은 분들이 이런 손해배상 문의를 증권사에 하고 있음)

 

따라서 증권사들은 앱에서 속도를 최고로 빠르게 하기 위해 다양한 방법을 시도하고 있습니다. 그 방법 중에 하나가 바로 '긴 로딩 시간'입니다.

 

아니 속도를 빠르게 하기 위해서인데 로딩시간을 늘리면 속도가 느린거 아니냐?라고 생각할 수 있는데.... 맞습니다.

속도를 빠르게 하기위해 속도를 느리게 했습니다. ㅋㅋㅋㅋ 

 

대부분의 사람들이 MTS에서 주식을 찾아보거나 매매하는 절차는 거의 동일합니다. 

 

- 종목을 찾는다

- 현재가 화면으로 간다

- 호가를 확인한다.

- 매매를 누른다

 

여기서 우리가 가장 많이 시간을 보내는 화면은 어디일까요?

바로 "종목을 찾는다"입니다. 

 

우리는 관심종목화면이나 섹터, 순위 화면들을 통해서 특정 종목을 찾고 해당 종목에 대한 종목상세 화면으로 이동하여 더 세세한 정보를 확인한 후 매매를 하게 됩니다.

 

이제 개발자의 입장에서 생각해 봅시다. 특정 종목을 찾기 위해 우리는 몇 번의 API를 호출해야 할까요?

 

일단 우리는 종목코드를 다 외우지 않고 종목명으로 종목을 찾습니다. 그렇다면 삼성전자라는 종목을 찾아서 신용으로 시장가 매수를 해본다고 가정해 봅시다.

 

- 검색창에 삼성이라고 검색 -> 서버 요청

- 삼성에 대한 검색 결과를 가져옴 -> 서버 응답으로 화면 뿌림

- 그중에서 삼성전자를 선택 -> 삼성전자 이름으로 조회

- 삼성전자의 종목코드 000660으로 종목상세정보를 조회 -> 삼성전자 -> 000660 -> 000660의 종목상세 조회

- 종목상세 정보에서 신용 %를 확인 후 호가화면으로 이동 -> 000660에 신용정보 조회 (종목 상세에서 같이 받기도 함)

- 호가 화면에서 매수 가격 결정 -> 호가 조회

- 매수 -> 매수 요청

 

이렇게 딱 봐도 3~4개의 API를 호출해서 백엔드에서 정보를 받아와야 합니다. 캐시를 한다고 해도 최초 한 번은 가져와야 하며, 사용자가 이종목 저 종목 이동한다면 캐시도 소용이 없습니다.

 

 

그래서!

 

증권사가 택한 방법은 종목에 대한 정보를 앱 실행 시 전부 내려주어 앱에서 저장하고 있는 것입니다. 이것이 MTS가 실행 시 로딩화면이 있는 핵심 이유입니다.

 

여러분이 MTS를 실행하면 앱은 백엔드에서 모든 종목에 대한 간략한 정보를 받아 앱에 저장합니다. 이렇게 되면 위 절차에서 백엔드와 통신하지 않아도 할 수 있는 일이 매우 많이 생깁니다. 

 

- 검색창에 삼성이라고 검색 -> 앱에 데이터 있음

- 삼성에 대한 검색 결과를 가져옴 -> 앱에 데이터 있음

- 그중에서 삼성전자를 선택 -> 앱에 데이터 있음

- 삼성전자의 종목코드 000660으로 종목상세정보를 조회 -> 000660으로 종목상세 조회 백엔드 호출

- 종목상세 정보에서 신용 %를 확인 후 호가화면으로 이동 -> 신용정보 앱에 있음

- 호가 화면에서 매수 가격 결정

- 매수 

 

생략이 많아졌죠? 

 

앱에 이미 모든 종목에 대한 간략한 정보가 있기 때문에 앱에서 검색을 구현할 수 있고, 종목명과 종목코드를 저장해 놓았기 때문에 종목코드로 바로 필요한 정보를 호출할 수 있습니다. 신용정보 역시 앱에 저장되어 있기 때문에 백엔드 호출 없이 매수 가격을 결정할 수 있습니다. 

 

뭔가 시작할 때 확 느리고 사용할 때 빨라지는... 조삼모사와 같은 전략이라고 할 수 있습니다. ㅋㅋㅋ 

 

 

근데 왜 실행할 때마다 로딩이 있냐고?

 

그럼 여기서 의문이 듭니다.

우리는 MTS를 매일 실행하는데 왜 실행할 때마다 로딩이 있죠???????

 

맞습니다. 위 말대로라면 처음 한 번만 받으면 그 뒤에는 로딩이 없어야 합니다. 하지만 우리는 매일 아침 9시 로딩화면을 보고 있죠. 

 

이것도 증권업의 특징입니다.

 

아마 주식투자를 많이 해보시는 분은 아실 수도 있는데, 종목에 대한 정보는 매일 변합니다. 특정 종목은 위험종목으로 지정되기도 하며 특정 종목은 상장폐지되어 없어지기도 하고 새로운 종목이 상장하여 생기기도 합니다. 이렇게 종목에 대한 정보가 바뀌는데, 하루에 한 번 거래소에서 모든 종목에 대한 정보를 증권사에 전달해 줍니다. (아침 5~6시 정도)

 

따라서 여러분이 어제 긴 시간 로딩을 투자해서 받은 정보가 오늘은 다를 수 있습니다. 언젠가 여러분이 새로 상장한 종목이 안보이거나 종목을 못 찾아서 증권사에 문의했는데, 증권사에서 "설정에 마스터파일 다시 받기 누르고 다시 해보세요~"라는 대답을 받아본 적이 있을지도 모릅니다. 여기서 말하는 "마스터파일"이 바로 모든 종목에 대한 정보입니다.

 

 

즉 MTS를 실행할 때 로딩이 있는 이유는 매일 변하는 마스터파일을 최신버전으로 받기 위함이며, 이 마스터파일이 있어야 빠른 종목검색 및 매매가 가능합니다. 

 

물론, 로딩할 때 받는 정보는 마스터파일뿐만이 아니라 다양한 정보들을 받습니다. 은행 정보라던지, 대표지수정보라던지, 앱 구동에 필요한 상수값이라던지,, 제가 일했던 2015년에 앱을 실행하면 총 15개의 스텝이 차례대로 실행하면서 데이터를 처리하고, 다 끝나야 메인화면으로 이동했던 것 같습니다. 

 

최근 IT기업 출신이 만든 MTS(토스나 카카오페이)도 같은 구조를 사용하고 있습니다. 다만 UI/UX적으로 교묘하게 숨겨서 사용자에게 더 나은 경험을 제공하고 있을 뿐이죠. 

 

기존 증권사들도 그러면 좋은데 이미 만들어놓은 프레임워크를 뜯어고칠 수가 없어서... 그래서 최근 증권사들이 새로운 앱을 내는 이유이기도 합니다. (미니스탁 같은..)

 

 

결론

 

그래서 결론은 뭐냐면..

"개발자라고 업무에 대한 지식이 없으면 안 된다"입니다.

 

증권업에 특징을 모르고 다른 앱들과 같이 일일이 API를 호출하여 정보를 받아가는 구조로 만들었다면, 지금의 증권사들은 앱이 느리다는 사용자들에 컴플레인에 허덕이고 있었을 테니까요. 

 

서비스를 알아야 개발을 잘하고, 개발을 잘해야 서비스가 잘 돌아갑니다.

우리 모두 내가 만드는 서비스에 관심을 가져봅시다 :)

 

 

 

 

 

 

반응형

댓글

Designed by JB FACTORY