
이번에 미니 사이드 프로젝트로, 실시간 채팅기능을 구현하게 되었는데 이 과정을 한번 정리를 해보려합니다. 우선 저희의 요구사항은 다음과 같았습니다. 사용자간의 실시간 채팅이 구현되어야함. 방이름을 기반으로 채팅방이 구분되어야함. 전에 했던 채팅 기능이 저장이 되어야함. scale-out시에 채팅기능에 문제가 생기지 않아야함. 크게 이렇게 4가지가 있었는데요. 이 요구사항을 지키기위해서 갖은 삽질과 버그가 있었습니다. 이 미니 사이드 프로젝트는 Spring, 타임리프, Redis, mongoDB로 구현되어있으며, 중간에 발생한 문제점으로 인해 Kafka로 마이그레이션을 시도했습니다만.... 시간이 부족해 실패했습니다 이과정에 대해선 아래에서 자세히 설명드리겠습니다. 일단 먼저 스프링 WebSokcet과 M..

이번엔 제가 스프링으로 웹소켓을 구현하면서 겪었던 문제들을 해결하면서 고민했던것과 해결한 결과를 말씀 드리려 합니다. 예전에 웹소켓을 STOMP로 구현하면서 블로그 글을 올린 적이 있었는데, 그때엔 제대로 작동이 되었습니다. 하지만, 최근에 STOMP 테스트 하는 것이 어떤 이유에서인지 모르겠지만, 막혔더라구요...ㅜ 그래서 다양한 방법으로 해결을 하려 했지만, STOMP를 결국 활용을 못하고, 스프링 WebSocket으로 리팩토링하여 해결으 하였습니다. 우선 다음과 같은 단계로 설명을 드리려합니다. 현재 STOMP의 문제. STOMP 테스트 시스템 부재 STOMP 대체제인 스프링 WebSocket 직접 구현 스프링 WebSocket 테스트 현재 STOMP의 문제. 과거에 제가 STOMP를 이용해 웹소켓..
AOP란? -객체 지향 프로그래밍에서 나타나는 문제점을 해결하기위한 프로그래밍 기법으로 관심사를 분리 시키는 기법입니다. 즉, 여러 함수나 객체에 반복적으로 나타나는 코드를 따로 모듈화를 하여 중복코드를 줄이고 가독성을 높이는 기법으로 주로 로깅, 트랜잭션 관리, 보안등의 코드를 모듈화 할 때 쓰입니다. AOP 기본개념 Aspect -여러 객체나 함수에 걸쳐 나타나는 반복적인 코드를 모듈화 한 것입니다. -'@Aspect' 애노테이션을 클래스에 설정하여 사용합니다 -여러 서비스나 컨트롤러에서 반복적인 동작을 해야할때 이를 Aspect로 정의하고 재사용합니다. Advice(어드바이스) - JoinPoint에서 실제로 실행되어야 할 코드 블록을 의미합니다. - 다양한 종류의 Advice가 있으며, 코드가 실..
엔티티 리포지토리란? -엔티티 데이터 접근 로직을 캡슐화하는 패턴으로, 특정 엔터티 타입에 대한 CRUD(Create,Read,Update,Delete)연산을 제공합니다. 이를 이용해서 엔티티와 데이터베이스 사이에서 데이터 접근을 어떻게 할지 지정할 수 있습니다. 엔티티 리포지토리에서 지원하는 연산으로는 기본 CRUD 연산 + 쿼리 메서드 등이 있습니다. 엔티티 리포지토리 예시 public interface UserRepository extends JpaRepository { // 여기에 추가적인 쿼리 메서드를 정의할 수 있습니다. List findByLastName(String lastName); } 기본 CRUD 연산 save() -엔티티를 저장합니다. 새 엔티티일 경우 생성, 기존 엔티티면 업데이트..
엔티티란? -데이터베이스 테이블과 직접 매핑되는 JAVA 객체를 나타냅니다. 엔터티를 사용해 데이터베이스 테이블의 레코드를 객체 지향적으로 표현할 수 있게 됩니다.엔티티는 주로 애노테이션으로 구성이 됩니다. 엔티티 특징 테이블 매핑 -엔티티는 데이터베이스 테이블에 직접 매핑이 되며, 한 엔티티 클래스는 하나의 테이블에 매핑이 됩니다. 식별자 -모든 엔티티는 유일한 식별자를 가져야하며, 이는 데이터베이스 테이블의 기본 키(Primary key)에 매핑됩니다. 상태관리 -JPA는 엔티티의 상태를 관리하는데, New , Persistent , Detached , Removed 총 4개의 상태가 있습니다. 관계 매핑 -객체 지향적인 엔티티 간의 일대다, 다대다, 일대일 관계를 애노테이션으로 구현하여, 객체 지향..

JPA(Java Persistence API) - JAVA언어를 위한 ORM 기술입니다. ORM을 활용하여 데이터베이스의 데이터를 객체로 매핑하고, 객체를 데이터베이스에 데이터베이스에 저장하고 검색하기 위한 기능을 제공합니다. 이는 개발자가 직접 SQL쿼리를 작성하지 않아도 데이터 베이스와 상호작용할 수 있또록 하며, 객체지향 프로그래밍을 더 잘 지킬 수 있게 합니다.JPA는 내부적으로 JDBC가 구현되어있어 개발자가 따로 SQL문을 입력하지않아도, JPA가 자동으로 JDBC를 이용해 데이터베이스와 통신합니다. ORM(Object-Relational Mapping) -객체지향 프로그래밍과 관계형 데이터베이스 간의 데이터를 자동으로 매핑하는 기술입니다.객체와 관계형 데이터베이스 의 테이블과 매핑작업을 자동..
웹소켓(Web Socket)이란? -클라이언트와 서버간의 양방향 통신을 가능하게 하는 프로토콜입니다. HTTP와 같은 웹표준 프로토콜입니다. 이는 실시간, 이벤트 기반 통신이 필요한 애플리케이션을 개발할때 쓰이며, 서버와 클라이언트간에 자유롭게 메세지를 보낼 수 있게 연결을 합니다. 이 연결을 통해 클라이언트와 서버는 자유롭게 데이터를 서로 송수신을 할 수 있고, 서버측에서는 웹소켓 연결된 클라이언트를 관리할 수 있습니다. 스프링 웹소켓 구현 과정 WebSocket 설정 @Configuration과 @EnableWebSocketMessageBroker를 이용해 웹소켓 설정 파일을 구현합니다. 이 설정 클래스는 WebSocketMessageBrokerConfigurer를 구현하고 있는데, 총 두개의 메서드..
- Total
- Today
- Yesterday
- 인공지능
- DB
- 스프링
- 포트포워딩
- 보안
- 메세지큐
- 서버
- 컴퓨터구조
- 테이블
- sql
- 웹소켓
- 데이터베이스
- 파인튜닝
- 데이터
- 깃허브
- 클라우드
- 컨테이너
- 도커
- 문법
- 프로토콜
- 자동화
- 소프트웨어공학
- 쿼리
- nat
- 깃
- 배포
- 자바
- JPA
- IP주소
- 네트워크
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |