https://www.inflearn.com/community/questions/487783/spring-cloud-gateway-amp-spring-cloud-load-balancer-%EC%A7%88%EB%AC%B8?srsltid=AfmBOoroscC0EG50YWUDqmgSBoxbGx8lo0JYvHvfdvEwmK-5hlUs6HmE Spring Cloud Load Balancer와 Spring cloud Gateway의 차이점에 대해서 궁금해서 알아보던 중에 위의 질문을 보게되었습니다 강사님께서 LB에 대한 처리를 eureka(service discovery)에서 하고있다고 하셨는데 제가 알기로는 eureka에서는 따로 로드밸런싱 기능이 없고 서비스의 인스턴스를 요청하면 모든 인스턴스 목록을 리턴하고 이걸 받은 클라이언트측에서 받은 리스트 중 선택하는걸로 알고 있습니다. 그리고 강의에서 gateway에도 로드밸런싱 기능이 있다고 말씀하셨는데 그럼 gateway에서 로드밸런싱을 하는게 맞는것 같아서요..! 이 부분이 헷갈려서 질문드립니다. 정리하자면 eureka에서 로드밸런싱을 한다는게 하나의 서비스에 대해서 로드밸런싱이 아닌 여러 서비스 중 요청한 서비스를 찾아서 리턴하는 개념으로 로드밸런싱을 하고 있다고 한건지 그게 아니라면 자체적으로 eureka에서 로드밸런싱 기능을 제공하는게 맞는지 eureka에서 로드밸런싱 기능을 제공하는게 맞다면, gateway에 로드밸런싱 기능이 있는데 그럼 이건 eureka와 연동되는 경우에는 사용하지 않을텐데 (eureka에서 이미 로드밸런싱을 한 이후이므로) 어떠한 경우에 gateway에서 로드밸런싱을 사용하는지 위의 사항이 궁금합니다!
Buffer Cache 개념 및 Buffer Cache Access 메커니즘의 이해 강의 6분 30초 쯤 나오는 내용에 질문이 있습니다. Select * from customer where id = '005' 위의 쿼리가 있을 때 아래와 같은 설명이 있습니다. "설명에서는 Data Dictionary 등의 내부 정보를 통해서 Custormer 테이블의 id='005' 데이터가 있는 Block의 DBA 정보를 알아냄" 그런데 이 내용이 이해가 되지 않습니다. 조건 값으로 어떻게 Block 3에 있는지 알 수 있는지요? 풀스캔을 제외하고 바로 찾으려면 인덱스의 ROWID 값을 이용해야 하지 않나요?
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요! 먼저 유사한 질문이 있었는지 검색해 보세요. 서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요. 경계값을 테스트할 때는 하나의 테스트 메서드 안에 모두 작성하는게 맞는건가요? 상품 등록시 상품 번호의 증가로 예를 들면 한 자리 -> 한 자리 ( 1 -> 2 ) 한 자리 -> 두 자리 ( 9 -> 10 ) 두 자리 -> 세 자리 ( 99 -> 100 ) 이런 식으로 작성할 수 있을 것 같은데, 이렇게 경계값에 대한 모든 경우를 한 메서드에 작성하는게 맞는 것 같긴한데, 경계값이 많아지면 좀 알아보기 힘들 것 같아서 여쭤봅니다..
수업을 적용하며 크롤링 연습을 하고 있는데, 웹 크롤링 대상중 웹에디(smart_editor2) 안의 텍스트를 크롤링하는 방법이 궁금합니다. 셀레니움을 활용하여 적용하고 있는데 웹에디터는 접근이 잘 안되고 접근이 된것 같은데 텍스트가 출력되지 않습니다 어떠헥 해야 할지 모르겠어서 질의 드려요 외부 접근되지 않는 사이트이고 아이디 비번은 마스킹 처리한 코드는 아래와 같습니다. 결국 아래 부분이 문제인것 같은데 에디터 내 텍스트 추출 방법을 몰라 문의드려요 try: driver.switch_to.frame("iframe4dummy") # 🔹 iframe 내부로 이동 # 🔹 iframe 내부에서 특정 클래스("se2_inputarea")를 가진 body 태그 찾기 # 🔹 iframe 내부의 `body` 태그에서 텍스트 가져오기 body = driver.find_element(By.CSS_SELECTOR, "body") answer = body.text.strip() print("✅ HTML 에디터 내용:", answer) # 🔹 다시 원래 페이지로 복귀 driver.switch_to.default_content() except Exception as e: print("❌ iframe 전환 실패 또는 body 태그를 찾을 수 없습니다:", str(e)) from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from urllib.parse import urlencode # URL 파라미터 추가용 import time import random import openpyxl import requests from bs4 import BeautifulSoup from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC newscralling =[] import pyautogui import pyperclip #크롬 드라이버 자동 업데이트 from webdriver_manager.chrome import ChromeDriverManager # #브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) service = Service(executable_path=ChromeDriverManager().install()) driver = webdriver.Chrome(service = service) # 웹페이지 해당 주소 주소이동 driver.implicitly_wait(2) #웹페이지가 로딩 될때까지 5초 대기 driver.maximize_window() driver.get("https://OOO") #아이디 입력창 id = driver.find_element(By.CSS_SELECTOR, ".submitLogin.text:nth-of-type(1)") id.click() pyperclip.copy("id") pyautogui.hotkey("ctrl", "v") time.sleep(0.3) # id.send_keys(Keys.TAB) # #비밀번호 입력창 직접입력 # time.sleep(7) pw = driver.find_element(By.CSS_SELECTOR, ".login ul li:nth-of-type(2) input") pw.click() # pw.send_keys("비밀번호") pyperclip.copy("pass") pyautogui.hotkey("ctrl", "v") #로그인 버튼 login_btn = driver.find_element(By.CSS_SELECTOR, ".btnLogin") login_btn.click() time.sleep(1) params = { "counselProcStatus": 2, "page": 1, "pageSize": 2 } #SSL인증 비활성화에 대한 경고메시지 삭제 import urllib3 urllib3.disable_warnings() qna_list_url = "https://OOO"+ urlencode(params) driver.get(qna_list_url) html = driver.page_source soup = BeautifulSoup(html, 'html.parser') articles = soup.select(".boardListStyle table tbody tr") import openpyxl from datetime import datetime wb = openpyxl.Workbook() ws = wb.active ws.title = "온라인상담_접수중" ws.append(["date", "category", "title", "quest", "answer", "man", "status"]) crowling = [] for article in articles: title = article.select_one(".alignLeft a").text date = article.select_one(".boardListStyle table tbody td:nth-of-type(4)").text category = article.select_one(".boardListStyle table tbody td:nth-of-type(2)").text status = article.select_one(".boardListStyle table tbody td:nth-of-type(7)").text link = 'https://OOO/'+ article.select_one(".alignLeft a").attrs['href'] title_link = f'=HyPERLINK("{link}", "{title}")' #상세 페이지 요청 driver.get(link) time.sleep(2) # 페이지 로딩 대기 detail_html = driver.page_source detail_soup = BeautifulSoup(detail_html, 'html.parser') quest = detail_soup.select_one(".con_txt").text try: driver.switch_to.frame("iframe4dummy") # 🔹 iframe 내부로 이동 # 🔹 iframe 내부에서 특정 클래스("se2_inputarea")를 가진 body 태그 찾기 # 🔹 iframe 내부의 `body` 태그에서 텍스트 가져오기 body = driver.find_element(By.CSS_SELECTOR, "body") answer = body.text.strip() print("✅ HTML 에디터 내용:", answer) # 🔹 다시 원래 페이지로 복귀 driver.switch_to.default_content() except Exception as e: print("❌ iframe 전환 실패 또는 body 태그를 찾을 수 없습니다:", str(e)) #answer = detail_soup.select_one(".se2_input_area.husky_seditor_editing_area_container iframe").text man = detail_soup.find('th', string="작성자").find_next_sibling().text crowling = ws.append([date, category, title, quest, answer, man, status]) driver.back() # 브라우저에서 '뒤로 가기' 실행 print(date, category, title, quest, answer, man, status) now = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"온라인상담_{now}.xlsx" wb.save(filename)
학습 관련 질문을 남겨주세요. 자세하게 남겨주면 더 좋습니다. 안녕하세요 docker 설치하고 말씀하신 이미지 다운받아 실행하니 이미지와 같이 포트를 허용할수 없다는 에러가 나옵니다. gpt보며 이거저거 해보았는데 방법이 잘못되었는지 해결이 되지 않습니다. 혹시 어떻게 하면 되는지 알려주시면 감사하겠습니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] plugins { id 'java' id 'org.springframework.boot' version '3.4.2' id 'io.spring.dependency-management' version '1.1.7' } group = 'study' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //test 롬복 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') } 프로젝트 세팅하면서 두 가지 궁금한게 있습니다. 강의 교안에 나와있는것처럼 세팅을 완료하였는데, "Gradle -> Tasks -> other -> compileQuerydsl" 여기서 compileQuerydsl이 보이지 않습니다. compileJava를 하면 Q도메인이 생성되는데, 이러면 문제 없는게 맞을까요 ? Q도메인을 보면, 아래와 같이 javax.annotation.이 생성되는데, 이건 jakarta가 아니어도 상관 없는것일까요? package study.querydsl.entity; import static com.querydsl.core.types.PathMetadataFactory.*; import com.querydsl.core.types.dsl.*; import com.querydsl.core.types.PathMetadata; import javax.annotation.processing.Generated; import com.querydsl.core.types.Path; /** * QHello is a Querydsl query type for Hello */ @Generated("com.querydsl.codegen.DefaultEntitySerializer") public class QHello extends EntityPathBase<Hello> { private static final long serialVersionUID = 1910216155L; public static final QHello hello = new QHello("hello"); public final NumberPath<Long> id = createNumber("id", Long.class); public QHello(String variable) { super(Hello.class, forVariable(variable)); } public QHello(Path<? extends Hello> path) { super(path.getType(), path.getMetadata()); } public QHello(PathMetadata metadata) { super(Hello.class, metadata); } } 감사합니다.
4강 수업을 위해 Infinity Blade: Warriors를 다운받으려고 하는데 fab으로 바뀌어서 검색이 되지 않습니다. 자료다운을 통해 Github에서 언리얼에디터파일을 다운받았으나 에디터가 실행은 되나 Animation폴더 내 애셋 전체가 에러가 나면서 실행되지 않습니다. 또한 Animation폴더를 다른 언리얼에디터 프로젝트로 migration하거나 직접 content폴더내로 이동해도 계속 에러가 납니다. Infinity Blade: Warriors 파일을 다운 받도록 도와주세요~
powershell에서는 usermod -aG 명령어로 정상적으로 권한부여 됐는데(docker run hello-world) vscode 터미널에서는 권한부여가 자꾸 오류납니다 같은 환경이라고 생각해서 powershell에서 계속 작업을 했었는데, dev container reopen할때 권한 오류가 나더라구요. 원인이 무엇일까요? 재부팅 및 terminal kill해도 해결이 안되네요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 1. 제네릭은 생성자를 통해 인스턴스를 생성하는 시점에 타입이 결정된다. 2. 코드로 타입 인자가 전달되면 자바 컴파일러는 제네릭 정보를 이용해서 해당 타입을 이해한다. 3. 자바 이레이져에 의해 컴파일 후 제네릭 정보가 사라진다 => 상한인 Object로 변경됨 제네릭 적용이 이런식으로 진행된다고 이해를 했습니다. 그러면 배열에 타입 인자를 적용하더라도 결국 상한인 Object로 변경되어서 코드가 돌아가지 않나요? private E[] elementData; public MyArrayListV4() { elementData = new E[DEFAULT_CAPACITY]; } 자바가 E를 알 수 없어서 사용 불가능하다는 부분이 이해가 잘 안됩니다... 제가 어떤 부분을 놓치고 있는 걸까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] While (index > = 0) 내부 코드에 궁금한 점이 있어서 질문을 드립니다. 제공해주신 코드 일부입니다. while (index >= 0) { index = str.indexOf(key, index + 1); System.out.println("index = " + index); count++; } System.out.println("count = " + count); } 결과를 보면, index = 18 index = 32 index = -1 이 순서대로 출력이 됩니다. 궁금한점 입니다. 1번 질문입니다. 18, 32, -1이 출력 된 뒤 count가 1씩 증가했습니다. 제가 생각하기에는 6, 18, 32가 출력이 되고 count = 3이 출력되어야 하지 않나 생각들었습니다. 제 생각이 맞는지 확인받고 싶습니다. 2번 질문입니다. 제가 수정한 코드의 일부입니다. 이 코드가 타당한지 검토받고 싶습니다. 감사합니다. while (index >= 0) { index = str.indexOf(key, index + 1); System.out.println("index = " + index); if (index == -1) { break; } count++; } System.out.println("count = " + count); }
안녕하세요 UT 설계시 성공/실패 기준을 세우는게 중요하다고 말씀해주셨는데요, 이 기준을 세우는 부분이 아직 어렵게 느껴져서 질문드립니다! 예시로 보여주신 아이패드 문제집 UT의 경우에는 성공/실패 기준을 어떻게 세우셨는지 궁금합니다. 특히 인터뷰를 통해 아날로그 방식을 고집할 필요가 없다고 판단되어 OMR카드에서 직접 보기를 클릭하는 방향으로 디자인이 수정되어있는데, 이 판단의 근거는 무엇이었는지 궁금합니다!