분류 전체보기
-
Spring STOMP로 채팅, 알림 구현 + Spring Security, JWTSpring 2024. 8. 19. 22:24
스터디카페 예약 서비스 프로젝트를 진행하면서 STOMP를 사용해 채팅과 알림 기능을 구현한 내용을 정리한 글입니다.틀린 부분이 있을 수 있으니 댓글로 의견을 주시면 감사합니다. 1. build.gradle 의존성 추가// websocketimplementation 'org.springframework.boot:spring-boot-starter-websocket'// STOMPimplementation 'org.webjars:stomp-websocket:2.3.3' 2. StompWebSocketConfig @EnableWebSocketMessageBroker@Configuration@RequiredArgsConstructorpublic class StompWebSocketConfig implements..
-
STOMP네트워크 2024. 8. 19. 21:41
STOMP, Simple Text Oriented Messaging ProtocolWebSocket은 Text, Binary 두 가지 타입의 메시지만 주고 받을 수 있고 메시지의 내용에 대해서는 형식이 정해져있지 않습니다.이 때문에 메시지 전송을 효율적으로 하기 위해 탄생한 프로토콜이 STOMP 입니다.STOMP는 frame 기반의 프로토콜이며 command - header - body 구조로 되어있습니다.또한 STOMP는 publish - subscribe 의 형태로 메시지를 전송 / 구독하여 처리합니다.STOMP frame 구조COMMANDheader1:value1header2:value2Body^@ - Command클라이언트 command는 CONNECT, SEND, SUBSCRIBE, UNSUBS..
-
WebSocket네트워크 2024. 8. 19. 20:53
WebSocket 이전의 이벤트 통신사용자와 웹 서버는 HTTP 요청 - 응답 방식으로 통신합니다.하지만 서버에서 클라이언트에게 응답을 해야할 때가 있는데 채팅, 알람과 같이 이벤트가 발생했을 때 사용자의 요청이 없더라도 사용자에게 단방향 응답을 해야했습니다.웹소켓이 나오기 이전에는 Polling, Long Polling 등의 방식을 이용해서 해결했습니다. 1. Polling사용자가 웹 서버에 주기적으로 요청을 보내 이벤트 내용을 확인하는 방식입니다.구현하기 쉽지만 이벤트가 발생하더라도 바로 확인할 수 없으며 사용자가 많아지게 되면 많은 양의 요청이 서버로 보내지기 때문에 서버에 대한 부담이 커지게 됩니다. 2. Long Polling사용자가 웹 서버로 요청을 보내지만, 서버에서는 바로 응답하지 않고 ..
-
Spring OAuth2.0(Google)Spring 2024. 8. 18. 17:49
이전의 Spring Security OAuth를 이용해서 백엔드에서 처리하는 방식이 아닌, 프론트에서 Authorization Code를 전달받아직접 Access Token을 받아와 사용자 정보를 받아오는 방법입니다. https://kimtahwn.tistory.com/58 의 OAuth 흐름을 읽고 오시면 좋습니다. Spring OAuth2.0 Google 구현하기프론트에서 Authorization Server에서 Authroization Code를 받아 백엔드 서버로 전달하는 방식입니다. 1. application.ymlgoogle: client_id: ${GOOGLE_CLIENT_ID} client_secret: ${GOOGLE_CLIENT_SECRET} grant_type: authoriza..
-
Spring Security OAuth2.0(kakao)Spring 2024. 8. 17. 03:53
https://kimtahwn.tistory.com/58이전의 OAuth2.0 글을 읽고 오시면 좋습니다.Spring Security OAuth2.0을 사용하여 kakao 로그인 구현하기이 방식은 프론트엔드에서 Authorization Code를 받아올 필요없이 백엔드에서 모든 OAuth 로그인을 처리하는 방식입니다. Spring Security 에서는 쉽게 OAuth2를 사용할 수 있도록 지원해줍니다.1. 로그인 요청의 EndPoint를 /oauth2/authorization/{provider} 로 하게 되면 Spring Security에서 요청을 가로채 로그인을 시작하고 인증서버로 리디렉션을 수행하는데 사용합니다.ex) kakao login : /oauth/authorization/kakao 2. 리..
-
OAuth2.0네트워크 2024. 8. 17. 01:32
OAuth?OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트를 접속할 때 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 제3자 클라이언트가 사용자의 접근 권한 위임을 위한 개방형 표준 프로토콜입니다.구글, 카카오, 네이버 등과 같은 제3자 클라이언트가 우리의 서비스를 이용할 수 있는 권한을 부여하는 매커니즘입니다.OAuth를 사용하면 사용자는 아이디와 비밀번호 없이 간편하게 로그인과 회원가입을 할 수 있기 때문에 많이 사용하는 기술입니다.OAuth의 용어용어설명Resource Owner리소스의 원래 소유자입니다. 일반적으로 사용자를 의미합니다.Client클라이언트는 OAuth2.0 용어로, 사용자의 리소스에 접근하려는 애플리케..
-
STOMP 메시지 전송 시 security context holder에서 유저 정보를 가져올 수 없는 error트러블슈팅 2024. 8. 16. 17:48
문제Jul 24 17:13:51 ip-172-31-44-203 web[1195047]: ----------------- stomp command : SENDJul 24 17:13:51 ip-172-31-44-203 web[1195047]: ----------------- authentication : kimtahwn@naver.comJul 24 17:13:51 ip-172-31-44-203 web[1195047]: 2024-07-24T17:13:51.882+09:00 ERROR 1195047 --- [nboundChannel-6] .WebSocketAnnotationMethodMessageHandler : Unhandled exception from message handler methodJul 24 1..
-
STOMP 연결, 해제 시 header 값 Error트러블슈팅 2024. 8. 15. 23:38
문제ChatService에서 @EventListener 를 통해 프론트에서 header 에 같이 넣어준 chatRoomId와 socket session id의 값을 제대로 가져오지 못 하는 문제가 발생원인기존 코드 @EventListener public void handleSessionConnect(SessionConnectEvent event) { MessageHeaderAccessor accessor = NativeMessageHeaderAccessor.getAccessor(event.getMessage(), SimpMessageHeaderAccessor.class); GenericMessage generic = (GenericMessage) accessor.get..