묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
리턴의 유무의 차이 설명 부탁드립니다
안녕하세요 알고리즘 잘 배우고 있는 학생입니다.sort함수에 조건식에 리턴의 유무의 의미가 궁금합니다.리턴을 안하니 원하는 값이 안나와서 확실히 차이가 있어보이는데 이해가 잘 안가서요 :)
-
미해결너네 백엔드 하고 싶은 거 있으면 얼마든지 해 난 괜찮어 왜냐면 나는 파이어베이스가 있어
뒷부분 소리 안나와요
16:40 ~
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
concat, push map 사용시 오류에 관하여 질문
게시물 더미데이터 추가 될때 concat을 사용하던데 어차피 immer 통해서 불변성이 유지가 되는거라면 push를 사용해도 된다고 생각되어서 push 를 사용해봤더니 index.js에서 map부분에서 오류가 나던데 그 이유를 알 수 있을까요?
-
미해결[리뉴얼] 타입스크립트 올인원 : Part2. 실전 분석편
export = $?
query index.d.ts 파일에는export = jQuery;jQuery만 export하고 있는데 $ 변수를 외부에서 사용할 수 있는 이유가 무엇일까요?예상으로는declare const $: JQueryStatic;이 부분 때문일 것 같은데 맞을까요? 또한 jQuery를 사용할 때 import를 굳이 하지 않아도 사용할 수 있는 이유가 무엇일까요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
Value(값)으로 리턴하는 함수의 리턴 값을 받을때에 대한 질문드립니다.
안녕하세요, 추석 잘 보내고 계신가요?다름이 아니라, 여쭤볼 것이 있어서,제가 UE4 C++을 코딩하면서여러 습관들이 있는데, 그 중 하나가 제가 거의 포인터가 아닌 참조를 선호하고,Data를 Write가 아닌 Read일때 const 참조로 도배를해버리는데, 심지어 불가피하게 포인터를 사용할 경우예를들어,Human* const human = 객체 주소;이렇게 const 를 중간에 박아서, 어셈블리어를 까볼때참조형이랑 같게 한다든지const Human* const human = 객체 주소;이런식으로 하면 const Human& human = 객체;와 동의어라고 생각하여 const Human* const human;이런식으로 사용합니다. 첫번째 질문 ]함수의 매개변수 / 함수의 반환값을 받을 때데이터가 순전히 Read용도로 사용할 경우그냥 습관적으로 const 자료형& 을 사용합니다.이런 습관이 맞는지에 대해서 여쭤봅니다. 함수 내부에 지역 변수를 리턴하는 값을 const 참조형으로 받는게 좋은지일반적으로 Value로 받는게 좋은지에 대해서 여쭤봅니다. 물론 함수 지역 변수를 리턴하는 것을 그냥 참조로 받으면 해당 줄이 끝나면 리턴을 하는 함수의 CallStack 에서해당 함수 프레임이 pop 되면서 사라지기 때문에 VC가 잡아주어 빨간줄이 나겠지만, 그냥 참조가 아닌 저는const 참조로 받는게 습관입니다. vector<Human> GetHumanVector(){vector<Human> HumanVector = '동적할당 해서 배열 값 세팅 전부하고'return HumanVector; // 지역 변수 동적 배열을 리턴}int main(){const vector<Human>& HumanVec = GetHumanVector(); // 1번째 경우 : 저의 스타일const vector<Human> HumanVec = GetHumanVector(); // 2번째 경우 : 값으로 Receive 하는 것} 1번째 경우와 2번째 경우, 저는 1번째 경우를 사용하는데 2번째 경우로 저렇게 받아버리면 값 복사가 되면서GetHumanVector(); 이 const vector<Human> HumanVec 전달 해줄때 순간적으로 메모리 사용량이 2배가 되지 않을 까 생각이 되어무조건 참조로 받는 것이 옳다라고 생각합니다.만약에 저 배열의 크기가 500MB라고 가정을 해봤을때2번째 경우처럼 값으로 받을 경우 컴파일러가 해당 줄을 실행을하고 값을 전달을 할때 1GB가 메모리가 사용될 것이다.라고 어디서 선생님이었나 책이었나 본 것 같아서메모리 효율적 사용이라는이러한 당위성으로 인해 저는습관적으로 저렇게 사용하는데 혹시 제 기억이 틀린건지적어놓은 공책이 있었는데 없어지고 검색을 해봐도딱히 비슷한 예제가 안올라와서R.V.O 리턴 값 최적화 정도로 함수 리턴할떄 값으로 리턴해도 된다. 이 정도 내용 밖에 없네요1) const vector<Human>& HumanVec = : const 참조로 받는 게 좋을지2) const vector<Human> HumanVec = : const로 받는게 좋을지 선생님의 의견은 어떠신지요 두번째 질문 ]혹시 1)을 사용할때 간헐적으로 버그가날 수 있나요?저는 없다고 보는데 일단 참조는 컴파일 타임에 생성과 동시에 초기화가 되고, 일단 const로 받아서 빌드 돌릴때는 문제가 없는데런타임때 버그가 날 확률이 조금이라도 있을까요???
-
미해결Vue-Django-Bootstrap 뚝딱 블로그
Vue 배포 질문
You are running a development build of Vue. Make sure to use the production build (*.prod.js) when deploying for production. 배포를 하기 위해서는 *prod.js를 이용하라고 하는데 실제 운영되는 서비스는 cdn으로 Vue를 이용하는 것이 좋은 방법이 아닌걸까요? 지금처럼 Client 코드(html/css/js)는 최대한 간단하게 구성하고 싶은데 배포할 때 어떻게 하는 것이 좋을 까요? (패키지 툴을 이용해 클라이언트 쪽 코드들을 build 하는 작업이 없었으면 좋겠습니다)
-
미해결CSS Flex와 Grid 제대로 익히기
CSS Grid를 통한 정렬의 장점
안녕하세요 😃신선한 그리드를 이용한 정렬을 재미있게 잘 보았습니다. 몇가지 궁금한 점이 있어서 질문 드려요~ Q1.보통 이러한 정렬은 자바스크립트를 이용하여 정렬하는 것이 일반적이라고 생각됩니다.(리액트나 기타 프레임워크를 보았을때..) 그럼에도, 이와 같이 CSS를 이용하여 정렬한다고 했을때, 어떠한 장점을 얻을 수 있을까요?? 🤔Q2.1분코딩님의 샘플 코드를 보면 큰 그리드 컨테이너 안에서 header, footer, 각각의 cards(section), 상단 버튼들이 위치하고 있습니다. 저 같은 경우는 큰 그리드 컨테이너를 잡고 그 안에 button-container, header, card-section, footer 이런 식으로 분류한후 card-section 안에서 다시 그리드를 잡아서 사용하게되었습니다. 이렇게 구조를 잡게되니, CSS만을 이용한 체크박스 이벤트를 활용할 수 없게 되었습니다.😅 제가 궁금한 점은, 그리드 레이아웃을 활용할 때는 (저처럼) 그리드 안에 섹션별로 컨테이너를 잡고 사용하지는 않고 바로 각각을 그리드 아이템으로서 위치를 잡아서 사용하게 되나요? 혹은 어느 방식을 많이 사용하게 되는지 궁금하네요. ( 질문드리고 나서 생각해보니, 캐바캐일거라는 생각이 들긴하네여. 😅)
-
미해결[개념은 호옹~, 실습 빡] SQL 데이터 분석, 입문!
postgresql 설치 오류
안녕하세요 강사님,postgresql 설치 과정에서 계속 오류가 뜨는데 도저히 해결 방법을 알 수 없어 질문 올립니다. 처음에 postgresql 설치를 homebrew로 미리 해봤다가,강의에서 설치하는 부분이 나오길래 homebrew로 설치한 버전은 삭제하고 강의해주신 내용 그대로 진행했으나 postgresql 14의 password를 입력하는 부분에서 2-3시간째 넘어가질 못하고 있습니다... 에러 내용: pg admin > postgresql 14 > password 입력 시 오류 (connection to server at localhost (::1), port 5432 failed: FATAL: password authentication failed for user "postgres"설치 시 알려주신 비밀번호대로 쭉 진행했습니다 기존 내용 전부 밀고 재설치를 계속 했는데도 안되고 있는 상황입니다. (재설치 시 비밀번호 입력하라는 창은 뜬 걸로 보아 기존 데이터까지 삭제는 옳게 한 것으로 보입니다) 아래 stackoverflow에서 말한 방법대로 했는데도 안됩니다. (https://stackoverflow.com/questions/8037729/completely-uninstall-postgresql-9-0-4-from-mac-osx-lion/9240197#9240197)
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
무한스크롤 request 호출문제
선생님 이번에 무한스크롤 구현하면서 지금 리퀘스트 요청이 여러번 발생하는걸 if문에 로딩시에만 if문이 발생하게 고쳐서 여러번 반복되게 하는걸 한번만 호출 할수있게 고치신걸로 아는데요 저도 분명히 고쳤는데 호출이 2번씩일어나는데 한번 봐주시면 감사하겠습니다. 코드 여러군데 봐도 왜 호출이 두번 일어나는지 모르겠네요 한번 봐주시면 감사하겠습니다.//index.js import React, { useEffect } from 'react' import { useDispatch, useSelector } from 'react-redux' import AppLayout from '../components/AppLayout' import PostForm from '../components/PostForm' import PostCard from '../components/PostCard' import { LOAD_POST_REQUEST } from '../reducers/post' const Home = () => { const dispatch = useDispatch(); const { me } = useSelector((state) => state.user) const { mainPosts, hasMorePost, getPostLoadding } = useSelector((state) => state.post) useEffect(() => { dispatch({ type: LOAD_POST_REQUEST, }) }, []) useEffect(() => { function onScroll() { console.log(window.scrollY, document.documentElement.clientHeight, document.documentElement.scrollHeight) if (window.scrollY + document.documentElement.clientHeight > document.documentElement.scrollHeight - 300) { if(hasMorePost && !getPostLoadding){ dispatch({ type: LOAD_POST_REQUEST, }) } } } window.addEventListener('scroll', onScroll); return () => { window.removeEventListener('scroll', onScroll); } }, [hasMorePost, getPostLoadding]) return ( <AppLayout> {me && <PostForm />} {mainPosts.map((item) => <PostCard key={item.id} post={item} />)} </AppLayout> ) } export default Home /reducers/post.js import shortId from 'shortid'; import produce from 'immer'; import faker from 'faker'; export const initialState = { mainPosts: [{ id: 1, User: { id: 1, nickname: '제로초', }, content: '첫번째 게실글 #해시태그 #익스프레스', Images: [{ id: shortId.generate(), src: 'https://bookthumb-phinf.pstatic.net/cover/137/995/13799585.jpg?udate=20180726', }, { id: shortId.generate(), src: 'https://gimg.gilbut.co.kr/book/BN001958/rn_view_BN001958.jpg', }, { id: shortId.generate(), src: 'https://gimg.gilbut.co.kr/book/BN001998/rn_view_BN001998.jpg', }], Comments: [{ id: shortId.generate(), User: { id: shortId.generate(), nickname: 'nero', }, content: '우와우와' }, { id: shortId.generate(), User: { id: shortId.generate(), nickname: 'wi', }, content: '힘내자' }], }], imagePath: [], hasMorePost : true, getPostLoadding: false, getPostDone: false, getPostErr: null, addPostLoadding: false, addPostDone: false, addPostErr: null, removePostLoadding: false, removePostDone: false, removePostErr: null, addCommentLoadding: false, addCommentDone: false, addCommentErr: null, } export const getDemmuyPost = (number) => Array(number).fill().map(() => ({ id: shortId.generate(), User: { id: shortId.generate(), nickname: faker.name.findName(), }, content: faker.lorem.paragraph(), Images: [{ src: faker.image.image(), }], Comments: [{ User: { id: shortId.generate(), nickname: faker.name.findName(), }, content: faker.lorem.sentence(), }], })) export const LOAD_POST_REQUEST = 'LOAD_POST_REQUEST' export const LOAD_POST_SUCCESS = 'LOAD_POST_SUCCESS' export const LOAD_POST_FAILURE = 'LOAD_POST_FAILURE' export const ADD_POST_REQUEST = 'ADD_POST_REQUEST' export const ADD_POST_SUCCESS = 'ADD_POST_SUCCESS' export const ADD_POST_FAILURE = 'ADD_POST_FAILURE' export const REMOVE_POST_REQUEST = 'REMOVE_POST_REQUEST' export const REMOVE_POST_SUCCESS = 'REMOVE_POST_SUCCESS' export const REMOVE_POST_FAILURE = 'REMOVE_POST_FAILURE' export const ADD_COMMENT_REQUEST = 'ADD_COMMENT_REQUEST' export const ADD_COMMENT_SUCCESS = 'ADD_COMMENT_SUCCESS' export const ADD_COMMENT_FAILURE = 'ADD_COMMENT_FAILURE' export const addPostAction = (data) => { console.log(data) return { type: ADD_POST_REQUEST, data } } export const addCommentAction = (data) => { console.log(data) return { type: ADD_COMMENT_REQUEST, data } } const dummyPost = (data) => ( { id: data.id, content: data.content, User: { id: 1, nickname: '제로초', }, Images: [], Comments: [], } ) const dummyComment = (data) => ( { id: shortId.generate(), content: data, User: { id: 1, nickname: '제로초', }, } ) const reducer = (state = initialState, action) => { return produce(state, (draft) => { switch (action.type) { case LOAD_POST_REQUEST: draft.getPostLoadding = true draft.getPostDone = false draft.getPostErr = null break; case LOAD_POST_SUCCESS: draft.getPostLoadding = false draft.getPostDone = true draft.mainPosts = action.data.concat(draft.mainPosts) draft.hasMorePost = draft.mainPosts.length < 50 break; case LOAD_POST_FAILURE: draft.getPostLoadding = false draft.getPostErr = action.err break; case ADD_POST_REQUEST: draft.addPostLoadding = true draft.addPostDone = false draft.addPostErr = null break; case ADD_POST_SUCCESS: draft.addPostLoadding = false draft.addPostDone = true draft.mainPosts.unshift(dummyPost(action.data)) break; case ADD_POST_FAILURE: draft.addPostLoadding = false draft.addPostErr = action.err break; case REMOVE_POST_REQUEST: draft.removePostLoadding = true draft.removePostDone = false draft.removePostErr = null break; case REMOVE_POST_SUCCESS: draft.removePostLoadding = false draft.removePostDone = true draft.mainPosts = state.mainPosts.filter((item) => item.id !== action.data) break; case REMOVE_POST_FAILURE: draft.removePostLoadding = false draft.removePostErr = action.err break; case ADD_COMMENT_REQUEST: draft.addCommentLoadding = true draft.addCommentDone = false draft.addCommentErr = null break; case ADD_COMMENT_SUCCESS: const post = draft.mainPosts.find((item) => item.id === action.data.postId) post.Comments.unshift((dummyComment(action.data.content))) draft.addCommentLoadding = false draft.addCommentDone = true break; case ADD_COMMENT_FAILURE: draft.addCommentLoadding = false draft.addCommentErr = action.error default: return state } }) } export default reducer import { delay, all, fork, takeLatest, put, throttle } from "redux-saga/effects"; import { ADD_POST_REQUEST, ADD_POST_SUCCESS, ADD_POST_FAILURE, REMOVE_POST_REQUEST, REMOVE_POST_SUCCESS, REMOVE_POST_FAILURE, ADD_COMMENT_REQUEST, ADD_COMMENT_SUCCESS, ADD_COMMENT_FAILURE, LOAD_POST_REQUEST, LOAD_POST_SUCCESS, LOAD_POST_FAILURE, getDemmuyPost } from '../reducers/post' import { ADD_POST_TO_ME, REMOVE_POST_TO_ME } from "../reducers/user"; import shortId from 'shortid'; function addPostAPI(data) { return axios.post('/api/addPost', data) } function* addPost(action) { try { // const result = yield call(addPostAPI, action.data) yield delay(1000) const id = shortId.generate(); yield put({ type: ADD_POST_SUCCESS, data: { id, content: action.data } }) yield put({ type: ADD_POST_TO_ME, data: id }) } catch (err) { yield put({ type: ADD_POST_FAILURE, data: err.response.data }); } } function removePostAPI(data) { return axios.post('/api/addPost', data) } function* removePost(action) { try { // const result = yield call(addPostAPI, action.data) yield delay(1000) yield put({ type: REMOVE_POST_SUCCESS, data: action.data }) yield put({ type: REMOVE_POST_TO_ME, data: action.data }) } catch (err) { yield put({ type: REMOVE_POST_FAILURE, data: err.response.data }); } } function addCommentAPI(data) { return axios.post('/api/addPost', data) } function* addComment(action) { try { // const result = yield call(addPostAPI, action.data) yield delay(1000) yield put({ type: ADD_COMMENT_SUCCESS, data: action.data }); } catch (err) { yield put({ type: ADD_COMMENT_FAILURE, data: err.response.data }); } } function loadPostAPI(data) { return axios.get('/api/posts', data) } function* loadPost(action) { try { // const result = yield call(addPostAPI, action.data) yield delay(1000) yield put({ type: LOAD_POST_SUCCESS, data: getDemmuyPost(10) }); } catch (err) { yield put({ type: LOAD_POST_FAILURE, data: err.response.data }); } } function* watchLoadPost() { yield throttle(5000, LOAD_POST_REQUEST, loadPost) } function* watchAddPost() { yield takeLatest(ADD_POST_REQUEST, addPost) } function* watchRemovePost() { yield takeLatest(REMOVE_POST_REQUEST, removePost) } function* watchCommentPost() { yield takeLatest(ADD_COMMENT_REQUEST, addComment) } export default function* postSaga() { yield all([ fork(watchAddPost), fork(watchCommentPost), fork(watchRemovePost), fork(watchLoadPost), ]); }
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
게시글 삭제할 경우에 대해 질문드립니다.
post 게시글 하나를 삭제하면 해당 게시글과 foreignKey로 연결된 comment들도 Comment db에서 찾아서 삭제해줘야 하나요? 실무에선 어떻게 하는지 궁금합니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
정렬 후 더하면 왜 오답이 나오는지 궁금합니다!
안녕하세요, 강의 잘 듣고있습니다.다름이 아니라 저는 먼저 배열을 정렬 한 다음, 큰수 -> 작은수 순서대로 더하면 합한 값도 큰 순서대로 될것이라 생각하여 다름과 같이 코드를 작성하였습니다.중복된 sum 값은 코드에서 볼 수 있듯, 이전 sum값과 같으면 제거를 해 주었고요.아래 제 코드가 어떤 면에서 잘못되었는지 궁금합니다!감사합니다.int solution(int n, int k, Integer[] arr) { // arr 중에 3장을 뽑아 적힌 수를 합하려고 할때, k번째로 큰수 Arrays.sort(arr, Comparator.reverseOrder()); int count = 0; int sum = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { for (int l = j + 1; l < n; l++) { if (sum == arr[i] + arr[j] + arr[l]) continue; sum = arr[i] + arr[j] + arr[l]; count++; System.out.println(count + " : " + (arr[i] + arr[j] + arr[l])); if (count == k) return (arr[i] + arr[j] + arr[l]); } } } return -1; }
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
상속관계 객체를 조회할때
안녕하세요, 항상 강의 감사합니다.상속관계를 실제로 구현하다보니 엔티티를 저장할때는 어떻게 해야하는지 감이 오는데요.api 인터페이스에서 쿼리를 해서 가져올때 어떻게 구현하는게 좋을지 고민이 됩니다.전체 리스트를 가져오거나 단일 객체를 id로 불러올때,해당 type 이 어떤것인지 몰라 상위 Item 객체 (예시에서 보듯)로 리턴하게 되는데요.이때, 타입에 따라서 해당 프로퍼티를 넘겨주고 싶은데, 서비스 객체에서도 타입을 모르니 api 인터페이스에서 타입을 구분하는 로직 코드를 작성해야하더라구요.혹시 서비스 함수에서 깔끔하게 구현하려면 어떻게 해야하는지 알 수 있을까요?
-
미해결처음 만난 리액트(React)
react 18에 맞춰서 작성한 코드입니다.
바뀐 react 18에 따라서 작성된 코드입니다.바뀐 리엑트로 어떻게 코드 작성해야하는지 모르겠는 분들은 참고하시면 좋을것 같습니다! https://github.com/matt700395/first-meet-react/commit/7df1b7367e6a2c00f21ae30a92e39102959e373f
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
Nginx의 Proxy를 이용한 설계 질문
안녕하세요 좋은 강의 잘 수강하고 있습니다.프록시를 이용한 설계에서 질문이 있습니다 Front에서 Server를 바라보는 이유?동그라미 되어있는 1번의 의미가 궁금합니다.프론트엔드 서버에서 왜 벡엔드 서버를 가리키나요?클라이언트가 엔진엑스를 통해서 벡엔드 서버를 바라보는 것은 API 호출을 위함인 것은 이해가 됩니다.프록시를 하고, 밑에 axios.get("/api/values")여기에서, 호스트이름이나 포트를 안써도 되는 이유 설명이 조금 이상합니다. 6분42초쯤에서 해당 코드에 호스트 이름을 안써서 쓸 필요가 없다.. 이렇게 설명하셨는데 조금 보충 설명을 해주셨으면 좋겠습니다.엔젠엑스를 통해서 API를 호출하는 것이기 때문에 80번포트를 명시? 해야할 것 같고, 호스트이름도 없으면 해당 ip를 어떻게 찾나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하세여 공부법 질문있습니다
안녕하세요 강의를 보다가 강의 공부하는 순서가 헷갈리는데 교안을 먼저 보고 강의를 1주차 부터 보아야 하는건가요? C++은 처음 접하는 학생입니다
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시간복잡도
fibo[] 이전 시간복잡도 2^n fibo[] 이후 시간복잡도 어떻게 되나요?
-
해결됨스스로 구축하는 AWS 클라우드 인프라 - 기본편
수업자료
실습시 사용하는 업로드 하시는 파일은 어디서 받나요? 제공해드린 파일을 업로드하라고 말씀하셨는데...
-
미해결애플 웹사이트 인터랙션 클론!
css > left:0; width:100% 과 left:0; right:0; 의 차이점
선생님 강의듣다 궁금증이 생겨 질문 남깁니다!!position을 사용시,1. left:0; width:100%;2. left:0; right:0;이렇게 두가지 방식으로 화면을 다 채우는 방법을 있는것으로 알고있는데,둘의 차이점을 알고싶습니다!
-
미해결처음 만난 리액트(React)
작동이안됨니다
Line 7:29: 'Data' is not defined no-undefSearch for the keywords to learn more about each error.라며 자동이 안되고 data랑 toLocaleTimeString가 색이 안변한게 이상합니다import React from "react"; function Clock(props){ return( <div> <h1>안녕, 리액트!</h1> <h2>현재 시간: {new Data().toLocaleTimeString()}</h2> </div> ); } export default Clock;코드는 문제가 있는지 모르겠습니다 문제 될만한게 없는듯 합니다index.js 완전똑같습니다
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
질문드립니다
트라이 위드 리소스 구문이없고 대신 close 가있는게아니라 use 가 있는거 아닌가요 ㅠㅠ? 강의내용이랑 햇깔려서 질문드려요