안녕하세요 조은님! 완강 후에 Data Fetching 관련해서 질문 드릴게 있어서 왔습니다. Q. Next 12에서는 정적인 페이지와 주기적으로 데이터 값이 바뀌어야 할 때 (SSG, SSR) 등 상황에 맞게 Data Fetching을 사용하고 있었는데 Next 13에서는 Server component 만으로 SSG와 SSR을 대체가 가능한걸까요? Q. 강의에서 데이터를 가져올 때 fetch를 사용하셨었는데 Server component에서는 fetch 말고 axios를 사용해도 상관없는지 궁금합니다. Q. 저는 아래와 같이 axios를 사용해서 Time 데이터를 가져왔는데 캐시 비우기 버튼을 누르지도 않았는데 새로고침 할 때 마다 초가 계속 바뀌더라구요(disabled cache 체크 안했습니다!) 그래서 fetch로 바꾸어서 해봤더니 강의에서 나온 것 처럼 잘 동작하고 있었습니다. 혹시 어떤 차이가 있는건지 궁금합니다. import customAxios from "./customAxios"; import { METHOD } from "@/type/common"; export const getTime = async (timeZone: string) => { const data = await customAxios( METHOD.GET, `https://timeapi.io/api/Time/current/zone?timeZone=${timeZone}`, { next: { tags: ["time"] } } ); return data; };
nvm for window 설치해서 어찌저찌 확인했고 node.js 도 설치했고 npm도 했고 Android studio도 시키는대로 찾아가면서 했고 환경변수 설정도 https://www.inflearn.com/questions/62082/window 아래 링크 따라서 했고 Java설치는 도저히 윈도우에서 설치 확인을 할 수 있는 방법이 없어서 모르겠습니다. 하지만 링크따라서 오라클 로그인 후 다운로드 했고 JDK를 받은거 같습니다. Xcode와 cocoapod 그리고 React native CLI는 window에서는 다운로드 받을 방법을 못찾겠어서 포기했고요, VScode는 원래 깔려있으니 패스 그리고 결과물 뭐가 문제일까요 아래 링크도 참조하고 할 수 있는 건 다 해봤습니다. https://learn.microsoft.com/en-us/windows/dev-environment/javascript/react-native-for-android
제가 이해하기로는 port 는 서비스에 대한 식별 번호이고, nc -v [ip] [port] 를 통해 연결 여부를 확인할 수 있다고 알고 있습니다. 즉, 방화벽에 의해 클라이언트 pc가 연결이 안되면 nc -v 명령어가 연결 안된다고 결과를 내뱉는다고 들었어요. 즉, nc -v [ip] [port]는 해당 ip를 가진 서버 pc에서 특정 서비스 port로의 연결 상태를 확인 가능하다. 라고 이해하고 있습니다. 서버 pc가 해당 서비스를 제공하기 위해서 클라이언트 pc로의 연결 상태를 확인하고 싶을 수 도 있잖아요.. 뭐 예를 들어 클라이언트 pc 쪽에도 방화벽이 걸려 있을 수 있으니까.. 그럴때는 어떻게 확인해야 해요??? nc -v [클라이언트pc의 ip] 를 입력하니까 port 를 적으라고 하는데... nc -v 명령어에 사용되는 port 는 서버 쪽에 설정된 port 정보 아닌가요....? 만약 서버 : ip : 1.1.1.1 , port : 14433 클라이언트 : ip : 55.5.5.5 라고 가정했을 때 클라이언트 입장에서 서버에 있는 14433 서비스를 이용하기 위해 연결 여부 확인하려면 nc -v 1.1.1.1 14433 을 입력하면 되는건 이해했습니다. 근데 반대로 서버 입장에서 클라이언트에 연결됐는지 확인하기 위해서 nc -v 55.5.5.5 14433 을 입력을 하는 게 이해가 안가요.. 저기 있는 14433은 서버 pc에 설정된 port 아닌가요..?
QueryDSL 을 Test 하는데 계속 실패가 나고 해당 에러를 보니 아래와 같이 나옵니다. java.lang.NullPointerException at com.querydsl.jpa.impl.JPAProvider.getTemplates(JPAProvider.java:88) at com.querydsl.jpa.impl.JPAQuery.<init>(JPAQuery.java:48) at com.springboot.jpa.QueryDSLTest.queryDslTest(QueryDSLTest.java:19) 소스는 아래와 같이 구현을 했는데요 디버깅을 해보면 entityManager가 null 로 노출이 됩니다. 디버깅을 해보면 @PersistenceContext 을 붙히면 된다고 해서 했는데도 동일하게 에러가 나서 질문을 올려봅니다. 해당 테스트 코드 입니다. import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; import com.springboot.jpa.data.entity.Product; import com.springboot.jpa.data.entity.QProduct; import org.junit.Test; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import java.util.List; public class QueryDSLTest { @PersistenceContext EntityManager entityManager; @Test public void queryDslTest() { JPAQuery<Product> query = new JPAQuery<>(entityManager); // QueryDSLTest.java:19 QProduct qProduct = QProduct.product; List<Product> productList = query.from(qProduct) .where(qProduct.name.eq("Kim")) .orderBy(qProduct.price.asc()) .fetch(); for (Product product : productList) { System.out.println(product.getName()); System.out.println(product.getPrice()); System.out.println(product.getStock()); } } }
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아이템 28 마지막 요약에 제네릭은 불공변 이고 타입 정보가 소거된다. 그 결과 배열은 런타임에는 타입 안전하지만 컴파일 타임에는 그렇지 않다. 제네릭은 반대다. 라고 적혀있는데 배열이 런타임에 타입 안전하다는게 이해가 잘 안됩니다. Object[] objectArray = new Long[1]; /* ArrayStoreException 발생 */ objectArray[0] = "타입이 달라 넣을 수 없음"; //ArrayStoreExcpetion 위 코드 처럼 공변되면서 런타임에 에러가 나는데 저장 했을때 저장 시점에 에러를 반환하면 타입 안전하다고 하는건가요? public class Chooser<T> { private final T[] choiceArray; public Chooser(Collection choices) { choiceArray = (T[]) choices.toArray(); } public T choose() { return choiceArray[0]; } public static void main(String[] args) { Collection<Integer> choices = new ArrayList<>(); choices.add(1); choices.add(2); choices.add(3); Chooser<String> chooser = new Chooser<>(choices); System.out.println(chooser.choose()); //ClassCastException } } 제네릭은 저장 시점에는 잘못된 형식의 데이터가 들어갔는지 런타임에 검사 할 수 없기 때문에 런타임 시점에 안전하지 않다고 하는건가요?
질문1 카이제곱검정 적합도검정 독립성검정 3가지 강의를 듣다보니 그전 카테고리 강의인 독립표본검증과 문제가 유사해보이는데 어떨때 독립표본검정으로 판단하고 ttest를 쓰고 어떨때 적합도검정 or 카이제곱검정을 쓰는지요? 독립표본검정도 서로다른 두 집단이 관련있는지 보는것이었고 독립성검정이나 적합도검정도 문제가 비슷해보이는데요.. 질문2. 카이제곱검정이랑 단일표본검정도 문제가 비슷하게 느껴집니다..구분하는 방법이 있을까요? t
연관관계의 주인 개념이 이해되지 않아 판도라의 상자...아니 chatGPT로 확인해보려 했습니다. 뭔가 chatGPT와 대화(?)를 이어가다가 제가 아래와 같이 질문을 던졌어요. 1. 연관관계의 주인이 N:1에서 N쪽이라면 @ManyToOne에 mappedBy를 설정하든, 설정하지 않든 상관 없이 N쪽이 주인이다. 2. 반대로 연관관계의 주인이 1쪽이라면 @OneToMany에 반드시 mappedBy를 설정해야 한다. 3. 스프링은 개발자가 어떠한 시나리오를 개발자가 가지고 있는지는 알 수 없기 때문에 @ManyToOne, @OneToMany, 및 mappedBy를 어떻게 사용하느냐에 따라 연관관계의 주인이 결정된다. 정말 이해가 안 가서 한 질문이었습니다. (연관관계 매핑을 3번을 들었지만 아직 제가 부족한가봐요…) 그랬더니 대답이 이랬습니다. 1. 맞습니다. 연관 관계의 주인은 대개 연관 관계의 소유자가 되는 엔티티입니다. 따라서 N:1 관계에서 N 쪽이 주인이라면 `@ManyToOne` 에 `mappedBy` 를 설정하든 말든 상관 없습니다. 그러나 관계의 주인이 명시적으로 지정되면 JPA에서 연관 관계를 관리할 때 더 명확하게 동작할 수 있습니다. 2. 맞습니다. 1:N 관계에서 연관 관계의 주인을 1쪽으로 지정할 때 `@OneToMany` 에 `mappedBy` 를 설정해야 합니다. `@ManyToOne` 쪽에는 주인을 지정할 수 없습니다. 3. 맞습니다. 프로그램 자체는 개발자의 의도를 인지할 수 없으며, 연관 관계의 주인을 결정하려면 `@ManyToOne` , `@OneToMany` , 그리고 `mappedBy` 어노테이션을 어떻게 사용했는지를 확인해야 합니다. 이 어노테이션들은 연관 관계의 매핑을 정의하고 어떤 엔티티가 연관 관계의 주인인지 나타냅니다. 따라서 어떻게 설정되었느냐에 따라 연관 관계의 주인이 결정됩니다. chatGPT도 실수할 때가 있어서 3번 정도 물어봤는데 거의 같은 대답을 했습니다. 그리고는 더 이상 대화가 이어지지 않았는데 이 말이 맞는지 아닌지를 아직 모르기 때문입니다. 죄송하지만 chatGPT의 대답을 신뢰해도 될 지 답변을 부탁드립니다.
안녕하세요 강사님. 크롬드라이버를 따로 업데이트 하는 로직으로 구현해서 크롤링중입니다. 문제는 url을 호출해서 크롬이 열리면 오래전 구글 화면이 나옵니다. 결과도 물론 옛날꺼구요,, 아래 그림처럼 오른쪽 화면이 나옵니다. 드라이버를 업데이트 하는 방식이 아닌 다른 방식을 사용 했을 때 작동이 안되고 오류가 나기 때문에 이 방식으로 사용하고있었습니다. 일단 실행해서 작동하는 부분만 코드 첨부하겠습니다 ㅠㅠ 해결방안을 알려주세용.. 드라이버를 다운받아서 하는 방식은 에러가 나기 때문에,, 크롬드라이버 업데이트 하는 방식으로 진행해야할것같습니다.. 그리고 크롬드라이버를 업데이트 하는 방식은find_elements를 사용해야하는데 imgs = browser.find_elements(By.CSS_SELECTOR, '.rg_i.Q4LuWd') 해당 부분에서 .click을 지원하지 않는데 어떻게 해야할까요 아래 전체 코드 첨부합니다! 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 # 크롬 드라이버 자동 업데이트 from webdriver_manager.chrome import ChromeDriverManager 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 가속 비활성화 # Mozilla 웹 브라우저에서 온 것처럼 인식 / 자동화된 요청을 감지하고 차단하는 것을 우회 chrome_options.add_argument("--user-agent=Mozilla/5.0") # 불필요 메세지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) # 드라이버 업데이트 service = Service(executable_path=ChromeDriverManager().install()) # 옵션 적용 browser = webdriver.Chrome(service=service, 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=580120143&hl=ko&tbm=isch&sxsrf=AM9HkKmDd46NefxcclWk71YsVWobVHQsIw:1699362285857&source=lnms&sa=X&ved=2ahUKEwicopLr-bGCAxXV-mEKHbygCZgQ_AUoAXoECAMQAw&biw=1455&bih=705&dpr=1.1' # 구글 browser.implicitly_wait(5) browser.maximize_window() browser.get(path) before_h = browser.execute_script("return window.scrollY") # 무한스크롤 while True: time.sleep(2) # 맨 아래로 스크롤을 내림 browser.find_element(By.CSS_SELECTOR,"body").send_keys(Keys.END) # 스크롤 후 높이 after_h = browser.execute_script("return window.scrollY") # 스크롤 높이가 맨 아래와 같다면 무한루프 탈출 if after_h == before_h: break # 스크롤 높이 업데이트 before_h = after_h imgs = browser.find_elements(By.CSS_SELECTOR, '.rg_i.Q4LuWd')
spring bean 에 등록 된 bean객체는 getter 와 setter로는 왜 접근이 안되는지 궁금해졌습니다... OrderServiceImp 클래스 내부에 public void setAge ( int age) { this . age = age ; } public int getAge () { return age ; } 이런식으로 해놓고 @Test void orderServiceTest () { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig. class ) ; OrderService bean = ac.getBean(OrderService. class ) ; System. out .println(bean.getAge()) ; } 테스트 코드를 이렇게 짜니 bean.getAge() 부분이 에러가 납니다..ㅠㅠ 왜그런건가요 ? 혹시 제가 다형성에 대해 잘못 이해를 하고 있는걸까여 .. 구현체가 인터페이스라서 그런걸까요 ..ㅠ ? OrderService의 구현체는 현재 orderServiceImpl하나라서 저렇게 접근해도 된다고 해서 반환 타입을 Orderservice로 받았습니다 !
강의 보기전 제가 문제를 제대로 이해 했는지 모르겠으나, 첫줄6과 7을 비교를 처음 시작, 그 이후 부터 자신의 바로 앞 수보다 큰 수만 출력 이렇게 이해해서 filter와 삼항연산자를 이용하여 풀어보았습니다. function solution(num, array) { return array.filter((v, index) => index === 0 ? v > num : array[index] > array[index - 1] ); } console.log(solution(6, [7, 3, 9, 5, 6, 12]));
백엔드 엔지니어가 먼저 되어야 할까요? 스프링을 배워야 할까요? 데이터 엔지니어가 백엔드부터 배워야 하는 이유ㅣ4년차 현직자의 솔직한 조언 - YouTube 개발자 진로는 농업 데이터 엔지니어가 되고싶습니다 팜모닝 데이터 분석가 | 그린랩스 (greenlabs.co.kr)