이번에 미니 사이드 프로젝트로, 실시간 채팅기능을 구현하게 되었는데 이 과정을 한번 정리를 해보려합니다. 우선 저희의 요구사항은 다음과 같았습니다. 사용자간의 실시간 채팅이 구현되어야함. 방이름을 기반으로 채팅방이 구분되어야함. 전에 했던 채팅 기능이 저장이 되어야함. scale-out시에 채팅기능에 문제가 생기지 않아야함. 크게 이렇게 4가지가 있었는데요. 이 요구사항을 지키기위해서 갖은 삽질과 버그가 있었습니다. 이 미니 사이드 프로젝트는 Spring, 타임리프, Redis, mongoDB로 구현되어있으며, 중간에 발생한 문제점으로 인해 Kafka로 마이그레이션을 시도했습니다만.... 시간이 부족해 실패했습니다 이과정에 대해선 아래에서 자세히 설명드리겠습니다. 일단 먼저 스프링 WebSokcet과 M..
이번엔 제가 스프링으로 웹소켓을 구현하면서 겪었던 문제들을 해결하면서 고민했던것과 해결한 결과를 말씀 드리려 합니다. 예전에 웹소켓을 STOMP로 구현하면서 블로그 글을 올린 적이 있었는데, 그때엔 제대로 작동이 되었습니다. 하지만, 최근에 STOMP 테스트 하는 것이 어떤 이유에서인지 모르겠지만, 막혔더라구요...ㅜ 그래서 다양한 방법으로 해결을 하려 했지만, STOMP를 결국 활용을 못하고, 스프링 WebSocket으로 리팩토링하여 해결으 하였습니다. 우선 다음과 같은 단계로 설명을 드리려합니다. 현재 STOMP의 문제. STOMP 테스트 시스템 부재 STOMP 대체제인 스프링 WebSocket 직접 구현 스프링 WebSocket 테스트 현재 STOMP의 문제. 과거에 제가 STOMP를 이용해 웹소켓..
이번 글에서는 도커를 활용해 스프링서버를 배포하는 과정을 설명하겠습니다. 저희가 서버 1대를배포하거나, 서버의 환경설정이 간단하다면, 일반적으로 EC2에서 파일을받아 빌드하면되겠지만, 만약 여러대의 서버를 배포해야한다던가, 서버배포하기전에 환경설정작업이 매우 복잡하다면, 이렇게 일반적으로 빌드하게 될때 매우 복잡해집니다. 따라서, 도커는 가상환경의 장점을 통해 빠른 서버 배포와 환경설정이 가능하게 해줍니다. 배포 과정 먼저, 도커를 이용해 배포하는 과정을 간략하게 설명 드리겠습니다. Dockerfile 생성 Dockerfile 기반으로 도커이미지 생성 도커 이미지를 도커허브로 Push EC2에서 도커허브에서 도커 이미지 Pull 받기 도커이미지 기반으로 컨테이너 생성 후 실행 (도커 컴포즈로 대체가능) ..
엔티티 리포지토리란? -엔티티 데이터 접근 로직을 캡슐화하는 패턴으로, 특정 엔터티 타입에 대한 CRUD(Create,Read,Update,Delete)연산을 제공합니다. 이를 이용해서 엔티티와 데이터베이스 사이에서 데이터 접근을 어떻게 할지 지정할 수 있습니다. 엔티티 리포지토리에서 지원하는 연산으로는 기본 CRUD 연산 + 쿼리 메서드 등이 있습니다. 엔티티 리포지토리 예시 public interface UserRepository extends JpaRepository { // 여기에 추가적인 쿼리 메서드를 정의할 수 있습니다. List findByLastName(String lastName); } 기본 CRUD 연산 save() -엔티티를 저장합니다. 새 엔티티일 경우 생성, 기존 엔티티면 업데이트..
JPA(Java Persistence API) - JAVA언어를 위한 ORM 기술입니다. ORM을 활용하여 데이터베이스의 데이터를 객체로 매핑하고, 객체를 데이터베이스에 데이터베이스에 저장하고 검색하기 위한 기능을 제공합니다. 이는 개발자가 직접 SQL쿼리를 작성하지 않아도 데이터 베이스와 상호작용할 수 있또록 하며, 객체지향 프로그래밍을 더 잘 지킬 수 있게 합니다.JPA는 내부적으로 JDBC가 구현되어있어 개발자가 따로 SQL문을 입력하지않아도, JPA가 자동으로 JDBC를 이용해 데이터베이스와 통신합니다. ORM(Object-Relational Mapping) -객체지향 프로그래밍과 관계형 데이터베이스 간의 데이터를 자동으로 매핑하는 기술입니다.객체와 관계형 데이터베이스 의 테이블과 매핑작업을 자동..
웹소켓(Web Socket)이란? -클라이언트와 서버간의 양방향 통신을 가능하게 하는 프로토콜입니다. HTTP와 같은 웹표준 프로토콜입니다. 이는 실시간, 이벤트 기반 통신이 필요한 애플리케이션을 개발할때 쓰이며, 서버와 클라이언트간에 자유롭게 메세지를 보낼 수 있게 연결을 합니다. 이 연결을 통해 클라이언트와 서버는 자유롭게 데이터를 서로 송수신을 할 수 있고, 서버측에서는 웹소켓 연결된 클라이언트를 관리할 수 있습니다. 스프링 웹소켓 구현 과정 WebSocket 설정 @Configuration과 @EnableWebSocketMessageBroker를 이용해 웹소켓 설정 파일을 구현합니다. 이 설정 클래스는 WebSocketMessageBrokerConfigurer를 구현하고 있는데, 총 두개의 메서드..
JDBC(Java Database Connectivity) -자바와 데이터베이스 간의 연결을 하는 자바 API입니다. 이를 이용해 자바에서 데이터베이스에 대한 쿼리를 수행하고 데이터를 검색,삽입,갱신,삭제등을 할 수 있습니다. 즉, 데이터베이스를 직접 사용하는게 아닌 자바를 활용해 데이터베이스에 접속하고, 해당 데이터베이스에서 쿼리를 실행해 결과를 받아오는 기술입니다. JDBC 과정 데이터베이스 드라이버 로드 -자바에서 사용할 데이터베이스에 해당하는 JDBC 드라이버를 클래스 패스에 추가하고, 드라이버를 로드하는과정입니다. 데이터베이스 연결 설정 -JDBC URL, 사용자명, 비밀번호 등을 설정하여 데이터베이스에 연결합니다. Statement 생성 -SQL문을 실행하기 위해 Statement 객체 또는 ..