전체 글 23

STOMP(Simple Text Oriented Messaging Protocol)

STOMP(Simple Text Oriented Messaging Protocol)은 WebSocket 위에서 사용되는 메시징 프로토콜이다.WebSocket은 기본적으로 양방향 통신만 지원하기 때문에 메시지의 의미나 목적지를 구분하지 않는다.STOMP는 기본적으로 Pub/Sub(발행/구독) 구조를 가지며 WebSocket 위에 명확한 메시지 구조와 라우팅 기능을 추가해 WebSocket을 HTTP 처럼 구조화해 사용 할 수 있도록 도와준다. Publisher메시지를 특정 주제(Topic)에 발행 Subscriber 관심있는 주제(Topic)을 구독하고 해당 주제의 메시지가 오면 자동으로 수신BrokerPublisher과 Subscriber 사이를 중개1. 의존성 설정Spring Boot에서 WebSock..

Java 2025.05.09

경량 MVC 프레임워크 개발

spring boot를 공부하며 내부 로직이 어떻게 돌아가는지 궁금증으로 mvc 패턴을 구현해봤다.https://github.com/mini0192/Java-Frameworkpublic static void main(String[] args) throws Exception { TomcatHandler tomcatHandler = new TomcatHandler(8080, Main.class.getPackage().getName()); tomcatHandler.run();} 가장 먼저 main 메서드는 tomcatHandler 인스턴스를 생성하고 이를 실행하는 방식으로 시작한다. public class TomcatHandler { private Tomcat tomcat; private..

Java 2025.04.17

서비스를 런칭하며 느낀 점

작지만 1인 개발로 서비스를 런칭해봤다.사용자는 아직 지인 4명이지만 생각보다 많은 것을 느꼈고 생각보다 많은 배움이 있었다. 느낀 점1. 단순히 개발의 한계2. 비용3. 생각도 못한 버그 이것보다 더 많은데 가장 많이 느낀건 이 세 가지였다. 1. 단순히 개발만 하면 안된다.이 글을 읽는 사람이라면 적어도 안 그럴 것 같지만 이 부분은 꼭 생각했으면 한다. 나는 아직 경험이 적긴 하지만 단순한 개발의 한계를 명확하게 느꼈었다. API를 만드는 건 누구나 할 수 있지만 잘 만드는 건 항상 어려웠다. 확장이 가능하도록 디자인 패턴을 고려하는 것도 어려웠고 코드의 가독성(협업이라면 팀원이 보기 편하게)을 좋게 만드는 것도 어려웠다. 이번 프로젝트는 프론트도 같이 만들어서 그런지 UI/UX도 신경쓰다보니 단순..

회고 2025.03.26

DB 공부하며 궁금했던 점

Q1: Transaction은 어떻게 구현되는걸까?이를 이해하기 위해 undo log에 대해 알아야 했다. undo log: 실행 취소 로그 레코드의 집합으로 Transaction 실행 후 rollback시 undo log를 참조해 이전 데이터로 복구하기 위해 사용하는 log이다. 쉽게 말하면 Transaction이 데이터를 변경하면 undo log에 현재 상태를 로그 형태로 기록하는 친구이다.Transaction이 Commit 되면 undo log는 삭제되거나 정리된다.1. undo log는 메모리에만 저장되는건 아니다.Transaction이 커지거나 메모리가 부족하면 disk에도 저장된다. 2. undo log는 데이터 변경이 발생할 때마다 기록된다.내가 햇갈렸던 부분이 undo log는 Transa..

Database 2025.03.14

Reflection

리플랙션은 자바에서 클래스나 맴버에 대한 정보를 런타임에 조사하고 조작할 수 있는 기능이다.함수와 필드, 생성자를 런타임 중에 알아낸다는 말이다.Class clazz = Class.forName("java.lang.String");Method[] methods = clazz.getDeclaredMethods();for(Method method : methods) { System.out.println(method.getName());} 리플랙션은 보통 프레임워크에서 많이 사용한다.DISpring에서는 객체를 직접 생성하는 것이 아니라, 리플렉션을 이용해 빈(Bean)을 생성하고 주입함리플랙션을 이용한 IoC/DI 구현을 보면 리플랙션을 이용해 Bean을 주입해 주는걸 볼 수 있다. 어노테이션 처리JP..

Java 2025.02.27

부하 테스트 및 성능 향상

나는 Chatting 서버를 만들면서 부하 테스트를 진행했다부하 테스트는 오픈소스인 hyperfoil를 사용했다.ERD: https://www.erdcloud.com/d/9S2KC5KojTj6hZzWh더미 데이터 생성먼저 테스트를 위해 더미 데이터를 생성했다.DELIMITER $$DROP PROCEDURE IF EXISTS loopInsert$$ CREATE PROCEDURE loopInsert()BEGIN DECLARE i INT DEFAULT 1; WHILE i room 테이블과 room_member 테이블에 의미 없는 데이터를 생성했다. API 부하 테스트방 목록 조회name: roomFindAllhttp: host: http://192.168.123.179:8002 s..

Java 2025.02.03

Spring WebSocket 구현(Feat. NextJS)

웹 소캣에 대한 내용은 여기서 확인하면 된다. WebSocket(STOMP) 정리WebSocket웹 서버와 양방향 통신을 가능하게 해주는 프로토콜이다.웹 서버는 기본적으로 단방향 통신으로 요청을 받으면 응답을 해주는 친구인데,간단하게 식당가서 주문하지 않는 음식은 안가져mini0192.tistory.comimplementation 'org.springframework.boot:spring-boot-starter-websocket'먼저 backend는 Spring Boot로 구현했고 프론트는 NextJs를 사용했다.백엔드 로직은 상단에 // back프론트 로직은 상단에 // front를 붙여 보기 편하게 했다.웹 소켓 연결 및 구독, 전송웹 소켓 연결 및 구독, 전송 설정이다.// back@Configur..

Java 2025.02.02

WebSocket(STOMP) 정리

WebSocket웹 서버와 양방향 통신을 가능하게 해주는 프로토콜이다.웹 서버는 기본적으로 단방향 통신으로 요청을 받으면 응답을 해주는 친구인데,간단하게 식당가서 주문하지 않는 음식은 안가져다 준다는 거다.WebSocket을 제외한 양방향 통신 구현물론 WebSocket 없이 양방향 통신은 가능하다. 보통 Polling을 사용하는데이는 클라이언트가 일정 주기로 서버에 요청을 보내 새로운 데이터를 받아오는 방식이다.쉽게 말해 식당에서 주기적으로 주방장한데 음식 언제나오냐 재촉하는거라 생각하면 편하다. Polling 방식으로도 양방향 통신이 가능하지만 문제점이 몇가지 존재한다.1. 실시간 성이 떨어짐서버에 주기적으로 요청을 보내 데이터가 준비됐는지 확인을 하는 방식은 실시간성이 떨어진다.2. 불필요한 네트워..

CS 2025.02.02

Spring boot에서 채팅 서버 구현하며 공부한 내용

최근에 개발을 공부하며 채팅 서버는 어떻게 구현하는 건지 궁금해서 WebSocket에 대해 공부를 진행했다.하면서 대용량 트래픽이라는 가정으로 NginX와 MSA, 메시지 큐를 적용했다.간단하게 그려봤는데 역할은 다음과 같다 NginXReverse Proxy클라이언트에게 서버의 정보를 숨기기 위해 Client와 Server의 중재자 역할 수행Load Balancing트래픽을 여러 서버의 분산시키는 장치 Kafka느슨한 결합서비스 간의 느슨한 결합으로 서비스의 확장성을 높임서비스 장애 처리다른 마이크로 서비스에 장애가 생겨도 다른 서버의 미치는 영향을 최소화해 안전성을 높임 Auth회원 관리회원 관련 로직 수행인증JWT 발급 및 RefreshToken 발급 ChatWebSocket을 활용해 채팅 로직 수행..

Java 2025.02.02