묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
수강료가 갑자기 인상됬던데 ㅠ
개발자라면 알아야 할 redis 기본개발자라면 알아야 할 리눅스(linux-ubuntu) 기본 이거 두강좌 굉장히 저렴했던걸로 기억하는데 지금은 많이 올라갔네요 기존 수강생에게 이전 저렴한 가격으로 구입할수있는 할인쿠폰을 발행해주실수없으신지요? 괜히 가격인상됬다하니 구입하고싶은마음이 생겨났습니다. DB를 MYSQL을 사용하기에 선생님 강의 MYSQL둘다 구입했는데 그래서 REDIS가 뭔지 몰라서 관심밖이였었거든요 그리고 새로 개강한 eks를 활용한 spring 운영서버 배포(feat. devops의 모든것) 이강좌는 제가 구입해도될런지 잘모르겠습니다. 스프링부트로 게시판한번 만들어봤는데... 그단계의 연장선상인가요??? 빠르게 배우는 Spring Cloud 기초(MSA)이강좌를 들어야만 새로개강한강좌를 이해할수있는건지요??? 스프링부트로 웹사이트만들어서 창업목적을 두고있는 사람입니다. 취업목적이아니라...
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
5. websocket, stomp 비교 강의 질문
안녕하세요강의 잘 듣고 있습니다."5. websocket, stomp 비교" 강의 6:07초에 STOMP 흐름에서 궁금한 점이 있습니다!방법1"(클라이언트 1-> 서버)로 연결 요청 및 특정 room 구독"으로 되어 있어서 서버를 통해 브로커를 거쳐 구독하는 방법방법2"(클라이언트 2 -> 브로커)로 연결 요청 및 특정 room 구독"에서는 클라이언트 2는 웹 소켓 서버로 다이렉트로 전달하지 않고, 바로 브로커에게 요청을 보내는 방법질문두 가지 방법으로 요청을 할 수 있는건가요?두 방법의 차이는 무엇인가요??
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
http,websocket의 비교
안녕하세요.강의 잘 듣고 있습니다!http,websocket의 비교 강의를 듣다가 갑자기 궁금한게 생겼는데요.http 통신의 경우 요청을 보내는 쪽은 클라이언트로 정해져 있는 것 같은데, 웹 소켓 통신을 위해 클라이언트와 서버가 연결을 맺을 땐 연결 요청 주체는 항상 클라이언트라고 보면 될까요? 반대로 서버가 클라이언트에게 연결 요청을 보낸 후 클라이언트와 웹 소켓 연결이 될 수도 있나요??
-
미해결웹소켓/STOMP 채팅서비스(spring, vue, redis)
JwtTokenPriver를 주입받는 곳 질문 있습니다.
JwtTokenPriver를 서비스단이 아닌 컨트롤러에서 주입받는 이유가 있을까요?!서비스에서 주입받아야할지 컨트롤러에서 받아야할지 의문입니다!
-
미해결웹소켓/STOMP 채팅서비스(spring, vue, redis)
질문
새로 개강한 강좌에 수강전문의게시판이없어서 여기에 질문을 남기게되었습니다. eks를 활용한 spring 운영서버 배포(feat. devops의 모든것) 이강좌가 새로 오픈했던데 빠르게 배우는 Spring Cloud 기초(MSA) 이강좌가 선수과정인가요??? 아니면 이걸안해도 새로 개강한강좌만 신청해도 되는관계인지 궁금합니다.
-
미해결웹소켓/STOMP 채팅서비스(spring, vue, redis)
6, 도메인구성 강의에서 ddl-auto: update 부분 질문있습니다.
안녕하세요:) 도메인구성 강의 중 ddl-auto : update로 처음 설정 한 뒤 서버를 돌렸을 때 member 테이블 생성이 안되어서 ddl-auto: create로 바꾸신걸까요?? 제가 헷갈리는 부분이 처음 member테이블을 생성할 때는 ddl-auto: update로 설정했을 때에도 테이블생성이 되는 걸로 알고 있어서요. 혼자서 스프링부트 jpa프로젝트 만들엇을때도 ddl-auto:udpate로 엔티티테이블 잘 생성되었던 것 같은데 update를 꼭 create로 처음에 (지금처럼 member 테이블을 처음생성할 때) 바꿔줘야하는 건가요??
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
토큰 만료시 처리
안녕하세요 선생님 !저희가 만든 코드에서는 토큰 만료시에 따로 처리가 안되고 에러가 뜨고 있는데, 토큰 만료시 처리는 프론트엔드에서 처리하는 것이 더 좋을까요 ?질문이 너무 많아서 죄송스럽습니다. 좋은 강의 정말 감사드립니다 선생님
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
안녕하세요 선생님 채팅방 history를 불러올때 scrollToBottom에 대해 질문 있습니다.
안녕하세요 !프론트 코드에서 views 패키지의 StompChatpage.vue 파일에서 질문 있습니다.create 함수에서 채팅 history를 불러온 다음 scroll을 bottom으로 내리려면 선생님 코드가장 마지막에 this.scrollToBottom();이 scrollToBottom()를 실행하면 될까요 ?선생님의 코드async created(){ this.senderEmail = localStorage.getItem("email"); this.roomId = this.$route.params.roomId; const response = await axios.get(`${process.env.VUE_APP_API_BASE_URL}/chat/history/${this.roomId}`); this.messages = response.data; this.connectWebsocket(); }
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
개발환경세팅에서 npm run serve 명령어 입력 시 오류
안녕하세요 !개발환경세팅에서 선생님이 하시는 과정을 그대로 따라 갔는데npm run serve 명령어 입력 시 밑에 오류가뜹니다. 검색해보니 pnpm을 설치하라고 하는데 선생님과 똑같이 진행 했는데 오류가 뜨는 이유가 뭔지 궁금해서 질문글 남깁니다.오류 내용:ERROR Error: The project seems to require pnpm but it's not installed.Error: The project seems to require pnpm but it's not installed.
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
섹션 6. '이전메시지조회' 강의에서 질문 있습니다.
안녕하세요 선생님 !섹션 6. 이전 메시지 조회 강의에서 질문 있습니다.1. 선생님 코드의 getChatHistory() 메서드에서chatParticipants를 chatRoom으로 조회해서for문을 돌면서 현재 로그인한 멤버가 chatParticipants에 있는지 확인하고 있는데,findByChatRoomAndMember 메서드를 통해참여자인지 확인해도 로직에 상관이 없을까요 ?2. 현재 로직은 getHistory 메서드가 실행되면해당 참여자가 채팅방에 참여하기 전의 메시지들까지 전부 표시될것 같은데, 참여자가 채팅방에 참여한 후 부터의 메시지만 보여주고 싶으면 참여시간을 따로 저장한 다음 findByChatRoomAndCreatedTimeGreaterThanEqualOrderByCreatedTimeAsc(ChatRoom chatRoom, LocalDateTime participatedTime);이런식으로 코드를 짜면 될까요 ? 좋은 방법인지 모르겠습니다. 선생님 코드public List<ChatMessageDto> getChatHistory(Long roomId){// 내가 해당 채팅방의 참여자가 아닐경우 에러ChatRoom chatRoom = chatRoomRepository.findById(roomId).orElseThrow(()-> new EntityNotFoundException("room cannot be found"));Member member = memberRepository.findByEmail(SecurityContextHolder.getContext().getAuthentication().getName()).orElseThrow(()->new EntityNotFoundException("member cannot be found"));List<ChatParticipant> chatParticipants = chatParticipantRepository.findByChatRoom(chatRoom);boolean check = false;for(ChatParticipant c : chatParticipants){if(c.getMember().equals(member)){check = true;}}if(!check)throw new IllegalArgumentException("본인이 속하지 않은 채팅방입니다.");// 특정 room에 대한 message조회List<ChatMessage> chatMessages = chatMessageRepository.findByChatRoomOrderByCreatedTimeAsc(chatRoom);List<ChatMessageDto> chatMessageDtos = new ArrayList<>();for(ChatMessage c : chatMessages){ChatMessageDto chatMessageDto = ChatMessageDto.builder().message(c.getContent()).senderEmail(c.getMember().getEmail()).build();chatMessageDtos.add(chatMessageDto);}return chatMessageDtos;}
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
섹션6. '채팅메시지 저장' 강의에서 질문 있습니다
안녕하세요. 선생님섹션6. '채팅메시지 저장' 강의에서 질문 있습니다.7:50 부터 사용자별로 읽음 여부 저장을 구현하실때chatParticipantRepository에서 chatRoom을 통해 participants list를 가져오도록 구현하셨는데 조금 다르게 하고 싶어서 질문 드립니다.저희 엔티티 구성할때 ChatRoom entity에 <List>chatParticipants 필드를 만들었으니까 여기서 해당 채팅 룸의 participants를 가져와도 상관이 없을까요 ?
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
섹션3. JWT토큰생성 부분에서 질문 있습니다.
안녕하십니까 선생님 !섹션3. JWT토큰생성 강의에서 작성하신 createToken 메서드를 보면 헤더를 따로 설정하지 않는데 JJWT 라이브러리가 SECRET_KEY를 참고하여 헤더를 설정해주는건지, 아니면 기본 설정 값이 들어가는 것인지 궁금합니다.createToken 메서드 :public String createToken(String email, String role){ Claims claims = Jwts.claims().setSubject(email); claims.put("role", role); Date now = new Date(); String token = Jwts.builder() .setClaims(claims) .setIssuedAt(now) .setExpiration(new Date(now.getTime()+expiration*60*1000L)) .signWith(SECRET_KEY) .compact(); return token; }
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
섹션6. 메시지 읽음처리, 채팅방 나가기, 11분 25초
안녕하세요 선생님,섹션6. 메시지 읽음처리, 채팅방 나가기, 11분 25초 쯤에 findByChatRoomAndMember(chatRoom, member); 코드로 모든 readStatus를 가져와서 읽음 처리를 하는 것으로 보입니다.읽지 않음 상태의 readStatus만 가져와서 읽음 상태로 바꿔주어도 상관이 없을까요 ?좋은 강의 정말 감사합니다.
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
프런트쪽을 vue를 사용하지 않고도 구현 가능할까요??
안녕하세요 ㅎㅎ 채팅 시스템이 있는 프로젝트를 구현하고 싶어서 강의 수강중에 있습니다 :)현재 진행중인 프로젝트 구조는 msa 구조로 프런트-게이트웨이-유레카-백엔드 이런식으로 있고 프런트쪽은 html+js+spring feignClient로 이루어져 있습니다. 다른 프레임워크를 사용하지 않고 html과 js로만 구현이 가능케 해야하는데 vue를 사용하지 않고도 강의에서 다루고 있는 채팅 시스템을 문제없이 구현이 가능한지 궁금해서 여쭤봅니다!!
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
강의 듣기 전 질문
프로젝트에서 IOT와 결합한 게임을 만들 예정인데, 실시간 통신인 Websocket이 필요하다고 해서 강의를 급하게 결제하였습니다. 여기에서는 실시간 채팅을 구현하는 걸로 보이는데 혹시 여기 내용을 공부하면 프로젝트에 실시간 통신 방식에서도 활용할 수 있을까요? 실시간 방 생성이나 IOT 현물과의 통신에서 WebSocket을 이용할거 같습니다.
-
미해결웹소켓/STOMP 채팅서비스(spring, vue, redis)
jwt 인증, 검증 질문입니다.
안녕하세요. jwt 11 버전 설명해주시면서 생성과 검증에 대한 궁금증이 생기는데요.생성을 위해서는 base64로 인코딩 된 값을 디코더 하신 뒤 SecretKeySpec을 이용한 뒤 HS512로 암호화 하셨는데요. 검증 부분에서는 base64로 인코딩 된 값(디코더와 SecretKeySpec가 이루어지지 않은 채로)으로 토큰 검증 및 claims를 추출하는데 이 부분에서 문제가 없는 걸까요?
-
미해결웹소켓/STOMP 채팅서비스(spring, vue, redis)
소켓 메모리낭비
안녕하세요. 강의를 보고 소켓이 연결될 때 로그를 남겨봤는데, 살펴보니 이유 없이 소켓 연결이 많이 생성되어 있는 것을 확인했습니다.이런 경우 선생님께서는 어떻게 해결하셨나요?소켓 메모리 낭비를 해결하셨다고 들었던 것 같아서 여쭤봅니다.
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
subscribe와 publish시 인증
현재 코드에 if (StompCommand.CONNECT==accessor.getCommand()){ System.out.println("connect 요청 시 토큰 유효성 검증"); String bearerToken = accessor.getFirstNativeHeader("Authorization"); String token= bearerToken.substring(7); Connect 시에만 인증을 요구하는데Stomp 연결 이후 publish와 subscribe 시에는 STOMP에서 인증이 자동으로 되는건가요? 아니면 현재 코드에서 작성하지 않은 것인가요?
-
미해결웹소켓/STOMP 채팅서비스(spring, vue, redis)
안녕하세요 리프레시 토큰을 사용하면 대략적으로 어떤 점이 바뀌게 되는건가요??
안녕하세요 강사님. 혹시 Refresh Token 을 사용하면 프론트엔드 코드에서 대략적으로 어떤 점이 바뀌게 되는건가요?
-
미해결웹소켓/STOMP 채팅서비스(spring, vue, redis)
실시간 메시지 읽지 않음 표시 SSE 질문 드립니다.
읽지 않은 메시지 표시를 SSE로 한번 구현 해보라고 하셨는데, 웹소켓이나 stomp를 써도 상관 없나요?토큰 정보는 상황에 따라 저장 위치(쿠키 or 로컬스토리지)를 다르게 개발 하나요?그렇다면 통상 실무에서는 토큰 정보를 어디에 저장 하는지 그리고 몇 가지 예시 좀 부탁 드립니다.