Programming

Programming

대용량 트래픽 처리를 위한 시스템 설계

0. overview지금까지 공부하면서 또는 프로젝트를 경험하면서 항상 확장성을 고려한 설계에 관심을 가지고는 있었지만 막상 대용량 트래픽 처리를 위해서 시스템 설계 방식에 대한 방법이 명확히 떠오르지 않았고, 이번 기회에 어떤 방버들이 있는지 정리해보고자 한다.WAS 서버를 세팅하고 서비스를 구축했다. 간단히 구축한 시스템 구조는 아래와 같다.  사용자 증가사용자가 증가함에 따라, WAS의 성능적인 제한으로 점점 느려지는 현상이 발생할 수 있다. 따라서 WAS 서버를 Scale-Up을 통해 수직적 확장을 진행하여 느려지는 현상을 처리할 수 있다.   수직적 확장의 한계물론, 수직적 확장을 통해 어느 정도 성능 향상을 기대할 수 있지만 결국 트래픽이 계속해서 증가한다면 아무리 수직적 확장을 해도 한계에 ..

Programming/Spring

WebSocket과 JWT 토큰 인증

Spring 프로젝트 주제로 웹소켓 기반의 타이핑 게임을 진행하던 중 웹소켓과 JWT 토큰 인증 관련 문제를 직면하고 정리하고자 글을 작성하게 되었습니다. JWT 인증 기반의 인증 제 프로젝트에서 JWT를 기반으로 하는 인증은 클라이언트에서 보내는 모든 요청에 JWT를 넣어 전송하고, 서버에서 이를 검증해 통신을 주고 받도록 되어 있습니다. 문제점 : 위의 개발 환경에서 실시간 게임방 관련 기능을 개발하던 중 소켓 연결 시 JWT 토큰이 인식되지 않아 401 UNAUTHORIZED 가 발생하여 인증 과정이 정상적으로 동작하지 않는 이슈가 발생했습니다. 왜 그런가 ? 라고 생각했을 때 가장 먼저 떠오른 것은 401 HTTP 응답 코드를 보고 인증이 제대로 처리가 되지 않은걸까? 였습니다. 그러나 기존의 다..

Programming

Apache Kafka 란 ?

프로젝트를 진행하면서, 웹소켓을 통한 실시간 메세지를 전달해야 하다보니 메세지 브로커를 사용하게 되었고 기존에는 인메모리 브로커를 사용하여 구현을 했습니다. 그런데, 인메모리 브로커가 아래와 같은 단점들이 존재한다는 것을 알게 되었습니다. 1. 세션을 수용할 수 있는 크기가 제한되어 있다. 2. 장애 발생 시 메세지가 유실될 가능성이 높다. 3. 따로 모니터링 하는 것이 불편하다. 따라서 STOMP 전용 외부 브로커를 사용하고자 했고, 가장 많이 사용되는 RabbitMQ와 Kafka 중 무엇을 사용할 지 고민하다가 Kafka를 사용하기로 결정했습니다. (왜 Kafka를 선정했는지는 또 다른 포스팅에서 따로 작성하도록 하겠습니다.) 사용하는 김에 어떠한 구성요소들이 있고 개념이 무엇인지 인지하고 사용하기 ..

Programming/Spring

Spring에서 SSE(Server-Sent Events) 활용하기

2024.01월부터 웹소켓 기반의 타이핑 게임을 주제로 프로젝트를 진행하게 되었습니다. 프로젝트를 진행하면서 가장 먼저 구현하고자 했던 부분이 실시간으로 생성되고, 삭제되고, 누군가 입장하고, 퇴장하는 게임방을 실시간으로 사용자들에게 보여주는 기능이었고, 이를 어떻게 보여줄지 고민하게 되었습니다. 1. WebSocket 가장 먼저 떠올랐던 방법은 웹소켓입니다. 웹소켓은 실시간 양방향 데이터 전송을 가능하게 하는 통신 프로토콜로 일반적인 HTTP 프로토콜과는 달리 지속적인 연결을 유지하고 서버와 클라이언트 간의 데이터 전송이 빠르게 이루어지기 때문에 실시간 데이터를 받아야 하는 서비스에 어울린다고 생각하게 되었습니다. 2. SSE (Server-Sent Events) 두번째로 떠오른 방법은 SSE입니다. ..

엥재
'Programming' 카테고리의 글 목록