inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

chain.doFilter()

미해결

웹소켓/STOMP 채팅서비스(spring, vue, redis)

JwtAuthFilter 에서 토큰이 없을 때 예외를 던지지 않고 그냥 chain.doFilter() 를 호출하는 이유는?

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
익명리 댓글 1 좋아요 0 조회수 62

자바 21로 소스 작성해도 되나요?

미해결

웹소켓/STOMP 채팅서비스(spring, vue, redis)

자바 17로 되어 있던데 자바 21로 소스 작성해도 되나요?

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
dongk 댓글 2 좋아요 0 조회수 91

메시지 브로커 선택에 관한 질문

미해결

웹소켓/STOMP 채팅서비스(spring, vue, redis)

안녕하세요, 강의에서는 메시지 브로커용으로 redis를 사용하셨는데, redis 외에도 rabbitmq나 카프카 같은 것들도 사용되는 것으로 알고있습니다. 그 중에서 특별히 redis를 사용한 이유가 있는지 궁금합니다. 그리고 무중단 배포 시 스프링 내장 브로커를 사용하면 서버 재실행 시 구독 정보가 초기화되기에 메시지 브로커를 도입하려고 하는데 이때는 셋 중에 어떤 것을 사용하면 좋을지 궁금합니다.

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
yso829612 댓글 2 좋아요 0 조회수 101

WebSocket과 Spring Security 질문

미해결

웹소켓/STOMP 채팅서비스(spring, vue, redis)

WebSocket 연결이 처음 http요청으로 시작하기 때문에 필터 체인이 요청을 가로챈다. 따라서 /connect를 permitAll()로 풀어줘야 400에러가 안난다. 로 이해했는데 맞을까요?

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
효상 댓글 2 좋아요 0 조회수 111

추가 커스텀 구현 질문 있습니다.

미해결

웹소켓/STOMP 채팅서비스(spring, vue, redis)

로그인을 했을 때 소속된 채팅방에 안 읽은 메시지가 있다면, 알림(보통 종모양)에 +안읽은메시지숫자를 구현 하려고할 땐 sse 통신을 이용하는게 좋을까요?

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
토니 댓글 2 좋아요 0 조회수 89

volar 기능을 이용해서 컴포넌트 명 작성할때 자동완성 기능

미해결

Vue 3 중급 - Composition API

강의에서 보여주신 것처럼 템플릿에서 컴포넌트 태그 적고 엔터 또는 탭을 눌렀는데, 자동완성은 됩니다. 근데 다른 컴포넌트도 추가하면 이상하게 자동완성이 되는 현상이 있어요. 이거 저만 그런가요..?

  • vue.js
  • vue-3
정제혁 댓글 1 좋아요 0 조회수 127

Vue3에 대해

미해결

Vue 3 시작하기

안녕하세요 이전에 장기효님 강의 vue2 버전으로 초중급 듣고 온 상태입니다. 근데 오래전부터 이미 뷰2는 지원 끊어져서 많은 회사들도 현재 뷰3를 이용하고 있는 걸로 압니다. 여기서 지금 재가 고민인게 중급 이후의 뷰2 강의를 들어야할지, 뷰3 강의를 처음부터 들어야할지 고민입니다. 근데 또 뷰3 강의 초급을 구매해서 커리큘럼만 살짝봤는데 뷰2 초급이랑 거의 비슷한것 같더라구요? 제가 이후에 들어야할 강의는 뭘로 해야할까요??

  • javascript
  • vue.js
  • vue-3
정제혁 댓글 1 좋아요 0 조회수 108

eslint 설정 관련 질문

미해결

[최신] Vue 강의 끝판왕 : Nuxt 3 완벽 마스터

로컬에서 실습 시에, 환경 문제가 계속 발생하여 강사님의 ESLint와 Prettier 설정이 완료된 git source를 받아서 npm run lint를 해도 계속 동일한 오류가 발생하며, nuxt.config.ts의 defineNuxtConfig 도 찾을 수 없다고 합니다. 해결방법이 무엇일까요..? Cannot find name 'defineNuxtConfig'. Did you mean 'defineNitroConfig'? FILE D:/dev/learn-nuxt3_/nuxt.config.ts:2:16 1 | // https://nuxt.com/docs/api/configuration/nuxt-config > 2 | export default defineNuxtConfig({ | ^^^^^^^^^^^^^^^^ 3 | compatibilityDate: '2025-07-15', 4 | devtools: { enabled: true }, 5 | typescript: { Oops! Something went wrong! :( ESLint: 8.57.1 ESLint couldn't find the config "plugin:vue/vue3-recommended" to extend from. Please check that the name of the config is correct.

  • vue.js
  • nuxt.js
  • pinia
  • vue-3
