
이전 포스트 2023.07.25 - [Spring/채팅앱] - [Spring 채팅앱 성능 개선기 5] Spring Cloud LoadBalancing 적용 [Spring 채팅앱 성능 개선기 5] Spring Cloud LoadBalancing 적용 이전게시글 2023.07.13 - [Spring/채팅앱] - [Spring 채팅앱 성능 개선기 4] Redis Cache 적용 [Spring 채팅앱 성능 개선기 4] Redis Cache 적용 이전 게시글 2023.07.06 - [Spring/채팅앱] - [Spring 채팅앱 성능 개선기 3] Cac wans1027.tistory.com 로드밸런싱을 적용하면서 문제가 생겼습니다. 현재는 발행(pub)과 구독(sub)의 서버 포트가 같아야만 통신이 가능합니다. ..

이전글 보러가기 2023.07.04 - [Spring/채팅앱] - [Spring 채팅앱 성능개선기 2] Cache를 이용한 속도향상 [Spring 채팅앱 성능개선기 2] Cache를 이용한 속도향상 성능개선기 1편을 이어나가 2편 시작합니다. 2023.07.03 - [Spring/채팅앱] - [Spring 채팅앱 성능개선기 1] JPA 쓰기지연을 활용한 채팅내역 저장 [Spring 채팅앱 성능개선기 1] JPA 쓰기지연을 활용한 채팅내 wans1027.tistory.com 이전 포스트에서는 채팅을 보낼 때만 캐시가 생성되고 저장되었습니다. 오늘은 캐시 불러오는 로직을 Cache 설계 전략에 맞춰 개발해보겠습니다. Cache 전략 캐시를 이용하게 되면 반드시 닥쳐오는 문제점이 있는데 바로 데이터 정합성 문..

성능개선기 1편을 이어나가 2편 시작합니다. 2023.07.03 - [Spring/채팅앱] - [Spring 채팅앱 성능개선기 1] JPA 쓰기지연을 활용한 채팅내역 저장 [Spring 채팅앱 성능개선기 1] JPA 쓰기지연을 활용한 채팅내역 저장 이전 포스트에서 STOMP를 이용해 웹소켓 실시간 채팅을 구현해 보았습니다. 실시간 채팅은 되지만 채팅방에 나갔다 들어오면 저장된 기록이 없어 기존 채팅 내역이 리셋됩니다. 이를 해결하기 위 wans1027.tistory.com 1편에 문제점들이 있었습니다. 큐사이즈만큼 요청이 들어와야 DB에 저장된다. 서버 내 메모리에 큐를 저장하는 방식이라 메모리 용량의 한계가 있다. 위의 이유로 서버 하나에 저장하는 방식이라 여러 서버를 로드밸런싱할 경우 다른 서버와 공..

이번에는 어떤기능을 게시판에 넣어볼까 하다가 게시판과는 크게 상관없지만 구현해보고 싶었던 기능인 채팅기능을 한번 해볼까 합니다. 채팅을 구현하기에 앞서 웹소켓에 대해 간단히 짚고 넘어가 봅시다. - WebSocket WebSocket은 Client와 Server사이 전이중통신(Full-Duplex)를 제공합니다. HTTP 통신은 기본적으로 비연결성(Connectless) 통신이므로, Client에게 한 번 보내고 나면 연결이 끊겨 지속적으로 데이터를 주고 받을 수 없습니다. 그에 반해 WebSocket은 연결지향성으로 처음에만 HTTP로 HandShaking을 통해 연결을 맺으면 그 연결을 계속 유지합니다. 채팅뿐 아니라 주식웹사이트 등 지속적으로 사용자의 요청없이도 동적인 정보를 표시해야 할 때 사용합..

