묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결리액트로 나만의 블로그 만들기(MERN Stack)
에러 메세지가 사라지지 않습니다.
패스워드가 맞지 않는 경우나 유저가 없는 경우에 대한 메세지가 사라지지 않습니다. 어떤 이유일까요? 제 깃 주소입니다. 확인좀 부탁드려요 https://github.com/yjoung-7874/mern_stack
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
n_epochs 문의
강의에서 GridSearchCV를 하였을 때 최적 n_epochs 파라미터가 20으로 도출되었습니다. n_epochs가 행렬 분해 시 SGD를 얼마나 반복할지를 지정하는 파라미터로 알고 있는데, 그렇다면 이론적으로는 n_epochs가 높을수록 정확도가 높은게 아닌가요?? n_epochs가 낮아도 모델의 정확도가 높은 경우가 빈번하니 하이퍼파라미터로 n_epochs 최적값을 도출하는 과정을 만들었을거라고 생각됩니다. n_epochs가 낮아도 정확도 값이 높은 케이스는 어떤게 있나요?
-
미해결Vue로 Nodebird SNS 만들기
VueNodeBird - 2-5강 - 8분
PostCard.vue 에서 <template> <div> 코드들 </div> </template> 를 <template> <v-app> 코드들 </v-app> </template> 로 쳤는데 index.vue 에서 v-for(반복)이 안되고 1개만 나오더라구용.. 1. 대충 v-app 이 한번만 들어갈 수 있어서 그런 것 같은데 맞나요?? 2. v-app 은 그럼 component 에서는 안쓰나요?? 3. v-app 안에 무조건 써야하는 것 아닌가요?? (vuetify)
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
async, await, promise관련질문입니다
안녕하세요 강의대로 전부 만들고 추가로 책에서 추천해주신 기능들 구현하다가 약간의 문제가 생겨서 질문드립니다. 현재 만들던게 로그인일때랑 프로필변경할때 닉네임중복체크를하고 중복되면 사용자에게 알려주려고 합니다. 닉네임중복처리하는부분이 회원가입할때 프로필변경할때 2번사용이되서 따로 함수로 빼서 require해서 처리하려고 따로만들었는데요 코드보면 // 닉네임중복체크 : 중복시 true반환 exports.nicknameOverlapCheck = async (nick) => { const exUserNick = await User.findOne({ where: { nick } }); if (exUserNick) { return true; } return false; } 위와같이 만들었습니다. 처음 생각했던방식이 boolean반환형식이니까 사용하는곳에서 if(nicknameOverlapCheck(nick)){ res.redirect()....} 이런식으로사용하려고했는데 오류나서 확인해보니 async함수일경우에는 자동으로 return값이 Promise.resolve(true)이런식으로 감싸져서 리턴되기때문에 오류나서 aysnc를 뺄순없고 받는곳에서 .then(( bool)=>{ if(bool){return res.redirect() ... } }) 처리로 바꿔보니 이것도 콜백함수에서 빠져나가는 리턴이 되어버려서 현재는 그냥 사용하는곳에서 직접 적어줘서 처리를 하고 있습니다. 물론 두번밖에 반복안되서 크게 상관없지만 이런반복이 개인적으로 불편해서 함수로 만들어서 처리하고 싶습니다. 혹시 async함수에서 값을 함수밖으로 받아오는 좋은방법이 있을까요?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
로그인 시 오류가 납니다.
이 강의 뒤를 봐야 에러가 안나는 건지는 모르겠는데 현재 length의 앞부분이 정의 되어 있지 않다는 아래와 같은 에러가 납니다. TypeError: Cannot read property 'length' of undefined 에러가 나는 곳은 UserProfile.js 부분의 <Card actions={[ <div key="twit">짹짹<br />{me.Posts.length}</div>, <div key="following">팔로잉<br />{me.Followings.length}</div>, <div key="follower">팔로워<br />{me.Followers.length}</div>, ]} > 이 부분인데요. me 부분을 보기위해서 리듀서의 user.js로 가면 아래와 같습니다... export const initialState = { logInLoading: false, // 로그인 시도중 logInDone: false, logInError: null, logOutLoading: false, // 로그아웃 시도중 logOutDone: false, logOutError: null, signUpLoading: false, // 회원가입 시도중 signUpDone: false, signUpError: null, me: null, signUpData: {}, loginData: {}, } export const LOG_IN_REQUEST = 'LOG_IN_REQUEST'; export const LOG_IN_SUCCESS = 'LOG_IN_SUCCESS'; export const LOG_IN_FAILURE = 'LOG_IN_FAILURE'; export const LOG_OUT_REQUEST = 'LOG_OUT_REQUEST'; export const LOG_OUT_SUCCESS = 'LOG_OUT_SUCCESS'; export const LOG_OUT_FAILURE = 'LOG_OUT_FAILURE'; export const SIGN_UP_REQUEST = 'SIGN_UP_REQUEST'; export const SIGN_UP_SUCCESS = 'SIGN_UP_SUCCESS'; export const SIGN_UP_FAILURE = 'SIGN_UP_FAILURE'; export const FOLLOW_REQUEST = 'FOLLOW_REQUEST'; export const FOLLOW_SUCCESS = 'FOLLOW_SUCCESS'; export const FOLLOW_FAILURE = 'FOLLOW_FAILURE'; export const UNFOLLOW_REQUEST = 'UNFOLLOW_REQUEST'; export const UNFOLLOW_SUCCESS = 'UNFOLLOW_SUCCESS'; export const UNFOLLOW_FAILURE = 'UNFOLLOW_FAILURE'; const dummyUser = (data) => ({ ...data, nickname: 'harry', id: 1, posts: [], Followings: [], Followers: [], }); export const loginRequestAction = (data) => { return { type: LOG_IN_REQUEST, data, } } export const logoutRequestAction = (data) => { return { type: LOG_OUT_REQUEST, data, } } const reducer = (state = initialState, action) => { switch (action.type) { case LOG_IN_REQUEST: console.log('reducer logIn') return { ...state, logInLoading: true, logInError: null, logInDone: false, }; case LOG_IN_SUCCESS: return { ...state, logInLoading: false, logInDone: true, me: dummyUser(action.data), }; case LOG_IN_FAILURE: return { ...state, logInLoading: false, logInError: action.error, }; case LOG_OUT_REQUEST: return { logOutLoading : true, logOutError : null, logOutDone : false, } case LOG_OUT_SUCCESS: return { logOutLoading : false, logOutDone : true, me : null, } case LOG_OUT_FAILURE: return { logOutLoading : false, logOutError : action.error, } case SIGN_UP_REQUEST: return { signUpLoading : true, signUpError : null, signUpDone : false, } case SIGN_UP_SUCCESS: return { signUpLoading : false, signUpDone : true, } case SIGN_UP_FAILURE: return { signUpLoading : false, signUpError : action.error, } default: return state; } }; export default reducer; 혹시 더미유저부분의 배열이 빈배열이기 때문인가 싶어서 그부분만 제로초님 깃허브 부분 복붙했는데 그래도 같은 에러가 발생합니다. 혹시몰라서 사가의 user.js도 넣겠습니다. import axios from 'axios' import { all, fork, put, delay, takeLatest } from 'redux-saga/effects'; import { LOG_IN_REQUEST, LOG_IN_SUCCESS, LOG_IN_FAILURE, LOG_OUT_REQUEST, LOG_OUT_SUCCESS, LOG_OUT_FAILURE, SIGN_UP_REQUEST, SIGN_UP_SUCCESS, SIGN_UP_FAILURE, } from '../reducers/user' function logInAPI(data) { return axios.post('/api/login', data) } function* logIn(action) { try { console.log('saga logIn') // const result = yield call(logInAPI, action.data) yield delay(1000); yield put({ type: LOG_IN_SUCCESS, data: action.data, }); } catch (err) { yield put({ // put은 디스패치 type: LOG_IN_FAILURE, error: err.response.data, }) } } function logOutAPI() { return axios.post('/api/logout') } function* logOut() { try { // const result = yield call(logOutAPI) yield delay(1000); yield put({ type: LOG_OUT_SUCCESS, // data: result.data }); } catch (err) { yield put({ // put은 디스패치 type: LOG_OUT_FAILURE, error: err.response.data, }) } } function signUpAPI() { return axios.post('/api/logout') } function* signUp() { try { // const result = yield call(signUpAPI) yield delay(1000); yield put({ type: SIGN_UP_SUCCESS, // data: result.data }); } catch (err) { yield put({ // put은 디스패치 type: SIGN_UP_FAILURE, error: err.response.data, }) } } function* watchLogIn() { yield takeLatest(LOG_IN_REQUEST, logIn); } function* watchLogOut() { yield takeLatest(LOG_OUT_REQUEST, logOut); } function* watchSignUp() { yield takeLatest(SIGN_UP_REQUEST, signUp); } export default function* userSaga() { yield all([ fork(watchLogIn), fork(watchLogOut), fork(watchLogOut), ]) }
-
미해결따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]
각각 다른아이디로 로그인이 안되는데요..!!
안녕하세요 강사님!! 로컬호스트:3000으로 브라우저 두개 띄우고 알림테스트 하고 싶은데 한쪽에서 로그아웃하면 다른쪽에서도 로그아웃되고 다시 한쪽에서 로그인하면 다른쪽에서 또 로그인 되어서 강사님처럼 안되는데 무슨 차이가 있어서 안되는 것일까요..?
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]
이 강의에 상관없는 질문이지만 강사님한테 직접 여쭤볼 곳이 여기 밖에 없네요..ㅎ
안녕하세요 강사님이 올려주신 강의를 정말 잘 듣고 열심히 공부 중입니다, 다름이 아니라 강사님 강의 중에 TDD 강의가 있다는 걸 알게 되었습니다. 제가 사실 개인 프로젝트에 TDD을 적용할 계획인데 강사님이 올려주신 TDD 강의가 Node.js에 jest을 이용한 것처럼 보이는데요 제가 아직 TDD의 개념을 기본도 거의 없어서 제가 지금 진행 중인 react+express+mongoDB을 이용하고 있는 프로젝트에 강사님의 TDD 강의를 듣고 react에서도 jest을 활용할 수 있을지 확실치가 않네요. 혹시 TDD에 대한 조언 한 번 부탁드려도 될까요?
-
미해결Axure RP 9,10 - 서비스 기획자를 위한 최적의 프로토타이핑 툴
첨부파일 문의 (인터렉션과 애니메이션)
안녕하세요 데이먼 선생님! Axure도 멋진 툴이고 자세히 잘 알려주셔서 따라가기도 쉽네요. 좋은 강의 감사합니다. 인터렉션과 애니메이션 파트 시작부분에서 샘플파일을 공유해 주신다고 했는데 찾을수가 없는데요.. 어디서 확인할수 있을까요?
-
미해결윤재성의 Kotlin 기반 안드로이드 앱 개발 Part1 - UI Programming
TextInputLayout keeps stopping
TextWatcher를 상속받는 object를 변수에 넣고 완료한 뒤 애뮬레이터에서 앱을 실행하고 textInputLayout에 무언가를 입력하려고 하면 TextInputLayout keeps stopping 이라는 오류가 뜨고 앱 실행이 중지 됩니다. 전 강의인 EditText 부분에서도 EditText부분에 입력할 때 이러한 오류가 나타났는데 원인이 무엇인지 알 수 있을까요?
-
Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
서치 > 사진아이콘클릭 하면 바탕화면으로 갑니다
삭제된 글입니다
-
미해결따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]
direct messages에 접속상태는
어떻게하면 알 수 있나요? auth에서 정보를 가져오는 것인가요??
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]
안녕하세요 강사님 헤로쿠 배포에 관해서 질문드려요ㅠㅠ
안녕하세요 강사님 취업준비를 하며 boiler-plate -> 유튜브 -> 쇼핑몰 까지 모두 완강하고 개인프로젝트를 한개 만들어 유튜브의 강사님 헤로쿠배포강의를 듣고 따라 배포했는데 배포도 완료되었고 로그를 보면 오류로그도 없이 잘 배포된거같은데 앱 도메인을 열어보면 hello world만 뜨네요 제가 초보라 아무리 뒤져보고 오류를 잡아내려해도 답이안나와서 지금 답없이 시간만 가고있는데 ㅠㅠㅠ 질문 드려도될까요... 혹시나 싶어 깃헙주소도 올려놓을게요.. https://github.com/bis92/LifeScheduler 읽어주셔서 감사합니다
-
해결됨실습 UI 개발로 배워보는 순수 javascript 와 VueJS 개발
[실습결과] 이벤트 detail 활용 측면의 확장성과 관련된 질문입니다
안녕하세요 김정환 강사님!`꿀`보이스이셔서 귀 호강하며 잘 듣고있습니다.강의를 1년전에 들었다면 수많은 시행착오를 안겪지 않았까 싶을 정도로 너무나 알찬 강의 감사드립니다. 다름이 아니라,강의에는 없지만, 실습 과제 진행중에 잘 하고 있는건지, 확인을 받아보고 싶은 마음에 질문을 하게 되었습니다.약간의 고도화? 를 거쳐 확장성을 부여하기 위해 고심끝에 아래와 같이 작성해 보았습니다.대략적인 설명과 소스 코드의 일부분입니다.이외는 강의 대용과 동일 합니다 FormView.js - `Esc`키를 눌렀을떄 `취소`버튼과 동일하게 작동합니다.- 내부 핸들러 onXxx 는 Event 객체와 둘째 인자로 detail 객체를 받아 View.emit(e, data) 메서드의 `data` 파라미터로 전달 합니다.- detail .type | .key 속성은 각각 `Enter` `Esc` 키 와 `Button` 등으로 이벤트 발생지 Type 구분을 위해 쓰입니다.- bindEvent() 에서 전달되는 detail 객체의 .content 속성은 사용자의 입력된 값을 담습니다. bindEvent( ) { const detail = { type: null, key: null, content: null } this.on('submit', e => e.preventDefault()) this.inputEl.addEventListener('keyup', (e) => { detail.type = 'key' detail.key = e.key this.onKeyUp(e, detail) }) this.resetEl.addEventListener('click', (e) => { detail.type = 'button' this.onClickReset(e, detail) }) } onKeyUp( event , detail ) { this.showResetBtn(this.inputEl.value.length) const isValidText = this.inputEl.value.length; if (!isValidText && event.key !== KEY_ENTER) { this.onClickReset(event, detail) return } detail.content = this.inputEl.value.trim() switch (event.key) { case KEY_ENTER: isValidText && this.onSubmit(event,detail) break case KEY_ESC: this.onClickReset(event,detail) break } } onClickReset(event , detail ) { this.showResetBtn(false) this.inputEl.value = '' this.inputEl.focus() detail.content = '' this.emit(EVENT_RESET, detail) } onSubmit( event , detail ) { this.emit(EVENT_SUBMIT, detail) } MainController.js : 넘겨받은 CustomEvent. detail 속성으로 세부 조건 로직 작성이 가능합니다. export default { ... ... onSubmit(event) { const { type, key, content } = event.detail console.log(tag, `onSubmit() type=${ type } key=${ key }`, content) }, onResetForm(event) { const { type, key, content } = event.detail console.log(tag, `onReset() type=${ type } key=${ key }`, content) },} 이런 식으로 FormView 외부에서 작동할 것을 대비해서이벤트 디테일 객체를 외부로 전달하는 것이 맞는것인지, 혹은 더나은 방식과,고쳐야 될 부분 에 대한 , 김정환 강사님의 조언을 구하고자 질문하게 되었습니다. 읽어주셔서 감사합니다!
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
강의랑 상관없는 질문이지만 svelte.js 관련 문의입니다.
공고를 보다가 svelte.js 관련해서 글을 보고, svelte.js 공부를 하려고 하는데, 어드민 페이지를 svelte를 이용해보는 것이 과연 효율적인지에 대해 여쭤보겠습니다. (공부는 공식문서보고 독학은 가능할 것 같습니다) 또 어드민 배포는 보통 어떤 식으로 진행하나요? ec2를 새로 만들기엔 부담이 크고 heroku 등을 이용해야 할지 아니면 기존 서버에 포트번호를 따로 파야할지 고민입니다. 아니면 강좌처럼 forest admin을 그냥 이용할까요? 백앤드는 현재 Nest + typeorm입니다. 어드민 페이지는 저 혼자 쓰는 것이 아니라 여러명이 쓸 것 같습니다.
-
미해결Spring Boot JWT Tutorial
자바 8을 선택한이유
자바 11대신 자바 8을 선택하신 이유가 따로 있을까요?
-
미해결CSS Flex와 Grid 제대로 익히기
order 시 item 높이에 대해 질문이 있습니다.
안녕하세요. https://codepen.io/seon-o/pen/yLVjpyd 팝업이 3개일 때,반응형으로 1300이하일 땐 좌측으로 세개가 오게하고 싶습니다. 보라색의 팝업 높이가 길어 order로 옆으로 보냈는데 초록색 팝업이 보라색 높이 때문에 주황색 팝업과 붙지 않습니다... 초록색 팝업에 transform: translateY(280px); 를 주면 원하는 디자인이 나오지만 매번 이미지 높이가 달라서요.. 이 문제를 풀지못해서 수강 신청하게 되었는데 강의를 봐도 해당 내용을 이해못해서요..ㅠㅠ이럴때 좋은 방법이 있을까요?
-
미해결스프링 핵심 원리 - 기본편
안녕하세요 application.properties와 yml에 대해서 질문드려요
강의 잘 보고 있습니다!! 다름이 아니라 제목 그대로 application.properties과application.yml이 스프링 설정 파일인건 알겠는데 정확한 용도나 역할을 잘 모르겠어요... 둘은 어떤 용도고 어떤 역할을 해주나요?
-
미해결React & Express 를 이용한 웹 어플리케이션 개발하기
react.min.js:13 Uncaught TypeError: e.render is not a function
에러 납니다...
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
page.js에서 질문 있습니다.
안녕하세요 제로초님 강의 들으면서 공부중인 학생입니다. 강의를 들으면서 궁금한 점이 생겨서 질문드립니다. router.use((req, res, next) => { res.locals.user = req.user; //로그인했는지 안했는지 유저 변수는 많은 라우터에서 사용될테니 위에 빼놓은거임. res.locals.followerCount = 0; res.locals.followingCount = 0; res.locals.followerIdList = []; next(); }); 강의에서 res.locals.user = req.user; 부분에서 use 미들웨어 특성을 통해 모든 라우터에 공통 적용되게 하였다고 하셨는데 어떤 식으로 사용되는지 이해가 잘 되지 않습니다. 위의 코드처럼 선언을 하면 모든 라우터에서 res.locals.user를 사용할 수 있게 된다는 뜻인가요? 또, req.user가 어떤 역할을 하는 애인지 궁금합니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
전체 정리 중 이해가 어려운 부분이 있습니다 ㅠ
제가 이해력이 부족해서 계속 정리해보고 넘어가느라 자꾸 질문을 드려서 죄송합니다...ㅠㅠ 전체적인 틀이 궁금한데 서로 연결이 되는 부분이 이해가 잘 안되었습니다! 메일로 사진 첨부하여 보내드렸습니다! 1. 아래와 같이 이해를 해도 될까요?? 혹시 틀린 부분이 있다면 알려주세요! 2. Socket 안에 Buffer가 들어있는 개념일까요? 아니면 Buffer를 개별로 따로 봐야할까요?? 3. Buffer = Queue 가 맞을까요?? 4. 결국에 이런 스크립트를 작성하는 이유는 서버와 클라이언트가 '패킷'을 주고 받는 것이 궁극적 목표인가요? 5. 4번의 목표(패킷의 송수신)를 좀 더 간편하게 하기위해 packet Generator를 한게 맞을까요? 6. packet 직렬화를 하지 않고는 패킷 송수신이 불가능 할까요(바이트 단위로 변화하는 작업은 필수 일까요??)?? 7. packet Manager에서 OnSendPacket가 필요 없는 이유를 알 수 있을까요?? 항상 감사드립니다..