묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결배달앱 클론코딩 [with React Native]
socket의 emit에 관하여 질문있습니다!
socket.emit('login', 'hello') 해당 부분에서 emit을 계속 찍어내는 문제가 발생하고 있습니다!! useEffect의 dependenciy의 의존성을 주입 안 하면 emit을 계속 안 찍는데 어떻게 하는게 맞을까요 ??// 로그인 후 emit을 계속 보낸다. useEffect(() => { const helloCallback = (data: any) => { console.log(data); }; if (socket && isLoggedIn) { socket.emit('login', 'hello'); socket.on('hello', helloCallback); } return () => { if (socket) socket.off('hello', helloCallback); }; }, [isLoggedIn, socket]); // 로그인 후 한 번만 emit을 보낸다. useEffect(() => { const helloCallback = (data: any) => { console.log(data); }; if (socket && isLoggedIn) { socket.emit('login', 'hello'); socket.on('hello', helloCallback); } return () => { if (socket) socket.off('hello', helloCallback); }; }, []); 아래는 emit을 계속 보내는 log 입니다.
-
미해결선형대수학개론
안녕하세요 general case 질문입니다.
항상 좋은 강의 제공해주셔서 감사드립니다. General CasePA = LU 설명 중에 P가 어떻게 결정되는지에 대한 질문입니다. general case 예제에서 row operation 중 interchange를 두 곳에서 시행하셨는데1row - 4row2row -3row 그렇다면 여기 제 생각인데P 의 original한 모습은 Identity matrix 이므로 AI = A 가 되니깐 Identity matrix 의 형태에서 어떤 row 들 끼리 interchange 했는지만 반영 해주면 그것이 P가 된다고 봐도 될까요? 예를 들어,Identity Matrix1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1row - 4row interchange를 했으므로0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 3. 2row - 3row interchange 를 했으므로 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0최종적으로 P 의 모습은 이렇게 결정되는게 맞는건가요?
-
미해결
&를 왜 안 쓰는지 모르겠어요
문자, 정수 입력과 개행문자 제거 강의 12분 19초에 scanf_s("%4c", szBuffer, _countof(szBuffer)); 문장에 szBuffer앞에 &를 왜 안 붙이는지 모르겠습니다
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
이미지 업로드 안되는 문제
선생님 안녕하세요도메인 대신 탄력적 ip2개를 front, back인스턴스에 연결해서 사용중인데요, 로그인이 되지 않았습니다.라는 메세지가 뜨며 이미지 업로드가 안되서 안되 상황입니다. isAuthenticated가 false가 되는 원인을 알고 이 문제를 해결하고 싶어 문의드립니다. 사용중인 ip)back13.209.144.99front13.125.122.77현재 화면)monit에 uploadImages관련 상태 결과 falseerrorlog 전체)에러로그 일부)0|npm | cause: Error: socket hang up 0|npm | at connResetException (node:internal/errors:787:14) 0|npm | at Socket.socketOnEnd (node:_http_client:519:23) 0|npm | at Socket.emit (node:events:530:35) 0|npm | at endReadableNT (node:internal/streams/readable:1696:12) 0|npm | at process.processTicksAndRejections (node:internal/process/task_queues:82:21) { 0|npm | code: 'ECONNRESET' 0|npm | } 0|npm | } 0|npm | TypeError: Cannot read properties of undefined (reading 'data') 0|npm | at loadMyInfo (/home/ubuntu/react_nodebird/front/.next/server/pages/_app.js:531:27) 0|npm | at loadMyInfo.throw (<anonymous>) 0|npm | at next (/home/ubuntu/react_nodebird/front/node_modules/@redux-saga/core/dist/redux-saga-core.prod.cjs.js:1070:32) 0|npm | at currCb (/home/ubuntu/react_nodebird/front/node_modules/@redux-saga/core/dist/redux-saga-core.prod.cjs.js:1195:7) 0|npm | at /home/ubuntu/react_nodebird/front/node_modules/@redux-saga/core/dist/redux-saga-core.prod.cjs.js:346:5 0|npm | at process.processTicksAndRejections (node:internal/process/task_queues:95:5) 0|npm | The above error occurred in task loadMyInfo 0|npm | created by takeLatest(LOAD_MY_INFO_REQUEST, loadMyInfo) 0|npm | created by watchLoadMyInfo 0|npm | created by userSaga 0|npm | created by rootSaga 0|npm | Tasks cancelled due to error: 0|npm | postSaga 0|npm | TypeError: Cannot read properties of undefined (reading 'data') 0|npm | at loadMyInfo (/home/ubuntu/react_nodebird/front/.next/server/pages/_app.js:531:27) 0|npm | at loadMyInfo.throw (<anonymous>) 0|npm | at next (/home/ubuntu/react_nodebird/front/node_modules/@redux-saga/core/dist/redux-saga-core.prod.cjs.js:1070:32) 0|npm | at currCb (/home/ubuntu/react_nodebird/front/node_modules/@redux-saga/core/dist/redux-saga-core.prod.cjs.js:1195:7) 0|npm | at /home/ubuntu/react_nodebird/front/node_modules/@redux-saga/core/dist/redux-saga-core.prod.cjs.js:346:5 0|npm | at process.processTicksAndRejections (node:internal/process/task_queues:95:5)질문1)이미지 업로드시 isAuthenticated가 false가 되는 원인이 뭘까요?질문2)도메인 안쓰고 탄력적 ip 2개 연결해서 쓰면 쿠키가 전달이 안되서 이미지 업로드는 못하나요?질문3)이 부분에 문제가 있을까요?if(process.env.NODE_ENV === 'production'){ app.use(morgan('combined')); app.use(hpp()); app.use(helmet()); app.use(cors({ origin: 'http://13.125.122.77', credentials: true, })); } else { app.use(morgan('dev')); } app.use(cors({ origin: ['http://localhost:3060', 'http://13.125.122.77'], credentials:true }));app.use(session({ saveUninitialized: false, resave: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, //자바스크립트로 접근하지못하게 secure: false, //일단 false로 하고 https적용할 땐 ture // domain: process.env.NODE_ENV = 'production' && '.nodebirdcom' //도메인 사용할 경우 }, }));back/app.js 전체const express = require('express'); const cors = require('cors'); const session = require('express-session'); const cookieParser = require('cookie-parser'); const passport = require('passport'); const dotenv = require('dotenv'); const morgan = require('morgan'); const postRouter = require('./routes/post'); const postsRouter = require('./routes/posts'); const userRouter = require('./routes/user'); const hashtagRouter = require('./routes/hashtag'); const db = require('./models'); const passportConfig = require('./passport'); const path = require('path'); const hpp = require('hpp'); const helmet = require('helmet'); dotenv.config(); const app = express(); db.sequelize.sync() .then(() => { console.log('DB 연결 성공'); }).catch(console.error); passportConfig(); if(process.env.NODE_ENV === 'production'){ app.use(morgan('combined')); app.use(hpp()); app.use(helmet()); app.use(cors({ origin: ['http://nodebird.com', 'http://13.125.122.77'], credentials: true, })); } else { app.use(morgan('dev')); } app.use(cors({ origin: ['http://localhost:3060', 'http://nodebird.com', 'http://13.125.122.77'], credentials:true })); app.use('/', express.static(path.join(__dirname, 'uploads'))); app.use(express.json()); app.use(express.urlencoded({extended:true})); app.use(cookieParser(process.env.COOKIE_SECRET)); app.use(session({ saveUninitialized: false, resave: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, //자바스크립트로 접근하지못하게 secure: false, //일단 false로 하고 https적용할 땐 ture // domain: process.env.NODE_ENV = 'production' && '.nodebirdcom' //도메인 사용할 경우 }, })); app.use(passport.initialize()); app.use(passport.session()); app.get('/', (req, res) =>{ res.send('hello express'); }); app.use('/posts', postsRouter); app.use('/post', postRouter); app.use('/user', userRouter); app.use('/hashtag', hashtagRouter); app.listen(80, () => { console.log('서버 실행 중'); }); routes/post 일부const express = require('express'); const {Post, Image, Comment, User, Hashtag} = require('../models'); const {isLoggedIn} = require('./middlewares'); const router = express.Router(); const multer = require('multer'); const path = require('path'); const fs = require('fs'); const multerS3 = require('multer-s3'); const AWS = require('aws-sdk'); try { fs.accessSync('uploads'); } catch(error) { console.error('uploads폴더가 없으므로 생성합니다.'); fs.mkdirSync('uploads'); } AWS.config.update({ accessKeyId: process.env.S3_ACCESS_KEY_ID, secretAccessKey: process.env.S3_SECRET_ACCESS_KEY, region: 'ap-northeast-2', }); const upload = multer({ storage: multerS3({ s3: new AWS.S3(), bucket: 'react-saga-nodebird-s3', key(req, file, cb){ cb(null, `original/${Date.now()}_${path.basename(file.originalname)}`) } }), limits: {fileSize: 20 * 1024 * 1024} //20MB }); router.post('/images', isLoggedIn, upload.array('image'),(req, res, next) => { //POST /post/images res.json(req.files.map((v) => v.location)); });middlewares.jsexports.isLoggedIn = (req, res, next) => { if(req.isAuthenticated()) { next(); } else { res.status(401).send('로그인이 필요합니다.'); } }front에 img src에서 backUrl 지워줌시도해본 것)cors리소스 공유에 아래 내용을 넣어서 실행해보기도 하고 없는 상태에서도 실행해보았지만 상태코드는 401에 이미지 업로드 실패back/package.json 일부"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "cross-env NODE_ENV=production pm2 start app.js" },front/package.json 일부"scripts": { "dev": "npx browserslist@latest --update-db && NODE_OPTIONS=--openssl-legacy-provider next -p 3060", "build": "cross-env ANALYZE=true NODE_ENV=production next build", "start": "cross-env NODE_ENV=production next start -p 80", "lint": "eslint ." },
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우에서 빌드 이후에 오류가 발생합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.이런 오류가 발생하는데 이거는 버전이 안맞아서 발생하는건가요??
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
기능을 넣어봤습니다!
static void Fight(ref Player player, ref Monster monster) { while(true) { //플레이어가 몬스터 공격 monster.hp -= player.attack; if(monster.hp <=0) { Console.WriteLine("승리했습니다."); Console.WriteLine($"남은체력 : {player.hp}"); break; } //몬스터 공격 player.hp -= monster.attack; if (player.hp <= 0) { Console.WriteLine("패배했습니다."); // break; RestartGame(ref player); } } } // 새로 추가한 부분 static void RestartGame(ref Player player) { if( player.hp <= 0) { Console.WriteLine("[3] 게임을 다시 시작하시겠습니까?"); string input = Console.ReadLine(); if(input == "3") { player.hp = 100; EnterGame(ref player); } } }RestartGame함수를 생성해서, Hp가 0이 되었을 때 다시 시작하도록 하는 스크립트를 추가해서 실행 할 때 작동은 되는데, 어색한 부분이나 잘못 사용된 부분이 있을까요?
-
미해결초보를 위한 도커 안내서
docker-compose.yml 속성 문의
docker-compose.yml 작성시2depth의 속성은 예약어 인지, 사용자가 정의해서 쓰는지 문의드립니다. 예를들어 아래와 같이 docker-compose.yml을 작성했을시2depth의 db 와 wordpress 속성은 docker에서 어떻게 인식하고 3depth의 속성을 적용하는지 궁금합니다. (db 라는 2depth의 이름을 database로 바꿔 써도 기능이 동작하는지, 그렇다면 2depth의 이름은 단순히 image의 alias 정도로 사용되는지) version: '2'services: db: image: mysql:5.7 .... wordpress: image: wordpress:latest ...
-
미해결[리뉴얼] SQL 베이스캠프
w3schools 에서 오류가 발생하는데 궁금증이 있습니다.
안녕하세요 sql 관련 기초 강의를 듣기 시작한 학생입니다막 듣기 시작하여 w3schools tutorial 에서 sql 수순을 따라서 실행하며 학습을 하던 중에 있어서강의에서는 잘 작동하는 기본구문들이 실제 사이트 실습에서는 작동이 되지않아 무엇이 문제인가 계속 알아봐도 해결되지 않아 문의 남기게 되었습니다.SELECT CustomerID as 회원번호 FROM Customers ;SELECT CustomerID %2 FROM Customers ;와 같이 일반적인 구문들 중 이런 구문들이 실행이 되지않습니다.Error in SQL:The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect.위 회원번호가 들어간 구문의 오류입니다. 회원번호를 id 같이 영어로 바꾸었을 때는 실행이 됩니다.왜 그런걸까요...?Error in SQL:Syntax error in query expression 'CustomerID %2'.이 error 는 바로 밑 구문 에러입니다 .
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
video player에서 플레이가 안되는 이슈
video player에서 플레이 버튼을 누르면 플레이가 안되네요.play - pause 를 반복적으로 누르면 재생이 됩니다만,또 소리는 안납니다.
-
미해결카프카 완벽 가이드 - 코어편
동일 groupId에서 하나의 컨슈머에 특정 파티션을 지정하는 경우
안녕하세요, 동일 groupId를 가진 두 개의 컨슈머가 하나의 토픽에 대해 poll을 하는데, 컨슈머 중 하나는 0번 파티션을 읽도록 assign하였고 나머지 컨슈머는 그냥 토픽에 대해 subscribe를 하였습니다. 그런데 0번 파티션에 assign한 컨슈머는 데이터를 읽어오지 못하고 아래와 같은 에러 로그가 발생하였는데요 Commit cannot be completed since the group has already rebalanced and assigned the partitions to another member 이 경우는 어떻게 해석하는게 좋을까요?
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
OnConstruction 함수가 실행이 안됩니다
액터가 초기화될때만 한번 실행되고 State값을 바꿔도 실행이 되지 않습니다. 에디터를 껐다 켜도 계속 안되는데 왜이러는건지 모르겠습니다
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka producer/consumer test
해당 예제를 통해 주키퍼를 먼저 실행을 해볼려하지만 계속해서 해당 classpath를 찾지 못하고 있습니다. 비슷한 상황을 겪은 사람들의 경우 바이너리 파일이 아닌 소스 파일을 다운 받아 해당 문제를 겪었다고 했지만 저의 경우 알맞은 파일을 설치하여 압축을 해제하였는데 어떤게 원인일까요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
~/jpashop.mv.db 파일을 못찾겠습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이 과정에서 jdbc:h2:~/jpashop까지 입력을 완료하고 데이터베이스가 잘 생성이 되었는데 ~/jpashop.mv.db이 어디에 생성된건지 모르겠습니다. ~/jpashop.mv.db
-
해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
Java 코드를 Kotlin 코드로 가져올 때 Wrapping 한다는게 무슨 뜻일까요?
안녕하세요. 16:52초에 Java 코드를 보며, 맥락을 확인하고 Java 코드를 가져오는 지점을 Wrapping 한다고 설명을 해주셨는데 이 때 Wrapping에 대하여 좀 더 설명을 해주실 수 있을까요?코틀린으로 코드를 짜려고 하면 아무래도 자바로 짠 자료들이 많아서 자바 코드를 코틀린 코드로 옮길 때 컬렉션 타입을 어떻게 해야할 지 조금 고민이 되는 경우가 많아서 질문 드려봅니다!
-
미해결홍정모의 따라하며 배우는 C언어
10.2강 20:39 sizeof 배열명
sizeof(power_of_twos)에서 power_of_two를 왜 주소로 인식하지 않는 것인가요?저는 power_of_twos를 배열명, 즉 주소 상수라고 생각해서 4byte가 나올 것으로 예상했습니다.
-
해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
플레이어에만 위젯을 넣었는데 NPC에서 HpBar가 어떻게 나오나요??
강의 따라가다가 제 화면에서는 플레이어에만 HpBar가 나오는데 강의에선 NPC에도 나와서 질문 드렸습니다. +npc에도 같은 위젯코드를 넣어봤더니 에디터를 처음 켤 때 로딩중에 위젯컴포넌트에서 InitWidget()이 실행되면서 위젯의 SetAbilitySystemComponent()를 호출하게 되는데요. 저는 SetAbilitySystemComponent()에 ensure을 놔뒀더니 이 타이밍이 빙의 전이라 어트리뷰트가 등록이 안되있는 상태라서 에러가 발생하는 것같습니다.강의 처럼 if 로직으로 바꾸면 되긴하는데 로딩중에 위젯컴포넌트의 InitWidget()가 호출되는 이유가 무엇인가요? 월드에 npc가 배치되있긴하지만 BeginPlay()를 호출하지는 않는데 왜 InitWidget()이 호출되는지 잘 모르겠습니다.제가 part2에서 들었던거는 액터의 BeginPlay() 이후에 호출된다고만 들었는데 다른 이유가 있나요?? 이것 때문인 것 같습니다.
-
미해결초보를 위한 도커 안내서
docker run 명령어중 /bin/sh 파라미터 문의
docker run --rm -it ubuntu:20.4 /bin/sh 에서 /bin/sh 는 어떤 역할을 하는 파라미터 인가요?
-
해결됨코딩테스트 [ ALL IN ONE ]
수강생인데 교재 공유좀 해주세요.
안녕하세요. 저번에 교제 공유 신청했는데 2일째 답변이 없으셔서 빨리 신청한 이메일로 공유좀 부탁드려요
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
SQLException 질문
Service코드가 JDBC에 의존적이라 스프링이 제공하는 PlatformTransactionManager 인터페이스에 의존하게 바꿨는데 그러면 SQLException 예외도 없어도 되나요 ?
-
미해결장고 설계철학으로 시작하는 파이썬 장고 입문
CreateView에 html 코드가 어떻게 적용되는 걸까요?
안녕하세요, 수강생 김영빈입니다!강의 4-3. django-bootstrap5 적용 및 post_new 뷰 구현과 관련하여 질문이 있습니다.bootstrap을 활용하여 포스팅을 위한 form을 구성하는 와중에 app.views.py에서 클래스 기반 뷰인 post_new를 활용해 form을 사용자에게 전달하고, 사용자가 입력한 내용을 DB에도 저장시킵니다.이때 view의 함수 기반 뷰인 index나 post_detail과는 다르게 return값에 html 템플릿 인수를 적용하지 않습니다. 그런데 어떻게 연결이 되어 사용자에게 html 코드를 보여줄 수 있는 것일까요?제가 유추해보았을 때는 form_class의 인자로 넣은 PostForm을 활용해 app.forms.py의 PostForm 클래스를 참조하여, form object를 생성하고, 이 form object를 post_form의 form인자로 받아서 html 코드를 출력하는 것으로 생각했습니다만 확실하지가 않아서 문의드립니다.CreateView가 매커니즘에 대한 이해가 크지 않아서 혼란이 발생하는 것 같습니다. 어떻게 이해하면 될지, 또한 CreateView의 소스코드는 어디서 볼 수 있는지 또한 함께 질문 드립니다!