묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[개정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를 꺼내 썼잖아요. 콘솔로 찍어보니깐 자동으로 디코딩 되어있던데 이건 익스프레스에서 알아서 디코딩 한 것인가요?
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
질문있습니다
채팅 서버 코드 상에서 쓰레드를 생성한 직후 바로 CloseHandle함수를 호출하여 쓰레드 핸들을 해제해주는 부분이 있는데 쓰레드의 동작이 완료되기 전에 CloseHandle을 해줘도 문제가 없나요??리스닝 소켓과 accept함수로 생성된 소켓의 포트 번호가 25000으로 netstat와 wireshark 상으로 보면 동일하게 나오는데 여러 개의 소켓이 하나의 포트 번호를 공유할 수 있나요?? 아니면 netstat와 wireshark의 편의 기능인가요?? accept하면 랜덤한 포트번호를 할당받아서 소켓에 부여한다고 알고 있어서 질문드립니다 ㅠ리스닝 소켓도 버퍼가 있나요??shutdown(hSocket, SD_BOTH);로 리스닝 소켓을 shutdown해주고 나서 accept를 해봤는데 클라이언트의 접속이 잘 되더군요. 리스닝 소켓의 shutdown은 아무런 효과가 없는 건가요??클라이언트와 연결돼있는 상태에서 closesocket(hSocket);을 해서 리스닝 소켓을 해제해봤더니 서버에 연결돼있는 모든 클라이언트에게 RST가 보내졌습니다.그럼 서버가 종료될 때 클라이언트 연결을 끊으려고 모든 클라이언트 소켓들을 순회하면서 closesocket을 해주는 대신 리스닝 소켓하나만 closesocket을 해주는 방식을 써도 될까요??
-
해결됨[개정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에 정보넣는것처럼 쿼리문 따로 폴더를 만들어서 가져오고 사용할수있나요?(쿼리문을 밖으로 빼서 사용하고싶습니다.) 자세히 설명해 주시면 감사하겠습니다.
-
미해결Slack 클론 코딩[실시간 채팅 with React]
페이지 접속시 다수 렌더링 이슈(slack환경으로 새 프로젝트 구축)
슬랙 프로젝트의 환경설정(웹팩 등)을 토대로 새 프로젝트를 만들고 있습니다.페이지 접속시 console.log를 찍어보니 3번 찍히는 문제가 있습니다.원인 및 해결방법을 모르겠어서 질문드립니다. 아래는 라우터 쪽입니다.login과 signup은 loadble을 사용해서 그런지 1번만 console.log가 찍혔습니다.아래 stockrecode에 해당하는 페이지가 3번 console.log 찍힙니다. 아래는 stockrecode 컴포넌트에 있는 코드입니다. 나머지는 다 주석처리하였습니다.아래는 로 이동시에 표시된 내용입니다. useSwr 사용 부분을 지우면 2번 표시됩니다.<해본 방법>strict-mode를 지우면 되는 글을 보아서 찾아봤는데이미 strict-mode가 없는 상태였습니다. 2.웹팩에서 strict-mode를 false로 하면 되는 글을 보고 해보았는데(관련 링크 https://www.sobyte.net/post/2021-09/webpack-strip-use-strict/)아래처럼 @babel/plugin-transform-modules-commonjs 설치를 하고 적용해보았는데도아래처럼 에러가 생겨서 이 방법으로도 해결하지 못하였습니다 답변주시는데 더 필요한 정보가 있으시면 말씀부탁드립니다.꼭 해결하고 싶은데 제자리만 멤도는거 같아 질문 올립니다. ㅠ
-
미해결[개정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서버로 보내면 변조는 아니지만 그냥 그 사람인 척 할 수 있는게 아닌가요?
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
TCP_NODELAY 옵션
TCP_NODELAY 옵션을 주면 입출력 버퍼를 사용하지 않는다고 하셨는데 입력 버퍼도 사용하지 않나요??맞다면 보내는 측의 send()와 받는 측의 recv()가 1:1 매핑이 되는 건가요?? ( 받는 측에서 TCP_NODELAY 옵션을 줬다면 )
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
질문있습니다
1. send()함수는 패킷을 보내는 함수가 아니라 소켓의 출력 버퍼에 데이터를 쓰는 것이고, recv()함수는 소켓의 입력버퍼에서 데이터를 읽어들이는 거라고 보면 될까요?? 데이터를 모아서 한번에 패킷을 보내는 것이 패킷의 갯수를 줄여서 성능 상의 이점이 있다는 건 알겠지만 데이터를 받을 때도 입력 버퍼에서 모아놓았다가 한번에 읽어들이는 것이 좋다는 것은 잘 모르겠네요...ㅠㅠ데이터를 받을 때 패킷을 보낼 때와 마찬가지로 일정 시간 대기해서 데이터가 쌓이도록 한 다음 읽어들인다는 건가요??
-
미해결[개정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 요청을 한 코드가 있었나요? 신경을 안 써도 되는 부분인지 궁금합니다.
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
시퀄라이즈 실습 강의 : CREATE 가 아니라 SELECT가 출력됩니다.
-C:\Users\ysm65\learn-sequelize>npm start> learn-seuqellize@0.0.1 start> nodemon app[nodemon] 3.0.1[nodemon] to restart at any time, enter rs[nodemon] watching path(s): .[nodemon] watching extensions: js,mjs,cjs,json[nodemon] starting node app.js3001 번 포트에서 대기중Executing (default): SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = 'users' AND TABLE_SCHEMA = 'nodejs'Executing (default): SHOW INDEX FROM users FROM nodejsExecuting (default): SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = 'comments' AND TABLE_SCHEMA = 'nodejs'Executing (default): SHOW INDEX FROM comments FROM nodejs데이터베이스 연결 성공 --개정 3판 7장 내용 실습 중 마지막에 브라우저 창에 띄우는 것 까지 확인을 했지만 이름을 클릭 시 comment 내용이 뜨지 않아 하나씩 확인하면서 오류를 찾고 있습니다. 그 과정에서 3판 교과서 344page에서 소개된 내용과 다른 점을 찾았고 강사님과 다르게 CREATED가 아니라 SELECTED 로 뜨는 게 문제의 원인이지 않을까 생각하고 있습니다. 코드의 오타는 확인한 상황인데, 다른 원인이 어떤 게 있는지 고민을 하다가 이렇게 질문 글을 남깁니다. 어떻게 해결을 하는 게 좋을 지 조언을 구하기 위해서 질문을 남깁니다.
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
req.session 질문
16:19의 3번에서 세션 객체를 찾아서 req.session으로 만든다고 했었는데 이전에 처음에 로그인 했을 때 req.session으로 등록된 세션 객체(13:40의 6번)는 사라진 건가요?
-
해결됨Slack 클론 코딩[실시간 채팅 with React]
baseURL 변경 후에도 같은 내용의 cors 에러가 나옵니다.
안녕하세요 질문드립니다!아직 초반이지만 언젠가부터 cors 에러가 계속 나고 있는데 baseURL 도 아래와 같이 변경했습니다.axios.defaults.baseURL = process.env.NODE_ENV === 'production' ? 'http://localhost:3095' : 'http://localhost:3090'; 제 코드엔 nodebird 라는 글자 자체가 없는데 어디가 잘못된 건가요......
-
해결됨Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
IOCP에서 WSASend 사용 관련 및 시간 소요 요청 처리
먼저 좋은 강의 감사드립니다.IOCP를 사용 시 채팅서버에서 수신의 경우는 WSARecv를 사용하였으나, 송신은 일반 send 함수를 사용하고 있습니다.송신의 경우 WSASend를 사용하는 것이 send를 사용하는것 대비 장점이 없는 것인지요?WSASend 사용 관련하여 해당 함수를 사용해야 하는 상황에 대해 설명 부탁드립니다.추가로 IOCP의 thread (GQCS)에서 처리하는 일이 시간이 소요되는 처리를 해야 하는 시나리오 (파일 송신 등)에서, 사용자 수가 증가하는 경우 할당할 수 있는 thread가 없어, 동시 접속이 늘어나는 경우 문제가 발생할 수 있을 것으로 판단됩니다. 이런 경우 어떻게 설계를 하는 것이 타당한지 의견을 구하고자 합니다.감사합니다.
-
미해결Slack 클론 코딩[실시간 채팅 with React]
npm warn 은 고치지 않고 넘어가도 되나요?
안녕하세요 질문 드립니다.npm 설치할 때 이러 경고가 나타났는데, 에러는 아니길래 그냥 지나갔는데,로컬호스트3095 들어가면 계속 이러 에러가 나와서 진행이 안 되고 있어요서버는 잘 연결되었습니다
-
미해결Slack 클론 코딩[실시간 채팅 with React]
워크스페이스 내에서 채널 및 디엠 채팅 시 소켓의 구조가 궁금합니다.
안녕하세요! 강의 정말 잘 듣고 있습니다. 저에게 여러모로 큰 도움이 되고 있는 것 같습니다!다른게 아니라 강의를 들으면서 아직 웹소켓에 대해 잘 몰라서 정확한 로직을 잘 모르겠어서 질문을 드립니다! 소켓을 사용하는 로직이한 클라이언트에 대해 워크스페이스를 바꿀 때 마다 해당 워크스페이스에 대한 소켓을 연결서버는 워크스페이스 별로 소켓을 관리. 채널과 디엠 상관없이 워크스페이스 별로 들어오는 모든 소켓 요청(채팅 내용)을 받아서 전달함클라이언트는 해당 채팅 내용들을 다 받지만 현재 접속해있는 채널이나 dm을 주고 받는 상대에 대한 채팅 내용만 걸러서 화면에 보여줌이렇게 진행되는 것이 맞을까요? 맞다면 혹시 워크스페이스라는 개념이 없이 채팅방만 있거나 1:1 채팅의 기능만 소켓을 사용하여 구현한다고 했을 때는 채팅방 별로 혹은 클라이언트 별로 소켓을 생성해서 구현을 하게 되나요..? 그게 아니라면 보통 어떻게 구현하는지 질문 드리고 싶습니다..! 감사합니다