묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
안녕하세요 감정일기 글 수정간 slice is not a function 으로 나와서 진도가 막혀있네요 ㅠ slice(0,25)부분에 에러가뜹니다
DiaryItem.js부 import MyButton from "./MyButton"; import {useNavigate} from "react-router-dom"; const DiaryItem = ({ id, emotion, content, date}) => { const env = process.env; env.PUBLIC_URL = env.PUBLIC_URL || ""; const navigate = useNavigate(); const strDate = new Date(parseInt(date)).toLocaleDateString(); const goDetail = ()=>{ navigate(`/diary/${id}`); } const goEdit = ()=>{ navigate(`/edit/${id}`); } return( <div className="DiaryItem"> <div onClick={goDetail} className={[ "emotion_img_wrapper", `emotion_img_wrapper_${emotion}`, ].join(" ")}> <img src={process.env.PUBLIC_URL + `assets/emotion${emotion}.png`}></img> </div> <div onClick={goDetail} className="info_wrapper"> <div className="diary_date">{strDate}</div> <div className="diary_content_preview">{content.slice(0,25)}</div> </div> <div className="btn_wrapper"> <MyButton onClick={goEdit} text={"수정하기"} /> </div> </div> ); }; export default DiaryItem; --------------------------------------------------------------------------------------------------- DiaryEditor.js import {useNavigate} from "react-router-dom"; import {useState,useRef,useContext, useEffect} from "react"; import {DiaryDispatchContext} from "./../App.js"; import MyButton from './MyButton'; import MyHeader from './MyHeader'; import EmotionItem from "./EmotionItem"; export const getStringDate = (date) => { let year = date.getFullYear(); let month = date.getMonth() + 1; let day = date.getDate(); if (month < 10) { month = `0${month}`; } if (day < 10) { day = `0${day}`; } return `${year}-${month}-${day}`; }; const emotionList = [ { emotion_id : 1, emotion_img : process.env.PUBLIC_URL + `/assets/emotion1.png`, emotion_descript:'완전 좋음', }, { emotion_id : 2, emotion_img : process.env.PUBLIC_URL + `/assets/emotion2.png`, emotion_descript:'좋음', }, { emotion_id : 3, emotion_img : process.env.PUBLIC_URL + `/assets/emotion3.png`, emotion_descript:'보통', }, { emotion_id : 4, emotion_img : process.env.PUBLIC_URL + `/assets/emotion4.png`, emotion_descript:'나쁨', }, { emotion_id : 5, emotion_img : process.env.PUBLIC_URL + `/assets/emotion5.png`, emotion_descript:'매우 나쁨', }, ] const DiaryEditor = ({isEdit,originData}) => { const navigate = useNavigate(new Date(getStringDate)); const contentRef = useRef(); const [content,setContent]=useState(""); const [emotion,setEmotion] =useState(3); const [date, setDate] = useState(getStringDate(new Date())); const {onCreate,onEdit} = useContext(DiaryDispatchContext); const handleClickEmotion = (emotion)=>{ setEmotion(emotion); }; const handleSubmit = () => { if(content.length <1){ contentRef.current.focus(); return; } if(window.confirm( isEdit? "일기를 수정하시겠습니까?" :"새로운 일기를 작성하시겠습니까?")){ if(!isEdit) { onCreate(date,content,emotion); } else { console.log(originData); onEdit(originData.id, date, content, emotion); } } navigate("/",{ replace : true }); }; useEffect(() => { if(isEdit){ setDate(getStringDate(new Date(parseInt(originData.date)))); setEmotion(originData.emotion); setContent(originData.content); } }, [isEdit, originData]); return( <div className="DiaryEditor"> <MyHeader headText = {isEdit ? " 일기수정하기 " : " 새 일기쓰기 "} leftChild = { <MyButton text={"< 뒤로가기"} onClick={()=>navigate(-1)}/> } /> <div> <section> <h4>오늘은 언제인가요?</h4> <div className="input_box"></div> <input className="input_date" value={date} onChange ={(e)=>setDate(e.target.value)} type="date" /> </section> <section> <h4>오늘의 감정</h4> <div className="input_box emotion_list_wrapper"> {emotionList.map((it)=> ( <EmotionItem key={it.emotion_id} {...it} onClick={handleClickEmotion} isSelected={it.emotion_id === emotion} /> ))} </div> </section> <section> <h4>오늘의 일기</h4> <textarea placeholder="오늘 하루 어땠어요?" ref={contentRef} value={content} onChange={(e)=>setContent(e.target.value)}/> </section> <section> <div className="control_box"> <MyButton text={"취소하기"} onClick={() => navigate(-1)}/> <MyButton text={"작성하기"} type={'positive'} onClick={handleSubmit}/> </div> </section> </div> </div> ); } export default DiaryEditor;
-
미해결데브옵스(DevOps)를 위한 쿠버네티스 마스터
argocd 로 배포한 것 삭제 질문 있어요
argoCd 를 이용해 CD를 구성했습니다. sync 하여 예제 app 을 배포한 후 해당 app의 CD 를 제거 했습니다. 제가 생각했던 결과물은 "CD를 제거 하면 worker node에서 예제 app이 제거 되는 것" 이었습니다. 하지만 deploy, svc, pod 전부 그대로 떠 있더라구요. 원인이 무엇일까요? 제가 잘못 한 부분이 있는 것일까요 아니면 argoCd에선 CD를 삭제해도 CD만 제거될 뿐 worker node에 띄워진 app은 건드리지 않는 것인가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
모든 종류의 상품을 한번에 DTO로 출력할 수 있을까요?
안녕하세요, 다름이 아니라 강의를 마치고 단일 테이블 전략으로 구성된 상품목록을 한번에 DTO로 만들어서 출력해보고 싶은데 이것이 가능한 방법일까요? 테스트의 구성은 아래와 같습니다. @Test public void dtoMappingTest() throws Exception{ //given Book book = createBook("JAVA PERSISTENCE API", 10000, 10, "AUTHOR", "ISBN"); Movie movie = createMovie("MOVIE", 10000, 3, "ACTOR", "DIRECTOR"); Album album = createAlbum("ALBUM", 5000, 20, "ARTIST", "INFO"); //when List<Item> list = itemRepository.findAll(); //then // 책, 영화, 앨범 각각의 정보를 포함한 DTO를 한 리스트에? } 이렇게 전체 아이템 리스트를 받아 온 다음 아래와 같은 DTO 클래스에 해당 상품 종류에 맞는 정보를 매핑해서 하나의 리스트 형태로 리턴하는것이 가능할까요? @Getter @Setter @Builder @JsonInclude(Include.NON_EMPTY) public class ItemDto { private Long id; private String name; private int price; private int stockQuantity; private List<Category> categories; private String artist; private String etc; private String director; private String actor; private String author; private String isbn; } 시간이 늦어서 아직 구현은 안 해보았지만 제가 생각한 해결책은 Item 클래스에 DTO를 생성해주는 추상 메소드를 생성하고 각각의 상품 종류별 클래스에 그 추상 메소드를 직접 구현하는 방법입니다. 이 방법이 현실성이 있는지 아니면 다른 방법이 있는 것인지 아예 불가능한 이야기인지 정말 궁금합니다. 감사합니다.
-
미해결실무에서 바로 쓰는 영어 이메일
강의 자료 요청드립니다.
안녕하세요, 강의자료 hyunjin.yoo@halla.com 전달 부탁 드리겠습니다!
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
크롬이 자동화된 테스트 소프트웨어에 의해 제어되고있습니다
크롬이 자동화된 테스트 소프트웨어 에의해 제어되고 있습니다 라고 뜨면서 창이 꺼집니다 잘되고 로그인까지 되고다른싸이트도 문제없이되는데 바로꺼지네요 구글에 찾아서 코드 복붙해봐도 잘안되네요 방법이 없을까요
-
미해결[따라하면 취업되는 게임기획]MORPG 게임밸런스 기획
이 다음 내용(성장, 경제)도 강의할 예정이실까요?
강의 너무 좋아서 추천도많이했습니다!! 이 다음 내용. 특히 경제 부분도 강의할 계획이 있으실까요? 그리고 현재 방치형 게임을 개발중입니다. 강의해주신 내용을 방치형 게임에 접목하는데 있어서 주의해야할 점이 있을까요??
-
해결됨스프링 핵심 원리 - 기본편
ComponentScan 질문 있습니다.
강의에서 SpringBootApplication이나 ComponentScan 어노테이션이 붙어 있으면 자동으로 스프링 빈을 스프링 컨테이너에 등록해주고 의존관계 설정을 해준다고 하셨는데 그러면 혹시 RateDiscountPolicy와 FixDiscountPolicy 두 클래스에 모두 @Componet 어노테이션을 붙이면 OrderServiceImpl의 discountPolicy는 어떤 클래스로 주입이 되는건가요?
-
미해결쉽게 시작하는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}
pods를 통해서 서비스 접속이 안되는 이유가 궁금합니다.
[질문 전 답변]1. 강의에서 다룬 내용과 관련된 질문인가요? [예 | 아니요]2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? [예 | 아니요]3. 질문 잘하기 법을 읽어보셨나요? [예 | 아니요](https://www.inflearn.com/blogs/1719)4. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.[질문 하기] 안녕하세요. 강의에서는 kubectl get pods -o wide에서 나온 172.16.221.129를 브라우저를 통해서 웹서비스에 접속이 되는데, 제가 실제 접속을 시도하면은 접속이 안됩니다. kubectl get nodes -o wide명령어를 통해서 나온 ip로는 접속이 되는데, 왜 pods로 생긴 ip로는 웹서비스에 접속이 안되는걸가요 강의에서는 아래 명령어만 열어주셔서 NodePort만 열는어주신것 같은데, pod도 포트를열어주어야 되는건가요? kubectl expose pods nginx --type=NodePort --port=80
-
미해결홍정모의 따라하며 배우는 C++
21분 30초 쯤에 연산자끼리의 충돌 문제 질문드립니다.
먼저, 항상 유익한 강의 감사드립니다. cout << (x % 2 == 0) ? "even" : "odd" <<endl; '어느 연산자끼리 충돌이 일어나서 괄호가 없으면 문제가 생기는 걸까?' 를 생각해보라고 하셨는데, 위 문장에서 연산자는 %, ==, ? :, << 4개이며, precedence 순으로 나타내면, %, <<, ==, ? : 의 순으로 됩니다. x = 5 이므로 x % 2를 먼저 계산하여 1이 나오지만, 그 이후 bitwise operator << 전에 "odd" 가 있으므로 에러가 일어나는 것 같습니다. 하지만, 다시 코드를 cout << (x % 2 == 0) ? "even" : "odd"; 로 바꿔 컴파일 하면 0이 출력됩니다. 제 생각엔 x % 2 이후 equal to 연산자인 == 이후에 0이 있으므로 코드가 cout << 0 ? 1 : 0; 이 됩니다. 그리고 cout << 뒤의 0이 출력되는 것 같습니다. 제 생각이 잘못되었다면 어떤 부분인지 지적 부탁드립니다.
-
미해결Slack 클론 코딩[실시간 채팅 with React]
새로고침시 swr 에러납니다 ㅠ
새로고침, 렌더링 하면 로그인데이터가 없다고 에러가 나는거같습니다 저 에러창에서 파라미터 다 지우고 http://localhost:3090 으로 이동하면 에러 안나고 잘 나옵니다(로그인데이터도 가지고있습니다) 아마 제 추측으로 revalidate(); 대신 mutate() 를 썻는데 그게 문제가 되는게 아닐까 싶습니다 ㅜ
-
미해결모던 안드로이드 - Jetpack Compose 입문
왜 update 내부에서 코루틴으로 launch 하면 버그가 발생하나요?
03나만의웹브라우저 왜 update 내부에서 코루틴으로 launch 하면 버그가 발생하나요? 초기에 웹뷰에서 빈 공백으로 검색한 후 뒤로가기 두번 하는 경우 뒤로 더이상 갈 수 없다는 스낵바가 계속 뜨는 버그인데 컴포지션이 일어날 때 update 를 하면.. 새로운 url 이 오면 실행되고.. flow 의 collectaLatest 를 통해서 뒤로가기가 canGoBack 이 아닐 때 collectLatest 로 한번만 받아오면 똑같이 한번 떠야하는게 아닌가요? 왜 무한 반복으로 뜨는지 버그에 대한 자세한 설명이 부족한것 같습니다 ㅠㅠ scope.launch { viewModel.undoSharedFlow.collectLatest { if (webView.canGoBack()) { webView.goBack() } else { scaffoldState.snackbarHostState.showSnackbar("더 이상 뒤로 갈 수 없음") } }}scope.launch { viewModel.redoSharedFlow.collectLatest { if (webView.canGoForward()) { webView.goForward() } else { scaffoldState.snackbarHostState.showSnackbar("더 이상 앞으로 갈 수 없음") } } }
-
해결됨코딩은 실전이다! - Git알못을 위한 깃린이코스(Git, Github 실습위주)
slack 초대 부탁드립니다.
dlwlsla0722@gmail.com 슬랙 초대 부탁드립니다.
-
미해결React 기반 Gatsby로 기술 블로그 개발하기
여기까지 했는데 runtime 에러가 발생합니다
lint로 잡혀서 몇가지 수정한 부분을 제외한 나머지는 강의내용과 동일합니다. 수정된 부분 1. index.tsx import CategoryList, { CategoryListProps } from 'components/Main/CategoryList' CategoryListProps 추가 edges.reduce( ( list: CategoryListProps['categoryList'], { node: { frontmatter: { categories }, }, }: PostListItemType, PostType -> PostListItemType 로 수정 여기까지 한 부분 것헙에 푸시해두었습니다. https://github.com/myBabyGrand/gatsbyBlog commit ID : 88cf7df165b166d0b08b3504a73e1c85e5e21095
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
채점 실행 파일 오류 문의드립니다.
안녕하세요. 첫 번째 섹션의 첫 번째 문제인 "K번째 약수"를 구하는 문제를 풀고 채점 파일을 실행시키니 아래와 같은 에러가 뜨네요. 제가 작성한 코드는 아래와 같으며, 파일명을 AA.py로도 바꿔봤지만 안 됩니다. # 테스트 케이스용 text 파일을 불러오기 위한 코드 # import sys # test_file_path = r'C:\Users\XXX\Desktop\Data Science\Study\Algorithm\섹션 2\1. k번째 약수' # sys.stdin = open(f'{test_file_path}/in1.txt', 'rt') # 테스트 케이스 데이터 가져오기 n, k = map(int, input().split()) # N의 약수 구하기 num_list = [] for i in range(1, n + 1): if n % i == 0: num_list.append(i) # N의 약수 중, K 번째로 작은 수 구하기 if len(num_list) < k: print(-1) else: answer = num_list[k - 1] print(answer)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
memberRepository 오류 관련 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 첫번째 사진처럼 memberRepository '0개의 인수가 필요하지만 1개가 발생하였습니다'라는 문구와 함께 오류가 발생합니다. 공유된 코드를 복사하였는데도 해결되지 않아 질문드립니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
코드포스
강의 중간에 블로그에 코드포스 문제를 모아놓으셨다고 하셨는데 어디 있는 지 알 수 있을까요?
-
미해결Vue.js 끝장내기 - 실무에 필요한 모든 것
router url
첫번째 질문 ) index.js에서 { path : '/login', component : LoginPage } 이런식으로 쓰고 App.vue페이지에서 <router-link to="/login">로그인</router-link> 로 써주셨는데 path에 들어가는 내용과 router-link의 to 들어가는 내용이 일치해야 하나요? ===================================== 두번째 질문 ) 한 페이지 내에서 링크가 여러개 있는 경우가 있는데 그런 경우 router-link와 router-view를 어떤식으로 배치해야하는지 궁금합니다. ===================================== 세번째 질문 ) 이때까지 배운 내용으로만 보면 router-link가 일반 HTML의 a태그의 대용으로 쓰이는것 같습니다. 만약 이 router-link태그의 스타일을 주려면 router-link에 다른 속성을 추가해서 주나요 아니면 다른 방법이 있는건가요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
락 획득을 시도하는 순서에 대한 질문입니다.
DB락의 순서에 대해서 질문입니다. 세션1이 트랜잭션을 시작하고, 데이터를 변경하기 위해 update쿼리를 날리면 그 때 락을 획득하고, 획득했다면 실제로 쿼리가 수행되는 것인가요?? 그러니까 일단 데이터 변경 쿼리를 실행해야 락 획득을 시도하는 것인거죠?? 그래서 데이터 변경 구문을 날릴때가 아니고, 조회 시에도 락을 획득하고 싶다면 따로 select for update구문을 사용하는 것 맞나요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
insideTess가 1에서 2로 변할 때는 변화가 없고 3부터 변화가 있네요.
33:13에서 insideTess를 2로 바꿨을 때 삼각형이 늘어나지 않았지만 3으로 하니까 늘어나네요. 왜 그런 걸까요?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
list 데이터를 하나의 셀에 입력 할 수 있나요?
위 강의를 보고 응용해보고자 하는중인데 아래 코드와 같이 작업하여 A1하나의 셀에 cmt 데이터를 다 넣고 싶은데 A1, A2, A3 이렇게 입력이 됩니다. 어떻게 방법이 없을까요? rom pickle import APPEND from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager # 크롬 드라이버 자동 업데이트 from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By import requests, openpyxl, time, pyautogui # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) #chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) # 불필요한 에러 메세지 없애기 # 셀레니움 드라이버 세팅 service = Service(executable_path=ChromeDriverManager().install()) browser = webdriver.Chrome(service=service,options=chrome_options) wb = openpyxl.Workbook() ws = wb.active ws.append(['이미지','순번', '시즌', '스타일', '컬러', '스타일명', '택가', '판매가', '선호도', '상품설명', '혼용률', '제조년월','URL']) ws.column_dimensions['A'].width = 5 ws.column_dimensions['B'].width = 5 ws.column_dimensions['C'].width = 5 ws.column_dimensions['D'].width = 15 ws.column_dimensions['E'].width = 10 ws.column_dimensions['F'].width = 30 ws.column_dimensions['G'].width = 10 ws.column_dimensions['H'].width = 10 ws.column_dimensions['I'].width = 10 ws.column_dimensions['J'].width = 10 ws.column_dimensions['k'].width = 10 ws.column_dimensions['l'].width = 10 ws.column_dimensions['m'].width = 10 browser.implicitly_wait(5) # 웹페이지가 로딩 될때까지 5초는 기다림 browser.maximize_window() # 화면 최대화 url = f"https://www.creasmall.com/display/category/goods/list/form?brandGrpNo=0&cateGb=G032_101&cate1No=1200" browser.get(url) # 주소 이동 browser.execute_script("location.reload()") browser.find_element(By.CSS_SELECTOR, f'#contents > div > section.filter-item-wrap > div:nth-child(2) > a').click() browser.find_element(By.CSS_SELECTOR, f'#contents > div > section.filter-item-wrap > div:nth-child(2) > div > ul > li:nth-child(3) > a > span').click() time.sleep(0.1) browser.find_element(By.CSS_SELECTOR, f'#contents > div > section.filter-item-wrap > div:nth-child(1) > a').click() browser.find_element(By.CSS_SELECTOR, f'#cy1201 > span').click() time.sleep(0.1) items = browser.find_elements(By.CSS_SELECTOR, '#goodsArea > li >a') for i, item in enumerate(items, 1): if i >= 31 and i <= 31: time.sleep(0.1) browser.find_element(By.CSS_SELECTOR, f'#goodsArea > li:nth-child({i}) > a').click() time.sleep(0.1) comments = browser.find_elements(By.CSS_SELECTOR, '#reviewDiv > div.review-list-wrap > ul > li > div > a > div.cdesc') for comment in comments: cmt = comment.text ws.append([cmt]) wb.save('dd3sdf33dk.xlsx') browser.quit()