묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
섹션1(노드), 섹션2(리액트) 연결된 내용의 강의인가요?
강의와 관련있는 질문을 남겨주세요.• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)• 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달에도 요령이 필요합니다.• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요! 구체적인 질문일수록 명확한 답을 받을 수 있어요.• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다. 기본적인 예의를 지켜주세요.• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다. 제가 리액트만 공부하고 싶어서 섹션 2부터 보려고 하는데 섹션1, 2 나눠진 내용인가요 아니면 연달아 봐야하나요?
-
미해결[구버전] 웹 애플리케이션 개발을 위한 IntelliJ IDEA 설정 (2020 ver.)
mac 에서 sh startup.sh 를 실행했을 때 404 에러가 발생합니다.
mac 에서 sh startup.sh 를 실행했을 때 404 에러가 발생합니다.
-
미해결풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2]
promise 이해 1 16분 23초 부분 질문입니다.
.then함수에서 최초 reject(); 함수가 실행되고 다시 .then을 실행할 때 함수 인자가 하나일 경우 성공함수만 호출된다라고 말씀하셨는데 아래 then엔 인자가 하나이니 실행이 안되어야 하는거 아닌가요 ? 즉, by Dave Lee가 출력 되려면 첫번째 then에서 resolve가 출력되어야 하는거 아닌지요.. -> 왜 첫번째 then은 실패, 두번째 then은 성공이 출력되는지 이해가 되질 않습니다..ㅠ 만약 두번째 then부터는 첫번째 함수만 실행되는거면 예제에 나온것처럼 then에 두번째 인자는 필요 없는거 아닌가요 ??
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
예제 수준을 넘어선다면 어떻게 해야할까요?
안녕하세요 팀장님! mvc 강의 열렬히 기다리면서 복습하고 있습니다. 예제에서는 회원 엔티티의 pk를 자동 생성되는 id를 사용하시는데요, 일반적인 포털 사이트 로그인과 같이 id와 pw를 회원이 직접 입력해서 사용하는 경우에는 artificial key 를 pk로 두고, unique 제약 조건으로 로그인 id를 만드는게 좋을까요? 아니면 로그인 id자체를 pk로 만드는 것이 좋을까요? pk는 비지니스 로직과 상관이 없는 유일한 값이어야 하고, generated value가 이 제약조건에 정확히 부합하지만, 회원 id자체가 비지니스 로직과는 별로 연관이 없어 보이기도 하고 unique제약조건또한 만족하니 어떻게 엔티티를 만들어야 할지 고민입니다.
-
미해결윤재성의 처음 시작하는 MySQL DataBase
숫자 함수 round(salary 1*1, 0)
마지막 예제 부분에서 숫자 함수 round(salary 1*1, 0) (, 0)을 넣어주신 이유가 있나요?
-
미해결리액트로 나만의 블로그 만들기(MERN Stack)
findByIdAndUpdate에 대해 궁금합니다!
router.post("/:id/comments", async(req, res, next) => { const newComment = await Comment.create({ contents: req.body.contents, creator: req.body.userId, creatorName: req.body.userName, post: req.body.id, date: moment().format("YYYY-MM-DD hh:mm:ss") }) console.log(newComment, "newComment") try { await Post.findByIdAndUpdate(req.body.id, { $push: { comments: newComment._id } }) await User.findByIdAndUpdate(req.body.userId, { $push: { comments: { post_id: req.body._id, comment_id: newComment._id } } }) res.json(newComment) } catch (e) { console.log(e) next(e) } }) 좋은 강의 감사합니다 ㅎㅎㅎㅎ 항상 관계형DB, 시퀄라이즈만 사용하다가 처음으로 몽고DB를 사용하고있는데요, 위의 코드에서 await User.findByIdAndUpdate(req.body.userId, { $push: { comments: { post_id: req.body._id, comment_id: newComment._id } } }) 이 부분이 User 테이블에서 req.body.userId에 해당하는 user를 찾은 다음에 User 테이블의 comments컬럼의 post_id, comment_id를 수정한다고 이해하면 되는건가요? 조금 햇갈리네요 ㅠㅠ 그리고 지금 (47) Comment Saga 까지 들었는데 normalRoute/PostWrite.js에서 submit하는 기능이 아직 안되어있는데 이건 다음 강의에서 다루는건가요? import React, { useState } from "react"; import { useSelector, useDispatch } from "react-redux"; import { Form, FormGroup, Label, Input, Button, Col, Progress, } from "reactstrap"; import { CKEditor } from "@ckeditor/ckeditor5-react"; import ClassicEditor from "@ckeditor/ckeditor5-editor-classic/src/classiceditor"; import { editorConfiguration } from "../../components/editor/EditorConfig"; import Myinit from "../../components/editor/UploadAdapter"; import dotenv from 'dotenv' dotenv.config() const PostWrite = () => { const {isAuthenticated} = useSelector( (state) => state.auth ) const [form, setValues] = useState({ title: "", contents: "", fileUrl: "" }); const dispatch = useDispatch() const onChange = (e) => { setValues({ ...form, [e.target.name]: e.target.value, }); }; const getDataFromCKEditor = (event, editor) => { const data = editor.getData() console.log(data) if(data && data.match("<img src=")) { const whereImg_start = data.indexOf("<img src=") console.log(whereImg_start) let whereImg_end = "" let ext_name_find = "" let result_Img_Url = "" const ext_name = ["jpeg", "png", "jpg", "gif"] for(let i=0; i<ext_name.length; i++) { if(data.match(ext_name[i])) { console.log(data.indexOf(`${ext_name[i]}`)) ext_name_find = ext_name[i] whereImg_end = data.indexOf(`${ext_name[i]}`) } } console.log(ext_name_find) console.log(whereImg_end) if (ext_name_find === "jpeg") { result_Img_Url = data.substring(whereImg_start+10, whereImg_end+4) } else { result_Img_Url = data.substring(whereImg_start+10, whereImg_end+3) } console.log(result_Img_Url, "result_Img_Url") setValues({ ...form, fileUrl: result_Img_Url, contents: data }) } else { setValues({ ...form, fileUrl: "https://source.unsplash.com/random/301x201", // fileUrl: process.env.REACT_APP_BASIC_IMAGE_URL contents: data }) } } const onSubmit = async(e) => { await e.preventDefault() const { title, contents, fileUrl, category } = form } return ( <> {isAuthenticated ? ( <Form onSubmit={onSubmit}> <FormGroup className="mb-3"> <Label for="title">Title</Label> <Input type="text" name="title" id="title" className="form-control" onChange={onChange} /> </FormGroup> <FormGroup className="mb-3"> <Label for="category">Category</Label> <Input type="text" name="category" id="category" className="form-control" onChange={onChange} /> </FormGroup> <FormGroup className="mb-3"> <Label for="content">Content</Label> <CKEditor editor={ClassicEditor} config={editorConfiguration} onInit={Myinit} onBlur={getDataFromCKEditor} /> <Button color="success" block className="mt-3 col-md-2 offset-md-10 mb-3" > 제출하기 </Button> </FormGroup> </Form> ) : ( <Col width={50} className="p-5 m-5"> <Progress animated color="info" value={100} /> </Col> )} </> ); } export default PostWrite 47강까지 들은 현재 PostWrite.js인데 게시글을 submit하는 액션이 디스패치 안되어있어서요 ㅎㅎㅎ 등록된 게시글이 없다보니 (42) ~ (45)강의 PostDetail.js의 내용을 확인할 수가 없네요..
-
미해결홍정모의 따라하며 배우는 C++
구현해본 코드입니다! 피드백을 받고 싶어 올려봅니다 (+부족하지만 참고하실 분들 있으시면 조금이라도 도움드리고자 올려봅니다!)
강의 정말 잘듣고 있습니다. 대학교에 입학한 후 코딩을 처음 배운게 파이썬이었고, 파이썬으로 스타트업에서 머신러닝 프로젝트도 하면서 여러 사람들과 협업하기도 하며 나름 객체지향에 대해서 잘 알고 있다고 생각했는데, 교수님의 강의를 듣고 C++로 객체지향을 배워보니 그동안 제가 얼마나 기초가 부족했는지 알 수 있었습니다. 교수님 강의를 듣기 전까지 1년 이상 코딩에서 재미를 찾지 못하여 손을 놨었습니다. 그런데 이 강의에서 제가 모르는지도 몰랐던 것들을 알게되니 정말 감회가 남다르고, 다시 코딩이 재밌어졌습니다!^^ 정말 감사합니다! 최근에는 클린 코드와 클린 아키텍쳐에 대해서도 같이 공부하면서 교수님이 말씀하시는 정돈되고 읽기 좋은 코드가 무엇인지 조금씩 공부하고 있습니다. 나름 클린하게 구현해보려고 노력하면서 수업 따라가고 있습니다! 현재 군대에서 교수님 강의를 듣고 있는데, 교수님덕분에 제 꿈을 다시 일으키고 기반을 제대로 닦을 수 있을 것 같습니다! 남은 강의도 성실하게 듣겠습니다! 누구든지 피드백 해주시면 정말 감사하겠습니다! 또 혹시나 구현이 어렵거나 하신 분들을 위해 코드 공유합니다. #include <iostream> #include <initializer_list> #include <cassert> using namespace std; class IntArray { private: int m_length = 0; int *m_data = nullptr; const int one_digit = 1; public: IntArray(const unsigned int &len_in) : m_length(len_in) { initialize(m_length); } IntArray(const initializer_list<int> &list) : IntArray(list.size()) { int count = 0; for (auto & element : list) { m_data[count] = element; count++; } } ~IntArray() { delete [] m_data; } void initialize(const unsigned int &len_in) { m_data = new int[len_in]; } void reset() { delete [] m_data; m_data = nullptr; m_length = 0; } void resize(const unsigned int &len_in) { IntArray temp(len_in); copyAll(temp, *this); resetAndAssignment(temp); } void insertBefore(const int &value, const int &ix) { IntArray temp(m_length + one_digit); copyOriginalFromZeroToIx(temp, *this, ix - one_digit); temp.setValue(value, ix); copyOriginalFromIXToEnd(temp, *this, ix + one_digit, ix); resetAndAssignment(temp); } void remove(const int &ix) { IntArray temp(m_length - one_digit); copyOriginalFromZeroToIx(temp, *this, ix - one_digit); copyOriginalFromIXToEnd(temp, *this, ix, ix + one_digit); resetAndAssignment(temp); } void push_back(const int &value) { IntArray temp(m_length + one_digit); copyAll(temp, *this); int temp_end_index = temp.getLength() - one_digit; temp.setValue(value, temp_end_index); resetAndAssignment(temp); } void copyAll(IntArray & target, const IntArray & orginal) { for (int i = 0; i < target.m_length; ++i) { target.m_data[i] = orginal.m_data[i]; } } void copyOriginalFromZeroToIx(IntArray & target, IntArray & original, const unsigned int & to_ix) { // TODO: 방어적 프로그래밍 - to_ix가 배열 길이를 벗어날 때. for (int i = 0; i < to_ix + one_digit; ++i) { target.m_data[i] = original.m_data[i]; } } void copyOriginalFromIXToEnd(IntArray & target, IntArray & original, const unsigned int & from_ix_target, const unsigned int & from_ix_original) { // TODO: 방어적 프로그래밍 - to_ix가 배열 길이를 벗어날 때. unsigned int count = from_ix_original; for (int i = from_ix_target; i < target.getLength(); ++i) { target.m_data[i] = original.m_data[count]; count++; } } void resetAndAssignment(IntArray & intarray) { this->reset(); *this = intarray; } int getLength() { return m_length; } void setValue(const int &value, const int &ix) { //TODO: 방어적 프로그래밍 - 인덱스가 배열 범위를 벗어날 때 m_data[ix] = value; } IntArray& operator = (IntArray & source) { this->m_length = source.m_length; this->m_data = new int[this->m_length]; copyAll(*this, source); } friend ostream& operator << (ostream& out, IntArray & intarray) { for (int i = 0; i < intarray.getLength(); ++i) { out << intarray.m_data[i] << " "; } return out; } }; int main() { // constructor test - OK IntArray my_arr{ 1, 3, 5, 7, 9 }; cout << "constructor test: " << endl; cout << my_arr << endl; // resize test - OK my_arr.resize(8); cout << "resize test: " << endl; cout << my_arr << endl; cout << "Length: " << my_arr.getLength() << endl ; my_arr.resize(3); cout << my_arr << endl; cout << "Length: " << my_arr.getLength() << endl; // copyOriginalFromZeroToIx test - OK IntArray arr1{1, 3, 5, 7 ,9 }; IntArray arr2{2, 4, 6, 8, 10}; arr1.copyOriginalFromZeroToIx(arr1,arr2,2); cout << "copyOriginalFromZeroToIx test: " << endl; cout << arr1 << endl; // copyOriginalFromIXToEnd - OK IntArray my_arr1{100, 200, 300, 400, 500}; my_arr1.copyOriginalFromIXToEnd(my_arr1,arr2,2,2); // 100 200 6 8 10 OK cout << "copyOriginalFromIXToEnd: " << endl; cout << my_arr1 << endl; //insertBefore test - OK IntArray my_arr3{ 1, 3, 5, 7, 9 }; my_arr3.insertBefore(10, 1); // 1, 10, 3, 5, 7, 9 cout << "insertBefore test: " << endl; cout << my_arr3 << endl; // remove test - OK my_arr3.remove(3); // 1, 10, 3, 7, 9 cout << "remove test: " << endl; cout << my_arr3 << endl; // push_back test - OK my_arr3.push_back(13); // 1, 10, 3, 7, 9, 13 cout << "push_back test: " << endl; cout << my_arr3 << endl; /* result: constructor test: 1 3 5 7 9 resize test: 1 3 5 7 9 0 1041 0 Length: 8 1 3 5 Length: 3 copyOriginalFromZeroToIx test: 2 4 6 7 9 copyOriginalFromIXToEnd: 100 200 6 8 10 insertBefore test: 1 10 3 5 7 9 remove test: 1 10 3 7 9 push_back test: 1 10 3 7 9 13 */ return 0; }
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
의문점 + 질문
(의문점) 단일참조가 아닐 경우 orphanRemoval을 사용하지 말아야 하는 이유에 대해서는 이해가 됩니다만.. 부모가 여럿이 있는 자식 객체가 있다고 했을 때, 하나의 부모가 없어진다해도 다른 부모쪽에는 참조가 되어있으니 아직 고아가 아닌 거 아닌가요?; 마치 아버지가 사망했다고 모자관계까지 끊어버리는 느낌..? 이상하네요; 너무 쓸 데 없이 Real World에 대입해서 생각하는걸까요? (질문) orphanRemoval = true를 사용한다는 게 결국 CascadeType.REMOVE와 똑같은 말 아닌가요? 그럼 CascadeType.ALL을 사용하면 굳이 orphanRemoval = true는 사용할 필요가 없는 것 아닌가 싶습니다. 자식의 생명주기를 부모가 관리하기 위해서 꼭 저 두 속성을 함께 써야하는 이유가 무엇인지 궁금합니다. 감사합니다.
-
해결됨실무자가 알려주는 Git - 입문편
딱 커밋에 포함된 내용만 가져오는건가요?
체리픽은 원하는 커밋의 내용만 가져올 수 있다고 이해가 되었는데 그렇다면 딱 커밋 에 포함된 내용만 가져오는건가요? 예를들면 a 커밋에서 1.html 의 3번째 줄을 변경했으면 1.html의 3번째줄 변경된 내용만 가져오는건가요?
-
해결됨구글애즈로 배우는 퍼포먼스마케팅 필수 (2023년 업데이트)
CAC 개념이 헷갈리는데요
안녕하세요, 강의 잘 듣고 있습니다. 이번 강의에서는 CAC(고객획득비용)를 객단가라고 설명을 하시니 좀 헷갈렸어요. (객단가는 고객 한명이 결제하는 금액(basket size)으로 이해하고 있어서..) 여러번 반복해 봐야 이해가 되지만 열심히 듣고 있습니다. 감사합니다.
-
미해결진짜 현업에서 쓰이는 직장인의 실무 엑셀 - 데이터 가공부터 분석까지
유의한 F에 대한 질문
사소하게 나마... 통계학을 약간 배워서 P-Value 개념도 잔차가 0이 되는 개념도 이해가 됩니다. 근데,, 유의한 F를 왜 봐야하는지는 잘 모르겠습니다.. 혹시, 간단하게라도 이유를 알려주실 수 있나요?
-
미해결R로 쉽게 배우는 강화학습
강화학습 예시로 날씨예측
강화학습 예시로 날씨예측을 예로 든다면 어떤식으로 구상할수있을까요?
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
Route, exact={true}
안녕하세요~ 세 가지 질문드립니다. 1. Switch의 역할은 무엇인가요? 2. exact={true}의 역할은 무엇인가요? 3. import 할 때, {} 안에 넣어서 불러오는거랑 그냥 불러오는 거랑 차이가 무엇인가요~? 해당 부분 노션 교육자료에 Route, Switch 사용하는 부분 코드 기입이 덜 되어 있는 것 같은데 그것도 수정해주시면 감사하겠습니다ㅎㅎ!!
-
해결됨실무자가 알려주는 Git - 입문편
스테이지에 올리는 add 이후 머지를 하면 안되는 이유 알 수 있을까요?
11:07 git rebase 이후에 스테이지에 올리는 add 이후 머지를 하면 안되는 이유 알 수 있을까요? 물론 리베이스 중이기 때문에 continue명령어를 해줘야 하는게 맞는거 같긴한데... 실수로 머지를 하는 경우도 있을거 같아서요.
-
미해결데브옵스(DevOps)를 위한 쿠버네티스 마스터
main.go가 빌드가 안됩니다.
안녕하세요. main.go파일의 빌드가 안되어 진행을 못하는 상황입니다. 어디가 잘못되었는지... 제가 go를 잘 몰라서 뭔가 빠트리고 있는지요. go 는 1.16을 쓰고 있습니다. main.go는 자료실 코드 그대로 복붙을 했습니다. 에러는, '"github.com/julienschmidt/httprouter" 라는 모듈을 나는 모른다' 정도로 해석할수 있는데... 어떻게 해야할까요?
-
모의해킹 실무자가 알려주는, SQL Injection 공격 기법과 시큐어 코딩 : PART 1
PHP 게시판 구성후 오라클 페이지에서 에러가 납니다.
삭제된 글입니다
-
미해결실전! Querydsl
Q Class 생성 시 extends 상속 질문
안녕하세요. Entity class에 extends DefualtEntity 를 할 경우 Q class 생서 시 DefualtEntity 의 값은 Q Class에 누락되는 현상이 있던데 상속을 해서 구성하면 안되는 걸까요? DefualtEntity 에는 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") private LocalDateTime regDate; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") private LocalDateTime udtDate; @PrePersist public void prePersist() { LocalDateTime now = LocalDateTime.now(); regDate = now; udtDate = now; } @PreUpdate public void preUpdate() { udtDate = LocalDateTime.now(); } 이런 공통적인 내용을 넣어보려합니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
aws back 서버가 죽어버립니다.
aws 프리티어 t2.micro vCPUs : 1 memory: 1 (GiB) npx pm2 start app.ts && npx pm2 monit 메모리가 300MB 이상 CPU가 90% 이상 되면서 로그도 뜨기 전에 멈춥니다. pm2 start app.ts --max-memory-restart 150M pm2 start app.ts --node-args="--max-old-space-size=200" 위의 방법으로도 해봤지만 메모리가 300MB 넘어가면서 역시나 죽어버립니다. aws 인스턴스 재부팅만 10번 넘게 한 것 같습니다... 프론트 서버도 nextjs 빌드할 때 죽어버려서 로컬에서 빌드하고 깃으로 올려서 사용하고 있었습니다. 백엔드 서버에서는 어떡하면 좋을까요? aws 서버를 업그레이드 한 단계 업그레이드를 고민하고 있습니다... t2.small이 시간당 20.30원. 한 달에 1만 5천원 정도 청구 예상이 되네요 다른 분들은 그냥 됐는지, 어떻게 해결했는지 궁금하네요
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
유저 이름 바꾸기
유저 이름이 한국어로 되어있으면 힘들다고 하셨는데 단순히 제어판에서 이름만 바꾼다고 되는게 아닌것 같아서 변경할려면 어느 과정을 거쳐야 할까요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
로그인 후 프로필 -> 프로필명 수정 -> 로그아웃 진행 시 에러가 발생합니다
같은 에러 발생하시는 분들 계신가요?