묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
redux 상태값 문의드립니다
진도가 잘 안나가네요아직 redux에서 헤매고 있습니다. 페이지 이동 시 버튼을 통해 이동 시에는 state 값이 유지가 되는데 직접 localhost:3060/profile 를 타이핑해서 들어가게 되면 상태값이 유지가 되지 않습니다.원래 그런걸까요..?<Menu.Item key="home"><Link href="/"><a>노드버드</a></Link></Menu.Item> <Menu.Item key="profile"><Link href="/profile"><a>프로필</a></Link></Menu.Item> 유지가 되게 해주려면 어떤 방식으로 가져가야 할까요..?
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
터미널 명령어에서 특수문자를 일반 택스트로 인식시키는 방법이 있나요?
mysql의 비밀번호를 자동생성을 통해 생성해서 ~+kmisB1[@l1&FH 로 설정해 놓았는데 아래 명령어에서 특수문자로 인해 인식이 정상적으로 못하는것 같습니다. & 앞에 \를 추가하여 ~+kmisB1[@l1\&FH 로 시도해도 인식이 되지 않았습니다.명령어 : npx typeorm-model-generator -h localhost -d sleact -u root -x ~+kmisB1[@l1&FH -e mysql 에러 : 필수 인자를 받지 못했습니다: e'FH'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
섹션 24 유효성 검사
섹션 24 에서 빈값 처리를 구현하는것을 보여주셨는데요.html5 에서 제공하는 유효성 검사 <input type="text" required />위와같이 사용하는것과의 차이점이 뭘까요 ??
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
msa환경에서 서버끼리는 gRPC로 통신을 하는 형태로 만들어보려고 합니다.
안녕하세요. 이번에 신입으로 입사한 주니어 개발자입니다.입사한 회사에서 msa환경에서 서버끼리는 gRPC통신를 이용해서 통신을 하고 클라이언트와는 게이트웨이를 통해서 통신하는 프로젝트를 nest.js를 이용해서 만드는 온보딩 미션을 주셨는데요.공식문서를 계속 읽어보고 하는데 아직 gRPC와 msa환경을 처음 접해서 그런가 만들어보려니 감이 잡힐거같으면서도 어렵네요.먼저 nest.js의 기본적인 http로 통신하는 시스템을 만들어보고 그 이후에 리팩토링해서 요구조건을 만족하게 만드는게 나을까요?
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
form태그의 enctype="multipart/form-data" 질문
이미지 형식을 보낼 때에는 form태그로 보내는 것이 아니라 이벤트 리스너를 통해 폼 데이터에 넣어서 보내는데 굳이 form태그의 enctype속성으로 "multipart/form-data"를 할당할 필요가 있었는지 궁금합니다.
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
슬랙 참여주소가 작동하지않습니다.
확인 부탁드립니다~
-
미해결코로나맵 개발자가 알려주는 React + Express로 지도서비스 만들기 (Typescript)
[참고] 서버 보일러 플레이트에 axios 없네요~
8.26.기준 강의자료 서버 보일러 플레이트에 axios 없네요~ npm install axios모두 화이팅~~
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
ec2 배포시 빌드 안되는 문제
ec2 우분투에서 npm run build:production 명령어를 입력하면,> client@0.1.0 build:production> env-cmd -f .env.production react-scripts buildCreating an optimized production build...이 상태에서 더 이상 진행되지 않고 멈춰있습니다.ctrl+c로 중단했다가 다시 빌드해봐도 동일한데 어떻게 해결할 수 있을까요?
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
onCreate와 JS비동기성
onCreate에서 data의 초기값이 빈배열인 이유가 JS의 비동기성과 관련이 있나요?로직을 순서대로 보면 getData에서 initData를 넣은 다음에 callBack 함수가 선언되어 초기값에 문제가 없을거 같은데비동기성 때문에 이런 문제가 발생하는지 궁금합니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
docker volume 설정 시 mount 에러
영상에서 알려주신대로 파일을 설정하고 실행하면 다음과 같은 에러가 발생합니다.잘 안보일 수 있어서 아래에 적습니다.Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/run/desktop/mnt/host/e/Study-App/codecamp-backend/class/section04/04-07-docker-compose-with-mongoose-board2/backend/index.js" to rootfs at "/myfolder/index.js": mount /run/desktop/mnt/host/e/Study-App/codecamp-backend/class/section04/04-07-docker-compose-with-mongoose-board2/backend/index.js:/myfolder/index.js (via /proc/self/fd/9), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type 결국 경로를 못찾는다는 얘기로 이해했는데요.그래서 yaml파일을 다음과 같이 고쳐봤습니다. 그러면 실행이 되는 것처럼 나오지만 이러한 에러가 발생합니다. 근데 이상한건 다른 터미널에서 docker ps를 실행하면 다음과 같이 하나만 실행된 것처러럼 나오는데... 막상 현재 실행되고 있는 터미널에서 ctrl + c를 하면 다음과 같이 2개가 중지되는걸로 나옵니다. 어디서부터 잘못된 걸까요 ㅠ_ㅠ
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
useCallback 과 React.memo 의 사용 기준
🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨질문 하시기 전에 꼭 확인해주세요- 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다)- 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다)- 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢)질문 하실때 꼭 확인하세요- 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X)- 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지)- 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우)- 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요- 강의의 몇 분 몇 초 관련 질문인지 알려주세요!- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 초심자의 입장에서 사실 저러한 기능을 보면 그냥 처음에 만들때는 useCallback, React.memo 를 다 써보고 나중에 문제 생기면 그때 바꿔쓰면 되지 않나? 라는 생각이 듭니다.마치 평소에는 const 로 다 만들고, 해보다가 let 으로 변경이 필요하다 싶으면 let 으로 바꾸는 것처럼요.이걸 어떤 기준을 잡고 사용해야 할까요? 정확한 기준이 있는지도 궁금합니다. 렌더링 되는데 걸리는 시간이 몇 초 이상일시 변경한다거나 하는 기준이 있을까요?
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
몽고쉘 다운
몽고쉘 다운로드는 윈도우 유저만 해당인가요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
nodejs mysql 도커 컴포즈관련해서 문의 드립니다
docker-compose.yml파일의 코드는이렇게 구성하였는데요도커컴포즈하면 mysql데이터 가져오고싶은데 어떻게 해야하나요? volume으로 해봤는데 해당 데이터들은 못가져오고 새로 table을 생성되는데이렇게 구성되어있습니다 main스키마의 table들을 가져오고싶습니다.이렇게해봤는데도 원하는대로 데이터를 가져오지못했습니다mysql연결도 안되는 상황입니다 어떻게 해야 해결할수있을까요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
중고마켓 댓글불러오기 쿼리 오류
안녕하세요 강사님 중고마켓 댓글을 불러오는 쿼리훅을 작성했는데 아래와 같은 에러 메세지로 계속 상태코드 400이 나옵니다 ㅠㅠ "Variable \"$useditemId\" is not defined by operation \"fetchUseditemQuestions\"."훅 안에서 useditemId을 콘솔로 찍어봐도 정상적으로 나오고 같은 변수를 사용하는 fetchUseditem를 참고해서 다시 작성도 해봤는데 계속 같은 오류가 나옵니다.. 그래프큐엘 플레이그라운드에서는 똑같이 작성해서 query variables에 useditemId를 넣어서 요청해보면 문제없이 잘 작동하는데 프로젝트 안에서는 계속 오류가 나네요 ㅠㅠ 제가 어느 부분을 놓친걸까요..? import { gql, useQuery } from "@apollo/client"; import type { IQuery, IQueryFetchUseditemQuestionsArgs, } from "../../../../commons/types/generated/types"; const FETCH_USEDITEM_QUESTIONS = gql` query fetchUseditemQuestions($page: Int, $useditemID: ID!) { fetchUseditemQuestions(page: $page, useditemId: $useditemId) { _id } } `; export const useQueryFetchUseditemQuestions = ( variables: IQueryFetchUseditemQuestionsArgs, ) => { const query = useQuery< Pick<IQuery, "fetchUseditemQuestions">, IQueryFetchUseditemQuestionsArgs >(FETCH_USEDITEM_QUESTIONS, { variables: { useditemId: variables.useditemId, }, }); return query; };
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
궁금한 사항
강의보던중 front 도 시작하시는걸봤는데 프론트없어도 클론코딩할 수 있는건가요??
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
docker-compose의 image 옵션 사용시 docker가 1개만 만들어집니다.
docker-compose.yaml에서 강의대로 소스를 수정했습니다.그 후 yarn add mongoose를 하고index.js를 수정한 후그리고 docker-compose build를 했는데요. my-backend는 만들어졌는데 my-database가 만들어지지 않습니다. my-database 부분은 아예 실행조차 하지 않은것처럼 보이는데요. 구글에서도 잘 찾아지지 않아 질문 드립니다.
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
제네레이트 마이그레이션 오류
yujinseung@yujinseung-ui-MacBookPro slack_nest % npm run db:generate-migration > study_nest@0.0.1 db:generate-migration > npm run typeorm migration:generate -- ./src/migrations -d ./dataSource.ts > study_nest@0.0.1 typeorm > typeorm migration:generate ./src/migrations -d ./dataSource.ts Error during migration generation: Error: Unable to open file: "/Users/yujinseung/Desktop/slack_nest/dataSource.ts". Cannot use import statement outside a module at CommandUtils.loadDataSource (/Users/yujinseung/Desktop/slack_nest/node_modules/typeorm/commands/CommandUtils.js:22:19) at async Object.handler (/Users/yujinseung/Desktop/slack_nest/node_modules/typeorm/commands/MigrationGenerateCommand.js:68:26)yujinseung@yujinseung-ui-MacBookPro slack_nest % npm run db:migrate > study_nest@0.0.1 db:migrate > npm run typeorm migration:run -- -d ./dataSource.ts > study_nest@0.0.1 typeorm > typeorm migration:run -d ./dataSource.ts Error during migration run: Error: Unable to open file: "/Users/yujinseung/Desktop/slack_nest/dataSource.ts". Cannot use import statement outside a module at CommandUtils.loadDataSource (/Users/yujinseung/Desktop/slack_nest/node_modules/typeorm/commands/CommandUtils.js:22:19) at async Object.handler (/Users/yujinseung/Desktop/slack_nest/node_modules/typeorm/commands/MigrationRunCommand.js:41:26)위 두 오류가 뜹니다..! 뭐가문제일까요..ㅠㅠ
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
로그아웃이 작동하지 않아서 질문드립니다.
안녕하세요 제로초님 로그인은 되는데 로그아웃이 되지않아서 질문남깁니다.로그인 한 다음 로그아웃을 하면 위와 같이 AxiosError가 나서 네트워크와 리덕스를 확인해보니깐 로그아웃 요청시 302 Found가 뜨고 404 Not Found라는 에러 메세지가 뜹니다.그리고 리덕스에서는 실패 메세지가 뜹니다. // UserProfile import { logoutRequestAction } from '../reducers/user'; const dispatch = useDispatch(); const { me, logOutLoading } = useSelector((state) => state.user); const onLogOut = useCallback(() => { dispatch(logoutRequestAction()); }, []); <Button onClick={onLogOut} loading={logOutLoading}> 로그아웃 </Button> // 리덕스 logOutLoading: false, // 로그아웃 시도중 logOutDone: false, logOutError: null, export const LOG_OUT_REQUEST = 'LOG_OUT_REQUEST'; export const LOG_OUT_SUCCESS = 'LOG_OUT_SUCCESS'; export const LOG_OUT_FAILURE = 'LOG_OUT_FAILURE'; case LOG_OUT_REQUEST: draft.logOutLoading = true; draft.logOutDone = false; draft.logOutError = null; break; case LOG_OUT_SUCCESS: draft.logOutLoading = false; draft.logOutDone = true; draft.me = null; break; case LOG_OUT_FAILURE: draft.logOutLoading = false; draft.logOutError = action.error; break; 사가 axios.defaults.baseURL = 'http://localhost:3065'; function logOutAPI() { return axios.post('/user/logout'); } function* logOut() { try { yield call(logOutAPI); yield put({ type: LOG_OUT_SUCCESS, }); } catch (err) { console.log(err); yield put({ type: LOG_OUT_FAILURE, error: err.response.data, }); } } function* watchLogOut() { yield takeEvery(LOG_OUT_REQUEST, logOut); } app.js const express = require('express'); const cors = require('cors'); // session, cookieParser, dotenv const session = require('express-session'); const cookieParser = require('cookie-parser'); const dotenv = require('dotenv'); // passport 로그인 설정 const passport = require('passport'); const passportConfig = require('./passport'); passportConfig(); const postRouter = require('./routes/post'); const userRouter = require('./routes/user'); dotenv.config(); const app = express(); // 시퀄라이즈 - db 연결 const db = require('./models/index.js'); db.sequelize .sync() .then(() => { console.log('db 연결 성공'); }) .catch(console.error); app.use( cors({ origin: true, credentials: true, }) ); app.use(express.json()); app.use(express.urlencoded({ extended: true })); // session,cookieParser app.use(cookieParser(process.env.COOKIE_SECRET)); app.use( session({ saveUninitialized: false, resave: false, secret: process.env.COOKIE_SECRET, }) ); app.use(passport.initialize()); app.use(passport.session()); app.use('/post', postRouter); app.use('/user', userRouter); app.listen(3065, () => { console.log('3065 포트에서 대기중'); }); user.js const express = require('express'); const router = express.Router(); const passport = require('passport'); const bcrypt = require('bcrypt'); const { User, Post } = require('../models'); // 로그인 POST/user/login router.post('/login', (req, res, next) => { passport.authenticate('local', (err, user, info) => { if (err) { console.error(err); return next(err); } if (info) { return res.status(403).send(info.reason); } return req.login(user, async (loginErr) => { if (loginErr) { console.error(loginErr); return next(loginErr); } const fullUserWithoutPassword = await User.findOne({ where: { id: user.id }, attributes: { exclude: ['password'], }, include: [ { model: Post, }, { model: User, as: 'Followings', }, { model: User, as: 'Followers', }, ], }); return res.status(200).json(fullUserWithoutPassword); }); })(req, res, next); }); // 로그아웃 POST/user/logout router.post('/logout', (req, res, next) => { req.logout(() => { res.redirect('/'); }); }); //회원가입 POST / user router.post('/', async (req, res, next) => { try { const exUser = await User.findOne({ where: { email: req.body.email, }, }); if (exUser) { return res.status(403).send('이미 사용중인 아이디입니다.'); } const hashedPassword = await bcrypt.hash(req.body.password, 10); await User.create({ email: req.body.email, nickname: req.body.nickname, password: hashedPassword, }); res.status(200).send('ok'); } catch (error) { console.error(error); next(error); } }); module.exports = router; 로그인과 회원가입은 제대로 작동하는데 로그아웃만 되지 않습니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
섹션 29 10-1 Entity 구현 선행 강좌
섹션 28에서는 스타벅스를 가지고 ERD 까지 그렸는데, 섹션 29에서 새로운 ERD를 가지고 Entity 구현하는 것 같네요. 강의가 업데이트가 안된걸까요?
-
해결됨하루만에 배우는 express with AWS
성능테스트 관련 내용은 언제 업데이트되나요?
섹션 0에서 말씀해주신 성능테스트 관련 강의는 언제 업데이트될까요?