[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 가끔 오류날 때 recompile 해보곤 하는데.. G:\spring\spring-data-project\jpashop\src\main\java\jpabook\jpashop\api\ MemberApiController.java : uses unchecked or unsafe operations. Recompile with -Xlint:unchecked for details. 이게 뭔가하고 찾아보니, @Data @AllArgsConstructor static class Result<T>{ private int count; private T data; } 여기 이 부분이.. 물론 파란색이라 에러같은 느낌은 아니고, 그냥 안내 정도로 보이긴 하는데, https://bgpark.tistory.com/33 근데 제가 언뜻 왠만하면 제네릭 쓰지 말라고 들었던거 같긴 한데 기억이.. 잘못들었는지 왜곡되었는지.. 옛날 라이브러리들은 제네릭으로 구현된게 많아서 그냥 그거 쓰고 제네릭으로 따로 구현하지 말랬던거 같은데.. 제가 잘못 기억하고 있는 거겠죠?
안녕하세요. 강의 잘 보고 있습니다. 요청 객체를 테스트(ex. 신규상품을 등록할때 타입은 필수 값이다.) 할 때에 코틀린을 사용하는 경우 productType은 non-nullable 입니다. data class ProductCreateRequest( @field:NotNull(message = "상품 타입을 선택해주세요.") val type: ProductType, @field:NotNull(message = "판매 상태를 선택해주세요.") val sellingStatus: ProductSellingStatus, @field:NotBlank(message = "상품명을 입력해주세요.") val name: String, @field:Positive(message = "상품 가격을 입력해주세요.") val price: Int, ) 이런 경우 enum 타입은 bean Validation에서 NotNull이나 NotBlank에 대한 테스트는 불가능한 상태인데요. 이렇게되면 테스트 가능한 것들만 하는게 맞는건가요?
검증 로직에서 arguments 값이 있는 경우 defaultMessage를 작성하지 않으면 컴파일 에러가 발생합니다. 이 이유는 무엇인가요? arguments는 메세지에 사용하는 인자를 뜻한다고 했는데 사용할 인자는 있는데 사용대상이 없을 경우를 대비한걸까요? if (!StringUtils.hasText(item.getItemName())) { bindingResult.rejectValue("itemName","required"); } if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) { bindingResult.rejectValue("price","range",new Object[]{1000,1000000},null); }
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의중 커넥션풀을 이용해 Test를 해보는 부분입니다. (강의에선 V1 로 사용하지만 저는 V0이라고 이름만 다르게했습니다) 강의에선 이렇게 코드를 작성하시는데, 저는 똑같이 해서 test해보면 아래 crud메서드의 repository.save (member); 부분에서 nullpointerException이 발생합니다. 혹시 beforeEach 메서드 내의 초기화부분이 잘못된건가 해서 이런식으로 초기화부분을 crud 메서드 안으로 가져온뒤 실행하면 테스트에 성공합니다. 어디에 문제가 있는지를 잘 모르겠습니다.
기초가 부족해서 기초부터 다시시작하고 있는 중입니다. ㅠㅠ 두가지 궁금한 사항이 있는데요, a1=(1), a2=(1,) a3=('a'), a4=('a',) a5=('ab'), a6=('ab',) 이런식으로 튜플과 리스트, 집합을 전부 출력해봤습니다. 위처럼 출력해보니 집합에는 순서가 없기 때문에 인덱싱이나 슬라이싱이 안되는지 등 다양한 로직?들을 깨닳았는데요, 근데 두가지 궁금증을 해결하지 못한 부분이 있습니다. 첫번째 질문은, 튜플 출력시에 a=(1)을 int로 인식해서 출력이 안되는건 이해를 했으나, a=('a')인 경우 출력이 되더라구요. 근데 a=(1)을 int로 인식해서 출력을 못한거라면, 'a'도 str로 인식해서 출력이 안되어야 하는게 정상아닌가요? 왜 a는 출력이되고 1은 출력이 안되는지 이해가 되지않습니다 ㅠㅠ 두번째 질문은, 'ab'를 출력했을 때, 튜플은 a만 출력이 되는데, 리스트는 왜 ab전부다 출력이 되는지 이해가 되지 않습니다. 왜그런걸까요..??
정환님 안녕하세요. 질문이 있습니다. DiaryEditor 컴포넌트로 onCreate, onEdit 함수를 전달하여 일기를 생성, 수정 하는데요. 이때, 일기 생성 후, 일기를 수정 하면 수정된 일기 + 수정된 일기가 1개 더 추가 생성이 되는 에러가 발생하여서요. 어떤 부분이 문제인지 짐작이 안갑니다. ㅠㅠ 아래 코드 캡쳐본 첨부드립니다. 답변주시면 감사하겠습니다. 그리고 강의 잘 듣고있습니다. 좋은 강의 감사합니다 :) App 컴포넌트 Edit 컴포넌트 DiaryEditor 컴포넌트
안녕하세요! 쉽배쿠부터 수업을 쭉 진행하고 있는데, 계속 의문점이 드는 부분이 있어 이것저것 시도해 보다가 질문드립니다..! 쉽배쿠 수업 당시, "컨테이너 런타임에 문제가 생겼다면?" 을 진행하면서 마스터 노드의 컨테이너 런타임인 containerd를 stop 하는 테스트를 진행 했었습니다. 이를 통해 컨테이너 런타임 을 지정할 때 containerd를 사용하는 것이 도커를 컨테이너 런타임으로 사용하는 것 보다, 더 안정성 있게 동작 할 수 있다는 점도 알게 되었습니다. 당시 전체적인 구상도를 보며, VM의 마스터노드, 워커노드 그리고 파드와 컨테이너까지 "아 Docker는 사용되는 부분이 없구나" 라고 생각했습니다. (실제로 그림에도 도커는 없었으니까요 🙂 ) 하지만, 이번 그배쿠 강의를 들으면서 환경 설정을 하는 쉘 스크립트에 도커를 설치하는 부분이 존재했고, 실제 docker --version / docker info 등의 명령어를 실행하니 도커가 동작 중 이라는 것을 확인했습니다. 여기서 들게 된 의문점은 다음과 같습니다! 현재 그배쿠 강좌는 컨테이너 런타임으로 무엇을 사용하나요? 또한 쉽배쿠 강좌에서는 실제로 도커를 어디에도 사용하지 않았나요? 쿠버네티스가 현재 도커 지원 중단( 컨테이너 런타임으로써의 중단 )한 것으로 알고 있습니다. 따라서 현재 그배쿠 강좌에서 컨테이너 런타임으로 "컨테이너디"를 사용 하는 것이 맞다면 "컨테이너디" 가 알아서 컨테이너를 관리 해줄 것으로 생각되는데, 현재 설치된 도커는 어떤 역할을 수행하는 것인가요? 컨테이너의 관리를 위해서는 도커와 컨테이너디 둘 다 설치 하는 것은 필수적인가요? 어느정도 쓰다보니까 이해가 된 것 같기도 한데,,, 아리송하여 질문을 드립니다. 감사합니다!
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
정말 죄송하지만 파이어베이스 관련에러인데요 코팩 책을 보면서 파이어베이스 설정을 하다가 Flutterfire configure 부터 오피셜 파어베이스가 필요하다는 에러만 뜨더라고요 구글링 해보니 적용하려는 안스 프로젝트의 폴더에 파베 파일을 넣어보라길래(기존 작업중이던 프로젝트) 그대로 했더니 파베도 설정 안되고 멀쩡하던 안스 프로젝트까지 아래와 같이 에러가 났습니다. * What went wrong: A problem occurred configuring project ':cloud_firestore'. > defaultConfig contains custom BuildConfig fields, but the feature is disabled. To enable the feature, add the following to your module-level build.gradle: `android.buildFeatures.buildConfig true` 일단 해당 파베를 지웠다가 아예 다른 d드라이브에 다시 깔아봤지만 동일하고.. 그래들 프로퍼티 파일에 아래를 추가도 했고요 android.buildFeatures.buildConfig=true 어떻게도 위 에러가 없어지질 않네요ㅜ 위 에러메시지는 어떤 부분을 봐야하는지 방향성만이라도 알려주시면 감사하겠습니다.
풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
선생님 안녕하세요 좋은 강의 감사합니다. 기초적인 질문일수도 있는데 조금 헷갈려서요 docker run -d -p 9999:80 --name httpdweb3 myweb3 이라고 썼을때와 docker run -dit -p 9999:80 --name httpdweb3 myweb3 라고 썼을때의 본질적인? 차이점이 무엇인거죠? it가 터미널 입력을 열어놓고 가상 터미널을 할당하는 옵션 등등 인건 수업자료에 나와있는데, 조금 더 실질적인 차이..?가 잘 안와닿아서요. 질문드립니다!
진행 중 에러가 나왔습니다.. 해당 부분에서 어떻게 잘못되었는지 파악을 못해서 글 남깁니다.. 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-exception Stacktrace: 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 블로그를 통해 출처와 같이 작성할 것 같습니다.
결국 미루고 미루다 코딩테스트 예정 일자가 11.26 (토) 2주가 채 남지 않았습니다. 솔직하게 현재 파이썬 기초 문법, 기초적인 수식과 함수 구현만 할 수 있습니다. (반복문 포함) 남은 시간이 적지만, 그래도 전략적으로 준비해보고 싶습니다. 알고리즘은 체감으로 백준 가장 기초 브론즈 1문제, 실버 2문제 정도라고 합니다. 현실적으로 알고리즘 1문제 SQL 1문제 솔 목표를 두고 있습니다. 어떤 걸 집중적으로 공부하는 게 좋을까요? 아래는 작년 유형 및 난이도입니다. 알고리즘 1번. 문자 치환 (가장 기초 브론즈) 1->9 2->8 . . 9->1 0->0 a->z . . A->B . . 예시로 123abcABC => 987zyxBCD 이렇게 변환하는 함수 만들기 알고리즘 2번. 대리출석한 사람 수 (실버3) [1,2][1,2][1,2] =>2 본인 제외 대출이라고 처리 알고리즘 3번. 분할과 정복 (실버1) 정사각형 형태의 데이터를 주고 자를 수 있는거 다 잘라서 그 안에서 또 정사각형을 자르고 그 안에 알파벳 개수 제한 둔 것이 가능한지
결국 미루고 미루다 코딩테스트 예정 일자가 11.26 (토) 2주가 채 남지 않았습니다. 솔직하게 현재 파이썬 기초 문법, 기초적인 수식과 함수 구현만 할 수 있습니다. (반복문 포함) 남은 시간이 적지만, 그래도 전략적으로 준비해보고 싶습니다. 알고리즘은 체감으로 백준 가장 기초 브론즈 1문제, 실버 2문제 정도라고 합니다. 현실적으로 알고리즘 1문제 SQL 1문제 솔 목표를 두고 있습니다. 어떤 걸 집중적으로 공부하는 게 좋을까요? 아래는 작년 유형 및 난이도입니다. 알고리즘 1번. 문자 치환 (가장 기초 브론즈) 1->9 2->8 . . 9->1 0->0 a->z . . A->B . . 예시로 123abcABC => 987zyxBCD 이렇게 변환하는 함수 만들기 알고리즘 2번. 대리출석한 사람 수 (실버3) [1,2][1,2][1,2] =>2 본인 제외 대출이라고 처리 알고리즘 3번. 분할과 정복 (실버1) 정사각형 형태의 데이터를 주고 자를 수 있는거 다 잘라서 그 안에서 또 정사각형을 자르고 그 안에 알파벳 개수 제한 둔 것이 가능한지
안녕하세요. 이전 에러를 해결하고 다시 코드를 잡기 시작했습니다... 에러 내용은 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')