묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결React 완벽 마스터: 기초 개념부터 린캔버스 프로젝트까지
eslint를 추가하였지만 동작을 안합니다.
'react/self-closing-comp': 'warn' 해당 문구를 추가했음에도 동작하지 않습니다. 재부팅도 해보았습니다만 동작하지 않습니다.제가 잘못한 것이 있을까요?
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
s3와 ecr에 쌓이는 데이터에 대해서
s3에 압축된 실행파일 업로드ecr에 빌드된 이미지 업로드빌드할때마다 이 두과정을 거쳐서 각각 S3와 ECR에 파일과 이미지가 쌓여서, 만약 배포를 10번 하면 10개의 실행파일과 이미지가 불필요하게 저장됩니다.혹시 $GITHUB_SHA 같은 생성되는 변수를 사용하지 않고고정된 이름을 사용해서 덮어 씌워서 사용해도 문제는 없나요?
-
미해결만들면서 배우는 리액트 : 기초
vite로 리액트 빌드한 후 깃허브에 배포하는 방법
강사님 강의 보면서 저는 vite 를 이용해서 했는데요,그런 경우는 깃허브에 배포를 어떻게 해야 하나요?npm run buildnpm install gh-pages 그 다음에 package.json 파일도 아래처럼 수정을 했습니다."homepage": "깃허브주소 넣음", "deploy": "gh-pages -d dist" 그다음에 다시 npm run buildnpm run deploy 하면 깃허브에 gh-pages 가 생겨야 하는데 생기지를 않아서요....어디 부분을 잘못 한걸까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
404에러가 계속 뜹니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]404에러가 뜹니다. 폴더 경로라랑 빌드 그래들 등등 보여드리겠습니다.
-
미해결Axure RP 9,10 - 서비스 기획자를 위한 최적의 프로토타이핑 툴
date 위젯 날짜 표현형식 변경
date 위젯에 함수 [[Now.getFullYear()]]-[[Now.getMonth()]]를 넣어서 위와 같이 현재 연도와 월을 표현하도록 구현했는데, 표시형식이 '2024-12' 이런 형식으로 나오게 하고 싶습니다. 어떻게 하면 될까요?
-
해결됨빠른 취업을 위한 프론트엔드 로드맵
포트폴리오에 대해 질문있습니다.
안녕하세요 강의 영상 잘 보고 있습니다 다름이 아니라 포트폴리오에 대해 기능들도 확인을 했는데 어떤 포트폴리오를 만들어야 할지 생각이 잘 나지 않더라구요. 투두리스트는 뭔가 기본중에 기본인것 같아 포트폴리오로 사용하기엔 부적절한 것같고 다른 걸 생각해보고 있지만 어떠한 걸 만들어야 할지 생각이 나지 않습니다.
-
미해결만들면서 배우는 리액트 : 기초
빌드할때 dist 폴더가 만들어지는데요,
마지막에 빌드를 하려고 하는데요,저는 vite를 이용해서 했구요,깃허브에 페이지 올리고 pages까지 오픈을 했습니다. 그리고 나서 npm run build 를 하면 강사님하고 다르게 build 폴더가 아니고 dist폴더가 만들어지는데요,혹시 그럴경우엔 깃허브에 배포할때 명령어가 혹시 강의내용과 다르게 해야 하는 부분이 있는지요? npm install gh-pages package.json 파일에서 소스 추가할때"deploy": "gh-pages -d build" 위의 파일을 수정한 후 다시 npm run buildnpm run deploy여기까지 해도 깃허브 저장소에서 gitpages가 생기기 않습니다...
-
해결됨개발자라면 알아야 할 리눅스(linux-ubuntu) 기본
실행환경 질문
제가 시놀로지 나스를 사서.. 더 활용해보고자 강의를 들으려고 합니다. 비전공자라서 필요한 지식에 구멍난 부분이 많아서요. 나스에서 container manager(docker)로 ubuntu이미지를 받았는데, 이걸로 돌려봐도 될까요?? 혹시 추가적으로 고려해야 할 사항이 있을까요??
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
12.11) Home 페이지 구현하기 2. 기능
해당 챕터에서 강의대로 진행했고 몇번을 다시 확인해봐도차이점을 도통 찾지 못해서 문의드립니다.Home.jsx에서 데이터를 필터걸어도 걸리지않는 상황DiaryList.jsx에서 DiaryItem으로 데이터를 보내도 받는쪽에서 받지 못하는 상황(개발자도구에서는 워닝으로 hook.js:608 Warning: Each child in a list should have a unique "key" prop) 발생 이하 소스첨부 드립니다. App.jsximport './App.css' import { useReducer, useRef, createContext } from 'react'; import { Routes, Route } from 'react-router-dom'; import Home from './pages/Home'; import Diary from './pages/Diary'; import New from './pages/new'; import Edit from './pages/Edit'; import Notfound from './pages/Notfound'; const mockData =[ { id : 1, createdDate : new Date("2024-12-6").getTime(), emotionId : 1, content : "1번 일기내용", }, { id : 2, createdDate : new Date("2024-12-5").getTime(), emotionId : 2, content : "2번 일기내용", }, { id : 3, createdDate : new Date("2024-11-15").getTime(), emotionId : 3, content : "3번 일기내용", }, ] function reducer(state, action){ switch(action.type){ case 'CREATE' : return [action.data, ...state] case 'UPDATE' : return state.map((item)=> String(item.id) === String(action.data.id) ? action.data : item) case 'DELETE' : return state.filter((item) => String(item.id) !== String(action.id)); default : return state; } } export const DiaryStateContext = createContext(); export const DiaryDispatchContext = createContext(); function App() { const [data, dispatch] = useReducer(reducer, [mockData]); const idRef = useRef(3); const onCreate =(createdDate, emotionId, content) => { dispatch({ type:"CREATE", data : { id : idRef.current++, createdDate, emotionId, content, }, }) } const onUpdate = (id,createdDate , emotionId, content) => { dispatch( { type : "UPDATE", data : { id, createdDate, emotionId, content, }, } ) } const onDelete = (id) => { dispatch( { type : "DELTE", data : { id, } } ) } return ( <> <DiaryStateContext.Provider value={data}> <DiaryDispatchContext.Provider value={{ onCreate, onUpdate, onDelete, }} > <Routes> <Route path="/" element={<Home />}></Route> <Route path="/new" element={<New />}></Route> <Route path="/diary/:id" element={<Diary />}></Route> <Route path="/edit/:id" element={<Edit />}></Route> <Route path="*" element={<Notfound />}></Route> </Routes> </DiaryDispatchContext.Provider> </DiaryStateContext.Provider> </> ); }; export default App Home.jsximport { useState, useContext } from "react"; import { DiaryStateContext } from "../App"; import Button from "../components/button"; import Header from "../components/Header" import DiaryList from "../components/DiaryList"; const getMonthlyData = (pivotDate, data) =>{ const beginTime = new Date( pivotDate.getFullYear(), pivotDate.getMonth(), 1, 0, 0, 0 ).getTime(); const endTime = new Date( pivotDate.getFullYear(), pivotDate.getMonth() + 1, 0, 23, 59, 59 ).getTime(); console.log('필터시작일자 : ' + beginTime + '필터종료일자' + endTime) return data.filter((item)=> beginTime <= item.createdDate <= endTime); } const Home = () => { const data = useContext(DiaryStateContext); const [pivotDate,setPivotDate] = useState(new Date()); const monthlyData = getMonthlyData(pivotDate, data); console.log(monthlyData); const onIncreaseMonth = () => { setPivotDate(new Date(pivotDate.getFullYear(), pivotDate.getMonth() + 1) ); }; const onDecreaseMonth = () => { setPivotDate(new Date(pivotDate.getFullYear(), pivotDate.getMonth() - 1) ); }; return <div> <Header title = {`${pivotDate.getFullYear()} 년 ${ pivotDate.getMonth()+ 1 }월`} leftChild={<Button onClick={onDecreaseMonth} text="<" />} rightChild={<Button onClick={onIncreaseMonth} text=">" />} /> <DiaryList data={monthlyData} /> </div>; } export default Home;DiaryList.jsximport './DiaryList.css' import Button from "./button"; import DiaryItem from './DiaryItem'; import { useNavigate } from 'react-router-dom'; import { useState } from 'react'; const DiaryList = ({data}) => { const nav = useNavigate(); const [sortType, setSortType] = useState("latest"); const onChangeSortType = (e) => { setSortType(e.target.value); }; const getSortedDate = () => { return data.toSorted((a, b) => { if(sortType ==='oldest'){ return Number(a.createdDate) - Number(b.createdDate); } else { return Number(b.createdDate) - Number(a.createdDate); } }); } const sortedData = getSortedDate(); return ( <div className="DiaryList"> <div className="menu_bar"> <select> <option value={"latest"}>최신순</option> <option value={"oldest"}>오래된순</option> </select> <Button onClick = {() => nav("/new")} text={"새 일기 쓰기"} type={"POSITIVE"} /> </div> <div className="list_wrapper"> {sortedData.map((item)=><DiaryItem key={item.id} {...item}/>)} </div> </div> ); }; export default DiaryList;DiaryItem.jsximport getEmotionImage from "../util/get-emotion-image" import Button from "./button"; import "./DiaryItem.css"; import { useNavigate } from "react-router-dom"; const DiaryItem = ({id, emotionId, createdDate, content}) => { const nav = useNavigate(); return ( <div className="DiaryItem"> <div onClick={()=>nav(`/diary/${id}`)} className={`img_section img_section_${emotionId}`} > <img src={getEmotionImage(1)} /> </div> <div onClick={()=>nav(`/diary/${id}`)} className="info_section"> <div className="created_date"> {new Date(createdDate).toLocaleDateString()} </div> <div className="content">{content}</div> </div> <div className="button_section"> <Button onClick={()=>nav(`/edit/${id}`)} text={"수정하기"} /> </div> </div> ) }; export default DiaryItem;
-
미해결TailwindCSS 완벽 마스터: 포트폴리오부터 어드민까지!
빈 화면에서 tail 만 쳤을때 팝업도움말 나오게 하는 법 알려주세요.
컬러 및 배경, 보더 처리00:43여기보면 tail 만 쳐도 emmit 이라고 해야 되나요. 팝업도움말이 뜨는데 저는 저런게 전혀 뜨지 않는데요.어떻게 해야 저런 도움말 팝업이 뜰 수 있나요?tailwind css intellisense 플러그인은 설치해놓은 상태입니다.
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
Debezium cdc source for MSSQL-Server [등록오류]
MSSQL-Server 용도로 Debezium cdc source를 등록해서 사용하고 싶습니다만, 아래와 같이 config 등록 시{ "name": "mssql_cdc_oc_source_01", "config": { "connector.class": "io.debezium.connector.sqlserver.SqlServerConnector", "database.encrypt": "false", "database.hostname": "***.***.***.***", "database.port": "1433", "database.user": "userid", "database.password": "password", "database.names": "dbname", "topic.prefix": "MSSQL", "schema.history.internal.kafka.bootstrap.servers": "192.168.56.101:9096", "schema.history.internal.kafka.topic": "sh-history", "schema.history.internal.store.only.captured.tables.ddl": "true", "schema.history.internal.store.only.captured.databases.ddl": "true" } } 아래와 같은 에러가 납니다.,ㅠㅠ HTTP/1.1 400 Bad RequestContent-Length: 280Content-Type: application/jsonDate: Mon, 16 Dec 2024 02:16:43 GMTServer: Jetty(9.4.44.v20210927){ "error_code": 400, "message": "Connector configuration is invalid and contains the following 3 error(s):\nA value is required\nA value is required\nA value is required\nYou can also find the above list of errors at the endpoint /connector-plugins/{connectorType}/config/validate"} 문제 해결 방법이나, SQL-Server용 예제 소스를 제공해 주실 수 있는지요???회신 메일주소는 : sentrino@naver.com입니다. 감사합니다!
-
미해결[2025 리뉴얼]플러터플로우로 코딩 없이 한달 안에 앱 만들기
트윗 나열해보기 강좌중 users 콜렉션 세팅 문제
트윗 나열해보기 강좌중 2:36초 post콜렉션을 템플릿으로 생성후,자동으로 생성된 users콜렉션을 선택해서 다시 템플릿을 선택하는 부분이 있습니다. 실제로 해보면 users가 자동으로 생기긴 하는데 선택해도 users 템플릿을 선택하는 곳이나 컬럼을 수정하는 곳이 나오지 않습니다. 정확히는 users를 선택해도 아무런 변화가 없습니다. 엣지와 크롬에서 동일 합니다.이거 어떻게 해결해야 할까요 ㅠㅠ
-
해결됨코틀린 고급편
Generic Func 질문이 있습니다
강사님 Generic Func에서// origin fun <T> List<T>.hasIntersection(other: List<T>): Boolean { return (this.toSet() intersect other.toSet()).isNotEmpty() } // error fun <T> List<T: Any>.hasIntersection(other: List<T>): Boolean { return (this.toSet() intersect other.toSet()).isNotEmpty() } // error fun <T> List<T>.hasIntersection(other: List<T : Any>): Boolean { return (this.toSet() intersect other.toSet()).isNotEmpty() } // error fun <T> List<T: Any>.hasIntersection(other: List<T : Any>): Boolean { return (this.toSet() intersect other.toSet()).isNotEmpty() } // ok fun <T : Any> List<T>.hasIntersection(other: List<T>): Boolean { return (this.toSet() intersect other.toSet()).isNotEmpty() }이렇게 되더라구요! 맨 앞에 <T>가 반환타입(List<T>)과 인자타입(other: List<T>) 까지 함께 선언해주는 declaration-site variance의 형태를 띄고 있어서 그런건가요?생각해보면 들어갈 수 있는 타입은 nullable인데 반환타입은 not null이거나 그 반대가 되면 헷갈릴 것 같아요. 그것을 막아둔것같기도 하구요!이렇게 제네릭 메서드를 만드는 경우에도 generic 제약을 줄 수 있는거죠!?좀 더 실 사용에 가깝게 타입가드까지 하려면fun <T : Number> List<T>.hasIntersection2(other: List<T>): Boolean { return (this.toSet() intersect other.toSet()).isNotEmpty() }이런 느낌으로 쓰일것같은데.. 맞나요? 코틀린 고급편 잘 듣고있습니다 ~_~
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
fetch() 사용 관련 질문입니다.
안녕하세요.강의를 전부 수강한 수강생입니다. 강사님의 강의를 보다가 궁금한 것이 있어서 질문 남깁니다. 강의에서는 API 요청 방식을 fetch를 사용하여 전부 Next 서버에서 요청을 보내는 방식이던데 클라이언트 컴포넌트에서 fetch를 사용하여 브라우저를 통해 요청하는 방법과 강의와 같이 사용하는 방법, API Route(Handle) 방식을 사용하는 방법의 차이를 알 수 있을까요?? 또한 Next 서버의 부하는 괜찮은지 궁금합니다.
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
ui 생성 질문 있습니다.
ui 생성할 때 메모리 관련 질문 있습니다. 강의를 쭉 듣는 중입니다. UI 생성시에는프리팹 제작, Instantiate(Resources.Load<>("UI/xxxx"))로 ui 생성하고팝업 안에 아이템이 있는 경우에는 전부 생성 사용 종료 후 destroy 하는 방식 으로 이해했습니다. gameObject 생성 때 Object Pool 방식 구현 강의에서 메모리 관련해서 얘기 주셨는데요, 이런 ui 생성,destroy사용방식이 메모리 부하는 따로 없을까요?방치형 게임에서 유아이도 많이 눌러서 많이 일어날거라 생각이 들어서요. SetActive로 관리하면 어떤지.. 다른 방법이 없나?? 궁금하여 문의드립니다.
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
branch 분기
지금은 branch 분기 하지 않고 main 브런치 하나만 하지만dev cicdprod cicd 돌리게 될때 분기처리는 어떻게 하시나요 ?간단히하면 그냥 github actions 파일을 두개 만들면 될것같은데강사님은 어떻게하시나요 ?
-
해결됨독하게 시작하는 C 프로그래밍
[필수연습문제] 합격, 불합격 여부 판단하기 질문있습니다.
정답에서 3항 연산결과를 바로 printf 로 뽑아내는것을 보여주셨는데, 그렇다면 연산결과("합격,불합격" 문자열)은 어디에 저장되어서 출력하는건가요?? 제 생각에는 버퍼나 특정저장공간을 만들어 넣은다음에 뽑을것 같은대.. 디버그 모드에서도 보이지가 않아서 궁금합니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Create의 GetOrAddComponent
Poolable Create(){ GameObject go = Object.Instantiate<GameObject>(Original); go.name = Original.name; return go.GetOrAddComponent<Poolable>();}유틸에서 만들었던 GetOrAddComponent가 아닌 비쥬얼 스크립팅의 GetOrAddComponent로 연결이 되더라구요. UI 실습때는 Util.GetOrAddComponent<T>(go) 이런식으로 사용했었는데 괜찮을지 모르겠네요
-
미해결iOS 개발 찍먹하기 - SwiftUI
동영상 플레이 에러
안녕하세요? '개발할 때 도움이 되는 맥앱 추천' 강의부터 'Sign in to confirm you're not a bot' 메세지와 함께 플레이가 안됩니다. 확인 부탁드립니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
빈 게임 오브젝트에서 바인드가 실패하는 케이스
Text나 Button같은 실체가 있는 오브젝트들은 바인드가 성공이 되는데 빈 게임 오브젝트를 바인드할 경우 바인드 실패가 계속 뜹니다.