jypark0125 댓글 1 좋아요 0 조회수 112

connect와 동시에 구독하는데 구독 검증이 꼭 필요한가요?

미해결

웹소켓/STOMP 채팅서비스(spring, vue, redis)

우선 최초 웹 소켓 연결에 토큰 검증을 진행하고, 연결에 성공하면 특정 토픽에 바로 구독하는 걸로 알 고 있습니다. 이 두 작업이 거의 동시에 이루어진다고 보는데, 구독 검증은 왜 필요한가요 선생님?

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
트릴 댓글 2 좋아요 0 조회수 136

저도 동일한 질문인데

미해결

웹소켓/STOMP 채팅서비스(spring, vue, redis)

왜 도커 Redis cli 터미널 내에서 강사님이 말씀해주신 거처럼 해도 메시지가 안 오고 PUBSUB CHANNELS Empty List라고 뜰까요 근데 강사님처럼 8080 8081 서버간에 통신은 돼서 문제가 무엇인지 모르겠습니다.

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
댓글 3 좋아요 0 조회수 118

token이 필요한 엔드포인트에 의도적으로 토큰 누락시 대처

미해결

웹소켓/STOMP 채팅서비스(spring, vue, redis)

의도적으로 토큰을 누락하면 403 포비든이 발생하는데, 이는 말씀하신데로 filterConfig에서 에러를 잡는다고 하면, 해당 에러 코드와 내용을 커스텀 하려면 어떻게 처리하나요? 일단 컨트롤러까지 제어가 안오고 바로 에러가 반환되는듯하네요

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
트릴 댓글 2 좋아요 0 조회수 98

수업자료가 왜 다 나눠져있나요?

미해결

웹소켓/STOMP 채팅서비스(spring, vue, redis)

강의마다 모든 수업자료를 다 다운받아야하나요?;;

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
트릴 댓글 2 좋아요 0 조회수 117

메시지 전송 시 검증

해결됨

웹소켓/STOMP 채팅서비스(spring, vue, redis)

StompCommand.SEND 도 있길래 궁금해서 질문 남깁니다! 메시지 전송 시 subscribe할 때와 같은 검증을 할 필요는 없을까요? "채팅방에 참여자여야 메시지를 보낼 수 있다" 라는 검증이 자연스러운 흐름이 될 수 있을 것 같다고 생각했습니다.

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
이런개발 댓글 2 좋아요 0 조회수 91

JWT 생성 시 subject 설정에 대한 질문

미해결

웹소켓/STOMP 채팅서비스(spring, vue, redis)

안녕하세요. JWT를 생성하는 코드(JwtTokenProvider.java의 createToken)에서는 Claims 객체를 먼저 생성하고 claims.setSubject() 로 설정한 후, 이 claims를 builder에 전달하는 방식을 사용하고 계신데요. Builder에도 setSubject() 메서드가 있는데, Claims 객체에서 먼저 설정하신 이유가 궁금합니다. 혹시 custom claim인 role 을 함께 추가하기 위해서 Claims 객체를 먼저 생성하여 사용하신 건가요? 아니면 다른 이유가 있으신지 궁금합니다.

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
이가은 댓글 3 좋아요 0 조회수 221

StompHandler 질문 있습니다.

해결됨

웹소켓/STOMP 채팅서비스(spring, vue, redis)

현재 인터셉터에서는 토큰을 검증만 하고 있는데, "토큰 검증 후에 인증 객체를 SecurityContextHolder에 저장 해야 하지 않나?" 라는 생각이 들었습니다. 이 부분은 강의에서 굳이 필요하지 않아서 만들지 않으신 걸까요? 아니면 " 인증 객체를 SecurityContextHolder에 저장하는 부분 은 이 인터셉터의 의도와는 맞지 않다"라고 볼 수 있을까요? 추가로 인증 객체를 SecurityContextHolder에 저장했을 때 와 accessor.setUser(principal) 를 수행했을 때의 장점과 이를 활용해 추가로 구현해볼 수 있는 기능들에는 어떤 것들이 있을지 궁금합니다.

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
이런개발 댓글 2 좋아요 0 조회수 106

vscode 자동 저장 시 탭 사이즈 조절 안되고 있습니다..

미해결

[최신] Vue 강의 끝판왕 : Nuxt 3 완벽 마스터

.vscode 디렉토리까지 생성이 돼서 안에 settings.json 파일에 { "eslint.enable": true, "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit" }, "editor.tabSize": 2, } 이렇게 내용 들어가 있는데 저장을 해도 탭 사이즈 조절이 안됩니다.. 강의 내용에서처럼 no-console을 주석한 뒤 lint 돌렸을때 warning 경고가 뜨는 걸 봐서는 설정은 잘 먹고 있는거 같긴한데 뭘 봐야할까요

  • vue.js
  • nuxt.js
  • pinia
  • vue-3
educrinity1 댓글 1 좋아요 0 조회수 120

앱 서비스일 경우

미해결

웹소켓/STOMP 채팅서비스(spring, vue, redis)

안녕하세요. 이번에 강의 수강을 시작하였습니다. 급하게 앱 프로젝트에서 채팅 서비스 구현을 맡게 되어서 강의를 수강하게 되었는데요, 지금 이 강의는 웹에서 채팅을 구현하는데, 앱에서 구현하게된다고 해도 백엔드 부분은 동일한건가요? 차이점이 있다면 알려주시면 감사하겠습니다

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
canach3 댓글 2 좋아요 0 조회수 114

웹소켓 서버 재배포시 고려해야 할 상황 질문

해결됨

웹소켓/STOMP 채팅서비스(spring, vue, redis)

안녕하세요. 우선 좋은 강의 만들어주셔서 정말 감사드립니다. 한가지 질문이 있습니다. 만약 spring boot 이용해서 stomp 프로토콜을 이용해서 채팅 서비스를 구축 한다고 하였을 때 특정 사용자가 최초 웹소켓 connection 연결 후 해당 웹소켓 서버가 재배포 했을때 고려해야 될 상황이 있습니다. 그럼 프론트 서버에서는 기존에 연결되었던 프론트 서버 정보는 모두 삭제가 될텐데요. 이렇게 된다고 하면 사용자는 채팅 페이지에서 채팅 서비스가 멈춤 현상이 발생 할 것 같습니다. 이것을 해결하기 위해 특정 프론트 서버 정보는 백엔드 서버 메모리에 저장 하는 것보다 외부 서버에 (Ex> Redis) 관리 해야 할까요?

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
리나 댓글 2 좋아요 0 조회수 149

storage 사용 문의

미해결

Vue 3 & Firebase 10 커뮤니티 만들기 풀스택 - "활용편" (with Pinia, Quasar, Tiptap, VueUse)

안녕하세요 강사님! 현재 파이어베이스에서 storage 사용하려면 요금제를 써야만 하는 건가요?? 기간이 좀 지나서 그런지 강의 화면하고 좀 다르게 시작하기는 없고 프로젝트 업그레이드만 있어서 진행하니까 카드번호 입력하고 결제를 해야하는 거 같아서요ㅠㅠ

  • vue.js
  • firebase
  • quasar
  • algolia
  • vue-3
하히호 댓글 2 좋아요 0 조회수 109

배포 오류 질문

미해결

웹소켓/STOMP 채팅서비스(spring, vue, redis)

안녕하세요 강사님 제가 실전이라 생각하고 프론트랑 백엔드를 배포 했습니다. auto at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.5.3.jar:3.5.3] Caused by: org.springframework.data.redis.listener.adapter.RedisListenerExecutionFailedException: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis at org.springframework.data.redis.listener.RedisMessageListenerContainer.lazyListen(RedisMessageListenerContainer.java:383) ~[spring-data-redis-3.5.1.jar:3.5.1] at org.springframework.data.redis.listener.RedisMessageListenerContainer.start(RedisMessageListenerContainer.java:361) ~[spring-data-redis-3.5.1.jar:3.5.1] at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:405) ~[spring-context-6.2.8.jar:6.2.8] ... 19 common frames omitted Caused by: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.translateException(LettuceConnectionFactory.java:1858) ~[spring-data-redis-3.5.1.jar:3.5.1] at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1789) ~[spring-data-redis-3.5.1.jar:3.5.1] at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceC Redis 에러 (백엔드 에러는 이렇게 뜨고) 프론트 엔드 (로그인 하고 들어가는 거 잘됩니다. 채팅만 치면 저렇게 뜹니다.) EC2에서 redis 접속은 잘 됩니다. 프론트는 S3+cloudfront (도메인 적용 안함)를 통해 배포를 했고 둘다 https 는 적용했습니다. 백엔드는 Redis(ElastiCache(실시간 PubSub 기능을 위해) + EC2+RDS +nginx(https)+ 깃헙 액션으 로 배포했고 몇시간 쨰 하는데 저 에러가 뜹니다. 백엔드 배포 자체는 /opt ~ 를 통해서 배포 했습니다. 혹시 프론트 배포가 잘 못 된건가요? S3+cloudfront 면 안될수도 있나요? StompWebSocketConfig package org.example.javademo.chatserver2.chat.config; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.ChannelRegistration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; @Configuration @EnableWebSocketMessageBroker public class StompWebSocketConfig implements WebSocketMessageBrokerConfigurer { private final StompHandler stompHandler; public StompWebSocketConfig(StompHandler stompHandler) { this.stompHandler = stompHandler; } /** * 클라이언트가 WebSocket으로 접속할 수 있는 endpoint 설정 */ @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/connect") .setAllowedOrigins( ) // SockJS를 통해 ws가 아닌 환경에서도 연결 가능하게 설정 .withSockJS(); } /** * STOMP 메시지 브로커 설정 */ @Override public void configureMessageBroker(MessageBrokerRegistry registry) { // /publish 로 시작하는 메시지는 @MessageMapping 메서드로 라우팅 registry.setApplicationDestinationPrefixes("/publish"); // /topic 으로 시작하는 메시지는 메시지 브로커를 통해 구독자에게 전달 registry.enableSimpleBroker("/topic"); } /** * 클라이언트 → 서버 (inbound) 메시지 처리 쓰레드 풀 설정 */ @Override public void configureClientInboundChannel(ChannelRegistration registration) { registration.taskExecutor() .corePoolSize(10) .maxPoolSize(20) .keepAliveSeconds(60); } /** * 서버 → 클라이언트 (outbound) 메시지 처리 쓰레드 풀 설정 */ @Override public void configureClientOutboundChannel(ChannelRegistration registration) { registration.taskExecutor() .corePoolSize(10) .maxPoolSize(20) .keepAliveSeconds(60); } // 인증 등을 처리하고 싶을 경우 stompHandler 등록 (현재 주석처리) // @Override // public void configureClientInboundChannel(ChannelRegistration registration) { // registration.interceptors(stompHandler);... // } } 이거는 조금 수정했습니다. RedisConfig package org.example.javademo.chatserver2.common.configs; import org.example.javademo.chatserver2.chat.service.RedisPubSubService; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.listener.PatternTopic; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration public class RedisConfig { @Value("${spring.data.redis.host}") private String host; @Value("${spring.data.redis.port}") private int port; // 연결 팩토리 생성 @Bean @Qualifier("chatPubSub") public RedisConnectionFactory chatPubSubFactory() { RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(); config.setHostName(host); config.setPort(port); return new LettuceConnectionFactory(config); } // String 기반 Redis 템플릿 @Bean @Qualifier("chatPubSub") public StringRedisTemplate stringRedisTemplate(@Qualifier("chatPubSub") RedisConnectionFactory connectionFactory) { return new StringRedisTemplate(connectionFactory); } // 메시지 수신 처리 리스너 어댑터 @Bean public MessageListenerAdapter messageListenerAdapter(RedisPubSubService redisPubSubService) { return new MessageListenerAdapter(redisPubSubService, "onMessage"); } // 수신 채널 주제 설정 @Bean public PatternTopic chatTopic() { return new PatternTopic("chat"); } // 메시지 수신을 처리하는 리스너 컨테이너. @Bean public RedisMessageListenerContainer redisMessageListenerContainer( @Qualifier("chatPubSub") RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter, PatternTopic chatTopic ) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); container.addMessageListener(listenerAdapter, chatTopic); return container; } // (선택) Object 기반 Redis 템플릿 @Bean public RedisTemplate<String, Object> redisTemplate(@Qualifier("chatPubSub") RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } } ElastiCache로 접속은 굉장히 잘 됩니다. (EC2 내부에서는) 문제는 이게 UI 에 왜 안 뜨는지 모르겠습니다.

  • spring-boot
  • websocket
  • stomp-websocket
  • pubsub
  • vue-3
KMC 댓글 2 좋아요 0 조회수 152

인기 태그

인프런 TOP Writers

주간 인기글