묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
bootstrap.min.css 인식을 못합니다 ㅠㅠ
안녕하세요. 항상 좋은 강의 감사드립니다. bootstrap.min.css를 복사-붙여넣기 후, out폴더를 삭제 후 재실행했음에도 불구하고 css코드가 뜨지 않아 질문드립니다. resources/static/css/bootstrap.min.css 디렉터리 구조는 잘 지킨 것 같은데, 실행하면 영한님의 화면과 달리 저는 out폴더가 처음부터 아예 빨갛게 됩니다. 실행결과는 아래와 같습니다. 부트스트랩 압축파일도 강의자료에 실려있는대로 다운받았는데 실행 시에 css코드가 아닌 위 화면이 떠서 원인을 찾아봤는데 찾지 못하여 질문드립니다 ㅠㅠ 감사합니다.
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
apt, apt-get
삭제된 글입니다
-
미해결워드프레스 제대로 개발하기 - 클라이언트 편
어드민 강의 관련
관련 어드민 편을 무료로 들을 수 있다고 소개 하신거 같아서 클라이언트 결제 했는데요. 어드민을 압축한 영상은 보이는데 관련 어드민 영상을 볼 수 있는 권한이 있는건지는 제가 못찾는 건지 잘 안보이네요..
-
미해결스프링 핵심 원리 - 기본편
도메인 설계 질문
안녕하세요, 영한쌤 강의를 순차적으로 듣고 다시 복습하면서 토이프로젝트를 진행하고 있는데요! 다시 듣다보니 새롭게 궁금해진 점이 있어서 질문드립니다. 회원 도메인과 주문 도메인이 따로 있는데요, 만약 특정 회원의 현재 주문 정보를 조회하는 요구사항이 있다고 할 때, 회원 도메인에 속성 값으로 현재 주문 정보를 넣는 것이 맞을까요? 아니면 주문 도메인에서 status 와 같은 속성을 통해 특정 회원의 현재 주문 정보를 조회하는 것이 나을까요? 답변 기다리고 있겠습니다. 그리고 항상 좋은 질의 강의를 제공해주셔서 감사합니다 :)
-
미해결문제로 배우는 C언어
안녕하세요! 혹시 궁금한게 있습니다.
문제풀이 과정에서. 1. b = ceil(a / 12.0); b= (int)b; printf("%d", b); 과 2. b = ceil(a / 12.0); printf("%d", (int)b); 의 차이가 궁금합니다. 물론 1번 코드는 정상작동하지 않았습니다 ㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
스택오버플로우가 발생합니다
강의 너무 잘듣고 있고 part7듣는 도중에 부족 한거 같아서part3을 보고있는데 막히네요..... DataManager에 init()을 사용하면 스택오버플로우가 생겨요 혹시 왜 이런지 알려주실 수 있나요?
-
해결됨코딩은 실전이다! - Git알못을 위한 깃린이코스(Git, Github 실습위주)
슬랙 초대 부탁드립니다!!
드디어 슬랙 파트까지 왔네요...! 슬랙 초대 부탁드립니다!! 감사합니다 tia510@gachon.ac.kr
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
github 권한요청 드립니다.
인프런 아이디 : twosom 인프런 이메일 : two_somang@icloud.com 깃헙 아이디 : two_somang@icloud.com 깃헙 Username : twosom
-
해결됨Confluence를 활용해서 효과적으로 지식 관리와 프로젝트 협업하기
Confluence 서버버전에서도 이슈생성이 되는데요
지금 확인을 해보니 서버 버전에서도 이슈 생성이 가능합니다. 그런데, 모든 내용에서 되는 것이 아니고 가능한 헤더폰트 크기가 있는 것 같습니다.
-
미해결Slack 클론 코딩[실시간 채팅 with React]
질문있습니다.
useInput에서는 hadler를 리턴해주는데 구조분해 할당으로 useInput에 return 값을 받을 경우 hadler를 hadler가 아닌 다른 이름의 함수인onChangeEmail 이라는 이름으로 받을 수 있는건가요 ? 궁금합니다.
-
미해결문제로 배우는 C언어
안녕하세요~! 혹시 문제를 다르게 풀었는데 궁금합니다.
안녕하세요! 코딩 초보 입니다. 풀고 나서 강의를 봤는데 저의 코드는 #include<stdio.h> int main(){ int a, b, m0, m1, m2; scanf("%d %d", &a,&b); m0 = a - b; m1 = m0 / 500; m2 = ((a - b)-(m1*500))/ 100; printf("%d\n %d\n %d\n",m0,m1,m2);} 으로 풀었습니다. 혹시 강사님 처럼 공통점을 정해놓고 하나씩 대입해가면서 푸는 습관이 향후 알고리즘을 익히는데 도움이될까요 아님 저처럼 초보는 하나하나씩 저렇게 날거하면서 푸는게 도움이 되는건지 궁금합니다!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ResponseBody 질문입니다.
13분쯤 나오는 V5함수 같은 경우 @ResponseBody 어노테이션을 제외해도 서버에서 클라이언트로 json형식으로 잘 보내지던데 @ResponseBody를 생략해도 되는건가요?? 또, 생략가능하더라도 보통 해당 어노테이션을 붙이는게 좋나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ResponseBody 어노테이션 질문입니다
13분쯤 나오는 requestBodyJsonV5 함수에서 @ResponseBody 어노테이션을 제외해도 서버에서 클라이언트로 json으로 잘 가던데 생략가능한건가요? 또, 생략가능하더라도 보통 붙이는게 맞나요?
-
미해결파이썬 입문 및 웹 크롤링을 활용한 다양한 자동화 어플리케이션 제작하기
폴도명 앞에 . 붙어있느건
윈도우 사용자 입니다. 폴도명 앞에 . 붙어있느건 지워도 되는건가요?
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션 3 봉우리문제 질문이요!!
안녕하세요. 수업잘 듣고 있습니다.^^ 봉우리 문제에서 all()구문을 for문으로 짜보고 싶은데요.. *수업코드* cnt=0 for i in range(1, n+1): for j in range(1, n+1): if all(a[i][j]>a[i+dx[k]][j+dy[k]] for k in range(4)): cnt+=1 print(cnt) 이 부분을 *제코드* cnt=0 for i in range(1,n+1): for j in range(1,n+1): for k in range(4): if b[i][j] < b[i+dx[k]][j+dy[k]]: break else: cnt+=1 print(cnt) 이렇게 바꾸어 봤는데 답이 틀려서 혹시 for 문으로 작성할 수 있나요?
-
미해결파이썬 입문 및 웹 크롤링을 활용한 다양한 자동화 어플리케이션 제작하기
아톰에디서에서 현재 가상환경을 확인할수 있는 방법이 있는지요?
c:/Users/Eunkii7/Anaconda3 가 root 이고 c:/Users/Eunkii7/Anaconda3/envs 에 section2라는 가상환경을 만들어 section2라는 가상환경을 활성화 시킨다음 atom을 동작시키셨는데요 그럼으로서 이아톰으로 section2 라는 가상환경을 사용하는건데 프로젝트 폴더의 경로는 c/section2 에 하셨습니다. 세월이 지난 다음 c/section2 라는 폴더를 열었더니 .py 파일이 존재해서 어떤 파을인가를 볼려고 atom으로 실행시켜 내용을 보고 있는데 이 c/section2에 저장된 .py파일은 어떤 가상환경에서 만들어 졌는지 atom에서 확인하는 방법이 있는지요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
LOAD_POSTS_FAILURE 발생
안녕하세요! 다름이 아니라 강의를 들으며 코드를 작성하는데 게시글들을 로드하는데 있어서 계속해서 LOAD_POSTS_FAILURE가 되면서 500 상태코드의 서버에러가 발생합니다. 에러메세지를 보면 Post.findAll이 정의되지 않는다고하는데, Post가 비어있어서 finAll이 작동하지 않는 것 같습니다. 하지만 db 상으로 보면 posts 테이블이 잘 채워져있는데 왜 에러가 발생하는지 모르겠습니다ㅠㅠ 관련 코드 올려놓겠습니다. routes/posts.js const express = require('express'); const { Post, Image, User, Comment } = require('../models'); const router = express.Router(); router.get('/', async (req, res, next) => { // GET /posts try{ const posts = await Post.findAll({ limit: 10, order: [ ['createdAt', 'DESC'], [Comment, 'createdAt', 'DESC'] ], include: [{ model: User, attributes: ['id', 'nickname'], }, { model: Image, }, { model: Comment, include: [{ model: User, attributes: ['id', 'nickname'], }], }, { mode: User, as: 'Likers', attributes: ['id'], }], }); console.log(posts); res.status(200).json(posts); } catch (error) { console.error(error); next(error); } }); module.exports = router; reducers/post.js import produce from '../util/produce'; export const initialState = { mainPosts: [], imagePaths: [], hasMorePosts: true, likePostLoading: false, likePostDone: false, likePostError: null, unlikePostLoading: false, unlikePostDone: false, unlikePostError: null, loadPostsLoading: false, loadPostsDone: false, loadPostsError: null, addPostLoading: false, addPostDone: false, addPostError: null, removePostLoading: false, removePostDone: false, removePostError: null, addCommentLoading: false, addCommentDone: false, addCommentError: null, }; export const LIKE_POST_REQUEST = 'LIKE_POST_REQUEST'; export const LIKE_POST_SUCCESS = 'LIKE_POST_SUCCESS'; export const LIKE_POST_FAILURE = 'LIKE_POST_FAILURE'; export const UNLIKE_POST_REQUEST = 'UNLIKE_POST_REQUEST'; export const UNLIKE_POST_SUCCESS = 'UNLIKE_POST_SUCCESS'; export const UNLIKE_POST_FAILURE = 'UNLIKE_POST_FAILURE'; export const LOAD_POSTS_REQUEST = 'LOAD_POSTS_REQUEST'; export const LOAD_POSTS_SUCCESS = 'LOAD_POSTS_SUCCESS'; export const LOAD_POSTS_FAILURE = 'LOAD_POSTS_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 addPost = (data) => ({ type: ADD_POST_REQUEST, data, }); export const addComment = (data) => ({ type: ADD_COMMENT_REQUEST, data, }); // 이전 상태를 액션을 통해 다음 상태로 만들어내는 함수(불변성은 지키면서) const reducer = (state = initialState, action) => produce(state, (draft) => { switch (action.type) { case LIKE_POST_REQUEST: draft.likePostLoading = true; draft.likePostDone = false; draft.likePostError = null; break; case LIKE_POST_SUCCESS: { const post = draft.mainPosts.find((v) => v.id === action.data.PostId); post.Likers.push({ id: action.data.UserId }); draft.likePostLoading = false; draft.likePostDone = true; break; } case LIKE_POST_FAILURE: draft.likePostLoading = false; draft.likePostError = action.error; break; case UNLIKE_POST_REQUEST: draft.unlikePostLoading = true; draft.unlikePostDone = false; draft.unlikePostError = null; break; case UNLIKE_POST_SUCCESS: { const post = draft.mainPosts.find((v) => v.id === action.data.PostId); post.Likers.filter((v) => v.id !== action.data.UserId); draft.unlikePostLoading = false; draft.unlikePostDone = true; break; } case UNLIKE_POST_FAILURE: draft.unlikePostLoading = false; draft.unlikePostError = action.error; break; case LOAD_POSTS_REQUEST: draft.loadPostsLoading = true; draft.loadPostsDone = false; draft.loadPostsError = null; break; case LOAD_POSTS_SUCCESS: draft.loadPostsLoading = false; draft.loadPostsDone = true; draft.mainPosts = draft.mainPosts.concat(action.data); draft.hasMorePosts = draft.mainPosts.length < 50; break; case LOAD_POSTS_FAILURE: draft.loadPostsLoading = false; draft.loadPostsError = action.error; break; case ADD_POST_REQUEST: draft.addPostLoading = true; draft.addPostDone = false; draft.addPostError = null; break; case ADD_POST_SUCCESS: draft.addPostLoading = false; draft.addPostDone = true; draft.mainPosts.unshift(action.data); break; case ADD_POST_FAILURE: draft.addPostLoading = false; draft.addPostError = action.error; break; case REMOVE_POST_REQUEST: draft.removePostLoading = true; draft.removePostDone = false; draft.removePostError = null; break; case REMOVE_POST_SUCCESS: draft.removePostLoading = false; draft.removePostDone = true; draft.mainPosts = draft.mainPosts.filter((v) => v.id !== action.data); break; case REMOVE_POST_FAILURE: draft.removePostLoading = false; draft.removePostError = action.error; break; case ADD_COMMENT_REQUEST: draft.addCommentLoading = true; draft.addCommentDone = false; draft.addCommentError = null; break; case ADD_COMMENT_SUCCESS: { const post = draft.mainPosts.find((v) => v.id === action.data.PostId); post.Comments.unshift(action.data); draft.addCommentLoading = false; draft.addCommentDone = true; break; } case ADD_COMMENT_FAILURE: draft.addCommentLoading = false; draft.addCommentError = action.error; break; default: break; } }); export default reducer; sagas/post.js import axios from 'axios'; // import shortId from 'shortid'; import { all, delay, fork, put, takeLatest, throttle, call } from 'redux-saga/effects'; import { ADD_COMMENT_FAILURE, ADD_COMMENT_REQUEST, ADD_COMMENT_SUCCESS, ADD_POST_FAILURE, ADD_POST_REQUEST, ADD_POST_SUCCESS, LIKE_POST_FAILURE, LIKE_POST_REQUEST, LIKE_POST_SUCCESS, // generateDummyPost, LOAD_POSTS_FAILURE, LOAD_POSTS_REQUEST, LOAD_POSTS_SUCCESS, REMOVE_POST_FAILURE, REMOVE_POST_REQUEST, REMOVE_POST_SUCCESS, UNLIKE_POST_FAILURE, UNLIKE_POST_REQUEST, UNLIKE_POST_SUCCESS, } from '../reducers/post'; import { ADD_POST_TO_ME, REMOVE_POST_OF_ME } from '../reducers/user'; function likePostAPI(data) { // data: post.id return axios.patch(`/post/${data}/like`); } function* likePost(action) { try { const result = yield call(likePostAPI, action.data); yield put({ type: LIKE_POST_SUCCESS, data: result.data, // PostId, UserId }); } catch (err) { console.error(err); yield put({ type: LIKE_POST_FAILURE, data: err.response.data, }); } } function unlikePostAPI(data) { return axios.delete(`/post/${data}/like`); // return axios.patch(`/post/${data}/unlike`); 도 가능 } function* unlikePost(action) { try { const result = yield call(unlikePostAPI, action.data); yield put({ type: UNLIKE_POST_SUCCESS, data: result.data, }); } catch (err) { console.error(err); yield put({ type: UNLIKE_POST_FAILURE, data: err.response.data, }); } } function loadPostsAPI(data) { return axios.get('/posts', data); } function* loadPosts(action) { try { const result = yield call(loadPostsAPI, action.data); yield put({ type: LOAD_POSTS_SUCCESS, // data: generateDummyPost(10), data: result.data, }); } catch (err) { console.error(err); yield put({ type: LOAD_POSTS_FAILURE, data: err.response.data, }); } } function addPostAPI(data) { return axios.post('/post', { content: data }); } function* addPost(action) { try { const result = yield call(addPostAPI, action.data); yield put({ type: ADD_POST_SUCCESS, data: result.data, }); yield put({ type: ADD_POST_TO_ME, data: result.data.id, }); } catch (err) { console.error(err); yield put({ type: ADD_POST_FAILURE, data: err.response.data, }); } } function removePostAPI(data) { return axios.delete('/api/post', data); } function* removePost(action) { try { // const result = yield call(removePostAPI, action.data); yield delay(1000); yield put({ type: REMOVE_POST_SUCCESS, data: action.data, }); yield put({ type: REMOVE_POST_OF_ME, data: action.data, }); } catch (err) { console.error(err); yield put({ type: REMOVE_POST_FAILURE, data: err.response.data, }); } } function addCommentAPI(data) { return axios.post(`/post/${data.postId}/comment`, data); } function* addComment(action) { try { const result = yield call(addCommentAPI, action.data); yield put({ type: ADD_COMMENT_SUCCESS, data: result.data, }); } catch (err) { yield put({ type: ADD_COMMENT_FAILURE, data: err.response.data, }); } } function* watchLikePost() { yield takeLatest(LIKE_POST_REQUEST, likePost); } function* watchUnlikePost() { yield takeLatest(UNLIKE_POST_REQUEST, unlikePost); } function* watchLoadPosts() { yield throttle(5000, LOAD_POSTS_REQUEST, loadPosts); } function* watchAddPost() { yield takeLatest(ADD_POST_REQUEST, addPost); } function* watchRemovePost() { yield takeLatest(REMOVE_POST_REQUEST, removePost); } function* watchAddComment() { yield takeLatest(ADD_COMMENT_REQUEST, addComment); } export default function* postSaga() { yield all([ fork(watchLikePost), fork(watchUnlikePost), fork(watchAddPost), fork(watchLoadPosts), fork(watchRemovePost), fork(watchAddComment), ]); }
-
미해결홍정모의 따라하며 배우는 C++
코드 상에 뭐가 틀린걸까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저
-
미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
python -m venv 오류
작업 폴더는 C:\Users\User\python_mid 여기서 하고 있고 몇 번 계속해봤는데 저런 오류 메시지만 뜨더라구요,, 어떻게 해야하나요
-
미해결디지털 포렌식 (Digital Forensic) 전문가 과정
pstree, psscan 관련 질문 드립니다.
부모 프로세스가 없는 것을 어떻게 바로 확인하신 건지 궁금합니다.