본문 바로가기

전체 글

(161)
제로베이스 연습프로젝트 : 매장 테이블 예약 서비스4 - MQ, Websocket 기능확장 도입 필요성 : 비즈니스 시나리오  매장주인이 예약을 거절할 경우에 손님은 즉시, 이 내용에 대해서 알림을 받을 필요성이 있다. 이를 위해서 웹소켓 방식을 도입하여 서버에서 request가 없는 상황에서도 알림을 발송하게끔 하고자 한다.또한, 매장 주인이 예약을 거절할 경우에 DB에 status 변경작업도 일어나야 하기 때문에, 웹소켓 발송 서비스와 DB 저장 서비스를 비동기적으로 실행시켜서 결합도를 느슨하게 하고자한다. 설계검토 : 동기화할 task와 비동기 task 식별동기화할 작업 : DB저장과 MQ Task Produce는 동기화 되어야된다. 왜냐하면, 예약상태 변경과 DB저장은 핵심적인 비즈니스 로직이기 때문에 이 작업이 미완료 되었는데 MQ task Produce는 생성되면 거짓 알람이 되는..
Blocking / Non-Blocking I/O 어플리케이션 레벨에서의 I/O 처리방식 I/OInput과 Output, 데이터의 입출력OS 상의 I/O의 종류로 Network(Socket), file, pipe, device가 존재함.네트워크 통신은 socket을 통해서 데이터가 입출력되며, 네트워크 요청자들은 각각 소켓을 열고 통신한다 Blocking I/O (블로킹)I/O 작업을 요청한 프로세스/스레드는 요청이 완료될때까지 블락됨 Non-Blocking I/O (논블로킹)프로세스/스레드를 블락시키지 않고 요청에 대한 현재상태를 즉시 리턴요청을 보낸 후 해당 요청이 완료될 때까지 기다리지 않고 즉시 제어권을 반환합니다.요청을 처리하는 작업은 별도의 메커니즘(콜백, Future, 이벤트 루프 등)을 통해 비동기적으로 실행됩니다.   논블락킹 I/O 결..
메시지 큐, RabbitMQ, Kafka 개념 메세지란?메시지(Message)는 정보를 전달하기 위한 데이터 단위메세지큐란 ? 'Non-Blocking I/O 기반의 비동기화 미들웨어로, Producer와 Consumer를 분리하고 Queue에 이벤트를 임시 저장하여 비동기 메시징을 구현.' 메시지 큐의 기본 개념Producer(생산자): 메시지를 생성하여 큐에 삽입하는 역할Consumer(소비자): 큐에서 메시지를 꺼내 처리하는 역할Broker(중개자): 메시지를 큐에 저장하고 전달하는 메시징 시스템 (예: RabbitMQ, Kafka, Redis Pub/Sub) 메시지 큐 도입이유메시지 큐를 활용하여 내재된 동기기능을 외부화하고, 비동기 병렬처리를 통해 부하를 분산하며, I/O Block 방지하여 자원을 효율적으로 사용할 수 있음  동기적으로 다..
AI 영상분석과 websocket + message broker WebSocket에서 "확장성"이란 단순히 보관하는 데이터 양을 의미하는 것이 아니라,👉 "서버가 얼마나 많은 WebSocket 연결을 동시에 유지하고, 메시지를 효율적으로 전달할 수 있는가?" 를 의미해.👉 즉, 트래픽 증가에 따라 WebSocket 연결을 어떻게 관리할 것인가에 대한 개념이야.🔹 1. WebSocket에서 "확장성(Scalability)"이 중요한 이유📌 WebSocket은 **"지속적인 연결(Persistent Connection)"**을 유지해야 하므로,📌 사용자가 많아질수록 서버의 부하가 증가하고, 네트워크 리소스를 더 많이 소모하게 돼.📌 따라서 확장성을 고려하지 않으면, 사용자가 많아질수록 성능 문제가 발생할 수 있어.✔ 예제: 10명 vs 1만 명이 WebSock..
실시간 통신 기술의 개발 역사 실시간 통신 기술의 개발 역사 & WebSocket의 등장 배경웹 초창기에는 클라이언트가 서버의 데이터를 가져오는 단순한 방식이었지만, 점점 더 동적인 데이터를 실시간으로 받아야 할 필요성이 커짐. 이를 해결하기 위해 Polling, Long Polling, SSE 같은 방법이 등장했고, 이후 WebSocket이 실시간 양방향 통신의 최적 솔루션으로 자리잡음.실시간 통신 기술의 역사적 흐름시기기술특징한계1990년대 후반Polling클라이언트가 일정 주기로 서버에 요청네트워크 부하 심함, 실시간성 부족2000년대 초반Long Polling (Comet 기법)서버가 응답을 지연하여 실시간성 개선여전히 HTTP 요청-응답 방식, 서버 부하 큼2000년대 중반 (~2009)SSE (Server-Sent Even..
WebSocket 네트워크의 선택기준✅ 📌 "어떤 데이터인가?" → 데이터 유형에 맞는 최적의 프로토콜을 선택할 수 있음.✅ 📌 "어떤 방향으로 가는가?" → 단방향 vs 양방향에 따라 불필요한 기술 도입을 피할 수 있음.✅ 📌 "속도와 효율성이 중요한가?" → 과도한 리소스 사용을 막고 최적의 성능을 유지할 수 있음.웹소켓의 특징 1. 양방향 통신 (Full-Duplex)클라이언트와 서버가 동시에 데이터를 주고받을 수 있어 실시간 데이터 처리가 가능.채팅, 게임, 주식 시세, 실시간 알림 시스템에 적합.2. 연결 유지 (Persistent Connection)HTTP는 요청마다 새로운 TCP 연결을 생성해야 하지만, 웹소켓은 한 번 연결 후 지속적으로 재사용 가능.기존 HTTP 방식보다 **응답 지연(Latency..
백엔드 개발자와 프론트 엔드 이해도 왜 백엔드 개발자가 프론트엔드 코드를 알아야 할까?✅ 1. 클라이언트와의 통신을 이해해야 문제 해결이 빠름API를 만들었다고 끝이 아니라 클라이언트가 정상적으로 요청을 보내고 응답을 받는지 확인해야 함.CORS 문제, JSON 직렬화/역직렬화 문제, WebSocket 연결 문제 등이 생길 때 프론트 코드를 알아야 빠르게 원인을 파악할 수 있음.✅ 2. 테스트를 직접 할 수 있어야 함프론트엔드 없이 Postman, 브라우저 콘솔, WebSocket 클라이언트 등으로 API를 직접 테스트할 줄 알아야 함.REST API → Postman이나 cURL 활용WebSocket → 브라우저 콘솔에서 new WebSocket()으로 직접 연결 후 테스트 가능✅ 3. 프론트엔드와 협업할 때 커뮤니케이션이 원활해짐프론트..
Prometheus 모니터링 + Grafana 프로메테우스(Prometheus) 모니터링 프로그램프로메테우스(Prometheus)는 오픈소스 시스템 모니터링 및 경보(alerting) 도구. 프로메테우스는 여러 컴포넌트로 이루어져 있으며, 아래와 같은 아키텍처로 동작합니다.Exporter : 시스템에서 메트릭 데이터를 노출하는 역할. 서버, 애플리케이션, 컨테이너, 데이터베이스 상태를 모니터링하려면 각각 다른 Exporter가 필요합니다. Prometheus는 PULL 방식으로 데이터를 가져오기 때문에, 각 대상에 맞는 Exporter를 사용해야 합니다.Node Exporter → 물리/가상 서버의 CPU, RAM, 디스크, 네트워크 상태를 수집Micrometer + Prometheus Exporter → Spring Boot 애플리케이션 모니터링데..