이번에는 게시글에 이미지를 넣어보도록 해보자 이미지 및 저장할 파일들은 서버내부에서 관리하면 용량이 끝도없이 커지고 관리하기도 힘들기에 서버와는 별도로 외부에 저장소를 따로 두고 관리한다. AWS 배포시 S3가 이와 같은 역할을 한다. 게시판 앱에서 사용자는 파일을 업로드하고 이미지API를 호출하여 업로드된 이미지를 볼 수 있게끔 해보자 원하는 사항은 이와 같다. 사용자가 이미지를 동시에 여러개 서버로 전송할 수 있음 외부 저장소에 저장할 때는 이미지 이름의 중복을 방지하기 위해 UUID+확장명으로 파일 이름을 변경 게시글DB에는 변경된 파일이름을 리스트로 저장 이미지 호출 API를 제작 게시글을 변경하면 기존 저장된 파일들을 삭제 application.yml에 추가 file: dir: E:/savefi..

전에 인증을 위한 설정을 마쳤다면 이제는 jwt를 통해 인증/인가 를 해보자 . jwt에 대한 설명은 하지 않겠다. 구글링하면 아주 자세히 설명해준다. 우리가 하고자하는 방식은 jwt를 생성해서 헤더에 넘기고 들어오는 요청의 jwt를 확인하여 검증하는 것이다. 검증하는 방법은 요청되어 들어오는 jwt를 Base64 디코딩하여 디코딩된 Header, payload, 서버에 내장된 secretKey 세가지를 통합해 HMAC SHA256 인코딩해 요청된 jwt의 signature와 같으면 검증이 완료된 것으로 본다. 로그인 시큐리티를 사용하면 내부설정을 변경하지않으면 디폴트로 /login 에서 로그인을 해야한다. 파라미터 이름도 username 과 password로 정해져있다. 1. username, pass..

이번에는 서버요청에 권한을 함께 보내 보안을 강화해보려 한다. 일반적인 사용자라면 앱이나 웹을 통해 정상적인 루트로 서버에 API요청을 보내겠지만 그게아닌 PostMan등의 개발 API플랫폼을 통해 서버데이터에 접근 하여 데이터를 조작할 수 있다. 예를 들어 아래와 같은 게시글 작성API POST요청에 memberId만 바꾸어 보내면 다른 사람이 쓴 글이 되어 버려 치명적인 문제가 될 수 있다. 이를 보안하기 위해 기존 프로젝트에 Spring Security를 적용해 사용자에게 권한을 주어 인가된 사용자만 데이터에 접근 할 수 있게 바꿔보자. 필자와 같이 Spring을 독학하고 Inflearn 김영한님의 스프링완전정복으로 공부한 사람들은 Security가 낯설게 느껴질 것이다. 강의에서는 웹에서 Secu..

지금 회원 테이블 저장방식은 사용자의 입력을 그대로 받아 저장하는 방식이다. 사용자가 비밀번호로 "1234" 를 입력하면 테이블에도 그대로 1234를 저장한다. 이런 지극히 단순한 방식은 딱 보기에도 보안에 굉장히 취약하고 끔찍하기 그지없는 방식이다. 지금부터 비밀번호를 암호화해서 저장하는 방식으로 고쳐 볼 것이다. 구글에 비밀번호 암호화를 쳐보면 대부분이 Spring Security를 사용해서 암호화를 한다. 그러나 나는 Spring Security에 대한 이해가 부족하다.... 마냥 따라하면 되긴 하겠지만 썩 끌리지 않는다. 나중에 Security의 기본적인 이해를 하고 적용해 보도록 하고 지금은 다른방식으로 암호화를 해보자. gradle에 추가 jbcrypt 라이브러리를 사용한다. implement..
- Total
- Today
- Yesterday
- Spring Stomp
- 웹소켓 채팅
- FCM
- Security
- Cache
- Stomp Kafka
- bcrypt
- Spring 대댓글
- spring orphan
- Spring RabbitMQ
- 게시판 채팅
- authorization
- Bcypt
- Spring
- nativeQuery
- Authentication
- Vmmem
- Stomp RabbitMQ
- 로컬캐시
- Vmmem종료
- 푸시알림동작원리
- Spring WebSocket
- loadbalancing
- ChattingApp
- ERD설계
- springboot
- Flutter
- Kubernetes
- Spring 채팅
- MessageBroker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |