묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[최신] Vue 강의 끝판왕 : Nuxt 3 완벽 마스터
vscode 자동 저장 시 탭 사이즈 조절 안되고 있습니다..
.vscode 디렉토리까지 생성이 돼서 안에 settings.json 파일에 { "eslint.enable": true, "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit" }, "editor.tabSize": 2, }이렇게 내용 들어가 있는데 저장을 해도 탭 사이즈 조절이 안됩니다.. 강의 내용에서처럼 no-console을 주석한 뒤 lint 돌렸을때 warning 경고가 뜨는 걸 봐서는 설정은 잘 먹고 있는거 같긴한데 뭘 봐야할까요
-
미해결웹소켓/STOMP 채팅서비스(spring, vue, redis)
앱 서비스일 경우
안녕하세요. 이번에 강의 수강을 시작하였습니다. 급하게 앱 프로젝트에서 채팅 서비스 구현을 맡게 되어서 강의를 수강하게 되었는데요, 지금 이 강의는 웹에서 채팅을 구현하는데, 앱에서 구현하게된다고 해도 백엔드 부분은 동일한건가요? 차이점이 있다면 알려주시면 감사하겠습니다
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
웹소켓 서버 재배포시 고려해야 할 상황 질문
안녕하세요. 우선 좋은 강의 만들어주셔서 정말 감사드립니다. 한가지 질문이 있습니다. 만약 spring boot 이용해서 stomp 프로토콜을 이용해서 채팅 서비스를 구축 한다고 하였을 때 특정 사용자가 최초 웹소켓 connection 연결 후 해당 웹소켓 서버가 재배포 했을때 고려해야 될 상황이 있습니다. 그럼 프론트 서버에서는 기존에 연결되었던 프론트 서버 정보는 모두 삭제가 될텐데요. 이렇게 된다고 하면 사용자는 채팅 페이지에서 채팅 서비스가 멈춤 현상이 발생 할 것 같습니다. 이것을 해결하기 위해 특정 프론트 서버 정보는 백엔드 서버 메모리에 저장 하는 것보다 외부 서버에 (Ex> Redis) 관리 해야 할까요?
-
미해결Vue 3 & Firebase 10 커뮤니티 만들기 풀스택 - "활용편" (with Pinia, Quasar, Tiptap, VueUse)
storage 사용 문의
안녕하세요 강사님!현재 파이어베이스에서 storage 사용하려면 요금제를 써야만 하는 건가요??기간이 좀 지나서 그런지 강의 화면하고 좀 다르게 시작하기는 없고 프로젝트 업그레이드만 있어서 진행하니까 카드번호 입력하고 결제를 해야하는 거 같아서요ㅠㅠ
-
미해결웹소켓/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);... // } } 이거는 조금 수정했습니다. RedisConfigpackage 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 에 왜 안 뜨는지 모르겠습니다.
-
미해결[최신] Vue 강의 끝판왕 : Nuxt 3 완벽 마스터
eslint 설정 오류 질문드립니다.
Oops! Something went wrong! :(ESLint: 8.57.1ESLint couldn't find the config "plugin:vue/vue3-recommended" to extend from. Please check that the name of the config is correct.The config "plugin:vue/vue3-recommended" was referenced from the config file in "C:\study\Vue.js\learn-nuxt-3\.eslintrc.cjs".If you still have problems, please stop by https://eslint.org/chat/help to chat with the team.강사님과 같이 eslint 설정 후에 npm run lint를 실행하면 해당 에러가 발생합니다여러 방법으로 시도를 해보았는데도 동일하게 계속 에러가 발생해서 어떤 부분이 문제일지 질문 드립니다..
-
해결됨[최신] Vue 강의 끝판왕 : Nuxt 3 완벽 마스터
pageContainerStyle 이름을 찾을 수 없습니다 에러
Quasar UI Framework 설치 에서 4:41초 지점에 강사님처럼 코드 복붙했는데 제목과 같이 이름을 찾을 수 없습니다 라고 에러가 발생합니다.화면상에는 스타일은 잘 적용 되고 있는데 코드상에서만 에러가 발생해서 이것저것 시도를 해봤는데 뭐가 문제인지 계속 저런 문구가 발생해서요 이런 상황 겪어보신적 있으신가요;;
-
미해결웹소켓/STOMP 채팅서비스(spring, vue, redis)
JwtTokenProvider 작성중 오류 발생으로 문의드립니다.
JwtTokenProvider 에서 생성자를 만들던 도중 해당 오류로 문제가 발생해서 token 발급에 막혀 문의드립니다. 해당 내용상 @Value 사용이 안되는 것으로 보이는데 혹시 원인을 알 수 있을까요?
-
미해결Vue 3 & Firebase 10 커뮤니티 만들기 풀스택 - "활용편" (with Pinia, Quasar, Tiptap, VueUse)
무한 스크롤링 질문
<div v-intersectionObserver="handleIntersectionObserver" class="bg-primary"></div>여기 div에 height 100px 했을때는 스크롤해서 하단에 닿이면 6개씩 잘보였는데 style 부분을 지우니까 스크롤 해서 하단에 닿였을때 나머지 게시물이 6개씩 보이는게 아니라 loadMore() 이 연속적으로 실행되어 전체가 다 보이게 됩니다 height가 0이 되면서 계속 노출이 돼서 그렇게 되는건가요?
-
해결됨웹소켓/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) 이강좌가 선수과정인가요??? 아니면 이걸안해도 새로 개강한강좌만 신청해도 되는관계인지 궁금합니다.
-
미해결Vue 3 & Firebase 10 커뮤니티 만들기 풀스택 - "활용편" (with Pinia, Quasar, Tiptap, VueUse)
짐코딩님..! unplugin-vue-router/vite 적용 최근방식 부탁드령요 ㅜㅜ
unplugin-vue-router/vite를 다운받고 공식문서 참고해서 설정했는데 pages의 index.vue가 오토라우팅이 되지않습니다. router.index.jsimport { defineRouter } from '#q-app/wrappers' import { createRouter, createMemoryHistory, createWebHistory, createWebHashHistory } from 'vue-router/auto' import routes from './routes' /* * If not building with SSR mode, you can * directly export the Router instantiation; * * The function below can be async too; either use * async/await or return a Promise which resolves * with the Router instance. */ export default defineRouter(function (/* { store, ssrContext } */) { const createHistory = process.env.SERVER ? createMemoryHistory : (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory) const Router = createRouter({ scrollBehavior: () => ({ left: 0, top: 0 }), routes, // Leave this as is and make changes in quasar.conf.js instead! // quasar.conf.js -> build -> vueRouterMode // quasar.conf.js -> build -> publicPath history: createHistory(process.env.VUE_ROUTER_BASE) }) return Router }) quasar.config.js// Configuration for your app // https://v2.quasar.dev/quasar-cli-vite/quasar-config-file import VueRouter from 'unplugin-vue-router/vite' import { defineConfig } from '#q-app/wrappers' export default defineConfig((/* ctx */) => { return { // https://v2.quasar.dev/quasar-cli-vite/prefetch-feature // preFetch: true, // app boot file (/src/boot) // --> boot files are part of "main.js" // https://v2.quasar.dev/quasar-cli-vite/boot-files boot: [ ], // https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#css css: [ 'app.scss' ], // https://github.com/quasarframework/quasar/tree/dev/extras extras: [ // 'ionicons-v4', // 'mdi-v7', // 'fontawesome-v6', // 'eva-icons', // 'themify', // 'line-awesome', // 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both! 'roboto-font', // optional, you are not bound to it 'material-icons', // optional, you are not bound to it ], // Full list of options: https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#build build: { target: { browser: [ 'es2022', 'firefox115', 'chrome115', 'safari14' ], node: 'node20' }, vueRouterMode: 'hash', // available values: 'hash', 'history' // vueRouterBase, // vueDevtools, // vueOptionsAPI: false, // rebuildCache: true, // rebuilds Vite/linter/etc cache on startup // publicPath: '/', // analyze: true, // env: {}, // rawDefine: {} // ignorePublicFolder: true, // minify: false, // polyfillModulePreload: true, // distDir // extendViteConf (viteConf) {}, // viteVuePluginOptions: {}, vitePlugins: [ ['vite-plugin-checker', { eslint: { lintCommand: 'eslint -c ./eslint.config.js "./src*/**/*.{js,mjs,cjs,vue}"', useFlatConfig: true } }, { server: false }, ], // 자동 라우터 플러그인 사용하기 VueRouter({ }), ] }, // Full list of options: https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#devserver devServer: { // https: true, open: true // opens browser window automatically }, // https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#framework framework: { config: {}, // iconSet: 'material-icons', // Quasar icon set // lang: 'en-US', // Quasar language pack // For special cases outside of where the auto-import strategy can have an impact // (like functional components as one of the examples), // you can manually specify Quasar components/directives to be available everywhere: // // components: [], // directives: [], // Quasar plugins plugins: [] }, // animations: 'all', // --- includes all animations // https://v2.quasar.dev/options/animations animations: [], // https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#sourcefiles // sourceFiles: { // rootComponent: 'src/App.vue', // router: 'src/router/index', // store: 'src/store/index', // pwaRegisterServiceWorker: 'src-pwa/register-service-worker', // pwaServiceWorker: 'src-pwa/custom-service-worker', // pwaManifestFile: 'src-pwa/manifest.json', // electronMain: 'src-electron/electron-main', // electronPreload: 'src-electron/electron-preload' // bexManifestFile: 'src-bex/manifest.json // }, // https://v2.quasar.dev/quasar-cli-vite/developing-ssr/configuring-ssr ssr: { prodPort: 3000, // The default port that the production server should use // (gets superseded if process.env.PORT is specified at runtime) middlewares: [ 'render' // keep this as last one ], // extendPackageJson (json) {}, // extendSSRWebserverConf (esbuildConf) {}, // manualStoreSerialization: true, // manualStoreSsrContextInjection: true, // manualStoreHydration: true, // manualPostHydrationTrigger: true, pwa: false // pwaOfflineHtmlFilename: 'offline.html', // do NOT use index.html as name! // pwaExtendGenerateSWOptions (cfg) {}, // pwaExtendInjectManifestOptions (cfg) {} }, // https://v2.quasar.dev/quasar-cli-vite/developing-pwa/configuring-pwa pwa: { workboxMode: 'GenerateSW' // 'GenerateSW' or 'InjectManifest' // swFilename: 'sw.js', // manifestFilename: 'manifest.json', // extendManifestJson (json) {}, // useCredentialsForManifestTag: true, // injectPwaMetaTags: false, // extendPWACustomSWConf (esbuildConf) {}, // extendGenerateSWOptions (cfg) {}, // extendInjectManifestOptions (cfg) {} }, // Full list of options: https://v2.quasar.dev/quasar-cli-vite/developing-cordova-apps/configuring-cordova cordova: { // noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing }, // Full list of options: https://v2.quasar.dev/quasar-cli-vite/developing-capacitor-apps/configuring-capacitor capacitor: { hideSplashscreen: true }, // Full list of options: https://v2.quasar.dev/quasar-cli-vite/developing-electron-apps/configuring-electron electron: { // extendElectronMainConf (esbuildConf) {}, // extendElectronPreloadConf (esbuildConf) {}, // extendPackageJson (json) {}, // Electron preload scripts (if any) from /src-electron, WITHOUT file extension preloadScripts: [ 'electron-preload' ], // specify the debugging port to use for the Electron app when running in development mode inspectPort: 5858, bundler: 'packager', // 'packager' or 'builder' packager: { // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options // OS X / Mac App Store // appBundleId: '', // appCategoryType: '', // osxSign: '', // protocol: 'myapp://path', // Windows only // win32metadata: { ... } }, builder: { // https://www.electron.build/configuration/configuration appId: 'vue3-quasar-firebase-app' } }, // Full list of options: https://v2.quasar.dev/quasar-cli-vite/developing-browser-extensions/configuring-bex bex: { // extendBexScriptsConf (esbuildConf) {}, // extendBexManifestJson (json) {}, /** * The list of extra scripts (js/ts) not in your bex manifest that you want to * compile and use in your browser extension. Maybe dynamic use them? * * Each entry in the list should be a relative filename to /src-bex/ * * @example [ 'my-script.ts', 'sub-folder/my-other-script.js' ] */ extraScripts: [] } } }) 기존의 라우터를 냅두면 MainLayout 으로 가고 주석처리해버리면 빈화면입니다. const routes = [ { path: '/', component: () => import('layouts/MainLayout.vue'), children: [ { path: '', component: () => import('pages/IndexPage.vue') } ] }, // Always leave this as last one, // but you can also remove it { path: '/:catchAll(.*)*', component: () => import('pages/ErrorNotFound.vue') } ] export default routes
-
미해결웹소켓/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 테이블을 처음생성할 때) 바꿔줘야하는 건가요??
-
미해결Vue 3 & Firebase 10 커뮤니티 만들기 풀스택 - "활용편" (with Pinia, Quasar, Tiptap, VueUse)
Quasar를 강의 버전 그대로 맞추면 실행할 때 에러가 발생해서, 다른 버전만 맞추니 잘 작동합니다.
현재 Quasar는 강의에서 안내한 버전 그대로 맞추면 실행 시 에러가 발생해서, 핵심 버전만 맞추니 정상적으로 실행됩니다.혹시 에러 생기시는 분 참고하세요~
-
미해결최신 Vue 3 완벽 가이드: 프로젝트 설정 & 스펙 총정리
npm install -D tailwindcss postcss autoprefixer 의 버전을 알고싶습니다.
tailwindcss의 버전이 4.x로 변경됨에 따라 강의 내용의 일부인npx tailwindcss init -p 시 오류가 발생하는 것이 확인되었습니다.최대한 강의를 따라가기 위하여, 일단 제 임의로 3.4.3 버전으로 다시 설치를 한 상황인데요.강사님께서 npm install -D tailwindcss postcss autiprefixer 를 하셨을 때 설치되는 버전을 알고싶습니다.
-
미해결[최신] Vue 강의 끝판왕 : Nuxt 3 완벽 마스터
npm create nuxt <project-name> 현재는 nuxi 로 프로젝트 생성하는 것이 권장으로 적혀있지 않는 것 같은데
npm create nuxt <project-name> 현재는 nuxi 로 프로젝트 생성하는 것이 권장으로 적혀있지 않는 것 같은데 package.json 은 제공해주신것으로 해서 npm i , 실행을 진행했습니다. 공식문서 확인하면서 하라고 하셔서 혹시나해서요! nuxi로 프로젝트 생성은 하지 않아도 되는거죠? { "name": "nuxt-app", "private": true, "type": "module", "scripts": { "build": "nuxi build", "dev": "nuxi dev", "generate": "nuxi generate", "preview": "nuxi preview", "postinstall": "nuxi prepare" }, "devDependencies": { "nuxt": "^3.9.0", "typescript": "^5.3.3", "vue": "^3.4.3", "vue-router": "^4.2.5", "vue-tsc": "^1.8.27" } }
-
해결됨웹소켓/STOMP 채팅서비스(spring, vue, redis)
토큰 만료시 처리
안녕하세요 선생님 !저희가 만든 코드에서는 토큰 만료시에 따로 처리가 안되고 에러가 뜨고 있는데, 토큰 만료시 처리는 프론트엔드에서 처리하는 것이 더 좋을까요 ?질문이 너무 많아서 죄송스럽습니다. 좋은 강의 정말 감사드립니다 선생님