이전 포스트에서 STOMP를 이용해 웹소켓 실시간 채팅을 구현해 보았습니다. 실시간 채팅은 되지만 채팅방에 나갔다 들어오면 저장된 기록이 없어 기존 채팅 내역이 리셋됩니다. 이를 해결하기 위해 채팅 내역을 저장하고 보여주는 Service를 개발하고 채팅 성능의 효율과 속도를 높이는 과정을 여러 포스트를 거쳐 기록하려 합니다. 제가 하는게 정답이 아니니 참고만 해주세요. 먼저 이전 코드들을 MVC패턴에 맞게 리팩토링을 해봅시다. 기존 Controller @RestController @Slf4j @RequiredArgsConstructor public class MessageController { private final MessageService messageService; private final Sim..
채팅에 핵심이라 볼 수 있는 실시간 채팅을 구현해 보겠습니다. 지난번에 게시판을 만들면서 웹소켓으로 채팅을 만들어본적이 있습니다. https://wans1027.tistory.com/19 [Spring] 게시판 API (10) 웹소켓을 이용한 오픈채팅 이번에는 어떤기능을 게시판에 넣어볼까 하다가 게시판과는 크게 상관없지만 구현해보고 싶었던 기능인 채팅기능을 한번 해볼까 합니다. 채팅을 구현하기에 앞서 웹소켓에 대해 간단히 짚고 wans1027.tistory.com 지난번에는 웹소켓을 사용했다면 이번에는 STOMP를 이용해 좀 더 간단하게 채팅을 구현해 보겠습니다. STOMP STOMP란 WebSocket 위에서 동작하는 간단한 텍스트기반 메시지 프로토콜로, 클라이언트와 서버가 전송할 메시지의 유형, 형식..
이번에는 채팅앱 프로젝트를 시작해보겠습니다. 이번 프로젝트에서는 ERD를 먼저 설계해놓고 체계적으로 해보려 합니다. 채팅은 1:1 채팅부터 단체채팅방을 구현해 보겠습니다. 먼저 고려해야될 사항 회원은 여러개의 채팅방을 가질 수 있다. 채팅방에는 여러 회원이 들어있다. 회원과 채팅방은 N:M 관계를 가지게 됩니다. 그렇다면 두 테이블을 다대다로 묶는다? 이건 안된다. 연관 테이블을 추가하여 1:N:1로 풀어줍니다. 이렇게 하면 한 채팅방에 참여한 회원들과 한 회원이 참여한 채팅방목록을 조회 가능합니다. 여기까지 되었다면 채팅 메세지는 어디에 매칭시켜야할까 만약 채팅방테이블에 추가한다면 중복되는 행이 무한히 늘어나서 안된다. 따라서 메세지라는 테이블을 따로 만들어 연관관계를 설정해야 한다. 메세지 고려사항 ..
이번에는 어떤기능을 게시판에 넣어볼까 하다가 게시판과는 크게 상관없지만 구현해보고 싶었던 기능인 채팅기능을 한번 해볼까 합니다. 채팅을 구현하기에 앞서 웹소켓에 대해 간단히 짚고 넘어가 봅시다. - WebSocket WebSocket은 Client와 Server사이 전이중통신(Full-Duplex)를 제공합니다. HTTP 통신은 기본적으로 비연결성(Connectless) 통신이므로, Client에게 한 번 보내고 나면 연결이 끊겨 지속적으로 데이터를 주고 받을 수 없습니다. 그에 반해 WebSocket은 연결지향성으로 처음에만 HTTP로 HandShaking을 통해 연결을 맺으면 그 연결을 계속 유지합니다. 채팅뿐 아니라 주식웹사이트 등 지속적으로 사용자의 요청없이도 동적인 정보를 표시해야 할 때 사용합..
FCM과 PushAlarm의 동작원리를 알고 싶다면 이전 포스팅 해둔 내용을 보면 됩니다. 2023.03.26 - [Spring] - 앱 푸시알림동작 원리와 FCM(Firebase Cloud Messaging)을 알아보자 앱 푸시알림동작 원리와 FCM(Firebase Cloud Messaging)을 알아보자 게시판 앱과 서버에서 푸시알림을 구현하기 전에 푸시알람과 이를 구현해주는 FCM의 원리를 공부해보고 이를 정리해보았습니다. 푸시알림이란 데스크탑 브라우저, 모바일 홈 화면, 모바일 앱의 wans1027.tistory.com 구현해야할 기능 새로운 기기가 로그인으로 접근이 되면 멤버테이블에 있는 로그인 한 회원에 FCMTOKEN을 추가한다. 순서설계 앱은 앱 실행 시점에 FCM에 Binding 만약 내..
게시판 앱과 서버에서 푸시알림을 구현하기 전에 푸시알람과 이를 구현해주는 FCM의 원리를 공부해보고 이를 정리해보았습니다. 푸시알림이란 데스크탑 브라우저, 모바일 홈 화면, 모바일 앱의 디바이스 알림 센터에서 팝업으로 표시하는 짧은 메시지입니다. 사용자가 앱을 사용하고 있지 않아도 알림이 올 수 있다는 특징이 있습니다. Flutter로 푸시알림을 실제기기로 임시 테스트해보았습니다. 카카오톡을 한번 생각해 봅시다. 앱을 화면에서 내렸는데도 누군가 톡을 보낸다면 알림으로 데이터가 전송이 되는 것을 볼 수 있는데요. 항상 궁금했던게 앱을 키고 있을때는 서버와의 연결이 된다쳐도 앱을 종료해도 어떻게 계속 데이터가 올 수 있을까 하는 생각 다들 한번쯤은 해보지 않으셨나요? 처음에는 생각하기에는 카카오 서버와 스마..
- 테이블설계 테이블은 다음과 같이 설계합니다. comment_id: DB에 자동으로 들어가는 값 comment: 댓글 내용 hierarchy: 댓글이면 0 대댓글이면 1이 들어감 orders: 대댓글 순서로 데이터 정렬할 때 필요 groups: 한개의 댓글과 그에 딸린 대댓글들을 한 그룹으로 묶는다. 참고로 JPA에서 order, gruop과 같이 sql명령어를 column명으로 사용하면 오류가 납니다. 해결법은 아예 다른 명칭으로 바꾸거나 관용적으로는 뒤에 s를 붙입니다. 그림으로 이해해 보자 comment_id와 상관없이 groups 와 orders로 정렬하여 새로운 대댓글이 들어오더라도 대댓글이 맨밑으로 밀리지 않게 됩니다. 설계대로라면 hierachy를 늘리면서 무한대대대대댓글도 가능하긴하나 그..
이번에는 게시글에 이미지를 넣어보도록 해보자 이미지 및 저장할 파일들은 서버내부에서 관리하면 용량이 끝도없이 커지고 관리하기도 힘들기에 서버와는 별도로 외부에 저장소를 따로 두고 관리한다. AWS 배포시 S3가 이와 같은 역할을 한다. 게시판 앱에서 사용자는 파일을 업로드하고 이미지API를 호출하여 업로드된 이미지를 볼 수 있게끔 해보자 원하는 사항은 이와 같다. 사용자가 이미지를 동시에 여러개 서버로 전송할 수 있음 외부 저장소에 저장할 때는 이미지 이름의 중복을 방지하기 위해 UUID+확장명으로 파일 이름을 변경 게시글DB에는 변경된 파일이름을 리스트로 저장 이미지 호출 API를 제작 게시글을 변경하면 기존 저장된 파일들을 삭제 application.yml에 추가 file: dir: E:/savefi..
- Total
- Today
- Yesterday
- Security
- MessageBroker
- 웹소켓 채팅
- nativeQuery
- springboot
- Flutter
- Vmmem종료
- 푸시알림동작원리
- authorization
- Stomp Kafka
- loadbalancing
- Spring 채팅
- Spring WebSocket
- bcrypt
- Cache
- ERD설계
- Authentication
- Bcypt
- Spring
- Kubernetes
- Spring 대댓글
- FCM
- ChattingApp
- spring orphan
- 로컬캐시
- 게시판 채팅
- Spring Stomp
- Vmmem
- Spring RabbitMQ
- Stomp RabbitMQ
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |