안녕하세요 스타트코딩님! 수업 잘 듣고 있는 학생입니다. 질문이 있어 글 남깁니다. 수업 듣기 전에 혼자 해볼 때 저는 soup를 사용하지 않고 find_element를 사용해서 이렇게 코드를 작성했는데 뭐가 다른 걸까요? from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time import pandas as pd driver = webdriver.Chrome() driver.get('https://search.shopping.naver.com/search/all?query=%EB%8B%AD%EA%B0%80%EC%8A%B4%EC%82%B4') # 스크롤 전 높이 last_height = driver.execute_script('return document.body.scrollHeight') while True: # 스크롤 끝까지 내리기 driver.execute_script('window.scrollTo(0, document.body.scrollHeight)') # 대기 시간 줘야됨 !!! time.sleep(1) # 스크롤 후 높이 after_height = driver.execute_script('return document.body.scrollHeight') # 비교 (if, break) if last_height == after_height: break # 스크롤 전 높이 업데이트 last_height = after_height products = driver.find_elements(By.CSS_SELECTOR, '.product_item__MDtDF') data = [] for product in products: name = product.find_element(By.CSS_SELECTOR, '.product_title__Mmw2K').text link = product.find_element(By.CSS_SELECTOR, '.product_title__Mmw2K > a').get_attribute('href') price = product.find_element(By.CSS_SELECTOR, '.price_num__S2p_v').text.split('원')[0].replace(',', '') data.append([name, link, int(price)]) df = pd.DataFrame(data, columns = ['상품명', '상세페이지링크', '가격']) df.to_excel('네이버쇼핑.xlsx')
안녕하세요. 강의를 듣고 pyside로 데스크톱 어플리케이션을 만들고 있는 중에 있습니다. QGridLayout 안에 위젯들을 2열로 배치하였는데요, 이 위젯들이 위젯 아이템들 중 가장 너비가 넓은 것에 맞춰 같은 너비를 차지하면서도 위젯들이 윈도우 전체를 차지하지 않는(=커지거나 작아지지 않는) 방법이 있나요..? 생각보다 어려워서 며칠 째 끙끙대다 결국 질문남겨봅니다.
실제 https로 배포된 API를 fetch를 활용하여 SSR을 구현하고있습니다. 문제는 local에서는 yarn build -> yarn start 하고 테스트를 진행하면 fetch가 정상적으로 작동합니다. 하지만 AWS Amplify를 활용하여 Next JS를 배포하고 배포한 사이트에서 fetch(pending 이후에 catch로 빠짐)가 작동하지않습니다. API에 문제가 있나해서 다른 API를 CSR로 테스트를 해보면 정상적으로 200이 됩니다. 원인이 뭘까요?
폴라우트 페이지 2를 보면서 / 인덱스페이지가 강사님은 static 페이지가 아닌 다이나믹 페이지로 빌드가 되는 부분에서 강사님은 fetch에 force-cache를 적용시키면서 이제 다이나믹된 페이지를 static 페이지로 바꾸셨느데 일단 저는 force-cache 옵션을 적용을 안해도 static 페이지이더라구요 강사님과 저랑 다른 점은 api호출하는 함수 부분을 따로 api 폴더에 빼둔거 말고는 다른 점은 없습니다 . 이렇게 따로 빼놓은 뒤 그냥 promis.all로 데이터 패칭을 해서 그대로 화면에 보여줬습니다 (이것저것 시험하느라 Allbook ,RandomBook 컴포넌트를 따로 빼지는 않은 상태입니다. ) export default async function Home() { const [allBooks, randomBooks] = await Promise.all([ fetchBooks(), fetchRandomBook(), ]); 저는 force-cache 를 적용안햇는데도 왜 다이나믹 페이지가 안되고 static 페이지가 되는걸까요 ...
Parent 클래스가 자료형 Child 클래스가 생성자로 // 업캐스팅 이름이 parent 인 객체를 만들었는데 parent.x parent.y 를 했을경우 값이 어떻게 출력돼나요? 변수x는 부모랑 자식에 둘다 있어서 모르겠습니다 상속을 받는 경우 , 기능(매서드)을 상속받고 변수들은 어떻게 되는건가요? Static 처럼 타입형을 참조하는건가요?
안녕하세요 다른 질문들 보면서 저와 비슷한 것은 알겠지만 저와 다른 것 같아 여기 질문드려봅니다 제가 작성한 코드 : https://drive.google.com/file/d/1QYZwvaOXezKHGvpeHLRoYj9Z6e_OQPP1/view?usp=drive_link 여기서 http://localhost:8080/front-controller/v1/members/new-form 주소로 구글크롬을 이용해 접근을 하게 되면 저는 이렇게 표시가 됩니다 강의를 보면서 오류가 생겨 정말 며칠간 이것저것 코드도 다시 작성해보고 했는데 어느순간부터 이게 되질 않네요; 이부분의 1번의 FrontControllerServletV1 이부분의 각 put이 제대로 동작하지 않는 것 같다고 지금 혼자 결론을 냈고, 디버깅도 해보려 노력했지만 생각처럼 되질 않습니다 어지간하면 질문 안하고 혼자해보는 사람인데 너무 삽질을 많이하고 있어 질문드려봅니다 제 설명이 부족했다면 바로 추가드리겠습니다! 질문 요약 코드대로 스프링을 실행하고 주소로 접근하면 왜 form이 안나오고 오류창이 뜨는지가 궁금 + 각 viewPath가 틀린게 아닌가 라는 gpt의 말이 있었지만 아시다시피 gpt가 헛소리를 많이하는 탓에 잘 모르겠습니다. v1, v2, v3 모두 정상작동해서 v5까지 다시 해볼 수 있도록 부탁드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. "JPA 사용 시 주의해야할 점은, 항상 “트랜잭션”이 있어야 한다" 라고 해주셨는데, 그 말의 의미가 애플리케이션 서버가 DB 서버에 연결해서 데이터 관련 작업(쿼리를 날리는 등)시 무조건 트랜잭션이 필요하다는 말인가요? 즉, JPA가 아닌 JDBC Template을 사용하더라도 무조건 DB와의 데이터 관련 작업 시 “트랜잭션”이 있어야 하나요? 어떤 메서드엔 @Transactional이 없어도 되었고 어떤 메서드엔 필요했던 기억이 있어서 여쭤봅니다! 그리고, 트랜잭션이 걸려있을 때 애플리케이션에서 DB 서버로 쿼리를 날릴 때, "트랜잭션이 실행되고 DB에 쿼리가 날라가고 commit이 되서 DB에 데이터가 들어가는 순서" 일까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 1)JPA를 사용하기위해 도메인 클래스에 @Entity나 @Id, @GeneratedValue를 달다가 확인하게 되었는데, 강의에선 javax.persistence.Id 이건데, 저는 지금 jakarta.persistence.Id 에 있는 애노테이션이었습니다. 그래서 궁금한 게 javax와 jakarta가 정확히 무엇이고, 일반 java랑 어떤 차이가 있는 개념인지도 궁금합니다! 그리고 javax는 지금은 jakarta로 바뀐걸로 이해하면 되겠죠? 2)아래에 있는 JPA 예시 코드에서 setParameter(~~)의 역할이, 메서드의 인자로 받은 name을 setParameter로 넣어주면, 그게 쿼리의 where 조건의 값으로 들어가는 게 맞을까요? @Override public Optional<Member> findByName(String name) { List<Member> result = em.createQuery("select m from Member m where m.name = :name", Member.class) .setParameter("name", name) .getResultList(); return result.stream ().findAny(); } 3)QueryDsl을 사용하면 동적 쿼리를 더 잘 다룰 수 있다고 해주셨는데 동적 쿼리와 정적 쿼리의 차이점이 제가 이해하고 있는 게 맞을까요? 정적 쿼리 : findByName처럼 항상 같은 조건의 쿼리 동적 쿼리 : 검색 조건에 따라, 조건이 동적으로 바뀌는 쿼리 ex)이름 검색, 나이 검색 등등
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. AOP를 사용하면, 스프링이 뜨고 스프링 컨테이너에 예를 들어 MemberService 클래스의 객체가 스프링 빈으로 등록될 때, 가짜인 프록시 객체와 실제 객체 이렇게 2개가 다 등록이 되는 거라고 이해하면 될까요? 그래서, 처음에는 등록된 빈끼리 의존성을 주입할 땐 가짜 프록시 객체가 사용되다가, joinPoint.proceed() 메서드가 호출될 때 실제 객체가 호출되어서 사용되는 건가요?
안녕하세요. %s 형식으로 출력할때에는 나머지 자리를 공백이 아닌 다른 문자열로 대체해서 출력하는 옵션이 존재할까요? print('%10s' %('nice')) -> 나머지 자리 공백으로 표시 -> %s형식으로 출력할때에도 아래 옵션처림 남는차리를 특정 문자열로 채울 수 있는지 궁금합니다. print('{:_>10}'.format('nice')) -> 남는자리 _으로 표시 감사합니다.