
이번에 미니 사이드 프로젝트로, 실시간 채팅기능을 구현하게 되었는데 이 과정을 한번 정리를 해보려합니다. 우선 저희의 요구사항은 다음과 같았습니다. 사용자간의 실시간 채팅이 구현되어야함. 방이름을 기반으로 채팅방이 구분되어야함. 전에 했던 채팅 기능이 저장이 되어야함. 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가 있으며, 코드가 실..
웹소켓(Web Socket)이란? -클라이언트와 서버간의 양방향 통신을 가능하게 하는 프로토콜입니다. HTTP와 같은 웹표준 프로토콜입니다. 이는 실시간, 이벤트 기반 통신이 필요한 애플리케이션을 개발할때 쓰이며, 서버와 클라이언트간에 자유롭게 메세지를 보낼 수 있게 연결을 합니다. 이 연결을 통해 클라이언트와 서버는 자유롭게 데이터를 서로 송수신을 할 수 있고, 서버측에서는 웹소켓 연결된 클라이언트를 관리할 수 있습니다. 스프링 웹소켓 구현 과정 WebSocket 설정 @Configuration과 @EnableWebSocketMessageBroker를 이용해 웹소켓 설정 파일을 구현합니다. 이 설정 클래스는 WebSocketMessageBrokerConfigurer를 구현하고 있는데, 총 두개의 메서드..

JDBC(Java Database Connectivity) -자바와 데이터베이스 간의 연결을 하는 자바 API입니다. 이를 이용해 자바에서 데이터베이스에 대한 쿼리를 수행하고 데이터를 검색,삽입,갱신,삭제등을 할 수 있습니다. 즉, 데이터베이스를 직접 사용하는게 아닌 자바를 활용해 데이터베이스에 접속하고, 해당 데이터베이스에서 쿼리를 실행해 결과를 받아오는 기술입니다. JDBC 과정 데이터베이스 드라이버 로드 -자바에서 사용할 데이터베이스에 해당하는 JDBC 드라이버를 클래스 패스에 추가하고, 드라이버를 로드하는과정입니다. 데이터베이스 연결 설정 -JDBC URL, 사용자명, 비밀번호 등을 설정하여 데이터베이스에 연결합니다. Statement 생성 -SQL문을 실행하기 위해 Statement 객체 또는 ..
단위 테스트(Unit Test) -개별적인 컴포넌트 또는 메서드 등의 작은 단위를 테스트하는 단계입니다.\ 주로 코드의 기능을 확인하고 버그를 발견하는데에 초점을 둡니다. 개별적인 단위의 코드를 테스트하기 때문에 각각의 부분을 나눠서 오류의 위치를 빠르게 찾을 수 있습니다. 스프링에서는 주로 JUnit을사용합니다. 통합 테스트(Integration Test) -여러 컴포넌트 또는 서비스 간의 상호작용을 테스트하여 전체적인 시스템의 동작을 확인하는 단계입니다. 개별적인 단위들을 합쳐서 서로 상호작용을 테스트하기에 실제 어플과 유사하게 테스트를 진행합니다. 외부와의 연결(데이터베이스, 웹 서비스등..)을 통해 실제 어플의 환경을 구축할 수 있습니다. 단위 테스트 통합 테스트 범위 함수,메서드,클래스... 여..
URL에 데이터 삽입 방법 쿼리 파라미터(Query Parameter) -URL의 끝에 '?'을 사용하여 쿼리파라미터를 추가하여 데이터를 전송하는 방식입니다. 쿼리 파라미터는 key=value형식으로 데이터를 전송하고, 여러개의 쿼리 파라미터를 보낼때는 '&'로 구분합니다. EX) http://example.com/products?id=123&name=example 경로 변수(Path Variable) -URL 경로에 데이터를 변수로 넣어 전달하는 방식입니다. 하나의 경로 부분에 데이터를 삽입하여 변수처럼 사용할 수 있습니다. 하나의 데이터만 전송할 수 있으며, {id}와 같은 형태로 경로 변수를 사용할 수 있습니다. EX) http://example.com/products/{id} -> http://e..
- Total
- Today
- Yesterday
- DB
- 소프트웨어공학
- 보안
- 클라우드
- 문법
- 데이터
- 파인튜닝
- 포트포워딩
- 컴퓨터구조
- JPA
- 자바
- 쿼리
- 자동화
- nat
- 서버
- 컨테이너
- 데이터베이스
- 프로토콜
- 도커
- 깃
- 네트워크
- 스프링
- 깃허브
- IP주소
- 웹소켓
- 배포
- 테이블
- 인공지능
- 메세지큐
- sql
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |