묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
NoSuchElementException Stacktrace 에러입니다.
진행 중 에러가 나왔습니다.. 해당 부분에서 어떻게 잘못되었는지 파악을 못해서 글 남깁니다.. File "c:\Users\cksth\OneDrive\바탕 화면\Career\크롤링\심화3\09.click.py", line 71, in <module> raise exception_class(message, screen, stacktrace)selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"img.sFlh5c.pT0Scc.iPVvYb"} (Session info: chrome=119.0.6045.124); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exceptionStacktrace: from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import urllib.request import time import pyautogui import os # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 크롬창 안뜨게 함 # chrome_options.add_argument('--headless') # headless 모드 활성화 # chrome_options.add_argument('--disable-gpu') # GPU 가속 비활성화 # 불필요 메세지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) # 크롬 드라이버 자동 업데이트 browser = webdriver.Chrome(options=chrome_options) keyword = pyautogui.prompt('검색어를 입력하세요.') cnt = 0 # 폴더 만들기 (이미 존재하면 += 1) while True: cnt += 1 folder_path = f'크롤링/심화3/{keyword}{cnt}모음' if not os.path.exists(folder_path): os.mkdir(folder_path) break path = f'https://www.google.com/search?q={keyword}&sca_esv=581612012&tbm=isch&sxsrf=AM9HkKnRu6DCGGz23e29xT4BSB7Hq95zgA:1699754235522&source=lnms&sa=X&ved=2ahUKEwiboaf7rb2CAxWJfd4KHWkWA9MQ_AUoAXoECAQQAw&biw=1552&bih=737&dpr=1.65' # 구글 browser.implicitly_wait(3) browser.maximize_window() browser.get(path) before_h = browser.execute_script("return window.scrollY") # 무한스크롤 while True: # 맨 아래로 스크롤을 내림 browser.find_element(By.CSS_SELECTOR,"body").send_keys(Keys.END) time.sleep(5) # 스크롤 후 높이 after_h = browser.execute_script("return window.scrollY") # 스크롤 높이가 맨 아래와 같다면 무한루프 탈출 if after_h == before_h: print('OKOK') break # 스크롤 높이 업데이트 before_h = after_h # 썸네일 이미지 태그 추출 imgs = browser.find_elements(By.CSS_SELECTOR, '.rg_i.Q4LuWd') for i, img in enumerate(imgs, 1): # 이미지 클릭 후 큰 사이즈 찾음 # 클릭하면 element click intercepted -> JS 로 직접 클릭 유도 browser.execute_script('arguments[0].click();', img) time.sleep(1) # 큰 이미지 주소 추출 target = browser.find_element(By.CSS_SELECTOR, 'img.sFlh5c.pT0Scc.iPVvYb') img_src = target.get_attribute('src') # 에러 해결중 # if i == 1: # target = browser.find_elements(By.CSS_SELECTOR, 'img.sFlh5c.pT0Scc.iPVvYb')[0] # else: # target = browser.find_elements(By.CSS_SELECTOR, 'img.sFlh5c.pT0Scc.iPVvYb')[1] # img_src = target.get_attribute('src') # urllib.error.HTTPError: HTTP Error 403: Forbidden 해결방안 3줄 opener = urllib.request.build_opener() opener.addheaders = [('User-Agent', 'Mozila/5.0')] urllib.request.install_opener(opener) # 이미지 저장 try: urllib.request.urlretrieve(img_src, f'크롤링/심화3/{keyword}{cnt}모음/{keyword}{i}.png') except: pass print(f'img {i}개: {target}') print('\nDvlp.H.Y.C.Sol\nJason')
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
강의 내용으로 블로그를 작성해도 될까요?
강의를 보고 배운내용을 오래 기억하기 위해 인용하여 블로그를 작성해도 될까요? 핵심이라고 생각되는 소스코드를 복사하거나가끔 이론설명 하실때 사용하시는 ppt 페이지(그림) 일부분 이런걸 복사한 뒤, 저의 생각과 함께 글을 작성해보려고 하는데 가능할까요?medium 블로그를 통해 출처와 같이 작성할 것 같습니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
캡슐콜라이더 적용해서 몬스터와 충돌시 회전문제
유니티짱과 몬스터 캡슐콜라이더 설정 한 후에 충돌 하면 유니티짱이 회전을 해서 이런 모습으로 변합니다. 거의 90도 꺾여있는듯이요.아래는 유니티짱의 컴포넌트들인데요. 뭔가 설정이 잘못된 부분이 있나요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의에 사용된 코드는 제공되지 않나요
보통 강의는 github 주소가 제공되는데강의에 사용된 코드는 제공되지 않나요
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2주 뒤 코딩테스트 저 준비할 수 있을까요?
결국 미루고 미루다 코딩테스트 예정 일자가 11.26 (토) 2주가 채 남지 않았습니다.솔직하게 현재 파이썬 기초 문법, 기초적인 수식과 함수 구현만 할 수 있습니다. (반복문 포함)남은 시간이 적지만, 그래도 전략적으로 준비해보고 싶습니다. 알고리즘은 체감으로 백준 가장 기초 브론즈 1문제, 실버 2문제 정도라고 합니다.현실적으로 알고리즘 1문제 SQL 1문제 솔 목표를 두고 있습니다.어떤 걸 집중적으로 공부하는 게 좋을까요? 아래는 작년 유형 및 난이도입니다. 알고리즘 1번. 문자 치환 (가장 기초 브론즈)1->92->8..9->10->0a->z..A->B..예시로 123abcABC => 987zyxBCD 이렇게 변환하는 함수 만들기알고리즘 2번. 대리출석한 사람 수 (실버3)[1,2][1,2][1,2] =>2본인 제외 대출이라고 처리 알고리즘 3번. 분할과 정복 (실버1)정사각형 형태의 데이터를 주고자를 수 있는거 다 잘라서 그 안에서 또 정사각형을 자르고그 안에 알파벳 개수 제한 둔 것이 가능한지
-
해결됨코딩테스트 [ ALL IN ONE ]
이런 질문 드려서 죄송합니다.
결국 미루고 미루다 코딩테스트 예정 일자가 11.26 (토) 2주가 채 남지 않았습니다. 솔직하게 현재 파이썬 기초 문법, 기초적인 수식과 함수 구현만 할 수 있습니다. (반복문 포함) 남은 시간이 적지만, 그래도 전략적으로 준비해보고 싶습니다. 알고리즘은 체감으로 백준 가장 기초 브론즈 1문제, 실버 2문제 정도라고 합니다. 현실적으로 알고리즘 1문제 SQL 1문제 솔 목표를 두고 있습니다. 어떤 걸 집중적으로 공부하는 게 좋을까요? 아래는 작년 유형 및 난이도입니다. 알고리즘 1번. 문자 치환 (가장 기초 브론즈)1->92->8..9->10->0a->z..A->B..예시로 123abcABC => 987zyxBCD 이렇게 변환하는 함수 만들기알고리즘 2번. 대리출석한 사람 수 (실버3)[1,2][1,2][1,2] =>2본인 제외 대출이라고 처리 알고리즘 3번. 분할과 정복 (실버1)정사각형 형태의 데이터를 주고자를 수 있는거 다 잘라서 그 안에서 또 정사각형을 자르고그 안에 알파벳 개수 제한 둔 것이 가능한지
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
구글 큰이미지 크롤링 IndexError입니다.
안녕하세요. 이전 에러를 해결하고 다시 코드를 잡기 시작했습니다...에러 내용은 IndexError: list index out of range 입니다.다른분이 올려주신 글을 읽어보기도 했는데 제 코드에서는 문제점이 무엇인지 잘 모르겠습니다.두번째 인덱스가 없기 때문인거같은데큰 그림만 가져오고싶습니다 ㅠ from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import urllib.request import time import pyautogui import os # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 크롬창 안뜨게 함 chrome_options.add_argument('--headless') # headless 모드 활성화 chrome_options.add_argument('--disable-gpu') # GPU 가속 비활성화 # 불필요 메세지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) # 크롬 드라이버 자동 업데이트 browser = webdriver.Chrome(options=chrome_options) keyword = pyautogui.prompt('검색어를 입력하세요.') cnt = 0 # 폴더 만들기 (이미 존재하면 += 1) while True: cnt += 1 folder_path = f'크롤링/심화3/{keyword}{cnt}모음' if not os.path.exists(folder_path): os.mkdir(folder_path) break path = f'https://www.google.com/search?q={keyword}&sca_esv=581612012&tbm=isch&sxsrf=AM9HkKnRu6DCGGz23e29xT4BSB7Hq95zgA:1699754235522&source=lnms&sa=X&ved=2ahUKEwiboaf7rb2CAxWJfd4KHWkWA9MQ_AUoAXoECAQQAw&biw=1552&bih=737&dpr=1.65' # 구글 browser.implicitly_wait(3) browser.maximize_window() browser.get(path) before_h = browser.execute_script("return window.scrollY") # 무한스크롤 while True: time.sleep(5) # 맨 아래로 스크롤을 내림 browser.find_element(By.CSS_SELECTOR,"body").send_keys(Keys.END) # 스크롤 후 높이 after_h = browser.execute_script("return window.scrollY") # 스크롤 높이가 맨 아래와 같다면 무한루프 탈출 if after_h == before_h: print('OKOK') break # 스크롤 높이 업데이트 before_h = after_h # 썸네일 이미지 태그 추출 imgs = browser.find_elements(By.CSS_SELECTOR, '.rg_i.Q4LuWd') for i, img in enumerate(imgs, 1): # 이미지 클릭 후 큰 사이즈 찾음 img.click() time.sleep(1) # 큰 이미지 주소 추출 if i == 1: target = browser.find_elements(By.CSS_SELECTOR, 'img.sFlh5c.pT0Scc.iPVvYb')[0] else: target = browser.find_elements(By.CSS_SELECTOR, 'img.sFlh5c.pT0Scc.iPVvYb')[1] # IndexError: list index out of range img_src = target.get_attribute('src') # urllib.error.HTTPError: HTTP Error 403: Forbidden 해결방안 3줄 opener = urllib.request.build_opener() opener.addheaders = [('User-Agent', 'Mozila/5.0')] urllib.request.install_opener(opener) # 이미지 저장 try: urllib.request.urlretrieve(img_src, f'크롤링/심화3/{keyword}{cnt}모음/{keyword}{i}.png') except: pass print(f'img {i}개: {target}') print('\nDvlp.H.Y.C.Sol\nJason')
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
카테고리 관련 질문드립니다!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예 )2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예 )[질문 내용]그러면 ManyToMany는 안쓴다고 하셨는데 .보통 카테고리는 실무에서 다는 알수 없겠지만 대략적으로 이해될수 있게 어떤 형식으로 entity를 구성하는지 알수있을까요보통 3뎁스 정도로 잡는다고 한다면요 ..실무에 이번에 jpa도입 할려고 하는데 카테고리는 어떤식으로 하는지 궁금합니다 .Mybatis를 주로 쓰고 관계형 테이블에서는 대충 감이 오는데 엔티티로 할려니 어떤식일까 강의 듣는 내내 .. 궁금해서요 ...id , parentid, level, name 등이 있다고 가정한다면요 ..
-
미해결카프카 완벽 가이드 - 코어편
producer의 record accumulator의 토픽에 대한 정보는 어떻게 얻어오게 되나요?
어플리케이션 기동시 브로커에서 설정정보를 읽은 다음에 존재하고 있는 Topic만큼 Record Accumulator내에 토픽별 파티션 Batch를 생성하는건가요?만약 브로커에서 C라는 토픽이 생성하게 되면 리밸런싱이 되면서 producer서버에 새로운 토픽이 생성되었다는 것을 알리고 프로듀서의 Record Accumulator 내에도 C토픽에 대한 영역이 추가가 되는지 궁금합니다
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
JPQL을 사용할 때 질문 있습니다.
현재 저는 MyBatis를 사용하고 있습니다.그래서 xml을 작성할 때 먼저 DB에 쿼리를 작성하고 인덱스를 사용했는지원하는 인덱스가 사용됐는지 등등 EXPLAIN 으로 확인해보고 작성을 합니다. 제가 JPQL을 실무에서 사용해보지 않아서 궁금증입니다.그런데 JPQL로 작성하게 되는 상황이라면 SQL을 작성해보고 -> JPQL로 만드시나요? 아니면 다른 방법을 사용하시는지 궁금합니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
h2 설치과정
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 모든 글들을 찾아본 결과 제가 원하는 답변들이 없어서 질문합니다 군인으로 지금 사지방에서 개발을 진행하고 있는데 h2 데이터베이스에서 항상 막혀 질문합니다.h2.bat 실행이 막혀있어 진행이 불가능합니다 혹시 이러한 해결책을 아시는지 궁금합니다. 의존성으로 추가해서 하는 방법이 있던데 yml 방식과 예전버전이라 방법이 안통하는것 같습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
실행 코드가 부족하게 나오네요 문제가 뭘까요..?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이 이상 프로그램이 실행이 안되네요 ㅠ문제가 뭔가요? 오류도 아니고..
-
미해결프리다(Frida)를 이용한 안드로이드 앱 모의해킹
APK, 특정 클래스에서 사용되는 함수의 호출 그래프
안녕하세요 Frida 공부중인 학생입니다.다름이 아니라 APK 파일에 대해서 다양한 Frida 사용법을 익히고 있는 중에Frida trace 기능을 통해 특정 클래스의 함수들의 목록을 출력하는 것을 사용해보았습니다.이러던 와중 궁금한 사항이 생겨 질문을 드립니다.특정 클래스에서 사용된 메소드가 다른 클래스의 함수를 호출하는 상황과 같이 함수들의 호출 경로를 모두 출력하여 함수 호출 그래프와 유사한 출력물을 만들수 있을지 궁금하여 질문 드립니다. 감사합니다.
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2강 정수로 문제3번
안녕하세요21분쯤에 176은 16으로 나누어 떨어지는건 이해했습니다.그런데 n의 제곱수로 나누어지는 약수를 찾아 모두더하라는 의미가176의 약수중에서 2의 제곱수로 나누어지는 애들을 찾아서 더하라는 이야기인데 176의 약수중 2, 4, 8, 16으로 나누어 떨어지니까 얘들을 더해야 하는 게 아닌가요?계속 생각해봐도 도저히 이해가 안돼서 남깁니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
c++로 Data Asset을 로드 했으면 Cook에 폴더 지정해야한다 라고 이해했는데요.
숄더랑 쿼터 data asset 있는 폴더는 Additional Asset Directories to Cook에 추가 안 하나요???
-
미해결Slack 클론 코딩[실시간 채팅 with React]
onScroll 스크롤 위치 유지가 안됩니다 ㅠ
import Chat from '@components/Chat'; import { ChatZone, Section, StickyHeader } from '@components/ChatList/style'; import { IChat, IDM } from '@typings/db'; import React, { FC, RefObject, VFC, forwardRef, useCallback, useRef } from 'react'; import { Scrollbars } from 'react-custom-scrollbars'; interface Props { scrollRef: RefObject<Scrollbars>; chatSections: { [key: string]: IDM[] }; setSize: (f: (index: number) => number) => Promise<IDM[][] | undefined>; isEmpty: boolean; isReachingEnd: boolean; } const ChatList: VFC<Props> = (({ chatSections, setSize, isEmpty, scrollRef, isReachingEnd}) => { const onScroll = useCallback((values) => { // 끝에 도달하면 불러오지 않기 if(values.scrollTop === 0 && !isReachingEnd){ console.log('가장 위'); setSize((prevSize) => prevSize + 1).then(()=>{ // 스크롤 위치 유지 if(scrollRef?.current){ scrollRef.current?.scrollTop(scrollRef.current?.getScrollHeight() - values.scrollHeight); } }); } }, []); return ( <ChatZone> <Scrollbars autoHide ref={scrollRef} onScrollFrame={onScroll}> {Object.entries(chatSections).map(([date, chats]) => { return ( <Section className={`section-${date}`} key={date}> <StickyHeader> <button>{date}</button> </StickyHeader> {chats.map((chat) => ( <Chat key={chat.id} data={chat} /> ))} </Section> ); })} </Scrollbars> </ChatZone> ); }); export default ChatList; 이쪽 코드는 문제가 없는것같은데 희한하게 위치가 유지가 되지않고 원래처럼 쭉 올라가버립니다.. ref쪽이 문제인가요..? 혹시몰라 DirectMessage 컴포넌트도 아래에 첨부하겠습니다.import React, { useCallback, useEffect, useRef } from 'react'; import gravator from 'gravatar'; import useSWR, { mutate } from 'swr'; // swr 인피니티스크롤링 전용 메서드 import useSWRInfinite from 'swr/infinite'; import { IDM, IUser } from '@typings/db'; import fetcher from '@utils/fetcher'; import { useParams } from 'react-router'; import ChatBox from '@components/ChatBox'; import { Container, Header } from '@pages/DirectMessage/style'; import ChatList from '@components/ChatList'; import useInput from '@hooks/useInput'; import axios from 'axios'; import makeSection from '@utils/makeSection'; import Scrollbars from 'react-custom-scrollbars'; const DirectMessage = () => { const { workspace, id } = useParams<{ workspace: string; id: string }>(); const { data: userData } = useSWR(`http://localhost:3095/api/workspaces/${workspace}/users/${id}`, fetcher); // 내정보 const { data: myData } = useSWR(`http://localhost:3095/api/users`, fetcher); const [chat, onChangeChat, setChat] = useInput(''); // 과거 채팅리스트에서 채팅을 치면 최신목록으로 바로 스크롤을 내려줄려면 ref를 // 이 컴포넌트에서 props로 내려줘야하기 때문에 forwardRef를 사용해서 props로 넘겨준다 // 💡 HTML 엘리먼트가 아닌 React 컴포넌트에서 ref prop을 사용하려면 React에서 제공하는 forwardRef()라는 함수를 사용해야 합니다 const scrollbarRef = useRef<Scrollbars>(null); // 채팅 받아오는곳 (setSize : 페이지수를 바꿔줌) // useSWRInfinite를 쓰면 [{id:1},{id:2},{id:3},{id:4}] 1차원배열이 [[{id:1},{id:2}],[{id:3},{id:4}]] 2차원배열이 된다. const { data: chatData, mutate: mutateChat, setSize, } = useSWRInfinite<IDM[]>( (index) => `http://localhost:3095/api/workspaces/${workspace}/dms/${id}/chats?perPage=20&page=${index + 1}`, fetcher, ); // 데이터 40 개중에 20개씩 사져오면 첫번째페이지부터 20 + 20 + 0 세번째 페이지 0 이되면 isEmpty, isReachingEnd는 true가 됨 // 반대의 상황에서 데이터가 45개면 20 + 20 + 5 isEmpty는 0이 아니라서 false isReachingEnd는 여전히 데이터 가져옴 const isEmpty = chatData?.[0]?.length === 0; const isReachingEnd = isEmpty || (chatData && chatData[chatData.length - 1]?.length < 20) || false; const onSubmitForm = useCallback( (e) => { e.preventDefault(); if (chat?.trim() && chatData) { const savedChat = chat; // 💡 옵티미스틱 UI // 서버쪽에 다녀오지 않아도 성공해서 데이터가 있는거처럼 보이게 미리 만듦 mutateChat((prevChatData) => { // infinite 스크롤링은 2차원 배열이다. prevChatData?.[0].unshift({ // unshift : 앞쪽에 추가 id: (chatData[0][0]?.id || 0) + 1, content: savedChat, SenderId: myData.id, Sender: myData, ReceiverId: userData.id, Receiver: userData, createdAt : new Date(), }); return prevChatData; },false) // 옵티미스틱 UI 할땐 이부분이 항상 false .then(()=>{ setChat(''); // 버튼클릭 시 기존 채팅지우기 scrollbarRef.current?.scrollToBottom(); // 채팅 첬을때 맨 아래로 }) axios .post( `http://localhost:3095/api/workspaces/${workspace}/dms/${id}/chats`, { content: chat, }, { withCredentials: true, }, ) .then(() => { mutateChat(); // SWR에서 데이터를 다시 불러와서 캐시를 갱신하는 역할을 합니다. }) .catch(() => { console.error; }); } }, [chat, chatData, myData, userData, workspace, id], ); // (채팅이 최신것을 아래에 두기 위함) = 기존것 데이터를두고 새 데이터를 뒤집어서 출력 / flat() 배열을 1차원 배열로 만들어줌 const chatSections = makeSection(chatData ? [...chatData].flat().reverse() : []); // 로딩 시 스크롤바 제일 아래로 useEffect(()=>{ if(chatData?.length === 1){ // 채팅 데이터가 있어서 불러온 경우 scrollbarRef.current?.scrollToBottom(); // 가장 아래쪽으로 내려줌 } },[chatData]) // 로딩 if (!userData || !myData) { return null; } return ( <Container> <Header> <img src={gravator.url(userData.email, { s: '24px', d: 'retro' })} alt={userData.nickname}></img> <span>{userData.nickname}</span> </Header> {/* 컴포넌트 위치를 미리 지정해도 좋다. */} {/* 전역 상태관리 라이브러리를 사용해도 컴포넌트상황에따라 props 로 넘겨줌*/} <ChatList scrollRef={scrollbarRef} chatSections={chatSections} setSize={setSize} isEmpty={isEmpty} isReachingEnd={isReachingEnd} /> <ChatBox chat={chat} onChangeChat={onChangeChat} onSubmitForm={onSubmitForm} /> </Container> ); }; export default DirectMessage;
-
해결됨개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제
[페이지 교체 알고리즘]
[페이지 교체 알고리즘]페이지 교체와 프레임 할당 강의 중 16:15부분에서 궁금한 점이 해결되지 않아 질문드립니다.최적 페이지 교체 알고리즘이, "앞으로 오랫동안 사용되지 않을 페이지를 예측하는 것이 어렵기 때문에 구현하기 힘들다" 라고 설명해 주셨는데, 페이지 참조열을 통해 판단할 수 있지 않나요?예를들어 현재 페이지 참조열이 [2 2 2 3 5 5 5 3 3 3 7] 이라고 가정했을때, 특정 시점 아무때나를 기준으로 사용되지 않는 페이지를 예측하는것이 가능하다고 생각합니다.이 부분에 대해서 부연 설명을 부탁드립니다.감사합니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
f1, MAE 등...
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요시험이 처음인지라 질문드려봐요! 😋 필기에 나왔던 개념들이지만.. 실기에서 해보려니까 기억이 안나는데요..ㅎㅎ 시험장에서는 f1, MAE 등 평가 지표들을 어떻게 구하는지 식이 나와있나요..? 암기해가야할까요..?
-
해결됨풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
section 7 포트? 오류
안녕하세요 섹션 7 dockerfile 에서, 웹브라우저 주소 창에 IP주소:9999 를 입력해도 EC2 서버가 열리지 않아서 질문드립니다. 보안그룹에 들어가보니, 이렇게 되어있는데 맞는 설정인가요? 인터넷에 보니, 1. aws 가입2. ec2 인스턴스 생성 및 탄력적 ip와 연결 (ubuntu free tier로 생성) 3. 인바운드 규칙 80(기본) 포트번호 추가(0.0.0.0)3. 보안그룹 인바운드 규칙에 포트번호 9999 추가 (사용자 지정 TCP) 이렇게 되어있는데, 저기 아레 규칙 추가 를 클릭하고 사용자 지정 TCP를 선택해서 포트번호 9999 라고 추가를 해줘야 하는건가요? (강의에 이 부분이 따로 안나와있어서요 )
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
궁금증
제가 초기에 jar로 설정하면 jsp가 안ㄴ먹힌다고 들었는데, 지금까지 jsp가 잘 되는데 왜 그런걸까요?