묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨웹 애니메이션을 위한 GSAP 가이드 Part.02
강의 보던중 사용중인 툴이 궁금해서 여쭤봅니다.
강의를 보던중 강사님께서 callback 이라는 뜻을 찾기위해 특정 위젯 같은 것을 실행 후 검색어 입력 후 파파고로 실행 하시던데.혹시 이 툴이 뭔지 알수 있을까요?윈도우 사용자 입니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
productsSalesLocation.service create method
create({productSalesLocation}): Promise<ProductSalesLocation>{ return this.productsSalesLocationsRepository.save({...productSalesLocation}); }강의 중 위와 같은 코드를 작성해주셨는데, create의 parameter type은 ProductSalesLocation(Entity)의 타입에서 id만 제외하고 사용하는 형태로 작성하는 것이 맞을까요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
product entity의 deletedAt type
다음처럼 DeletedDateColumn 데코레이터를 붙인 deletedAt은 db에서 nullable이니까 optional 타입으로 하는 것이 맞을까요? @DeleteDateColumn()deletedAt?: Date; 공식 문서에서는 optional 타입으로 되어 있지는 않네요https://orkhan.gitbook.io/typeorm/docs/decorator-reference#deletedatecolumn
-
미해결풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2]
background-position 관련 질문합니다.
본 강좌 <모던 HTML/CSS로 상용화도 가능한 반응형 모던 웹페이지 만들기5> 강의 7:35 분쯤에서 background-position 값을 center 10% > center 50% 로 바꿨을 때 y축 값이 커졌으므로 그림이 아래로 내려가는게 맞다고 생각하는데 왜 그림이 위로 올라가는 건가요 ?
-
해결됨Vue.js 끝장내기 - 실무에 필요한 모든 것
이 에러 때문에 진행이 안되네요 ㅠ
MongoDB connection error: { Error: querySrv ENOTFOUND mongodb.tcp.cluster0-ypgh5.mongodb.net at QueryReqWrap.onresolve [as oncomplete] (dns.js:196:19) errno: 'ENOTFOUND', code: 'ENOTFOUND', syscall: 'querySrv', hostname: '_mongodb._tcp.cluster0-ypgh5.mongodb.net' }(node:21088) UnhandledPromiseRejectionWarning: Error: querySrv ENOTFOUND mongodb.tcp.cluster0-ypgh5.mongodb.net at QueryReqWrap.onresolve [as oncomplete] (dns.js:196:19)(node:21088) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)(node:21088) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
-
해결됨코어 자바스크립트
프로토타입으로 상속할때 브릿지 사용 이유
마지막 강의 뒷쪽에서 프로토타입으로 상속할 경우 브릿지 함수를 만들어서 구현하셨는데,'이름없음'이 왜 뜬다는건지 이해하지 못하여 질문드립니다.화살표를 따라가면 결국 같은 결과인데 왜 브릿지함수를 사용하지 않으면, '이름없음' 뜬다는지 이해하지 못했습니다. 답변해주시면 감사하겠습니다.
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
질문드립니다 .
switch (action.type) { case "INIT": { return action.data; } case "CREATE": { const newItem = { ...action.data, }; newState = [newItem, ...state]; break; } case "DELETE": { newState = state.filter((it) => it.id != action.targetId); break; } case "EDIT": { newState = state.map((id) => it.id === action.data.id ? { ...action.data } : it ); break; } default: return state; } return newState;여기에 보면 ...으로 객체 깊은 복사? 하는거 같은데 만약에 CREATE 쪽 const newItem = { ...action.data, }; newState = [newItem, ...state]; 대신 const newItem = { action.data, }; newState = [newItem, state]; 으로 썼을떄 차이점Edit쪽 newState = state.map((id) => it.id === action.data.id ? { ...action.data } : it 대신 newState = state.map((id) => it.id === action.data.id ? { action.data } : it 으로 썼을떄 차이점 INIT 쪽 return action.data; 왜 이건 action.data를 바로 newState에 저장안시키고 리턴하는지 궁금합니다.
-
미해결<M.B.I.T> 테스트 페이지 만들기! with Django
makemygrations 오류
makemygrations을 실행 시키려니까 이런 오류가 발생합니다. 번역시켜보니까 'main_developer와 main_Question에 대해 지연 참조로 선언되었지만 앱 'main'이 제공하지 않습니다.' 라고 하는데 어떻게 해야 하나요?
-
미해결비전공자를 위한 풀스택 맛집지도 만들기 프로젝트!: Front, Back-end 그리고 배포까지
카카오맵 마커에 찍히는 주소 유형 변경 방법을 알고싶습니다
안녕하세요. 강의를 모두 수강하고 웹사이트를 배포한 상태입니다. 지도에 마커도 잘 찍히고인포윈도우 정보도 잘 뜨고 있는 상태입니다. 원래 강의에서는 인포윈도우에 유튜브 섬네일과 영상 링크가 올라가도록 코드를 짜주셨는데혹시 저 섬네일과 주소를 네이버 지도 상에 있는 주소와 섬네일로 고칠 수 있는지 궁금해서 질문을 남깁니다.제가 다니고 있는 학교 주변의 식당 정보들이 마커에 찍히고 그 마커를 찍었을 때 네이버 지도에 나와있는섬네일과 주소 링크를 달고 싶습니다.위 코드는 선생님께서 최종 배포하신 코드 자료에 올려주신 코드중에 인포윈도우 창에 올라가는 정보들을 설정하는 부분입니다(map.js 파일) 이 부분을 어떻게 잘 수정하면 될 거 같은데 어떻게 하면 좋을까요?네이버 지도에서 제 학교 주변의 중국집을 검색해서 식당중 하나를 클릭하면https://map.naver.com/p/search/%ED%95%9C%EA%B2%BD%EB%8C%80%20%EC%A4%91%EA%B5%AD%EC%A7%91/place/37921639?c=15.00,0,0,0,dh&placePath=%3Fentry%253Dbmp이러한 웹주소가 뜨고 그 식당옆에 있는 섬네일을 클릭하면https://map.naver.com/p/search/%ED%95%9C%EA%B2%BD%EB%8C%80%20%EC%A4%91%EA%B5%AD%EC%A7%91/place/37921639?c=15.00,0,0,0,dh&placePath=%2Fphoto%3Fentry%253Dbmp이런식의 주소가 주소창에 표시가 됩니다. 이 주소 형식을 어떻게 잘 이용해서 위에 올린 인포윈도우 코드에 적용을 하면 강의 자료처럼유튜브의 섬네일과 주소가 아닌 네이버 지도의 섬네일과 주소를 불러올 수 있을거 같은데코드를 어떤식으로 수정해야 할지 조언을 얻을 수 있을까요?
-
해결됨[JS] Phaser 게임 제작 - 뱀파이어 서바이벌 클론
모바일 크롬 브라우저에서 동작을 안하는데 PC 에서만 가능한가요 ?
기종은 아이폰13입니다. 크롬 브라우저 및 사파리 등 다른 브라우저에서 작동을 안하는데 오로지 PC 브라우저에서만 작동하나요 ??
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
mySql DB 는 생성하였는데 테이블이 생성이 안되는 경우가 어떤 게 있을 까요?
윈도우로 하려니 참 수업이 쫒아가기 힘드네요.어찌 어찌 구글링으로 계속 진행하고 있는데요.도커로 올린 후 DB 는 생성을 했는데 테이블 생성이 안되네요. 2. localhost:4000 로 접속을 하면 화면이 보이지도 않구요. 아..도커 참 그렇네요. ^^: 이것 저것 손 댄 코드 입니다. 14 버전이 안되어서 16버전으로 변경# 컴퓨터 만드는 설명서 # 1. 운영체제 설치(node 14버전과 npm과 yarn이 모두 설치되어있는 리눅스) FROM node:16 # 2. 내 컴퓨터에 있는 폴더나 파일을 도커 컴퓨터 안으로 복사하기 COPY ./package.json /myfolder/ COPY ./yarn.lock /myfolder/ WORKDIR /myfolder/ RUN yarn install COPY . /myfolder/ # 3. 도커안에서 index.js 실행시키기 CMD yarn start:dev DB 포트 충돌로 3307번 확인 후 3306 번 접근version: '3.7' services: my-backend: build: context: . dockerfile: Dockerfile volumes: - ./src:/myfolder/src ports: - 4000:3000 env_file: - ./.env.docker my-database: platform: linux/x86_64 image: mysql:latest environment: MYSQL_DATABASE: 'mydocker' MYSQL_ROOT_PASSWORD: '0000' ports: - 3307:3306 도움 좀 부탁드립니다.
-
미해결<M.B.I.T> 테스트 페이지 만들기! with Django
자바스크립트 오류 관련해서 질문합니다.
위에 보시는 것과 같이 실행시키니까 facebookShare.addEventListner는 함수가 아니라고 오류가 발생하는데 분명 강의 내용과 똑같이 쳤는데도 불구하고 이런 오류가 발생했습니다. 혹시 이것만 오류가 있나해서 다른것도 확인해 보니까 밑에 kakaoshare나 copyBtn에서도 같은 오류가 발생하였습니다. 어떻게 해야하나요?
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
useCallback 의 Memoization 값 저장 방식은 참조가 아닌가요?
const onCreate = useCallback((author, content, emotion) => { const created_date = new Date().getTime(); const newItem = { author, content, emotion, created_date, id: dataId.current, }; dataId.current += 1; setData([newItem, ...data]); // initial state인 data = [] 로 인한 문제 }, []); 강의 중에서 useCallback 에서 data 값 갱신 문제에 질문이 있습니다. 우선, data 가 일반적인 값 참조처럼 일어나지 않는다는 점을 이해했습니다. 가장 마지막에 onCreate 가 업데이트되는 시점의 data 값을 기억해 두고 사용한다는 점도 이해했습니다. 그런데 왜 이렇게 동작하는지 궁금합니다. 구체적으로 말하면 Memoization이 어떻게 구현됐기에 이런 문제가 발생하는 건가요? 이전 값을 그대로 가지고 있으려면 단순히 참조 주소를 복사하는 식으로는 안 되고 Deep Copy가 일어나야 하지 않나요? 그리고 Deep Copy를 통해 Memo를 구현했다기에는 석연치 않은 부분들도 있습니다. 우선 매번 Deep Copy를 수행하는 식으로 Memo를 구현했다면 성능 문제가 발생하지 않을까요? 게다가 depth에서는 Shallow Compare 가 일어나니까 Deep Copy를 통해 구현하지는 않았을 것 같습니다. 이전 상태를 기억해 둔다는 방식은 이전 상태에 state 변수들을 내부에 따로 복사해서 저장해 둔다는 개념으로 이해되는데, 제가 예상하는 대로 Deep Copy를 통해 이전 값을 저장해 두는 건지 아니면 제가 놓친 부분이 있는지 궁금합니다.
-
미해결몇 줄로 끝내는 인터랙티브 웹 개발 노하우 [초급편]
블로그 상단 페럴렉스 효과 구현 질문 있습니다!
여기서 coverWrap.style.backgroundPosition을 변경해주는데 기존 설정이 center center로 되어있다가 스크롤이 내려갈 때 0부터 시작하기 때문에 가장 상단의 페이지에서 시작하면 그림이 위로 뚝 떨어지는데 어떻게 해결해야 할까요ㅠㅠ
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
코드에서 궁금한게 있습니다.
<>{content}</> 로 쓰면 에러가 안나고{content} 로쓰면 에러가 나는 이유가 뭘까요 ??? 작성자 : {id} | 감정 : {emotion}<div className="content"> {isEdit ? ( <textarea value={localContent} onChange={(e) => setLocalContent(e.target.value)} /> ) : ( <>{content}</> )} </div>여기서 강의 보면 id,emotion는 <></>을 안쓰는데 content를 쓰는 이유가 뭔지 모르겠습니다. 어차피 const DiaryItem = ({ onEdit, onDelete, author, content, emotion, create_date, id, }) => {전부 List로 부터 받아오는데 누군 <>{content}</>이고 누군 그냥 {id} {emotion}인 이유가 먼지 궁금해요그리고 data.filter((it)=>(it.id!==targetId)); 을 data.filter((it)=>{it.id!==targetId}); 로 바꾸면 왜 에러가 나는걸까요 ?? ?언제 괄호를 쓰고 언제 중괄호를 써야하는지 정확히 알수있을까요 ??? 아래는 전체 코드입니다.import { useRef, useState } from "react"; const DiaryItem = ({ onEdit, onDelete, author, content, emotion, create_date, id, }) => { const [isEdit, setIsEdit] = useState(false); const toggleIsEdit = () => setIsEdit(!isEdit); const [localContent, setLocalContent] = useState(content); const handleDelete = () => { console.log(id); if (window.confirm(`${id}번쨰 일기를 삭제하겠습니까?`)) { onDelete(id); } }; const handleQuiteEdit = () => { setIsEdit(false); setLocalContent(content); }; const handleEdit = () => { onEdit(id, localContent); }; return ( <div className="DiaryItem"> <div className="info"> <span className="author_info"> 작성자 : <>{id}</> | 감정 : <>{emotion}</> </span> <br /> <span className="date">날짜: {create_date}</span> </div> <div className="content"> {isEdit ? ( <textarea value={localContent} onChange={(e) => setLocalContent(e.target.value)} /> ) : ( <>{content}</> )} </div> {isEdit ? ( <> <button onClick={handleQuiteEdit}>수정취소</button> <button onClick={handleEdit}>수정완료</button> </> ) : ( <> <button onClick={handleDelete}>삭제하기</button> <button onClick={toggleIsEdit}>수정하기</button> </> )} </div> ); }; export default DiaryItem;
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
미로 탐색 코드 리뷰 부탁드립니다!
반복문을 안 쓰고 짜 봤는데 답은 그대로 나오지만 이렇게 짜도 되는 건지 궁금합니다. 1로 바꿔줬다가 0으로 바꿔주는 시점을 이렇게 해도 괜찮을까요?? 풀이에서는 DFS 돌아올 때마다 해주시는 것 같아서 질문 드립니다! const solution = (miro) => { let ans = 0; const DFS = (N, M) => { if (N < 0 || M < 0 || N > 6 || M > 6) return; if (M === 6 && N === 6) { ans++; } else { if (miro[N][M] === 0) { miro[N][M] = 1; DFS(N - 1, M); DFS(N, M - 1); DFS(N + 1, M); DFS(N, M + 1); miro[N][M] = 0; } } }; DFS(0, 0); return ans; }; console.log( solution([ [0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 0], [0, 0, 0, 1, 0, 0, 0], [1, 1, 0, 1, 0, 1, 1], [1, 1, 0, 0, 0, 0, 1], [1, 1, 0, 1, 1, 0, 0], [1, 0, 0, 0, 0, 0, 0], ]) );
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
저도 가로 배치가 잘되다가 세로 배치가 되어 질문드립니다.
저도 강의 따라가다가 세로로 갑자기 변환되어서 답변 내용대로 해봤지만 고쳐지지를 않아서 질의 드립니다 아래 코드는 html코드입니다<html> <head> <title>그랩마켓</title> <link href="index.css" type="text/css" rel="stylesheet" /> <body> <div id="header"> <div id="header-area"> <img src="images/images/icons/logo.png"/> </div> </div> <div id="body"> <div id="banner"> <img src="images/images/banners/banner1.png"/> </div> <h1>판매되는 상품들</h1> <div id="product-list"> <div class="product-card"> <img class="product-img" src="images/images/products/basketball1.jpeg"/> <div class="product-contents"> <span class="product-name">농구공 1호</span> <span class="product-price">50000원</span> <div class="product-seller"> <img class="product-avatar" src="images/images/icons/avatar.png"/> <span>그랩</span> </div> </div> </div> </div> <div class="product-card"> <img class="product-img" src="images/images/products/keyboard1.jpg"/> <div class="product-contents"> <span class="product-name">키보드 1호</span> <span class="product-price">30000원</span> <div class="product-seller"> <img class="product-avatar" src="images/images/icons/avatar.png"/> <span>그랩</span> </div> </div> </div> <div class="product-card"></div> <div class="product-card"></div> </div> <div id="footer"></div> </body> </head> </html>아래는 css코드입니다 * { margin: 0; padding: 0; } #header{ height: 64px; display: flex; justify-content: center; border-bottom: 1px solid gray; } #body{ min-height: 100%; width: 1024px; margin: 0 auto; padding-bottom: 24px; } #footer{ height: 200px; background-color: red; } #banner{ height: 300px; background-color: yellow; } #header-area{ width: 1024px; height: 100%; display: flex; align-items: center; } #header-area > img{ width: 128px; height: 36px; } #body > h1{ margin-top: 16px; } #banner > img{ width: 100%; height: 300px; } #product-list{ display: flex; flex-wrap: wrap; margin-top: 12px; flex-direction: row; } .product-card{ width: 180px; height: 300px; margin-right: 12px; margin-bottom:12px; border: 1px solid rgb(230, 230, 230); border-radius: 12px; } .product-img{ width: 100%; height: 210px; } .product-contents{ display: flex; flex-direction: column; padding: 8px; } .product-name{ font-size: 14px; } .product-price{ font-size: 16px; font-weight: 200px; margin-top: 4px; } .product-seller{ display: flex; align-items: center; margin-top: 12px; } .product-avatar{ width: 24px; }바쁘시겠지만 답변 해주시면 감사하겠습니다!+해당 코드 진행 후 개발자 도구 이용해서 보면 flex에 의해 정해지지않은 보라색 칸이 있는데 해당 칸 처리가 힘들어 추가 질문 올립니다!
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
코드 질문있습니다.
<DiaryItem key={it.id} {...it} />스프레드 연산자는 이해가 가는데 key={it.id} 옆에 바로 붙혀서 state객체를 넣을수 있는건가요 ?? 이건 어떤 문법일까요 <DiaryItem key={it.id} {...it} /><DiaryItem key={it.id} diary={it} />...을 써서 넣는거랑 안쓰고 앞에 diary = {it}으로 명시하고 넣는거랑 어떤차이가 있을까요 ? 전 이렇게 바꿨는데 ..이해가 안되서import DiaryItem from "./DiaryItem"; const DiaryList = ({diaryList})=> { console.log(diaryList); return ( <div className="DiaryList"> <h2>일기리스트</h2> <h4>{diaryList.length}개의 일기가 있습니다</h4> <div> {diaryList.map((it) => ( <DiaryItem key={it.id} diary={it} /> ))} </div> </div> ); }; DiaryList.defaultProps = { diaryList : [], } export default DiaryList;
-
해결됨문법 공부 다음엔, 자바스크립트 프로젝트 101
해결되지않는 부분이 있어서 질문드려요
삭제버튼도 아이콘폰트로 바꾸고 이것저것 추가해서 해봤습니다.근데 모든 작동이 다 잘되는데, 만약 5개의 목록이 있고 처음에 각 항목의 삭제버튼을 클릭할시에는 다 잘 되는데요,근데 1,2개 삭제해보고 나서 새로고침을 누른 후에는 각 항목의 삭제버튼을 클릭하면 화면상에는 제대로 되는데 로컬스토리지는 무조건 다 삭제가 됩니다. delItem 부분에서는 잘못이 있는걸까요?const form =document.querySelector('form'); const input =document.querySelector('input'); const ul = document.querySelector('ul'); const todoCount = document.querySelector('.todo-count'); const clearAll = document.querySelector('.clear-all'); let todos = []; const save = () => { localStorage.setItem('todos', JSON.stringify(todos)); }; const updateTodoCount = () => { todoCount.textContent = todos.length; }; const delItem = (event) => { const target = event.target.parentElement; todos = todos.filter((todo) => todo.id !== parseInt(target.id)); save(); target.remove(); updateTodoCount(); }; const addItem = (todo) => { if(todo.text !== ''){ const li = document.createElement('li'); const span =document.createElement('span'); const icon = document.createElement('i'); icon.classList.add('fa-solid','fa-trash-can'); span.innerText = todo.text; icon.addEventListener('click',delItem); ul.appendChild(li); li.appendChild(span); li.appendChild(icon); li.id = todo.id; updateTodoCount(); } }; const handler = (event) => { event.preventDefault(); const todo = { id: Date.now(), text: input.value, }; if((input.value) !== '') { todos.push(todo); addItem(todo) save(); input.value = ''; } }; const init = () => { const userTodos = JSON.parse(localStorage.getItem('todos')); if(userTodos){ userTodos.forEach((todo) => { addItem(todo); }); //todos = userTodos; todoCount.textContent = 0; } }; clearAll.addEventListener('click', () => { ul.innerHTML = ''; todoCount.textContent = 0; todos = []; localStorage.removeItem('todos'); }); init(); form.addEventListener('submit',handler);
-
해결됨[코드캠프] 시작은 프리캠프
final 과제 타이머 부분 질문드립니다!
안녕하세요! 제가 파이널 과제를 진행하다가 인증번호 전송부터 인증 완료 단계의 자바스크립트 코드를 작성하면서 어려움을 겪고 있어서 문의드립니다. 해당 코드를 적용하여 html 파일을 실행시킨 결과 인증완료 버튼을 눌러도 인증번호만 초기화가 되고 타이머는 그대로 1초씩 감소하는 상태가 유지되었습니다. clearInterval(timer)를 하면 반복함수가 멈춰 document.getElementById("timer").innerText = "3:00";의 결과로 3:00이 되는 것으로 생각했는데 왜 초기화가 되지 않는지 도통 모르겠습니다. <div class="certification"> <div id="certificationNumber">000000</div> <button id="sendButton" disabled = "true" onclick="submit()">인증번호 전송</button> </div> <div class="certification"> <div id="timer">3:00</div> <button id="completeButton" disabled = "true" onclick="completeMessage()">인증 확인</button>let timer let isStarted = false const submit = () => { const token = String(Math.floor( Math.random() * 1000000)).padStart(6, "0"); document.getElementById("certificationNumber").innerText = token; document.getElementById("sendButton").setAttribute("disabled", "true") document.getElementById("completeButton").removeAttribute("disabled") if(isStarted === false) { // 타이머가 작동중이 아닐때 isStarted = true let time = 180 timer = setInterval(function(){ if(time >=0) { let min = Math.floor(time/60) let sec = String(time%60).padStart(2, "0") document.getElementById("timer").innerText = min + ":" + sec; time = time -1 } else { document.getElementById('completeButton').disabled = true; isStarted = false document.getElementById("certificationNumber").innerText = "000000"; document.getElementById("timer").innerText = "3:00"; clearInterval(timer) } },1000) } else { } } const completeMessage = (timer) => { clearInterval(timer) alert("인증이 완료되었습니다.") document.getElementById('completeButton').disabled = true; isStarted = false document.getElementById("completeButton").innerText = "인증 완료" document.getElementById("signup").disabled = false; }