49,500원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
실제 서버 배포
안녕하세요 선생님 ! 강의 정말 잘 보고 있습니다 ! 다름이 아니라 현재 Node Js 교과서를 참고해서 웹 프로젝트를 진행 중입니다. AWS를 이용해 lightsail과 도메인을 구입해 실제 배포를 하려 하는데요. 큰 프로젝트가 아니라 사용자가 100~200명쯤 되는 블라인드 매칭 서비스입니다. 무료로 진행하는 프로그램이라 큰 걱정은 없지만, 실제 서버 배포를 함에 있어 15장에 나오는 서비스 운영을 위한 패키지 만으로 보안이 가능할까 걱정이 돼서 글을 작성합니다. 추가 적으로 추천하시는 패키지들이 있으시면 추천 받고 싶습니다 !
- 해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
프로미스 함수 모킹할 때 질문
Promise.reject를 쓰는 경우가 아니라면 바로 반환하거나 Promise객체를 사용해서 반환하거나 똑같은 것 같은데 크게 상관없나요?
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
MySQL 3306 포트 PID 관련 질문
강의에서 알려주신대로 MySQL 설치 및 정상적으로 비밀번호도 설정하였습니다. 그리고, workbench 및 콘솔로도 잘 실습하였고요. (*Table 세팅 등)그런데, 컴퓨터를 껐다가 재부팅했더니 MySQL 로그인이 안됩니다.패스워드도 정상적으로 다 입력하였으나, 계속 오류 메세지가 나와서cmd에 접속해 현재 mysql이 사용중인 프로세스 id가 컴퓨터 재부팅 전에설정되었던 pid와 다름을 확인하였고, 어쩔 수 없이 컴퓨터에 설치된MySQL 프로그램 삭제 후 재설치하면서 임시방편으로 문제해결하긴 했습니다. 혹시 몰라서 또 다시 컴퓨터를 재부팅한 이후 MySQL pid를 보았는데,또 바뀌어 있더라고요. 그럼.... 컴퓨터를 매번 재부팅할 때마다 MySQL 프로그램을 계속삭제했다가 재설치를 해야하나요?ㅜ
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
Lightsail에서 배포시 Error: Cannot find module './KakaoStrategy'에 대한 오류 질문입니다.
안녕하세요 강사님,현재 Lightsail에서 배포를 진행하며$ sudo NODE_ENV=production PORT=80 pm2 start server.js -i 0 명령어 작성후$ sudo pm2 monit으로 확인해 보니 아래와 같은 오류가 발생합니다.KakaoStrategy 모듈을 못찾는다는데passport-kakao 1.0.0 버전으로 npm i를 했었습니다. 어떤게 문제인걸까요..?로컬에서는 문제없이 잘 돌아갔습니다. package.json 입니다.{ ... "dependencies": { "@aws-sdk/client-s3": "^3.377.0", "bcrypt": "^5.1.0", "connect-redis": "^4.0.4", "cookie-parser": "^1.4.6", "cors": "^2.8.5", "cross-env": "^7.0.3", "csurf": "^1.11.0", "dotenv": "^16.3.1", "express": "^4.18.2", "express-session": "^1.17.3", "helmet": "^7.0.0", "hpp": "^0.2.3", "morgan": "^1.10.0", "multer": "^1.4.5-lts.1", "multer-s3": "^3.0.1", "mysql2": "^3.4.2", "nunjucks": "^3.2.4", "passport": "^0.6.0", "passport-kakao": "1.0.0", "passport-local": "^1.0.0", "pm2": "^5.3.0", "redis": "^3.0.2", "sanitize-html": "^2.11.0", "sequelize": "^6.32.1", "sequelize-cli": "^6.6.1", "winston": "^3.10.0" }, "devDependencies": { "nodemon": "^2.0.22" } } passport > kakaoStrategy.js 부분입니다.const passport = require('passport'); const KakaoStrategy = require('passport-kakao').Strategy; const User = require('../models/user'); module.exports = () => { passport.use(new KakaoStrategy({ clientID: process.env.KAKAO_ID, callbackURL: '/auth/kakao/callback', }, async (accessToken, refreshToken, profile, done) => { // accessToken, refreshToken은 카카오 api를 호출하는데 사용되나, 여기선 사용하지 않음 console.log('kakao profile', profile); try { const exUser = await User.findOne({ where: { snsId: profile.id, provider: 'kakao' }, }); if (exUser) { //login done(null, exUser); } else { //join const newUser = await User.create({ email: profile._json?.kakao_account?.email, // 이 구조가 자주 바뀌므로, profile을 console.log를 통해 계속 확인하자 nick: profile.displayName, snsId: profile.id, provider: 'kakao', }); done(null, newUser); } } catch (error) { console.error(error); done(error); } })); };
- 해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
프록시 서버 질문
이전 강의에서 만든 서버에서 서버로 요청하는 nodecat서버를 프록시 서버라고 봐도 되나요?브라우저에서 nodecat과 같은 도메인인 localhost:4000/myposts 요청을 보냈고 nodecat 서버가 이를 받아 nodebird서버로 localhost:8002/v1/post/my 요청을 보냈으니 이게 뭐 http-proxy-middleware같은 패키지를 써서 따로 구현해야 하는 프록시 서버랑 뭐가 다른지 모르겠습니다.
- 해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
axios.defaults.headers.origin 질문
이전 강의에서 갑자기 axios.defaults.headers.origin을 넣은 것이 이해가 되지 않았었는데 이번 강의에서 corsWhenDomainMatches 미들웨어에 사용하기 위해 넣은 것이라 봐도 되나요? 근데 axios.defaults.headers.origin = process.env.ORIGIN;코드를 주석처리해도 Origin 헤더는 정상적으로 찍히던데 저게 있는 것과 없는 것과 뭔 차이인가요?
- 해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
redis 사용하는데 ConnectionTimeoutError: Connection timeout이라는 오류가 자꾸 발생합니다.
안녕하세요 강사님강사님 영상을 통해 학습하고 자그마한 프로젝트를 수행하고 있는데 서버 실행은 되지만 아래와 같은 오류가 발생합니다.app.js의 코드는 아래와 같습니다.강의랑 ppt 교안에는 const RedisStore = require('connect-redis')(sesson); 으로 되어있으나저같은 경우에 아래와 같은 오류가 발생해서 require('connect-redis').default;로 변경했었습니다.
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
강의 소리는 작은데 엔딩음악은 너무 커서 귀청 떨어지는줄 알았네요.
무료강좌 중에 이런게 많아요. 다음 강의 제작때는 소리를 맞추든가 음악을 안넣든가 하는게 좋을것 같애요.
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
어렵습니다...
전체적으로 어렵고 잘 이해가 되지 않습니다.. 지금 9장 거의 끝나가는데 계속 가는게 맞을까요..? 아니면 복습을 다시 하는게 맞는건가요.. 혼자하려니 많이 어렵네요 조언 부탁드립니다.
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
섹션3.http 모듈로 서버 만들기 관련 질문입니다.
섹션3.http 모듈로 서버 만들기 관련 질문입니다.코드를 보면, 클라이언트가 서버에 요청하는 get()함수를 사용할 때get("/users"), 즉 users라는 url을 클라이언트 측에 전달하도록 설정했는데,클라이언트가 서버에 데이터를 신규로 등록하거나, 수정, 삭제를요청할 때에는 post("/user", {name})이렇게 작성하는 이유가 뭘까요?그냥 생각하기에 클라이언트가 요청할 때, 서버측에서 전달할 페이지 url이/users 이니까, 그냥 수정 및 삭제도 동일한 /users 주소에서 하면 안되는건지 궁금해서요. 그리고, 두 번째 질문입니다. 만약 위 질문이 애초에 불가능한 것이라고 한다면서버에서는 /user에 수정. 삭제된 데이터 값을 어떻게 /users에 전달해서 새롭게변경된 값으로 업데이트하는 것인지 궁금합니다.(*서버에 대한 개념부족으로 인해 문의드립니다.)
- 해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
파람스에 인코딩해서 보낼 때 질문
파람스부분을 인코딩해서 보냈는데 API서버에선 디코딩 안하고 바로 req.params.title를 꺼내 썼잖아요. 콘솔로 찍어보니깐 자동으로 디코딩 되어있던데 이건 익스프레스에서 알아서 디코딩 한 것인가요?
- 해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
에러처리 질문
6:25에서 POST /v1/token 요청시 성공인 200응답이 아니면 401응답으로 등록되지 않은 도메인이었거나 500응답으로 기타 에러였는데 그런 응답을 받았다면 else문 건너뛰고 바로 catch문으로 이동하게 되는 것 아닌가요? 6:25에 작성한 else문은 어떤 상황에 작동되는 건지 궁금합니다.
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
시퀄라이즈안쓰고 mysql연결하려고 합니다.
기존에 mysql에 연결은 이런식으로 했습니다. 코드가 너무 지져분해서 mvc패턴으로 나눠보려고 하는중입니다.아래처럼 바꾸고 db연결하고 로그인하려고 하는데 이렇게 오류가 발생하고있습니다.구글링해봤는데 대부분은 처음에했던 위에것처럼 많이 나오는거 같아요. db를 models폴더에 mysql.js에 정의하고 controller에서 연결해서 사용하고싶습니다.혹시 controller에서 쿼리문입력하면 너무 지저분한거 같아서 강사님이 models의 user.js에 시퀄라이즈를 이용해서 db에 정보넣는것처럼 쿼리문 따로 폴더를 만들어서 가져오고 사용할수있나요?(쿼리문을 밖으로 빼서 사용하고싶습니다.) 자세히 설명해 주시면 감사하겠습니다.
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
res.render 질문
사용자 이름을 누르면 사용자의 게시글이 출력되는 기능 구현중 res.render가 동작하지 않아 질문 드립니다.아래가 컨트롤러 부분이고 console.log(posts[0].User.nick); 이부분도 출력 되는걸 확인했습니다.그런데 title 안에 posts[0].User.nick 이 부분에서 오류가 뜨는데 위 console.log에서 출력이 되는데 왜 여기선 오류가 뜨는지도 모르겠고 title과 twits 부분을 지우고 main을 다른 페이지로 바꿨는데도 아예 동작을 하지 않는걸 확인했습니다. title 부분에서 오류가 안떠도 페이지가 제대로 로드 되지도 않습니다. exports.renderUpost = async (req, res, next) => { try { console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); let posts = []; if (req.params.userId) { const posts = await Post.findAll({ include: [ { model: User, where: { id: req.params.userId }, attributes: ["id", "nick"], }, ], }); console.log(posts[0].User.nick); } res.render("main", { title: ` ${posts[0].User.nick} | NodeBird`, twits: posts, }); } catch (error) { console.error(error); next(error); } }; 제가 작성자 이름을 a 태그로 해서 아래 코드처럼 수정해서 했는데 혹시 이 a태그에 넣은것들이 잘못된건가요? 위 코드에서 console.log 까지 출력 다 되는거 보면 문제가 없을것 같은데 그나마 생길것 같은게 이부분뿐이라 올려봅니다.<a href="#" onclick="findUpost(this);return false;" class="twit-author">{{twit.User.nick}}</a>
- 해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
JWT 시그니처, 비밀키 부분 질문
1:49 책 내용을 보면 시그니처 자체는 숨기지 않아도 되고, 비밀 키만 숨기면 된다고 적혀있는데 시그니처 안에 비밀 키가 들어있으니 이것도 유출되면 안 되는게 아닌가요? 비밀 키를 찾지 않고 그냥 바로eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.he0ErCNloe4J7Id0Ry2SEDg09lKkZkfsRiGsdX_vgEg이런 JWT문자열을 가로채서 API서버로 보내면 변조는 아니지만 그냥 그 사람인 척 할 수 있는게 아닌가요?
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
동기, 비동기 처리
코드복습중에 비동기, 동기처리 관련하여 궁금한점이 생겨 질문합니다! const User = require('../models/user'); const bcrypt = require('bcrypt'); exports.join = async (req, res, next)=>{ const { nick, email, password } = req.body; try { const exUser = await User.findOne({where: {email}}); if(exUser){ return res.redirect('/join?error=exist') } const hash = await bcrypt.hash(password, 14); await User.create({ nick, email, password: hash, }); return res.redirect('/'); } catch(err){ console.error(err); next(err); } }위의 코드가 수업중에 작성하신 코드입니다 여기서 아래부분만 이처럼 await를 뺀 상태로 변경하였는데,const exUser = User.findOne({where: {email}});if(exUser)가 true값이 되어return res.redirect('/join?error=exist')으로 빠지게 되었습니다. 제가 이해하기로는 await가 붙은 비동기 처리들은 동기처리들이 완료되어 호출스택이 비기전까지는 task큐에서 대기하는 것으로 알고 있는데,위의 현상대로면 await가 붙은 아래 코드 2개가 먼저 실행되고const hash = await bcrypt.hash(password, 14); await User.create({ nick, email, password: hash, }); 이 코드가 실행된 것 같은데const exUser = User.findOne({where: {email}}); 왜 이런 현상이 발생하는지 궁금합니다!!! 감사합니다
- 미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
좋아요 기능 구현중 에러 질문입니다.
첫번째 부터 순서대로post모델,user모델 passport.index의 deserializeUser부분 route.page 부분 입니다.User is associated to User multiple times. To identify the correct association, you must use the 'as' keyword to specify the alias of the association you want to include. 위 같은 오류가 뜨는데 어떤게 문제인지 아무리 찾아봐도 모르겠습니다..
- 해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
include의 as옵션 질문
include의 as옵션으로 넣은 가명이 belongsToMany의 as옵션으로 설정한 가명을 찾는 것인가요?chatGPT 는 include의 as옵션이 그냥 찾은 객체에 가명을 붙이는 것 뿐이라고 하던데 include: [ { model: User, attributes: ['id', 'nick'], as: 'Followers', }, { model: User, attributes: ['id', 'nick'], as: 'Followings', }, ] })여기서 model옵션으로 똑같이 User를 넣었는데 두 개의 결괏값이 다르게 나온다는 게 이해가 안 돼요
- 해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
좋아요 기능 구현중 시퀄라이즈 add함수 질문
3번째 사진의 post.addliked(parseInt~~ 이 부분에서 addliked 라는 함수가 존재하지 않는다고 하는데 s를 붙여봐도 as에 해당하는 부분으로 교체해봐도 전부 오류가 뜨네요왜그럴까요....
- 해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
GET /cart.json 404 4.349 ms - 2902 에러
게시글 업로드시 다른 요청/응답은 다 정상이고 게시글 업로드와 DB생성도 다 정상적으로 작동되던데 마지막에 GET /cart.json 404 4.349 ms - 2902 에러가 뜨던데 이번 코드에서 /cart.json 요청을 한 코드가 있었나요? 신경을 안 써도 되는 부분인지 궁금합니다.