2025/04 4

[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