이 글은 대략 1년전 로또번호 랜덤 생성 도구를 제작할 당시 눈에 띈 내용입니다.
과거에 만들어져 이렇겠지만 분명 최적화가 가능한 방식이 있고, 이런 서비스가 은근히 많습니다.
로또는?
로또는 발행일을 비롯하여, 회차, 게임의 정보(찍은 숫자 6개)등을 포함하여 발행됩니다.
발급과정은 발급과 동시에 발급 장소, 게임 정보 등이 로또 발행 업체측으로 전송이 되어 저장될것입니다.
하지만, 발급과정등 부수적인 내용을 다룰것이 아니라
이 글에서 중점적으로 다룰부분은 웹서비스 최적화입니다.
기술적인 내용을 다루므로.. 초보개발자~전문가들을 위한 글입니다.
이해가 안되시는 부분이 있다면 댓글 남겨주시면 해당부분 설명을 추가해보도록 하겠습니다.
로또 QR코드 기능
로또에는 QR코드 기능이 있습니다.
여기에는 다음의 정보가 들어있습니다.
- 회차 정보
- 게임 정보(찍은 번호 리스트)
로또 QR코드는 아래와 같은 특징이 있습니다.
- 추첨일에 이용자가 몰림
- 한사람이 1회~N회 같은 기기로 접속함
추첨일인 토요일에 사람이 몰린다는 점, 한 사람이 N회 접속한다는 점.
두 가지 특징을 활용하면 로또 당첨 확인 웹 서비스를 조금 더 쾌적하게 처리할 수 있습니다.
현재 방식의 문제점
현재는 아래와 같이 Get Parameter로 전송하여 결과가 렌더링된 HTML을 불러오게 됩니다.
https://공식홈페이지/qr.do?method=winQr&v=0955m010715172842m030712163541m202730353941m031328364445m021214192934
이런 방식은 사람이 몰리는 경우 좋지 않은 방법입니다.
또한 한사람이 여러번 방문할때도 좋지 않습니다.
최적화를 하면?
#을 이용하여 서버로 내용 전송을 피할 수 있습니다.
https://공식홈페이지/qr.do#method=winQr&v=0955m010715172842m030712163541m202730353941m031328364445m021214192934
다만, 이런 방식이 실제 발급 기기에 반영이 될지는 모르겠습니다.
발급 과정에 서버에서 QR코드를 생성하거나 URL을 발급한다면 바로 적용이 가능할것입니다.
기존과 차이점은?
단순히 URL에서보면 ?가 #으로 변했습니다.
그런데 # 뒷부분은 브라우저에서 처리하는 내용으로 서버로 전송하지 않습니다.
이를통해 알 수있는점은 서버는 아래의 주소만 응답하면 됩니다.
https://공식홈페이지/qr.do
서버 렌더링이 사라지고 정적인 HTML만 전송하므로 서버의 CPU사용량을 대략 1000배 이상 줄일수 있습니다.
브라우저 캐시를 사용하면, 한사람이 여러번 방문시 브라우저 캐시에서 응답할것입니다.
토요일 사람이 몰리는 시점에 만약, 네트워크 사용량 문제로 병목이 걸린다면 회선 증설만이 답이 될 수 있겠지만
로또 게임수, 방문자수를 볼때 CPU사용량에서 병목이 걸릴것으로 저는 예상합니다.
이 변경사항 하나로 사람이 몰리는것 + 한사람이 여러번 방문시 캐시 응답 불가 모두 해결이 가능합니다.
이 경우 Javascript에서 확인 코드를 만들어야됩니다.
//document.location.hash=="#method=winQr&v=0955m010715172842m030712163541m202730353941m031328364445m021214192934"
var queryString=[];
for(var i=0,queryString_tmp=document.location.hash.split("#")[1].split("&");i<queryString_tmp.length;i++){
var tmp=queryString_tmp[i].split("=");
queryString[tmp[0]]=tmp[1];
}
이런식으로 정보를 파싱해올 수 있습니다.
queryString.method: "winQr"
queryString.v: "0955m010715172842m030712163541m202730353941m031328364445m021214192934"
위의 정보를 토대로 원래 페이지에는 당첨 번호 정보만 있으면 비교하여 표시가 가능합니다.
https://공식홈페이지/qr.do
당첨번호를 JS에서 비교하게 되면 실서버에는 사용자별 HTML렌더링(CPU연산)이 사라지고
바로 파일을 읽고 통신하는 Disk IO와 Network IO만 영향을 끼치게 됩니다.
이런 방식은 매우 많은 서비스에서 활용가능하며 서버의 병목 부분별 최적화 방식은 다를 수 있습니다.
다만, 보안이 필요한 내용은 사용자단에서 처리하면 안됩니다.
이상 웹사이트 최적화 기법과 로또 당첨번호 사이트 렉 안걸리는 방법이였습니다.
IT분석
원하는 서비스를 분석요청하실 수 있습니다. (댓글로 남겨주세요.)
다만, 몇 가지 제한사항이 있습니다.
1. 정보통신망법률을 위반하지 않는 경우에만 가능합니다.
1. 리버스 엔지니어링은 하지 않습니다. (EXE파일, 난독화파일 등 분석작업은 하지 않습니다.)
2. 개방된 서비스만 신청이 가능합니다. (누구나 접근가능해야되며, 암호화등 숨겨진 서비스는 불가)
3. 임의변경을 시도해야하는 경우는 받지 않습니다.
2. 관심을 가지고 있는 사용자가 많은 내용만 분석 신청가능합니다.
신청은 댓글 또는 방명록에서 해주세요.
'소개 > IT분석' 카테고리의 다른 글
최근 확산중인 스미싱 문자 (032번호, crvud.com, tgbhb.com) (2) | 2022.04.13 |
---|---|
KT + CloudFlare 오후8시~새벽1시경 느려지는 현상 (1) | 2021.11.23 |
d2ufj6gm1gtdrc.cloudfront.net 주소는? (0) | 2021.10.11 |
최근 CloudFlare의 라우팅 변경사항 (4) | 2021.09.01 |
티스토리 '애드센스 연동' 낱낱이 파헤치기 (5) | 2020.12.25 |
현재 발생한 유튜브, 구글 로그인 문제 (0) | 2020.12.14 |
트위치) 채팅방에 오신 것을 환영합니다! 신규 (0) | 2020.11.25 |
"영원회귀: 블랙서바이벌" 전적검색이 느린 이유 분석 (1) | 2020.11.17 |
저작권 보호안내
무단 전재, 재배포 행위는 금지됩니다. (글을 복사하여 게시금지)
본문의 일부(링크용 문장) 인용은 가능하지만, 출처와 링크(a 태그)를 남기셔야 됩니다.
(웹툴을 이용하고, 스크린샷/녹화하는것은 상관없습니다.)
예외적으로. 저에게 허락받은 경우에는 본문을 전재할 수 있습니다.
만약, 본문 공유를 원하신다면 링크 공유를 해주세요
저작권 정책 확인하기링크 공유하기