수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
웹소켓 on message 질문 + lightsail문제 해결했습니다
안녕하세요! 웹소켓에 socket.io를 적용시키지 않은 상태에서 브라우저로부터 ws.on("message", (message) => {console.log(message)}) 부분에서 콘솔창에 <Buffer ed 81 b4 eb 9d bc ec 9d b4 ec 96 b8 ed 8a b8 ec 97 90 ec 84 9c 20 ec 84 9c eb b2 84 eb a1 9c 20 eb 8b b5 ec 9e a5 ec 9d 84 20 eb b3 b4 eb 83 85 eb 8b ... 4 more bytes> 와 같이 메세지 내용이 버퍼형식으로 출력되는 문제?가 발생했습니다. 일단 console.log("" + message)를 하니 문자열("클라이언트에서 서버로 답장을 보냅니다")로 출력되기는 했는데요, 웹소켓 사용시 브라우저가 보낸게 문자열이어도 버퍼로 출력되는건가요? 강좌에서는 바로 문자열로 출력되는 것 같아서 궁금해서 질문드립니다. + 이전에 lightsail관련해서 계속 질문을 남겼었는데, 해결해서 글을 남깁니다. 물론 강좌대로 잘 따라가셨다면 문제가 생기지 않겠지만 혹시나 저와 같이 어떤 사유로서든 lightsail인스턴스가 주기적으로 (2일~3일) 느려졌다가 회복되는게 반복되는 현상을 겪으시는 분들이 있다면 이 방법도 한번 사용해보시면 해서 남기게 되었습니다. 시도한 방법은 서버에 swap space를 설정(추가) 해주는 것입니다. aws lightsail 포럼에서 찾은 방법인데 포럼에서도 최근에 주기적으로 서버가 느려지는 현상에 대한 글이 많아 그중에 해결책을 공유한 분이 있어서 참고했습니다. https://stefvanlooveren.me/blog/amazon-lightsail-instance-down-every-day-fixed 코드나 서버에 문제가 있는 것이 아님을 재차 강조드리며, 혹시라도 문제가 발생하는 경우에만 참고용정도로 보시면 좋을 것 같습니다. 글이 길어졌는데, 좋은 강좌 만들주셔서 감사드리고 이제 웹소켓, 경매시스템 만들기를 끝으로 완강을 앞두고 있습니다. 차근차근 들었으면 더 좋았을 것 같지만 중간에 뛰어넘고 하다보니 오히려 완강까지 시간이 더 걸리게 된 것 같습니다. 자바스크립트랑 nodejs 익혀나가는데 정말 큰 도움이 되고 있습니다! [제로초 강좌 질문 필독 사항입니다]질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다.도움이 되는 질문을 하는 방법을 알려드립니다.https://www.youtube.com/watch?v=PUKOWrOuC0c0. 숫자 0부터 시작한 이유는 1보다 더 중요한 것이기 때문입니다. 에러가 났을 때 해결을 하는 게 중요한 게 아닙니다. 왜 여러분은 해결을 못 하고 저는 해결을 하는지, 어디서 힌트를 얻은 것이고 어떻게 해결한 건지 그걸 알아가셔야 합니다. 그렇지 못한 질문은 무의미한 질문입니다.1. 에러 메시지를 올리기 전에 반드시 스스로 번역을 해야 합니다. 번역기 요즘 잘 되어 있습니다. 에러 메시지가 에러 해결 단서의 90%를 차지합니다. 한글로 번역만 해도 대부분 풀립니다. 그냥 에러메시지를 올리고(심지어 안 올리는 분도 있습니다. 저는 독심술사가 아닙니다) 해결해달라고 하시면 아무런 도움이 안 됩니다.2. 에러 메시지를 잘라서 올리지 않아야 합니다. 입문자일수록 에러메시지에서 어떤 부분이 가장 중요한 부분인지 모르실 겁니다. 그러니 통째로 올리셔야 합니다.3. 코드도 같이 올려주세요. 다만 코드 전체를 다 올리거나, 깃헙 주소만 띡 던지지는 마세요. 여러분이 "가장" 의심스럽다고 생각하는 코드를 올려주세요.4. 이 강좌를 바탕으로 여러분이 응용을 해보다가 막히는 부분, 여러 개의 선택지 중에서 조언이 필요한 부분, 제 경험이 궁금한 부분에 대한 질문은 대환영입니다. 다만 여러분의 회사 일은 질문하지 마세요.5. 강좌 하나 끝날 때마다 남의 질문들을 읽어보세요. 여러분이 곧 만나게 될 에러들입니다.6. 위에 적은 내용을 명심하지 않으시면 백날 강좌를 봐도(제 강좌가 아니더라도) 실력이 늘지 않고 그냥 코딩쇼 관람 및 한컴타자연습을 한 셈이 될 겁니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
nodemon 속도 질문
개발자 도구 Network 탭에서 확인해보니까 node app으로 서버를 실행시킬때랑 nodemon으로 서버를 실행시킬때랑 /user 를 이용해서 몽고디비에서 전체 사용자를 가져올때 서버에서 브라우저까지 걸리는 Time 속도차이가 엄청나더라구요 심하겐 10배정도 차이가 나는데 원래 nodemon을 사용하면 속도차이가 심한가요? 그렇다면 현업에서 배포환경에서도 nodemon을 그럼에도 사용할까요??
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
자동삭제 질문
제로초님 테이블에 로우가 생성되자마자 하루뒤에 자동 삭제 되도록끔 만들고 싶은데, 시퀄라이즈에서 이런 기능을 제공하나요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
질문있습니다.
제가 mySql에서 쿼리문으로 DB를 만드로 또 다른 새로운 테이블을 sequelize를 이용해서 만들어보려고 하는데요! chat.js 모델의 클래스에서 database.js module.exports를 인식하지 못하고 있습니다. 그 원인이 뭘까요?? chat.js 클래스가 database.js의 module.exports를 인식하지 못하는 이유를 알고싶습니다! 아래 사진은 차례대로 chat.js 와 database.js 입니다!
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
질문있습니다!
const db = {}; const sequelize = new Sequelize( config.database, config.username, config.password, config, ); 위 코드에서 13라인 마지막 config는 어떤 이유로 호출되는지 궁급합니다!
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
익스프레스(HTTP)와 웹 소켓(WS)은 같은 포트를 공유할 수 있으므로 별도의 작업이 필요하지 않습니다.
익스프레스(HTTP)와 웹 소켓(WS)은 같은 포트를 공유할 수 있으므로 별도의 작업이 필요하지 않습니다. 라는 노드교과서의 글과 제로초님이 강의에서도 말씀해주신 "포트를 공유할수있다." 라는 말이 잘 이해가 안가서 질문드리게 됬습니다. 포트란 컴퓨터내에서 실행되고있는 수많은 프로그램들을 구분하는 논리적인 접속장소라고 알고있는데 웹소켓과 익스프레스가 같은 포트를 공유할수 있다는 말은 웹소켓을 하나의 프로그램이라고 보지않고 익스프레스와 같은 포트에서 돌아갈수있는 프로그램이라도 생각을 해서 포트를 공유할수 있는건가요 ? 아니면 익스프레스는 HTTP 프로토콜을 사용하고 웹 소캣은 WS 프로토콜을 사용하니깐 포트번호는 같지만 프로토콜이 달라서(http://localhost:8080과 ws://localhost:8080) 익스프레스와 웹 소캣은 "구분이 되므로" 포트를 공유할수 있는건지 여쭤보고 싶습니다. 또 이렇게 포트를 공유할수 있게 해주는 주체가 Express인지 Web Socket인지도 궁금합니다!
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
로그인 확인에 대한 질문있습니다.
제로초님 두가지 질문이 있습니다! 1. req.user가 있다면 로그인 된 상태기 때문에 req.user로도 로그인 유무를 확인할 수 있는데 굳이 req.isAuthenticated()를 사용하는 이유가 궁금합니다. 2. 질문 남겨주신 '김윤진'님과 비슷한 질문인데 혹시 리액트로 클라이언트를 만들면 middlewears에서 isLoggedIn과 isNotLoogedIn를 만들지 않고, 로그인 유무에 따라 리액트에서 처리해주어도 문제가 없을까요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
노드는 설계를 어떻게 해야 하나요
안녕하세요 제로초님. 우선 좋은 강의 올려주셔서 너무 감사합니다. 작년에 이 강의를 들을 덕분에 지속적으로 프로젝트를 할 수 있게 되었습니다. 제가 궁금한 것은 익스프레스로 실제 서비스를 구현하기 전에 설계를 어떤식으로 해야 될지에 대해서 입니다. 제가 현재 진행중인 프로젝트에서 익스프레스로 벡엔드를 하고 있는데 자꾸만 중복되는 부분이 보여 이들을 함수로 묶기를 반복하고 있습니다. 만약 설계를 처음에 제대로 했다면 이런 일이 발생하지 않겠죠. 만약 클래스 기반 객체지향 언어로 서비스를 구현한다면 UML 다이러그램으로 사전에 설계를 해서 이런 문제를 방지할 수 있을텐데 JS다 보니 무엇을 어떻게 설계해야 할지 감이 잡히지 않습니다. 혹시 JS는 구현 전에 설계를 어떻게 해야 할지 알 수 있을까요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
failureRedirect와 successRedirect
안녕하세요 kakao 로그인중에 궁금한게 생겨서 이렇게 여쭤보게 됬습니다. router.get( '/kakao/callback', passport.authenticate('kakao', { failureRedirect: '/', // 실패시 }), (req, res) => { // 성공시 res.redirect('/'); }); 지금 여기에 카카로 로그인 실패시는 passport.authenticate의 두번째 매개변수의 옵션인 failureRedirect에 있는 /로 리다이렉트가 되고 성공한다면 "성공시"라고 주석되어있는 부분의 미들웨어로 가서 결국 /로 또 리다이렉트가 되는걸로 알고있습니다. 실패할때의 리다이렉션 옵션이있다면 성공도 있을거같아서 공식문서를 찾아보았는데요 http://www.passportjs.org/docs/authenticate/ 여기가 주소입니다! 강의해서 해주신것처럼 "성공시" 주석에있는 미들웨어를 한개 더 추가하지 않고 저렇게 옵션으로 주어도 무방할까요 ??혹시 성공과 실패를 미들웨어와 옵션으로 따로 주신 이유가 있다면 그것도 궁금합니다 감사합니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
궁금한 부분이 있어 질문드립니다.
템플릿엔진으로 구현과 리액트로 구현했을때의 차이가 제 머리로 정리가 안되서 질문드립니다 ㅠㅠ 현재는 템플릿 엔진으로 구현하였기 때문에 res.redirect()를 사용하여 페이지를 이동시키는거지만, 만약 리액트를 사용하여 view를 구현하였다면 usehistory로 처리하는게 맞을까요? 서버에서 리다이랙트 해주는것과 클라이언트에서 리다이랙트 해주는 부분이 헷갈립니다..
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
parentPort.close() 질문입니다
const {Worker, isMainThread, parentPort} = require('worker_threads');if (isMainThread) { const worker = new Worker(__filename); worker.on('message', (value) => console.log('워커로부터', value)); worker.on('exit', () => console.log('워커 끝')); worker.postMessage('ping');}else { parentPort.on('message', (value) => { console.log('부모로부터', value); parentPort.postMessage('pong'); parentPort.close(); })} 이 코드에서 한개의 워커스레드는 parentPort.close()를 통해서 close가 됬다는것을 mainThread에 알려줘야만 worker의 exit 이벤트 (worker.on('exit'))가 실행되는걸로 이해를 했습니다 왜냐하면 저 코드에서 parentPort.close()만 없애면 프로세스가 끝나지않았기 때문입니다. 이와달리 const {Worker, isMainThread, parentPort, workerData } = require('worker_threads');if (isMainThread) { const threads = new Set(); threads.add(new Worker(__filename, { workerData: { start: 1} })); threads.add(new Worker(__filename, { workerData: { start: 2} })); for (let worker of threads) { worker.on('message', (value) => console.log('워커로부터', value)); worker.on('exit', () => { threads.delete(worker); if (threads.size === 0) { console.log('워커 끝') } }); }}else { parentPort.postMessage(workerData.start + 100);} 워커스레드를 여러개 만들어서 간단히 100을더하는 코드는 parentPort.close()해주지 않았음에도 불구하고 worker의 exit이벤트(worker.on('exit'))를 호출할수 있고 프로세스가 정상적으로 종료가 되는지 궁금합니다 threads Set에서 워커스레드를 지워줬으니까 그런것 같은데 애초에 parentPort.close()해주지 않았는데 exit이벤트로 어떻게 들어가는지가 잘 이해가 안갑니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
질문 있습니다!
안녕하세요 카카오톡 로그인을 연동해서 채팅방을 만들고 있는 학생입니다. 다름이 아니라 제가 수정하고 싶었던 사항들은 거의다 수정이 완료되어서 검색기능을 추가해보려고 하는데요! 메인 화면에서 검색창에 방제목을 적으면 방 제목과 관련된 방만 리스트에 출력하도록 만들어보려고 합니다 ! 일단 프론트에 검색할 수 있도록 검색창을 만들었구요! 서칭을 계속해봤는데 query를통해서 사용자 입력을 받고, sql 문법인 와일드카드 like %입력내용%를 사용해야한다고는 하는데, 적용하려니까 너무 막막합니다 ㅠㅠ 혹시 약간의 힌트를 주실 수 있으실까요? 만약 공식문서를 참고해야한다면 어떤 키워드를 중점으로 공부해나가야할까요?ㅠㅠ 도와주십쇼 !!
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
질문 드립니다!
안녕하세요! 강의들으며 포트폴리오를 하나식 채우고있습니다. 들었던 강의를 바탕으로 api 서버를 배포한 서비스중에 도커를 이용해서 다시 배포를 해보고싶어서 빌드를 하는데 .env 파일을 어떻게 처리해야할지 몰라서 문의를 드립니다. 단순히 git으로 배포를 할때에는 git pull 후에 .env 파일을 직접 작성을 하였는데, 도커로 빌드를 하려니 .env 파일을 같이 빌드해버리면 키가 노출이 되어서 도커에서 volume을 이용하여 외부 파일을 참조하는 방식이 맞는지 궁굼합니다!
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
질문있습니다!
안녕하세요 선생님 (연휴는 잘보내셨죠? ㅎㅎ) 채팅방에서 방을 삭제할 때 12장에서 했던것처럼 Room.remove로 방삭제 라우터를 선언해도 방삭제가 되지 않습니다 ㅠㅠ 제가 몽고 DB가 아닌 mysql로 바꿔서 수정중에 있는데요, 혹시 mysql로 사용할 때 사용하는 삭제함수가 달라서 그런건가요? 원인을 모르겠어서 헤매고 있습니다 ㅠㅠ 원인이 뭘까요??
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
버퍼와 스트림의 차이
버퍼가 일정한 크기로 모아뒀다가 다 채워지면 전송하는 방식이고, 스트림은 일정한 크기의 데이터를 지속적으로 전달하는 방식이라고 이해했습니다. 그렇다면, 버퍼의 크기를 작게하면 스트림의 기능을 하고 스트림의 highWaterMark를 크게하면 버퍼와 같은 기능을 하는건가요??
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
안녕하세요 회원가입 후 메인페이지 이동 질문입니다
회원가입 성공 후 메인 페이지로 이동할려고 합니다 템플릿 엔진을 쓰지 않아 res.sendFile로 메인 페이지로 이동하려고 합니다 user: req,user를 이렇게 작성하면 오류가 생겨 어떻게 작성해야 할지 잘 모르겠습니다 routes/page.js const express = require('express'); const router = express.Router(); router.use((req, res, next)=>{ res.locals.user = null; next(); }) router.get('/', (req, res)=>{ res.sendFile(path.join(__dirname, 'static/login_html/login.html')) }); router.get('/', (req, res)=>{ res.sendFile(path.join(__dirname, 'static/login_html/join.html')) }); router.get('/', (req, res)=>{ res.sendFile(path.join(__dirname, 'static/login_html/find.html')) }); 회원가입성공하면 이 페이지가 로드 되야합니다 router.get('/', (req, res, next)=>{ res.sendFile(path.join(__dirname, 'static/mainpage_html/mainpage.html')) ,req.user }) user: req.user는 빨간줄이 생깁니다 module.exports = router; 오류 코드는 그냥 get요청이 실패했다고만 와서 뭐가 틀렸는지 유추하기가 어렵네요
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
'7.6.1 MySQL 연결하기' 까지 코드 작성후 npm start했는데 오류
제로초님 p317~319 mySQL 연결하기 하는 중인데 npm start 하면 " original: Error: Access denied for user 'root'@'localhost' (using password: YES)" 위와 같은 오류가 뜨는데 구글링해보면 비밀번호 안 맞아서 재설정하라고 나오거든요. 근데 mysql프롬프트나 워크벤치에서 비밀번호 입력해서 잘 들어가지는데 지금처럼 npm start할때나 cmd 창 켜서 mysql -uroot -p 하고 비번 입력하면 저 메세지가 계속 뜨네요 어디서 문제일까요..? 3시간째 붙들고 있는데 진도가 안나가서 답답하네요ㅠ
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
질문있습니다!
위 사진은 mysql에서 chats Table입니다. 채팅 기록이 남아있고, RooId도 설정해놓은 상태입니다. 위 사진은 채팅입력은 되는 상황입니다. 하지만 새로고침을 눌렀을 때 DB에 저장된 채팅 내역들이 안보입니다. 위 사진은 routes/index의 router.get(/room/:id~~)의 아래 코드입니다 RoomId를 통해 DB에서 불러오도록 선언해줬습니다. createdAt을 선언해서 채팅내역들이 시간 순서대로 출력되게 선언해줬습니다.(하지만 작동이안됩니다 ㅠㅠ) 위 사진은 chat을 create해주는 부분입니다. 어느 부분이 문제인지 채팅내역이 왜 화면에 출력이 안되는지 원인을 모르겠습니다 ㅠㅠ 선생님 도와주십쇼!!ㅠㅠ
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
객체와 dictionary
선생님, 밑 코드에서 users[id] = name; 이 users 라는 객체 안에 key 값 id, value 값 name 으로 설정해준 걸로 이해했습니다. 1. 객체 값을 설정해준다면 users[id] = name; 이 아니라 user.id = name 이라고 해야 하는것 아닌가요?? 2. 혹은 이 선언이 dictionary 로 선언한 건가요?? 3. JS에서 객체와 dictionary 의 차이가 있나요?? 이상 질문 마칩니다. 좋은 강의 감사드립니다. return req.on('end', () => { console.log('POST 본문(Body):', body); const { name } = JSON.parse(body); const id = Date.now(); users[id] = name; res.writeHead(201, { 'Content-Type': 'text/plain; charset=utf-8' }); res.end('ok'); });
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
api 서버 배포할 때
vue로 sns 만들기 보고 프로젝트 시작해서 현재 ec2에 프론트 서버 하나와 백앤드 서버 하나 이렇게 2개의 인스턴스를 가지고 있습니다. api를 만들어줘야할 것 같아서 이 강의로 돌아와서 들었는데, api서버도 인스턴스 하나 더 만들어서 따로 관리해줘야겠죠? 처음에 백엔드에 같이하면 하나가 터졌을 때 다른 서버도 터지기 때문에 분리해야한다고 말씀하신 것 같은데, 잘 이해했나 싶어서 여쭤봅니다. 또 그런 경우 데이터베이스는 어떻게 공유해야하는 지도 궁금합니다. 강의 덕분에 많이 성장하고 있습니다. 늘 감사합니다