메세지 전송 실패-직렬화 문제
·
WebSocket/트러블 슈팅
문제 원인현재 프로젝트의 ChattingController에서 메시지를 전송할 때 발생하는 오류이다. 에러 메시지에서 SimpleMessageConverter는 String, byte[], 그리고 Serializable 형식의 페이로드만 지원한다고 나타나고 있으며, 전송된 객체가 ChatMessageRequestDto라는 DTO 클래스임을 알 수 있다. 원인 분석ChattingController에서 ChatMessageRequestDto 객체를 전송하기 위해 STOMP 메시지 변환기가 SimpleMessageConverter로 설정되어 있을 가능성이 있다.SimpleMessageConverter는 String, byte[], 또는 Serializable이 아닌 객체를 직렬화하여 전송할 수 없기 때문에, ..
채팅방 목록 순환참조 문제
·
Spring/Spring 트러블 슈팅
원인은?프로젝트에서 채팅방 목록을 조회할 때 발생하는 순환 참조 문제를 해결하기 위해 코드를 개선하였다. 기존에는 ChatRoom 엔티티를 그대로 반환하거나 참조하는 과정에서 @ManyToOne 또는 @OneToMany와 같은 양방향 관계로 인해 순환 참조가 발생할 수 있었으나, 이로 인해, 직렬화 과정에서 무한 루프에 빠지는 문제가 있었다. 어떻게 해결했나?이를 해결하기 위해 DTO(Data Transfer Object)를 활용하여 필요한 필드만 가져오도록 하였다. ChatDto.ChatRoomDto라는 DTO를 정의하여 채팅방 조회 시 필요한 최소한의 필드(chatRoomId, createdAt)만 반환하도록 하고,ChatRoom 엔티티의 조회 메서드를 변경하여 ChatRoomDto로 변환 후 반환하..
Websocket 권한문제
·
WebSocket/트러블 슈팅
웹소켓에 엔트포인트를 알맞게 넣었지만 403이 뜨면서 권한문제로 에러가 발생하였다. 보통 Spring Security에서 권한을 제안하기에 requestMatcher를 통해 엔드포인트에도 권한을 부여해야한다.  requestMatcher에 엔트포인트 경로를 추가하여 권한을 부여한다. .requestMatchers란?접근 권한 제어requestMatchers로 특정 경로에 접근할 수 있는 권한을 제어할 수 있습니다. 예를 들어, /admin/** 경로는 관리자 권한만 접근하도록 설정할 수 있다. 인증/비인증 경로 설정로그인, 회원가입 등 인증이 필요 없는 페이지는 permitAll()로 설정하여 누구나 접근할 수 있도록 할 수 있다. 정확한 경로 매칭requestMatchers에 정규 표현식이나 와일드카드..
RabbitMQ 로그인 문제
·
RabbitMQ/트러블 슈팅
로컬에서 서버가 정상적으로 실행이되는지 알기 위해 런버튼을 눌러서 서버가 정상적으로 작동되는지 확인해 보았다. 로그인을 하였지만 권한 문제로 로그인을 못하고 있다....다만 RabbitMQ Management에 접속하는건 가능하다.그리고 처음에 RabbitMQ를 실행하여도 adminstrator 권한과 vitual hosts를 받게 된다 (초기 비밀번호 1234) 그러나 새로 계정을 만들어서 권한이 없다면 해당 명령어를 사용한다. (필자는 docker에다가 RabbitMQ 설치했으므로 docker exec에서 하는 방식으로 알려드림) 사용자 추가rabbitmqctl add_user  사용자에 권한 부여rabbitmqctl set_permissions -p ".*" ".*" ".*" 사용자에 권한 부..
STOMP란?
·
STOMP
STOMP란?STOMP는 단순(또는 스트리밍) 텍스트 지향 메시징 프로토콜입니다.STOMP는 상호 운용 가능한 와이어 포맷을 제공하여 STOMP 클라이언트가 모든 STOMP 메시지 브로커와 통신할 수 있도록 하며, 다양한 언어, 플랫폼 및 브로커 간에 쉽고 광범위한 메시징 상호 운용성을 제공합니다.STOMP는 HTTP 디자인 학교에서 나온 매우 간단하고 구현하기 쉬운 프로토콜입니다. 서버 측은 잘 구현하기 어려울 수 있지만, 클라이언트를 작성하여 연결하는 것은 매우 쉽습니다. 예를 들어 Telnet을 사용하여 모든 STOMP 브로커에 로그인하고 상호 작용할 수 있습니다! -STOMP 공식 사이트https://stomp.github.io/ STOMPSTOMP is a very simple and easy ..
RadditMQ란?
·
RabbitMQ
RabbitMQ는 클라우드 환경, 온프레미스 및 로컬 머신에 쉽게 배포할 수 있는 안정적이고 성숙한 메시징 및 스트리밍 브로커입니다. -RabbitMQ 공식 사이트-https://www.rabbitmq.com/ RabbitMQ: One broker to queue them all | RabbitMQWhy RabbitMQ? RabbitMQ is a reliable and mature messaging and streaming broker, which is easy to deploy on cloud environments, on-premises, and on your local machine. It is currently used by millions worldwide.www.rabbitmq.com Rabb..
1대1 채팅 서비스 구현 계획-(8)(우리 지금 만나)
·
우리 지금 만나
1대1 매칭서비스가 성사 된 이후 그 둘에 대해서만 채팅이 가능하게 하는 서비스 구현 계획을 세우고 있습니다.  이에 대한 연관관계는?1대1 매칭 서비스가 성사된 이후 1대1 채팅 서비스를 구현할 때 필요한 주요 연관관계는 사용자와 채팅 세션 또는 채팅 메세지 간의 관계가 있습니다.  엔티티 구조사용자(Users)1대1 매칭(Matching) 각 사용자는 1대1 매칭 엔티티를 통해 매칭 관계를 설정합니다. 1대1 매칭(Matchings)일대다(User와 연관): 두 명의 사용자(user_id_1, user_id_2)를 연결하여 매칭을 성사시킵니다.1대1 채팅세션(chatrooms): 매칭이 완료된 후 채팅 세션을 생성하여 두 사용자가 연결될 수 있도록 합니다. 1대1 채팅 세션(chatrooms)필드: ..
Karka란?
·
Kafka
Apache Kafka에서 정의하는 카프라란?카프카는 고성능 TCP 네트워크 프로토콜을 통해 통신하는 서버 와 클라이언트 로 구성된 분산 시스템입니다 . 온프레미스와 클라우드 환경의 베어 메탈 하드웨어, 가상 머신 및 컨테이너에 배포할 수 있습니다.서버 : Kafka는 여러 데이터 센터 또는 클라우드 지역에 걸쳐 있는 하나 이상의 서버 클러스터로 실행됩니다. 이러한 서버 중 일부는 브로커라고 하는 스토리지 계층을 형성합니다. 다른 서버는 Kafka Connect를 실행하여 데이터를 이벤트 스트림으로 지속적으로 가져오고 내보내 Kafka를 관계형 데이터베이스 및 다른 Kafka 클러스터와 같은 기존 시스템과 통합합니다. 미션 크리티컬 사용 사례를 구현할 수 있도록 Kafka 클러스터는 확장성이 뛰어나고 내..
EC2 nano .env를 통한 환경변수 설정
·
AWS
해당 방법은 docker-compose를 통한 .env 설정이 안되거나 etc/environment로 환경변수 설정이 안되는 사용자들을 위한 글 입니다.  !!!! 절대로 보안이 중요한 프로젝트는 해당 방법을 사용하는것을 금합니다.!!!! 몰론 AWS SDK를 통한 Amazon Secret manager를 사용하는게 가능합니다. 다만 이거는 추후에 다뤄질 예정 몰론 자신이 사용하는 레포지토리에서는 보통은 .gitignore에 .env를 명시해놔서(깃 봇들이 돌아다니기에 보안상 위배되는 코드가 있으면 경고장을 날리거나 푸쉬를 못하게 1차 적으로 막는다.) 젠킨스나 깃액션를 통해 배포를 하여도 환경변수에 대한 정보를 가져올 수 없습니다. nano .env EC2 ssh에 접속 후 해당 명령어를 통해 명시적으..
인프라 난항2-(7)(우리 지금 만나)
·
우리 지금 만나
일단 시작하기 전에 인프라 설계도 부터 보여드리고 시작하겠습니다.  로컬로 빼놓은 젠킨스 -> 비용 절감 효과를 보기위해 로컬로 옮김EC2-ECS 구조 -> 카프카 컨테이너 분리, 오토 스케일링을 통해 자동으로 컨테이너 수 조절 -> 서버의 부하를 줄임 기존 EC2-ECS 구조입니다. 전에F fargate-ecs 구조에서 EC2-ECS 구조로 변경되었지만 사실 Fargate-ECS와 EC2-ECS 두 구조를 실행하여 어느게 더 효율적일지 비교을 해볼 예정입니다. 일단 처음으로 ECS에 배포를 해봐서 상당히 난항을 겪었습니다. 포멧 도 arm64 기준으로 해야 했지만 linus x86/64로 설정 해놓는 바람에 포멧팅 오류뜨게 되었습니다.exec /usr/local/openjdk-17/bin/java: e..