본문 바로가기

분류 전체보기

(748)
활성/비활성 사용자 구분 후 비활성 사용자 웹소켓 연결 끊김 처리 1. 개요- 콘서트 티켓 프로젝트에서는 사용자에게 웹소켓 연결을 제공합니다.  그런데 사용자의 웹소켓 연결이 끊어지게 되는 경우가 있는데,  이 경우는 2가지 케이스로 나누어집니다.  (1) 사용자가 일시적인 네트워크 이상으로 연결이 끊어지는 경우  (2) 사용자가 서비스에서 이탈한 경우   - 그리고 서버는 이 두 가지 케이스를 구분해서 서로 다른 조치를 취해야 합니다.  (1)의 경우에는 사용자 세션 정보나 대기열 정보, 5분 좌석 선점 예약 등을 그대로 유지해야 하고,  (2)의 경우에는 사용자 세션 정보나 대기열 정보, 5분 좌석 선점 예약 등을 삭제해야 합니다.   - 그리고 이 구분을 위해서는 사용자가 웹소켓으로 연결되는 경우,  헬스체크 데이터를 지속적으로 수집하여 서버에서 관리해야 합니다...
Websocket과 Redis Pub/Sub을 활용한 대기열->활성화열 전환 알림 시스템 1. 개요- 콘서트 티켓 프로젝트에서는 부하 조절을 위해 콘서트 대기열 기능을 제공합니다.  대기열에 있는 사용자는 주기적으로(예: 10초마다) 활성화열로 이동하며, 이때 토큰 활성화 알림을 받습니다.  사용자는 토큰 활성화 알림을 통해 티켓 예약 가능 여부를 확인하고, 예약을 진행할 수 있습니다.2. 기술 스택- 이 시스템은 WebSocket과 Redis Pub/Sub을 활용하여 구현되었습니다.3. 동작 방식사용자 대기열 등록사용자가 콘서트 티켓을 예매하려 하면 대기열에 등록됩니다.주기적 활성화열 이동일정 주기(예: 10초)마다 일부 사용자가 대기열에서 활성화열로 이동합니다.활성화열의 최대 인원은 5천명입니다.WebSocket을 통한 알림 전송Redis Pub/Sub을 이용하여 활성화된 사용자 목록을 ..
[#1] 서버 성능 개선하기 - 웹소켓 연결 테스트 개요-기획한 콘서트 대기열 기능을 완성하고, k6를 통해 Load Test를 진행했습니다.  -위와 같이, Spring, Websocket 서버는 각각 이중화를 하고, Redis, Kafka는 별도의 인스턴스로 분리하였습니다.  그리고 Nginx로 로드밸런싱을 하고, 분산 환경에서 어플리케이션 모니터링을 위한 Pinpoint를 배포하였습니다.   - Load 테스트는 K6로 수행하고, 성능 테스트의 결과는 Prometheus에 적재하여 Grafana로 확인하였습니다. 1) Load Test 목표 - 콘서트 대기열 기능에서 사용자가 처음 페이지에 접근하면 WebSocket 연결이 이루어집니다.  본 Load Test의 목표는 동시 1만, 5만, 10만 명이 WebSocket을 통해 동시 접속하는 상황에서도..
Nginx 로드밸런싱 설정하기 1) 서문- 이 글에서는 Nginx 로드밸런서를 도커로 GCP에 배포한 과정에 대해서 다뤄보겠습니다.  콘서트 티켓 프로젝트에서는 고가용성, 부하 조절을 위해 Nginx를 도입했습니다.  2) Nginx 도입 과정 (1) Nginx용 GCP 인스턴스 생성 - Nginx 배포를 위한 GCP 인스턴스를 독립적으로 생성합니다.  (2) Nginx 도커 이미지 다운로드 - docker pull nginx를 통해 Nginx 도커 이미지를 다운로드할 수 있습니다.  (3) nginx.conf 설정  -nginx.conf는 Nginx의 기본 설정 파일로, 모든 설정에 대한 진입점입니다. 워커 프로세스 개수, 튜닝, 동적 모듈 적재와 같은 글로벌 설정 항목을 포함하여, 다른 Nginx 세부 설정 파일에 대한 참조를 지..
[CS Fundamental] 디지털 시계 프로그램을 만들어야 한다. 초단위로 표시해야 한다. 어떻게 작성할 것인가? 그렇게 작성 하면 장점과 단점은 무엇인가? How accurate is python's time.sleep()? - Stack Overflow How accurate is python's time.sleep()?I can give it floating point numbers, such as time.sleep(0.5) but how accurate is it? If i give it time.sleep(0.05) will it really sleep about 50 ms?stackoverflow.com The accuracy of the time.sleep function depends on your underlying OS's sleep accuracy. For non-real-time OSs like a stock Windows, the s..
F-lab 솔직 후기 F-lab 백엔드 자바 과정을 두 차례 진행하고서 이에 대한 후기를 남깁니다.   1) 좋은 점- 실력 있는 개발자 멘토와 1:1로 교육 및 피드백을 받을 수 있다- 개발에 대한 시야를 넓힐 수 있다 - 깊이 있는 개인 프로젝트, 사이드 프로젝트를 진행할 수 있다.   2) 나쁜 점- 멘토마다 개발 역량과 별개로 멘토링 역량이 상이하다.  그래서 어떤 멘토를 만나느냐에 따라 성장의 폭이 매우 달라질 수 있다.  - 위의 문제를 해결하기 위해서 F-lab 측에서  (1) 멘토의 멘토링 성과를 투명하게 공개하거나  (2) 멘토에 대한 멘토링 교육   이 이뤄져야 한다고 생각하나, 두 부분 다 제대로 이뤄지지 않는듯하다
[CS Fundamental] 웹 성능 진단하기 1) 개요- 브라우저로 하나의 페이지를 요청하여 응답받기까지 지연시간이 걸릴 요소는 다양합니다.  이를 개선하기 위해 각 구간별로 다음과 같은 사항을 고민해봅니다.   2) 웹 성능 측정하기 - WebPageTest 를 사용하면 연결을 시도하는 위치, 환경부터 Repeat View(캐싱 등 테스트),  동일한 조건으로 여러 차례 테스트할 수 있다.  그리고 테스트한 결과를 영상으로 기록해준다.   (1) First Byte Time: 웹 서버에서 받은 컨텐츠의 첫 번째 바이트가 얼마만에 도착했는가?(2) Keep-Alive Enabled: TCP 연결을 재사용하기 위한 Keep-Alive 설정이 되어 있는가?(3) Compress Transfer: 스크립트 파일이 Content-Encoding으로 압축되..
[CS Fundamental] 파이썬 Yield 키워드 8. (파이썬 사용자) yield 키워드의 뜻이 무엇인가요?     a. yield가 좋은 이유는 무엇인가요?     b. yield의 내부 구현이 어떻게 되어 있을까요?  How to Use Generators and yield in Python – Real Python How to Use Generators and yield in Python – Real PythonIn this step-by-step tutorial, you'll learn about generators and yielding in Python. You'll create generator functions and generator expressions using multiple Python yield statements. You'l..
[CS Fundamental] IMAP이란? IMAP이란? IMAP와 POP3의 비교 | Cloudflare 1) IMAP이란?- 인터넷 메시지 액세스 프로토콜(IMAP)은 사용자가 다른 장치에서 이메일에 액세스할 수 있도록  하는 이메일 수신 프로토콜입니다.  - 인터넷 메시지 액세스 프로토콜(IMAP)은 이메일을 받기 위한 프로토콜입니다.  프로토콜은 기술 프로세스를 표준화하여 컴퓨터와 서버가 동일한 하드웨어 또는 소프트웨어를  사용하는지 여부와 관계없이 서로 연결할 수 있도록 합니다.  - IMAP의 주요 기능은 사용자가 모든 장치에서 이메일에 액세스할 수 있게 해준다는 것입니다.  IMAP은 서버에서 이메일 클라이언트로 이메일을 다운로드하는 대신,  이메일 서버와 이메일 클라이언트 간의 중개자 역할을 하기 때문입니다.  - IMAP의 이러한..
[도메인 주도 개발 시작하기] 애그리거트 루트 1) 애그리거트 루트란?- 주문 애그리거트는 다음을 포함한다. (1) 총 금액인 totalAmounts를 갖고 있는 Order 엔티티(2) 개별 구매 상품의 개수인 quantity와 금액인 price를 갖고 있는 OrderLine 밸류 - 구매할 상품의 개수를 변경하면 한 OrderLine의 quantity를 변경하고  더불 Order의 totalAmounts도 변경해야 한다.  그렇지 않으면 다음 도메인의 규칙을 어기고 데이터 일관성이 깨진다주문 총 금액은 개별 상품의 주문 개수 x 가격의 합이다. - 애그리거트는 여러 객체로 구성되기 때문에 한 객체만 상태가 정상이면 안된다.  도메인 규칙을 지키려면 애그리거트에 속한 모든 객체가 정상 상태를 가져야 한다.  주문 애그리거트에서는 OrderLine을 ..