학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요! 영한님 강의를 잘 듣고 있습니다. 의존관계 주입 설명해주실때 문득 궁금점이 생겨서 질문드립니다. 의존관계 주입은 추상적인 것을 의존하게 하고, 나중에 실제 구체적인것을 넣어주는 부분인데 이는 같은 기능을 수행하는 List(Array, Linked)의 경우라고 한다면 처음에는 한가지 기능만 수행하다가, 필요에 의해서 다른 기능을 만들었고 이걸 공통화가 가능하다면 인터페이스로 만들어주는 작업을 진행하면 되는 걸까요? 실무에서 인터페이스는 처음부터 설계를 잡고 들어가는 경우가 많은지, 혹은 필요에 의해 중간에 만드는 경우도 있는지 궁금합니다! 중간에 필요하긴한데 기능이 다 같진 않은 경우에는 어떻게 하는지도 궁금하네요ㅠ
public class ThreadStopMainV2 { public static void main(String[] args) throws InterruptedException { Job job = new Job(); Thread thread = new Thread(job); thread.start(); Thread.sleep(4000); log("작업 중단 지시 interrupt"); thread.interrupt(); log("main 스레드 끝"); } static class Job implements Runnable { @Override public void run() { while (true) { try { log("스레드 실행"); Thread.sleep(2000); } catch (InterruptedException e) { log("예외 발생"); break; } } log("작업 끝"); } } } 위 코드의 실행 결과는 아래와 같습니다. 궁금한 부분은 로그에서 작업 중단 지시 interrupt 이후에 대해 궁금한점이 있습니다. 작업 중단 지시 interrupt 를 로그로 찍고 thread.interrupt();를 호출 했습니다. 그러면 생선한 스레드에 interrupt 신호를 보내고 Thread.sleep(2000); 부분에서 예외가 발생해 catch 문으로 빠지는것도 이해했습니다. 하지만 catch 문으로 빠지기전 log("스레드 실행"); 가 실행되지 않나 라는 생각이 듭니다. 그래서 최종 결과는 아래와 같이 catch 로 빠지기전에 스레드 실행이 한번 더 찍혀야 하지 않나 라는 생각이 듭니다. 23:08:15.622 [ Thread-0] 스레드 실행 23:08:17.629 [ Thread-0] 스레드 실행 23:08:19.613 [ main] 작업 중단 지시 interrupt 23:08:19.613 [ Thread-0] 스레드 실행 23:08:19.614 [ main] main 스레드 끝 23:08:19.614 [ Thread-0] 예외 발생 23:08:19.616 [ Thread-0] 작업 끝
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 자바 16부터는 instanceof 를 사용하면서 동시에 변수를 선언할 수 있다고 하셨는데 그럼 if(parent instanceof Child child){child.childMethod()} 여기서 child.childMethod() 는 어떻게 작동이되는건가요? Child child 를 선언하긴했지만 instance 주소값을 대입하지않아서 작동이 되지 않는거 아닌가요?
안녕하세요. 네이버 지식인 GUI 강의하신 내용 참고하여, 네이버 쇼핑을 GUI 로 만들어 보았습니다. 여러번 버버벅 거리면서 수정하여, GUI 에 제품명을 담고, 엑셀로도 제품명과 링크 저장하는데 까지 성공했습니다. 그런데, 네이버로 부터 ip 일시적 차단 경고 받았습니다. 사전에 ip 차단 염려하여 1 페이지만 크롤링했고, 코드에서는 2군데 time.sleep(2)도 두었는데도 , 네이버로 부터 경고 받았습니다. 그래서, 더 진행하다가 아예차단될까 두려워서 방법 문의 드립니다. 네이버 쇼핑 경고 ; 쇼핑 서비스 접속이 일시적으로 제한되었습니다. 네이버는 안정적인 쇼핑 서비스 제공하고자 시스템을 통해 아래와 같은 비정상적인 접근이 감지될 경우 해당 네트워크의 접속을 일시적으로 제한하고 있습니다. 상품 구매, 탐색과 무관한 외부 이벤트를 통한 접속 짧은 시간 내에 너무 많은 요청이 이루어진 IP VPN을 사용하여 접속한 IP 특정 확장 프로그램 이용 시 위와 같은 접근이 아님에도 접속이 제한된 경우,네이버앱을 업데이트 또는 원클릭 진단을 부탁드립니다. 해당 방법을 통해서도 접속이 불가한 경우 네이버쇼핑 고객센터로 문의 부탁드립니다. 적용된 코드 입니다; 차단 원인과 해결방법 도와주세요~~ 감사합니다 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from PySide6.QtWidgets import QApplication,QWidget from nShopping_c_ui import Ui_Form import requests import sys import time from bs4 import BeautifulSoup import pandas as pd from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class MainWindow_c2(QWidget,Ui_Form): def __init__(self): super().__init__() self.setupUi(self) self.start_btn.clicked.connect(self.start) self.reset_btn.clicked.connect(self.reset) self.save_btn.clicked.connect(self.save) self.quit_btn.clicked.connect(self.quit) def start(self): input_keyword=self.keyword.text() input_page=int(self.page.text()) self.result=[] # 적재창고 건설 # 크롬 드라이버 생성 self.driver=webdriver.Chrome() for i in range(1, input_page+1): self.textBrowser.append(f'{i}페이지 크롤링...') self.driver.get(f"https://search.shopping.naver.com/search/all?adQuery={input_keyword}&origQuery={input_keyword}&pagingIndex={i}&pagingSize=40&productSet=total&query={input_keyword}&sort=rel×tamp=&viewType=list") #스크롤 전 높이 확인 last_height=self.driver.execute_script("return document.body.scrollHeight") while True: #스크롤 끝까지 내리기 self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight)") #잠시대기 time.sleep(2) # 스크롤 후 높이 new_height=self.driver.execute_script("return document.body.scrollHeight") # 비교(if, break) if new_height==last_height: break # 스크롤 전 높이 업데이트 last_height=new_height html=self.driver.page_source soup=BeautifulSoup(html,'html.parser') #나무태그 찾기 items=soup.select(".product_item__MDtDF") for item in items: # 각 아이템에서 제목과 링크 추출 name=item.select_one(".product_title__Mmw2K>a").text link=item.select_one(".product_title__Mmw2K>a").attrs['href'] self.textBrowser.append(name) self.result.append([name, link]) QApplication.processEvents() time.sleep(2) self.textBrowser.append('크롤링 완료...') def reset(self): self.textBrowser.setText("") self.keyword.setText("") self.page.setText("") def save(self): input_keyword=self.keyword.text() df=pd.DataFrame(self.result,columns=['제목','링크']) df.to_excel(f'{input_keyword}_d.xlsx') def quit(self): self.driver.quit() # 크롬 드라이버 종료 sys.exit() app=QApplication() window=MainWindow_c2() window.show() sys.exit(app.exec())
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 영상 에서 try-catch문과 throws으로, 예외를 잡는 것과, 던지는 것을 보았습니다. 현실적 으로는, 이 두 가지 사항이 잘 이해가 가는데, ex) 들수 있는 물건 - try-catch 무거운 물건을 들때 도움을 요청 - throws try-catch : 사람의 힘이나 기계의 힘으로 충분이 해결 가능 throws : 사람의 힘으로 안됨- > 기계의 힘으로도 안됨 -> 포기 코드적 으로는 어떨 때에는 try-cath로 잡고, 어떨 때에는 throws로 던져야 하는지 모르겠습니다. 혹 자바 예외 처리 실습 부분에서 이런 부분을 가르쳐 주시나요? 아니라면 어떨 때 던지고, 어떨 때 던져야 하는지 가르쳐 주시면 감사하겠습니다. 답변 부탁 드립니다.
안녕하세요! 항상 수고많으십니다. 다름이 아니라 scikit learn 1.0.2 version을 다운로드 할때 아래의 오류가 발생하는데 해결법이 있을까요? 감사합니다. (base) C:\Windows\system32>pip install scikit-learn==1.0.2 Collecting scikit-learn==1.0.2 Using cached scikit-learn-1.0.2.tar.gz (6.7 MB) Installing build dependencies ... done Getting requirements to build wheel ... error error: subprocess-exited-with-error × Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> [33 lines of output] Traceback (most recent call last): File "C:\Users\Admin\anaconda3\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 353, in <module> main() File "C:\Users\Admin\anaconda3\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 335, in main json_out['return_val'] = hook(**hook_input['kwargs']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Admin\anaconda3\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 112, in get_requires_for_build_wheel backend = build backend() ^^^^^^^^^^^^^^^^ File "C:\Users\Admin\anaconda3\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 77, in build backend obj = import_module(mod_path) ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Admin\anaconda3\Lib\importlib\__init__.py", line 90, in import_module return bootstrap. gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "<frozen importlib._bootstrap>", line 1387, in gcd import File "<frozen importlib._bootstrap>", line 1360, in find and_load File "<frozen importlib._bootstrap>", line 1310, in find and_load_unlocked File "<frozen importlib._bootstrap>", line 488, in call with_frames_removed File "<frozen importlib._bootstrap>", line 1387, in gcd import File "<frozen importlib._bootstrap>", line 1360, in find and_load File "<frozen importlib._bootstrap>", line 1331, in find and_load_unlocked File "<frozen importlib._bootstrap>", line 935, in load unlocked File "<frozen importlib._bootstrap_external>", line 995, in exec_module File "<frozen importlib._bootstrap>", line 488, in call with_frames_removed File "C:\Users\Admin\AppData\Local\Temp\pip-build-env-7t2zd14d\overlay\Lib\site-packages\setuptools\__init__.py", line 16, in <module> import setuptools.version File "C:\Users\Admin\AppData\Local\Temp\pip-build-env-7t2zd14d\overlay\Lib\site-packages\setuptools\version.py", line 1, in <module> import pkg_resources File "C:\Users\Admin\AppData\Local\Temp\pip-build-env-7t2zd14d\overlay\Lib\site-packages\pkg_resources\__init__.py", line 2172, in <module> register_finder(pkgutil.ImpImporter, find_on_path) ^^^^^^^^^^^^^^^^^^^ AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'? [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: subprocess-exited-with-error × Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> See above for output. note: This error originates from a subprocess, and is likely not a problem with pip. (base) C:\Windows\system32>
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] ID 값은 em.persist(member) 가 호출되어 엔티티가 영속성 컨텍스트에 등록되는 시점에 부여되는 것이 맞는 것인지 아니면 DB를 거쳐서 저장되면서 값이 부여되는 것인지 궁금합니다. @PersistenceContext private EntityManager em; public Long save(Member member){ em.persist(member); return member.getId(); } 이 코드를 보면 persist(영속성 엔티티에서 관리될 때)때 id값이 정해지는 것이 맞는 것 같은데 둘 중 무엇이 맞는 개념인가요?
Oauth를 활용해 자체 sso 서버를 구축하려고 하는데 궁금한 게 있어 문의 드립니다. 먼저 구축할 예정인 환경은 아래와 같습니다. 로그인 프론트 Authorization과 로그인을 함께 처리할 백엔드 authorization code 요청 시 로그인 여부를 확인해야 하는데 로그인 정보가 jwt 토큰으로 cookie에 담겨있다면, OAuth2AuthorizationEndpointFilter에서 확인을 해야하는지 OAuth2AuthorizationCodeRequestAuthenticationConverter에서 확인을 해야하는지 궁금합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) Spring 환경설정 질문 입니다. 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네, 기존 Q&A에 없는 것 같습니다. 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네 [질문 내용] 안녕하세요. 초보 spring 입문자 입니다. 강의 1. 프로젝트 환경설정 단계 질문입니다. 강사님께서 말씀하신 스프링부트 스타터 사이트로 부터 해당 hello-spring 프로젝트 생성을 했습니다. 이후 Intellij에서 project로 열면 spring library를 받아와야 할텐데 받질 못하고 있습니다. load Gradle project 를 누르면 hello-project:failed > Connection reset 알람이 뜨네요. 참고로 회사 사무실 PC 환경에서 발생하는 이슈이고, 자택에서 사용시에는 잘 됩니다. 회사 방화벽 문제 일까요 ? 감사합니다.
안녕하세요 강사님 강의 모두 결제해서 듣고 있는 13년차 직장인 겸 학생입니다. MAC OS 아나콘다 환경에서 현재 4.4.5가 기본으로 깔리는데 처음문제는 early_stopping_rounds=50 였습니다. 그래서 3.3.2로 버전을 맞춰서 import lightgbm 하는데 문제가 생겨서 몇시간동안 헤매대가 결국 해결책을 찾아서 공유합니다. 1. . MacOS에서 OpenMP를 설치하고 LightGBM이 이를 참조할 수 있도록 설정해야 합니다. 1. Homebrew 설치 먼저 Homebrew가 설치되어 있는지 확인하세요. Homebrew는 Mac에서 패키지를 관리하는 도구입니다. Homebrew가 설치되지 않았다면, 아래 명령어로 설치할 수 있습니다 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh )" 2. libomp 설치 libomp 는 OpenMP 라이브러리입니다. Homebrew를 통해 쉽게 설치할 수 있습니다. brew install libomp 이 명령어는 libomp 를 설치하여, LightGBM이 OpenMP에 접근할 수 있게 만듭니다. 3. Anaconda 환경에서 환경 변수 설정 설치된 libomp 경로를 Anaconda 환경에서 참조하도록 설정해야 합니다. ~/.bash_profile 또는 ~/.zshrc 파일에 다음을 추가하세요. export PATH="/usr/local/opt/libomp/bin:$PATH" export LDFLAGS="-L/usr/local/opt/libomp/lib" export CPPFLAGS="-I/usr/local/opt/libomp/include" **팁Homebrew를 통해 설치된 libomp 의 경로를 확인하려면 다음 명령어를 터미널에 입력하세요: brew --prefix libomp 그 후 터미널에서 다음 명령어를 실행해 환경 변수를 적용하세요: source ~/.bash_profile # 또는 ~/.zshrc 4. LightGBM 재설치 pip uninstall lightgbm pip install lightgbm==3.3.2 ~ 끝 ~ 강사님 항상 업데이트 잘해주셔서 저도 도움이 되고자 올립니다.
메서드 프레임은 메서드 영역에 있는 메서드 코드를 기반으로 생성되나요? 객체 생성과 메서드 호출에 대한 메모리 관점 흐름을 정리 해봤는데 맞게 정리한건지 궁금합니다. "객체 생성시 힙 영역에 객체 저장 -> 메서드 호출시 메서드 영역에 있는 호출한 메서드 코드를 찾음 -> 찾은 메서드 코드로 스택 영역에 메서드 프레임을 생성함" 힙 영역에서 메서드 영역에 있는 본인의 메서드 코드를 어떻게 찾는지 궁금합니다.
객체를 생성하는 순간 힙 영역에 객체가 저장(필드값)된다고 알고 있습니다. 메서드를 호출하기 위해서는 우선 객체를 생성한 후에 메서드를 호출해야 한다고 생각합니다. 궁금한 부분은 언제 메서드 프레임의 this에 값이 저장 되는지 궁금합니다. 메서드 호출 할때 힙 영역에 저장되어 있는 객체의 주소값이 this로 저장이 되는건가요?