수강이 제한됩니다.
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
쿼리문 질문드립니다.
아래와 같은쿼리문이 있을 때 select User.id,User.nick , followes->follow. ~~ from users as User left join ( follow as followes->follow inner join users as followes on followes.id = followes->follow .followerid ) on User.id = followes->follow .followerid where User.id = 3 여기서 쿼리문 실행순서가 1. from 2. on 3. join 4.where 이순으로 알고있는데 여기서 from users as User 전체 User데이터 뽑고나서 어떤 순서로 실행이 되는지 궁금합니다. 제생각으로는 left join 이 실행이 되는데 그안 괄호먼저 실행이 되어서 follow as followes->follow inner join users as followes on followes.id = followes->follow .followerid follow 테이블과 users 테이블의 id가 같은것을 뽑아서 left join 주체가 되는 user 테이블의 id와 같은것을 찾고 그후에 where user.id = 3 이 실행될꺼같은데 저 중간에 있는 on이 join문끝에있는 on이 아니라 다른것인가요?? 궁금합니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
질문드립니다.
document.getElementById('img').addEventListener('change', function(e) { const formData = new FormData(); console.log(this, this.files); formData.append('img', this.files[0]); console.log(formData); axios.post('/post/img', formData) .then((res) => { document.getElementById('img-url').value = res.data.url; document.getElementById('img-preview').src = res.data.url; document.getElementById('img-preview').style.display = 'inline'; }) .catch((err) => { console.error(err); }); }); 1 . formdata를 axios 하기전에 어떤 데이터를 가지고있나 보고싶은데 실질적인 데이터는 어떻게 확인이 가능할까요? append시켜서 추가시킨 files[0]은 어디에 있는지 찾아도 안보여서 질문드립니다. router.post('/', isLoggedIn, upload2.none(), async (req, res, next) => { try { const post = await Post.create({ content: req.body.content, img: req.body.url, UserId: req.user.id, }); 2. 그리고 중간에 upload.none() 을 안써주면 애러가 나던데 upload2 미들웨어를 실행해야지만 req.body에 데이터가 들어가는건가요? 3. 넌적스에서 예를들어 console.log() 자바스크립트 문법처럼 render로 넘긴 데이터가 객체일때 넌적스나 html 반복문 돌리기전에 데이터를 확인하는 방법이 없나요? {{twit}}로만하면 [object SequelizeInstance:Post]라고만 나와서요
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
한번만 더 질문드리고 싶습니다(그림 첨부)
아래의 소스코드를 그림으로 그려봤는데 맞게 그렸는지 봐주시면 감사하겠습니다 var relationship1 = { name:'zero', friends : ['nero', 'hero', 'xero'], logFriends: function(){ var that = this; console.log(`this: ${this}, that: ${that}`); this.friends.forEach(function(friend){ console.log(that.name,friend); console.log(`this: ${this}, that: ${that}`); }); } } relationship1.logFriends(); 경과1. 경과2. 경과3. 경과4. 여기서부터 햇갈리기 시작했습니다 foreach( function(friend){ }); 이렇게 foreach( ) 안에 함수 선언된 콜백함수 function(friend)는 태스크 큐에 대기하고 있다면 호출 스택의 relationship1.logfriends( ) 와anonymous 까지 지워져야 이 콜백함수가 태스크큐에서 호출스택으로 들어가게 됩니다 그런데 아직 호출스택이 비워지지도 않았는데 콜백함수가 실행되고 있습니다 그렇다면 이 콜백함수 function(friend){ console.log(that.name,friend); console.log(`this: ${this}, that: ${that}`); }는 태스크큐에 안가고, 백그라운드에서 호출스택에 있는 함수들과 동시에 실행되고 있는 건지 질문드리고 싶습니다
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
this 에 대해 질문드리고 싶습니다
안녕하세요 강의 4분 21초부터 어려워서 (JavaScript) 자바스크립트의 this는 무엇인가? - ZeroCho Blog (JavaScript) 함수의 메소드와 arguments - call, apply, bind - ZeroCho Blog 강사님의 블로그를 찾아서 공부했습니다 링크에서는 call apply bind 설명부터는 기본기가 부족해서 이해를 못했습니다 그러다가 궁금한 점이 생겨서 질문드립니다 질문1. function도 객체라고 볼 수 있는데 this는 function( ) 객체 안에 있어도 function 객체를 가리키지 않고 window를 가리킨다는 것을 공식으로 알아야 하나요? 예외적으로 객체 A안의 funtion안의 this의 경우는 function을 포함하는 A객체를 가리킨다고 생각해야 하나요? 질문2. 강의 4분 2초에서 funtion은 funtion마다 자기만의 this를 가진다는 말씀을 이해 못했습니다 C++이나 자바에서 생성자들이 자신만의 this를 갖는다는 맥락일까 싶기도 했고 아리송해서 직접 실험해보는 게 좋겠다 싶어서 68행에 this와 that을 비교해봤습니다 아래는 소스코드입니다 var relationship1 = { name:'zero', friends : ['nero', 'hero', 'xero'], logFriends: function(){ var that = this; console.log(`this: ${this}, that: ${that}`); this.friends.forEach(function(friend){ console.log(that.name,friend); console.log(`this: ${this}, that: ${that}`); }); } } relationship1.logFriends(); 왜 여기서 68행의 this는 relationship1이 아닌, undefined가 나오는지 도저히 이해가 어려웠습니다 강사님께서 부모의 this 와 자식의 this 개념을 설명해주시긴 했지만, 제 기본기가 부족해서 이 코드에서 부모와 자식이 무엇인지 보이지가 않았습니다 자바나 C++에서 부모, 자식 클래스, 생성자, this, 오버라이딩 같은 개념을 공부하긴 했는데, 자바스크립트를 제대로 기본기를 다지지 않고, "모르는 개념이 나올 때마다 찾아서 공부하면 되겠지"라는 사고방식으로 하려니 한계에 부딪힌 느낌입니다 이럴 때는 강사님의 렛츠기릿 자바스크립트 강의를 처음부터 완주하는 게 나을지 질문드리고 싶습니다 [리뉴얼] 렛츠기릿 자바스크립트 - 인프런 | 학습 페이지 (inflearn.com)
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
사소한 내용 확인 부탁드립니다!
강의 흐름이랑 크게 상관 없습니다만, 혹시 9:50 언저리에 나온 `path.delimiter`가 POSIX의 경우 쉼표(`,`)가 아닌 콜론(`:`)이 아닌가 해서 질문드립니다!
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
var let const 에 대해 질문드립니다
안녕하세요 제가 C, C++ JAVA 부터 공부해서 자바스크립트 문법이 조금 익숙치 않아서 질문드리고 싶습니다. 질문 1. var a = 1; let b = 2; const c =3 ; d = 4; 가 있을 때, d 처럼 앞에 변수 선언 예약어가 아무것도 안붙는 것은 var와 스코프가 같은지 다른지 질문드리고 싶습니다 질문 2. 블록 스코프(어떤 중괄호 내에서든 가능)와 함수 스코프(funtion() 함수의 중괄호)의 차이는 이해했는데, 궁금한 점이 있습니다 자바스크립트는 if( ) 나 for( )를 함수로 안봐주나요? 아니면 자바스크립트도 if( ) 나 for( )를 함수로 봐주는데 번역상 function( ){ } 스코프를 함수 스코프라고 하는지 질문드리고 싶습니다 질문3. typeof( 변수명) 함수가 변수의 데이터 타입을 반환해주듯이 변수의 var let const 를 알아내주는 함수도 있는지 질문드리고 싶습니다
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
이벤트루프 알아보기 8분 20초에 대해 질문드립니다
안녕하세요 강의 8분 20초에서 자바스크립트 강좌에서는 호출 스택, 백그라운드, 태스크 큐와 관련해서 소스코드의 실행순서를 분석하는 훈련을 시켜주신다고 해주셔서 아래 링크의 강좌에서 훈련을 시켜주시는지 질문드리고 싶습니다 [리뉴얼] 렛츠기릿 자바스크립트 - 인프런 | 학습 페이지 (inflearn.com) 그리고 이 강좌에서 훈련시켜주시는 게 맞다면 몇 강에서 이런 훈련을 시켜주시는지도 질문드리고 싶습니다
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
ws의 send
ws 모듈의 send를 실행하면 모든 사용자에게 메세지가 간다고 하셔서 socket.js에서 count라는 전역변수를 만들고 크롬과 파이어폭스에서 접속해봤습니다. ws.interval = setInterval(() => { if (ws.readyState === ws.OPEN) { ws.send(`${ip}: ${++count}`); } }, 3000); 왼쪽이 파이어폭스 오른쪽이 크롬 동시에 접속했을 때 콘솔창입니다. 짝수와 홀수가 나뉘어 찍히는거면 ws의 send는 하나의 소켓에만 응답하는 거 아닌가요? 제가 강사님의 말을 잘못 이해한건가요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
user && user.Domains 질문
router.get('/', async (req, res, next) => { try { const user = await User.findOne({ where: { id: (req.user && req.user.id) || null }, include: { model: Domain }, }); res.render('login', { user, domains: user && user.Domains, }); } catch (err) { console.error(err); next(err); } }); domains의 user && user.Domains를 하신 이유가 user.Domains를 할때 user가 null이면 cannot read property of null 에러를 방지하기 위해서인가요? 그렇다면 user?.Domains이렇게 옵셔널 체이닝으로 바꿔도 문제 없는 부분인가요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
워커에서 mutex 관련 lock,unlok
워커에서 작업들을 관리 할때 임계영역에 있는 자원들에 대한 mutext lock, unlock 기능은 어떤 방식으로 사용할수 있을 까요..?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
이벤트 루프 질문
안녕하세요 이벤트 루프 부분을 보다 질문 드립니다. 호출 스택 에서 백그라운드로 그리고 태스크 큐로 이동후 다시 호출 스택으로 이동한다는 것은 이해 했습니다. 혹시 이것을 디버깅이나 프로그램에서 로그 등으로 확인 할수 있는 방법이 있을까요..? 어떻게 돌아가는지 확인해 보고 싶습니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
혹시 github 보는법좀 알 수 있을까요
passport 안에 내용이 더 많은거 같아서 github로 보고싶은데 https://github1s.com/jaredhanson/passport/ 여기서 어떤식으로 봐야하는지 뭐부터 봐야하는지 감이 안잡히는데 어떤식으로 따라가면서 보는건지 알 수 답변주시면 감사합니다. 그리고 passport.serializeUser((user,done)=>{ done(null,user.id) }); 여기서 done할때 userid를 저장한다고 하는데 connect.sid의 값도 여기서 자동으로 생성해서 id값 들어가면서 들어가는건가요??
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
시퀄라이저 -> sql 질문
시퀄라이즈 문법이 아직 익숙하지 않아 질문드립니다. deserializeUser 안의 내용인 User.findOne({ where: { id }, include: [ { model: User, attributes: ['id', 'nick'], as: 'Followers', }, { model: User, attributes: ['id', 'nick'], as: 'Followings', }, ], }) 이 부분을 select *FROM ( SELECT * FROM users WHERE id = {세션에서 가져온 id} ) as userLEFT JOIN ( SELECT followingId, followerId FROM Follow ) as Follow on user.id = Follow.followingIdLEFT JOIN ( SELECT id, nick FROM users ) as Follower on Follow.followerId = Follower.id; 시퀄라이저에서 Followers 까지만 적성해봤습니다. 이런식으로 이해하면 될까요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
세션, 쿠키 질문
강의에서 req.login에서 쿠키를 브라우저로 보낸다고 하셨는데 passport 깃헙의 req.login 함수코드에서 쿠키를 res에 추가하거나 하는 부분을 못찾았습니다. 대신 req.login은 serializeUser를 호출하고 sericalizeUser에서 req.session에 유저관련 정보를 저장하는 부분을 봤습니다. 혹시 쿠키를 브라우저로 보내는 것은 express-session에서 req.session이 있으면 세션의 sid를 쿠키를 브라우저로 보내는건가요? 그래서 로그아웃시 req.logout으로 세션을 지우고 req.session.destroy로 req.session도 지워주는건가요? req.session.destroy를 하지 않으면 세션에서는 req.logout으로 세션쿠키를 지웠는데 req.session은 남아있어 express-session이 세션에서 쿠키를 찾아 브라우저로 보내려고 하기 때문에 req.session.destroy도 해줘야한다고하면 말이 되는것 같아서 질문드립니다. 정리하자면 쿠키를 브라우저로 보내는 것은 express-session에서 하는 것이고 express-session은 req.session이 있으면 해당 세션쿠키의 sid를 포함한 쿠키를 브라우저로 전송하는 건가요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
db 설계시 질문
제로초님 보통 디비 설계시 유저 정보를 담을때 개인정보 테이블, 프로필 테이블로 나누는데 만약 프로필에 배열로 들어가야하는게 있다면 (예를 들어, 프로필의 캐릭터가 헤어,눈,코,입,옷,수염,안경 이런식으로 각각의 요소들의 이미지를 따로 품고있다하면) 방법이 3가지인데 1. 그냥 하나하나 프로필 컬럼으로 다 때려박기.(더럽지만 성능은 좋아보임) 2. 별도의 케릭터 테이블로 만들고 불러올때마다 join으로 연결해주기. (가장 깔끔해보이지만 성능이 걱정됨) 3. 프로필에 캐릭터 컬럼을 만들고 json 형식으로 억지로 string으로 만들어서 저장하기. (깔끔하지만 정규화 1원칙 위반, 입출력마다 json포멧해줘야해서 성능은 잘모르겠음) 질문은 컬럼이 10개 미만이라고 가정할경우 실무에선 이럴경우 보통 어떻게 처리하는지 궁금하고, 제로초님 개인적으론 뭘 가장 선호하는지 궁금하고, 성능은 어떤게 가장 좋을지 궁금합니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
passport 공식문서 질문
1. 공식문서에서는 passport-local을 받아와 그대로 생성자로 사용합니다. 강의에서는 가져온 passport-local에서 Stratege를 꺼내 LocalStrategy 생성자로 사용합니다. passport-local의 깃헙입니다. require에 .Strategy를 붙이나 안붙이나 똑같아 보이는데 원래는 15번째 줄만 있었는데 의존성때문에 수정하지않고 10번째 줄을 추가해 결국 같은건가요? 2. 공식문서를 보면 authenticate 함수를 객체로 옵션을 넣어 failureField로 실패처리를 하고 app.post에 다음 콜백으로 req,res,next를 받는 함수를 넣어 authenticate를 중간 미들웨어로 사용합니다. app.post( '/login/password', passport.authenticate('local', { failureRedirect: '/login', failureMessage: true, }), (req, res) => res.redirect('/~' + req.user.username) ); 강의에서는 authenticate함수 내부의 에러도 처리하기위해 authenticate와 (req,res,next)를 받는 함수를 합쳐 req,res,next와 authError, user, info 6개의 변수를 모두 다룰 수 있게 커스터마이징해 사용했다고 이해했습니다. 제가 궁금한 점은 공식문서를 찾아봐도 authenticate의 인자로 콜백함수를 받을 때 콜백함수가 localStrategy의 done에서 보낸 인자를 받는다는 내용을 못찾았습니다. 그래서 passportjs깃헙을 보니 함수가 정의된 부분에 document에 나오지 않은 사용법이 주석으로 설명 되어있던데 제로초님은 새로운 라이브러리를 사용할때 깃헙까지 읽으며 익히시나요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
강사님 질문이있습니다.
1. 미들웨어중 (req,res)가 들어가는 것들은 사용자 요청에 관련된 미들웨어라서인가요? 2. req.decoded= jwt.verify(token, process.env.SECRET); return next(); 요런식으로 req.decoded 는 한 req가 끝날떄까지만 req.decoded로 불러올수있는 (다음요청에는 같은 세션인 사람의 요청에도 불러올 수 없는 )변수가 맞나요? 감사합니다 ~~
- 해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
자바스크립트(node.js)와 자바 중 백엔드를 위해서 어느 것을 우선시 할지 고민입니다.
안녕하세요 node.js 공부중에 고민이 생겨 질문드립니다. 처음 백엔드에 관심이 생겨 node.js에 대해 알게 되다가 조현영님께서 집필하신 node.js 교과서를 구매하게 되었고 이 강의까지 결제하게 되었습니다. 그렇게 계속 node.js에 대해 공부하다가 자바가 백엔드에 효율이 좋다 자바가 취업이 잘된다 등등의 말을 듣게 되어서 자바를 한번 접해보았습니다. 자바스크립트와 다르게 쫌 어려운 면이 있더라구요. 그래도 백엔드에 자바가 잘쓰인다는 말을 들으니 자바에 눈을 때는것이 어려워졌습니다. 제가 백엔드에 집착하는 것 처럼 보이실텐데 제가 프론트엔드와 백엔드를 동시에 다루는 풀스택강의를 기준으로 처음 자바스크립트에 접하게 되었습니다. 둘다 맛을 살짝식 봤는데 프론트엔드가 저는 맞지 않는거 같더라구요. 디자인이며 html 태그 작성이며 별로 끌리는 업무는 아니었습니다. 반면에 백엔드는 내가 어떠한 요청을 보낼 때 이런 응답을 해줄 수 있다. 이런 개념이 저에게 재밌게 다가온거 같습니다. 어떻게 보시면 이상하다고 생각하시겠지만 저는 node.js, 즉 자바스크립트를 이용한다면 프론트엔드와 백엔드 둘다 할줄 알아야 한다는 생각이 듭니다. 둘다 가능하니 둘다 할줄아는게 정상 처럼 보여졌죠. 백엔드 개발을 하기 위해서는 어느정도 프론트엔드에 대해서도 알아야겠지만 프론트엔드 개발 자체에는 별로 내키지가 않아요. 그런 이유 때문에 자바로 눈이 가게 되었습니다. 현제 시장을 보면 (완벽하게 보지는 않았습니다.) 자바가 아직은 한국에서는 더 많이 쓰여지는 것 같은 느낌이 듭니다. 하지만 나중일은 모르는것이기 때문에 언어 자체에 중점을 두기는 좋아보이지가 않죠. 강의내에서도 조현영님께서 서버(백엔드)는 언어보단 이론이 더 중요하다는 말씀을 들었습니다. 그래도 결국 업무에서 쓰이는 것은 언어이니 이런 고민을 안할수가 없겠더라구요. 굳이 node.js를 하는데 프론트엔드까지 팔 필요는 없다. (그래도 어느 정도는 알아야 한다.) 그러니 node.js를 하자, 아니면 진로를 백엔드로 두었으면 자바를 해야한다. 이런 고민이 있습니다. 물론 자바와 자바스크립트의 차이가 있다보니 (자바는 멀티쓰레드를 이용해서 서버가 대규모로 운영이 가능하다던가, 자바스크립트는 구현이 쉬워서 스타트업에서 많이 쓰인다던가) 그러한 점 역시 고민 해봐야겠지만 제가 어디선가 들은 말 때문에 "자바가 더 우세하다" 이러한 느낌을 받아서 고민이 됩니다. 추가적으로 조현영님께서는 자바스크립트를 배울 때 프론트엔드와 백엔드 둘 중 어느것이 더 관심이 가셨나요? 만약 백엔드에 관심이 더 가셨다면 자바스크립트와 자바에 대해서 고민을 하신적이 있으신가요?
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
라우터 관련 문의드립니다
app.use는 app.get과 다르게 상위 주소에도 걸립니다. /app.css면 /에도 걸립니다. 라고 예전에 답변을 달아주셨는데 app.use('/' , indexRouter); app.use('/user',userRouter) 에서 주소 localhost/user 로 접속하였을 때 먼저 상위 / 에 걸려야하는거 아닌가요?? 정확히 user로 가길래 문의드립니다.
- 미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
강사님 세션쿠키에대해
제가 스프링 으로 톰켓환경 세션이 생기면 JSESSIONID 쿠키가 생겼는데 노드에서는 CONNECT.SID 가 저것에 대응되는건가요? 이런건 런타임별로 자기들이 개발할떄 저런명으로 세션쿠키의 명을 정해놓은건가요?