묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
설명중에 조금 햇갈리는게 있어서질문드립니다
안녕하세요 너무 잘 듣고있습니다 ~ 16:15부분에서 RestControlle를 사용하시면 반환시키는 값을 responsebody에 저장하지 않더라도 자동으로 json포멧으로 변경된다고 말씀해주셨는데 responsebody 에 저장 시키는거 아닌가요 ? RestController - > Controller + responsebody 이니깐요.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
input 파일 업로드시 다른정보는 넘어가는데 file정보가 넘어가지 않는 현상
안녕하세요 개인작업중에 질문이있습니다. 서버와 통신중 백엔드 서버에 게시글 올리는 기능을 만드는데 다른 정보들은 넘어가는데 이미지 파일만 넘어가지 않는 현상이 있어서 질문드립니다. 통신 방법과 이미지 데이터 바꾸기 등을 하여도 넘어가지 않습니다. 코드입니다 import React, { useCallback, useEffect, useRef, useState } from 'react'; import Router from 'next/router'; import MainLayout from '../components/MainLayout'; import style from '../styles/css/upload.module.css'; import useInput from '../hooks/useInput'; import { useDispatch, useSelector } from 'react-redux'; import { ADD_POST_REQUEST, LOAD_POSTS_REQUEST, UPLOAD_IMAGES_REQUEST, } from '../reducers/post'; import { POST_CARD } from '../reducers/menu'; import axios from 'axios'; const Home = () => { const dispatch = useDispatch(); const { me } = useSelector((state) => state.user); const { mainPosts, addPostDone, imagePaths } = useSelector( (state) => state.post, ); const [photoToAddList, setPhotoToAddList] = useState([]); const [content, onChangeContent, setContetn] = useInput(); const [notice, onChangeNotice, setNotice] = useInput(false); const ref = useRef(); const handleResizeHeight = useCallback(() => { if (ref === null || ref.current === null) { return; } ref.current.style.height = '20px'; ref.current.style.height = ref.current.scrollHeight + 'px'; }, []); //댓글창 크기 자동조절 useEffect(() => { if (!me) { Router.push('/'); } }, [me]); const checkboxClick = useCallback(() => { setNotice((prev) => !prev); }, [notice]); const imageInput = useRef(); const onClickImageUpload = useCallback(() => { imageInput.current.click(); }, [imageInput.current]); // 이미지 파일 변수에 저장 const handleImage = useCallback( (e) => { const temp = []; const photoToAdd = e.target.files; for (let i = 0; i < photoToAdd.length; i++) { console.log(photoToAdd); temp.push({ id: photoToAdd[i].name, file: photoToAdd[i], url: URL.createObjectURL(photoToAdd[i]), }); } if (temp.length > 10) { return alert('최대개수 10개가 넘어갔습니다'); } if (temp.length + photoToAddList.length > 10) { return alert('최대개수 10개가 넘어갔습니다'); } if (photoToAddList.length > 10) { return alert('최대개수 10개가 넘어갔습니다'); } setPhotoToAddList(temp.concat(photoToAddList)); // setPhoto(temp.push(temp.forEach((v) => v))); }, [photoToAddList], ); const onRemove = useCallback( (deleteUrl) => { setPhotoToAddList(photoToAddList.filter((v) => v.url !== deleteUrl)); }, [photoToAddList], ); const upLoadFormClick = useCallback( (e) => { e.preventDefault(); if (!photoToAddList.length > 0) { alert('이미지를 등록해주세요'); return; } if (!content) { alert('내용을 등록해주세요'); return; } dispatch({ type: ADD_POST_REQUEST, data: { bo_writer: me.id, bo_content: content, bo_image: photoToAddList, }, }); dispatch({ type: LOAD_POSTS_REQUEST, data: { mem_id: me?.id, }, }); setTimeout(() => { if (addPostDone) { Router.push('/'); dispatch({ type: POST_CARD, }); } }, 1000); }, [photoToAddList, content, addPostDone], ); return ( <> <MainLayout> <div style={{ paddingTop: '24px' }}></div> <section className={style.a}> <article className={style.maxWidth}> <form encType="multipart/form-data" onSubmit={upLoadFormClick} className={style.upLoadForm} > {me?.grade === 'admin' && ( <div> <span>공지</span> <input name="mem_flag" type="checkbox" value={notice} onClick={checkboxClick} // required /> </div> )} <div className={style.imageBox}> {/* /분리 */} <ul> {photoToAddList ? photoToAddList.map((v) => { return ( <li key={v.url}> <div className={style.remove} onClick={() => onRemove(v.url)} > x </div> <img src={v.url} style={{ backgroundImage: `url(${v.url})`, }} /> </li> ); }) : null} <li onClick={onClickImageUpload}> <div className={style.imageInput}> <img src="/icon/addphoto.svg" className={style.addImg} /> </div> </li> </ul> </div> <input name="bo_image" type="file" accept="image/jpg, image/jpeg, image/png" ref={imageInput} onChange={handleImage} hidden multiple required /> <div className={style.textInput}> <textarea name="bo_content" type="text" placeholder="문구를 입력해주세요" ref={ref} onInput={handleResizeHeight} onChange={onChangeContent} maxLength={140} required /> <button>게시</button> </div> </form> </article> </section> <div style={{ paddingBottom: '44px' }}></div> </MainLayout> </> ); }; Home.propTypes = {}; export default Home; // 게시물 등록하기 function addPostAPI(data) { console.log(data, 'data'); return axios.post( `/board/insert.do?bo_writer=${data.bo_writer}&bo_content=${data.bo_content}&bo_image=${data.bo_image}`, data, ); } function* addPost(action) { try { const result = yield call(addPostAPI, action.data); console.log(result); yield put({ type: ADD_POST_SUCCESS, data: result.data, }); } catch (error) { console.error(error); yield put({ type: ADD_POST_FAILURE, data: error.response.data, }); } }
-
미해결[리뉴얼] 처음하는 파이썬 백엔드와 웹기술 입문 (파이썬 중급, flask[플라스크] 로 이해하는 백엔드 및 웹기술 기본) [풀스택 Part1-1]
이해하기 어렵네요
제가 이해하기 어려운 부분이 다른 분들도 어려우신거 같네요 이전 강의에서도 느꼈는데 어려운 부분 설명하실때 그리고 코딩 시현하실때 구체적으로 코드이름와 함수명을 말씀안하시고 요기 저기 여기 있는 부분 식으로 추상적으로 말씀하셔서 어려운 부분이 더 어렵게 느껴지네요 이미 수강중이라 어찌할 수 없지만 지적은 해야할것 같아 글 올립니다
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
추가 강의 건의드립니다!
안녕하세요, 강사님! 좋은 강의 해주셔서 항상 감사합니다. nest.js는 처음 배우는데 딱 필요한 부분들을 잘 설명해주셔서 만족하면서 듣고 있습니다. 그런데 진행 중에 추가 강의를 건의 드리고 싶은 부분이 있어서 글을 작성합니다. 이번에 배운 내용을 바탕으로 실제 프로젝트를 진행 중에 open API를 활용하는 부분도 있어서 nest.js 문서를 찾아보면서 여기 를 보고 HttpService로 응답을 받아오려고 하는데 응답 결과가 원하는대로 오지 않더라고요. 결국 시간적인 문제로 해결을 못하고 그냥 axios를 직접 사용해서 open API에 대한 응답을 받아오는 방식으로 타협했었는데, 다른 분들도 open api를 활용하는 경우도 종종 있을 것 같아서 간략하게라도 HttpModule로 open API에 대한 요청/응답을 받는 강의가 있었으면 좋겠다고 생각되어서 건의 드립니다! 혹시 가능할까요??
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
여전히 queue의 사이즈가 증가합니다
안녕하세요 좋은 강의 감사드립니다. 이번 condition_variable을 응용해도 q.size()를 출력해보면 계속해서 증가하는 결과가 나왔습니다. producer와 consumer가 번갈아 실행되서 q의 사이즈가 최대1로 유지되려면 producer에 sleep 을 잠깐 걸어주는 방법밖에 없는걸까요? 아니면 제가 코드작성에 실수가 있는걸까요?
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
간단한 질문 하나드리겠습니다.
REST API 에서 URL 을 똑같이 하되, Method를 다르게 해서 얻는 이점이 무엇인가요?? 예를들면 모든 유저의 정보를 보는 /users [GET방식] 정보의 정보를 저장하는 /users [POST방식]
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
nosql을 사용하는 건 어떻게 생각하십니까?
특히 document기반 db가 사용하기 좀더 익숙해서 그런데 mmorpg를 nosql db로 구성해도 괜찮을까요?
-
해결됨웹 게임을 만들며 배우는 React
setTries를 하면 Cannot read properties of undefined (reading 'length') 에러가 뜹니다.
안녕하세요 제로초님. 항상 좋은 강의 감사드립니다. 유튜브로 강의 듣다가 3-8강에서 질문을 하기 위해 인프런 수강신청하여 질문 남깁니다. (유튜브는 질문댓글이 삭제되더라구요) 코드를 아래와 같이 작성하였는데, 리액트가 tries.length를 인식하지 못하는 현상이 발생합니다. tries 자체는 useState로 초기화해주었는데 tries.length의 length를 인식하지 못하는 이유가 무엇인가요? 문제 원인을 찾기 위해 setTries를 onChangeInput에 넣었을 때, 타이핑하자마자 바로 에러가 뜨는 걸로 봐선 tries를 setState할 때 에러가 발생하는 것 같은데 명확한 에러원인을 잘 모르겠습니다. 코드는 아래와 같습니다. https://github.com/kth990303/TH-s-Web/issues/1 https://github.com/kth990303/TH-s-Web/tree/master/react-webgame/baseball import React,{useState} from 'react'; import Try from './Try' const getNumbers=()=>{ const candidate=[1,2,3,4,5,6,7,8,9], ans=[]; for(let i=0;i<4;i++){ const chosen=candidate.splice(Math.floor(Math.random()*(9-i)), 1)[0]; ans.push(chosen); } return ans; } const NumberBaseball=()=>{ const [result, setResult]=useState(''); const [value, setValue]=useState(''); const [answer, setAnswer]=useState(getNumbers()); const [tries, setTries]=useState([]); const onSubmitForm=(e)=>{ e.preventDefault(); if(value===answer.join('')){ setResult('홈런!'); setTries((prevTries)=>{ [...prevTries, {try:value, result:'홈런!'}] }) } else{ const answerArray=value.split('').map((v)=>parseInt(v)); let strike=0, ball=0; if(tries.length>=9){ setResult(`10번 넘게 틀려서 실패! 답은 ${answer.join(',')}였습니다!`); alert('게임을 다시 시작합니다.'); setValue(''); setAnswer(getNumbers()); setTries([]); } else{ for(let i=0;i<4;i++){ if(answerArray[i]===answer[i]){ strike++; } else if(answer.includes(answerArray[i])){ ball++; } } setTries((prevTries)=>{ [...prevTries, {try: value, result:`${strike}스트라이크 ${ball}볼입니다.`}] }) setValue(''); } } } const onChangeInput=(e)=>{ console.log(tries.length); setValue(e.target.value); } return( <> <h1>{result}</h1> <form onSubmit={onSubmitForm}> <input maxLength={4} value={value} onChange={onChangeInput} /> <button>입력!</button> </form> <div>시도: {tries.length}</div> <ul> {tries.map((v,i)=>{ return( <Try key={`${i+1}차 시도: ${v.try}`} tryInfo={v} /> ); })} </ul> </> ) } export default NumberBaseball; 감사합니다!
-
미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
iterator, generator 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 10:44에서 wt=iter(wg) 하고 print(wt)를 하면 generator라고 나오는데 interator 가 아니고 generator인 이유가 무엇인가요? 가령 t = 'asdfgh' w= iter(t) print(w)하면 str_iterator 라고 나오는데 차이가 궁금합니다.
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
create block design error
[BD 41-1348] Reset pin /led_0/rst (associated clock /led_0/clk) is connected to asynchronous reset source /processing_system7_0/FCLK_RESET0_N. This may prevent design from meeting timing. Please add Processor System Reset module to create a reset that is synchronous to the associated clock source /processing_system7_0/FCLK_CLK0. 이라고 나오는데 왜 이런건가요?
-
미해결시스템엔지니어가 알려주는 리눅스 실전편 Bash Shell Script
mariabackup 오류 관련
안녕하세요 저와 동일한 오류가 발생하신 분이 있길래 답변주신걸로 해봤는데 해결이 안되네요.. (참고답변 https://www.inflearn.com/questions/179156) 다음과 같은 오류가 뜹니다. 쉘 스트립트에서 해도 동일한 오류가 발생합니다....
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
비주얼 코딩 프로그램에서 이미지 저장 경로 설정(맥)
맥에서 이미지를 경로 복사하여 붙여 넣기를 하는데 웹에서 이미지가 안뜹니다 어떻게 하는 걸까요?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
질문드립니다 getServerSideProps or getInitialProps
만약 모든 페이지에서 사용자 정보가 SSR되어야한다면 getServerSideProps보다 getInitalProps로 _app에다가 설정하는게 나을꺼 같은데 혹시 이 방법 말고 더 좋은 방법이 있을까 여쭤봅니다. getInitalProps는 레거시 코드니까 사용하지 않는 게 좋다는데 이거 말고 대안을 못 찾겠네요.ㅠㅠ 1. _app -> getInitalProps MyApp.getInitialProps = wrapper.getInitialAppProps( (store) => async ({ Component, ctx }) => { store.dispatch( setCredentials({ user: await axios .get("http://localhost:4000/users/me", { withCredentials: true, headers: { cookie: ctx.req?.headers.cookie || "", }, }) .then((response) => response.data) .catch(() => null), }) ); return { pageProps: { ...(Component.getInitialProps ? await Component.getInitialProps({ ...ctx, store }) : {}), pathname: ctx.pathname, }, }; } ); 2. pages -> getServerSideProps wrapper.getServerSideProps((store) => async (context) => { store.dispatch( setCredentials({ user: await axios .get("http://localhost:4000/users/me", { withCredentials: true, headers: { cookie: context.req.headers.cookie || "", }, }) .then((response) => response.data) .catch(() => null), }) ); return {props: {}}; });
-
미해결스프링 시큐리티
강사님 강의자료 인용에 대해
개인적으로 공부를 정리하는 블로그가 있는데요 강의 ppt 사진같은 부분을 인용하여 작성하여도 괜찮으실까요 ??
-
미해결스프링 시큐리티
어떠한 차이가 있는지 궁금합니다.
defaultSuccessUrl syccessHandler failureUrl failureHandler 각각에 메소드가 둘중하나만 써도 될거같은데 두개 다 쓰신 이유를 모르겠습니다!!..
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
파일명과 클래스명 일치 에러
회원 관리 웹 애플리케이션 요구사항 강의에서 패키지명을 member로 하셧고 메소드 클래스 이름도 member로 하셨는데 왜 일치 하지 않는다 떠서 이런 오류가 나는지 모르겠습니다 ..
-
미해결풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2]
웹페이지연습강의 들으면서
궁금한게 생겨 질문드립니다 ...! 강의 중 말씀하셨을지도 모르지만 기억이 잘 안나기도 하고 궁금해서요 .. !! index.html을 작성할때 크게 header section footer 이런식으로 나누는건 그게 웹페이지의 직접적인 영향을 끼치는게 아니라 부분부분 나눠서 효율적으로 작성하기 위함인것으로 압니다 .. !! 각각 작성할때 그 안에 div를 작성하고 inner라는 클래스를 항상 생성해주시는데 그거는 웹페이지를 작성할 때 부분부분을 나눌때 하는 특정 방식인건가요 ?? 질문이 너무 애매한데 ... 예를 들어 footer를 작성하고 그 자체를 inner라고 가정하고 작성하면안되는지 궁금합니다 ..! footer 안에 div.inner를 만들고 또 그안에 div.footer-message를 만들면 너무 중첩하는건 아닌가 궁금하기도 해서요 .. !!
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
제가 백엔드 sql port 번호설정을 잘못한거 같습니다..
영상을 보면 브라우저 3060 프론트 서버(Next) (3060) 백엔드 서버(express) (3065) MySQL(3306)라고 되어있는데 저는 제꺼는 프론트 서버는 3060이고 백엔드 서버는3000이고 MySQL 3306으로 들어가면 아래오류가 뜨고 3000번으로 들어가면 로그인이 됩니다. 어디서부터 잘못된 느낌이 들어서 질문올립니다.... 프론트 서버이고 백엔드 서버입니다. 그리고 백엔드 서버에서 port를 3000으로 맞춰줘야 db연결 성공이 떠서 3000으로 맞췄습니다..
-
미해결Vue.js 시작하기 - Age of Vue.js
vue cli 설치 오류
- (base) mac@Macui-MacBookPro learn-vue-js-master % npm install -g @vue/cli npm WARN deprecated @hapi/topo@3.1.6: This version has been deprecated and is no longer supported or maintained npm WARN deprecated @hapi/bourne@1.3.2: This version has been deprecated and is no longer supported or maintained npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated npm WARN deprecated har-validator@5.1.5: this library is no longer supported npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated npm WARN deprecated apollo-tracing@0.15.0: The `apollo-tracing` package is no longer part of Apollo Server 3. See https://www.apollographql.com/docs/apollo-server/migration/#tracing for details npm WARN deprecated graphql-extensions@0.15.0: The `graphql-extensions` API has been removed from Apollo Server 3. Use the plugin API instead: https://www.apollographql.com/docs/apollo-server/integrations/plugins/ npm WARN deprecated @hapi/address@2.1.4: Moved to 'npm install @sideway/address' npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. npm WARN deprecated apollo-cache-control@0.14.0: The functionality provided by the `apollo-cache-control` package is built in to `apollo-server-core` starting with Apollo Server 3. See https://www.apollographql.com/docs/apollo-server/migration/#cachecontrol for details. npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 npm WARN deprecated @hapi/hoek@8.5.1: This version has been deprecated and is no longer supported or maintained npm WARN deprecated @hapi/joi@15.1.1: Switch to 'npm install joi' npm WARN deprecated graphql-tools@4.0.8: This package has been deprecated and now it only exports makeExecutableSchema.\nAnd it will no longer receive updates.\nWe recommend you to migrate to scoped packages such as @graphql-tools/schema, @graphql-tools/utils and etc.\nCheck out https://www.graphql-tools.com to learn what package you should use instead changed 944 packages, and audited 945 packages in 24s 65 packages are looking for funding run `npm fund` for details 23 vulnerabilities (4 moderate, 19 high) To address issues that do not require attention, run: npm audit fix Some issues need review, and may require choosing a different dependency. Run `npm audit` for details. npm 최신 안정버전설치, 전부 삭제 후 그냥 최신 버전 설치 다 해봤는데 cli 설치가 안되네요. npm audit fix하면 (base) mac@Macui-MacBookPro learn-vue-js-master % npm audit fix npm WARN deprecated har-validator@5.1.5: this library is no longer supported npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 npm WARN deprecated coffee-script@1.12.7: CoffeeScript on NPM has moved to "coffeescript" (no hyphen) npm WARN deprecated vue-cli@2.9.6: This package has been deprecated in favour of @vue/cli added 245 packages, and audited 246 packages in 2s 7 packages are looking for funding run `npm fund` for details # npm audit report ansi-regex >2.1.1 <5.0.1 Severity: moderate Inefficient Regular Expression Complexity in chalk/ansi-regex - https://github.com/advisories/GHSA-93q8-gq69-wqmw fix available via `npm audit fix` node_modules/inquirer/node_modules/ansi-regex node_modules/string-width/node_modules/ansi-regex strip-ansi 4.0.0 - 5.2.0 Depends on vulnerable versions of ansi-regex node_modules/inquirer/node_modules/strip-ansi node_modules/string-width/node_modules/strip-ansi inquirer 3.2.0 - 7.0.4 Depends on vulnerable versions of string-width Depends on vulnerable versions of strip-ansi node_modules/inquirer vue-cli >=2.9.0 Depends on vulnerable versions of inquirer node_modules/vue-cli string-width 2.1.0 - 4.1.0 Depends on vulnerable versions of strip-ansi node_modules/string-width 5 moderate severity vulnerabilities To address all issues, run: npm audit fix 이렇게 나와서 npm audit fix 하면 또 위에 상황 반복이구요... 전에 vue 잘 설치해서 공부하다가 잠깐 쉬고 지금 다시 설치하는건데 계속 안되서 진행을 못하고 있습니다....ㅠ
-
미해결리눅스 시스템 프로그래밍 - 이론과 실습
return 과 exit 차이를 알고 싶습니다.
안녕하세요 프로그램에서 return 0 , return -1 해도 되고, exit 0, exit -1 이런식으로도 사용하는데 ... 둘의 차이를 알고 싶습니다.