분류 전체보기 104

[Spring] Buffer로 채팅 기록 저장 조회, Kafka 분기하기

우리 팀은 현재 친환경 제품이나 캠페인을 펀딩할 수 있는 앱을 만들려고 하는데 기본적으로 msa 아키텍처로 구현을 하는 중이었다.처음에는 chat 컴포넌트에서 클라이언트와 웹소켓을 연결하고 채팅 기능을 구현할려고 했는데 우리가 분기한 컴포넌트 중에 notification이라는 소켓을 이용하여 알림 기능을 담당하는 컴포넌트가 있었다. 구현을 하고 보니 notification에서도 소켓을 연결하고 chat에서도 소켓을 연결하는게 비효율적이라는 생각이 들었다...  그래서 역할을 다시 분리하기로 했다.역할 구분notification-service : WebSocket 처리, Kafka Producer, Kafka Consumer (실시간 전송, 메시지 누적 감지)chat-service : 메시지 영속 저장 (..

카테고리 없음 2025.04.04

[CS] OOP의 5가지 설계 원칙

OOP란 현실 세계를 프로그래밍으로 옮겨와 현실 세계의 사물들을 객체로 보고 그 객체로부터 개발하고자 하는 특징과 기능을 뽑아와 프로그래밍하는 기법   ✨OOP의 4가지 특징1. Encapsulation(캡슐화)  - 객체의 속성과 행위를 하나로 묶고, 구현 코드를 외부에 감춰 은닉 하는 것을 뜻한다.다시 말하면 데이터와 처리 행위를 묶고, 외부에는 그 행위를 보여주지 않는 것이다. - 캡슐화는 객체의 응집도와 독립성을 높여 객체의 모듈화를 지향할 수 있게 도와준다.- 모듈화는 모듈 단위의 코드 재 사용이 가능하기 때문에, 코드 유지 보수에도 도움을 준다.  2. Abstraction(추상화)  - 중요하고 필요한 정보만을 표현하기 위해서, 객체의 공통적인 속성과 행위를 하나로 묶는 것을 의미  3. I..

JAVA 2025.04.03

[Spring] WebSocket + STOMP + Kafka로 단체 채팅 시스템 구현하기

이번엔 Kafka를 도입해서 비동기 메시지 처리 시스템을 구현해보자  Kafka 도입 전 흐름[Client1] → ws://localhost:8087/chat-room (SockJS) ← WebSocket 연결 ↓subscribe("/sub/chat/1") ← 클라이언트가 구독 ↓send("/pub/chat/1", "안녕") ← 클라이언트가 메시지 전송 ↓@MessageMapping("/chat/1") ← 서버에서 직접 처리 ↓convertAndSend("/sub/chat/1", "안녕") ← 바로 브로드캐스트 ↓[Client1], [Client2] → 동시에 메시지..

JAVA 2025.04.02

[Spring] Apache Kafka 이해하기

내 채팅 시스템에 Kafka를 먼저 도입하기 전에 kafka가 어떤 건지 부터 알아가는 시간을 가져보자!!   Apache Kafka- 실시간으로 스트림 데이터를 수집하고 처리하는 데 최적화된 ‘분산 이벤트 스트리밍 플랫폼(Distributed Data Streaming Platform)'- 이는 실시간으로 발생하는 대량의 데이터를 중앙 허브를 통해 흐르도록 설계되어 있다.- 데이터의 일관성을 유지하고 시스템 전반의 복잡성을 줄일 수 있음.- 이러한 다량의 데이터는 A 지점에서 B 지점까지만의 데이터가 이동되는 것뿐만 아니라, A 지점에서 Z지점까지의 필요한 모든 곳에 대규모 데이터를 동시에 전달할 수 있어서- 현대적인 데이터 파이프라인 구축에 필수적인 도구로 자리잡았으며, Netflix, LinkedI..

Spring 2025.04.01

[Spring] Spring Boot WebSocket + STOMP 사용해서 단체 채팅 구현하기

WebSocket + STOMP를 이용해서 단체 채팅방을 한번 구현해보자 웹 소켓 구현을 위한 클래스들 1. WebSocketConfig2. ChatWebSocketHandler3. WebSocketStompBrokerConfig4. ChatMessageDto5. ChatController  1. WebSocketConfig 클래스 -  WebSocket 최초 연결을 위해 구성하는 환경 구성 파일 클래스  1. @EnableWebSocket- WebSocket을 활성화하고 @Configuration 어노테이션을 통해 환경파일임을 지정한다.- 이 어노테이션을 사용하면 Spring 애플리케이션에서 WebSocket 기능을 사용할 수 있다. 2. WebSocketConfigurer(interface)- Web..

Spring 2025.03.31

[CS] 프록(Proxy)란?

✨ Proxy란?클라이언트와 서버 사이에서 통신을 할때 중간에서 '중계 역할을 수행하는 서버'클라이언트와 서버 간에는 직접적으로 통신하는 것이 아닌 중계역할을 하는 '프록시 서버'를 거쳐서 서로 간의 요청을 수행한다. 더보기[ 더 알아보기 ]💡 클라이언트와 서버 사이에 프록시 서버가 존재하면, 클라이언트가 호출하는 엔드포인트는 프록시 서버가 되는 건가?- 프록시를 사용하면 클라이언트는 프록시 서버로 요청을 보내야 하는데, 프록시 서버는 이러한 요청을 받아 실제 서버로 전달하고, 서버의 응답을 다시 클라이언트에게 전달한다.- 이를 통해 클라이언트는 직접 서버와 통신하지 않고, 프록시 서버를 통해 간접적으로 통신할 수 있다.- 단, DNS를 이용하면 프록시 서버의 역할을 보다 간편하게 수행할 수 있다. D..

CS 2025.03.31

[Spring] Spring Boot WebSocket + STOMP 구성요소

✨ Spring Boot WebSocketSpring Framework에서 제공하는 기능으로, 실시간 양방향 통신을 가능하게 해 준다. Web Socket을 사용하면 서버와 클라이언트 간의 연결이 지속적으로 유지되어, 데이터를 실시간으로 주고받을 수 있다.주로 채팅 애플리케이션, 실시간 알림 시스템, 주식 거래 플랫폼 등에서 사용 소켓 통신이 무엇인지 궁금하시면 아래 소켓 통신 포스팅 글을 참고해 주세요https://gyeongsangman.tistory.com/139 [CS] 소켓 통신 (Socket Communication) 이해하기✨  소켓 통신(Socket Communication) 이란??네트워크에서 두 컴퓨터 간의 '실시간 양방향 통신'을  제공하는 기술양방향 통신은 송신자 측이 데이터를 수신..

Spring 2025.03.30

[CS] 소켓 통신 (Socket Communication) 이해하기

✨  소켓 통신(Socket Communication) 이란??네트워크에서 두 컴퓨터 간의 '실시간 양방향 통신'을  제공하는 기술양방향 통신은 송신자 측이 데이터를 수신할 수 있으며, 수신자 측이 데이터를 송신할 수 있는 구조를 가진다. 두 컴퓨터 간에는 특정 IP 주소와 포트번호의 조합으로 네트워크 간의 연결을 수행하며, 수신자(클라이언트)는 데이터를 요청하면 송신자(서버)에서는 요청에 대한 응답을 제공해 주는 '클라이언트-서버' 모델을 사용하여 데이터를 송수신 할 수 있다.소켓통신은 'TCP' 와 'UDP'라는 두 가지 주요 프로토콜을 사용할 수 있다. 이러한 프로토콜을 통해 웹서버, 이메일 서버, 데이터베이스 서버 등 다양한 응용 프로그램에서 사용되며, 실시간 통신, 스트리밍, 온라인 게임에서도 ..

CS 2025.03.30