안녕하세요 선생님, 강의를 정말 재밌게 수강하고 있습니다. 섹션 8 PostgresToSnowflake DAG를 실행해서 Snowflake에 user_session_channel 테이블과 session_timestamp 테이블에 CSV 파일 로드할 때 오류가 있는것 같아요. 간단하게 해결할 수 있는 문제인데 DAG 파이썬 파일에서 os import 구문이 빠져있는거 같아요 import os 이거 넣어서 간단하게 해결했습니다! 좋은 강의 만들어주셔서 감사하고 곧 추가될 강의도 기다리고 있겠습니다!
16:47 부모 클래스의 접근 제어자가 private으로 붙은 메서드의 경우, 자식 클래스에서 재정의 할 수 없다고 하셨습니다. 그렇다면, 해당 예시 문제처럼 업캐스팅이 아닌 일반적인 경우에 대해 문의드리고 싶습니다. Parent obj = new Child(); 가 아닌 Child obj = new Child(); 로 쓴 경우를 생각해 보겠습니다. 이 경우에는 예시 문제와 마찬가지로 부모 클래스에서 접근 제어자가 private으로 설정된 메서드를 자식에서 재정의 할 수 없겠지요. 그렇다면 만약 부모 클래스에 있는 동일한 메서드가 아닌, void display(String name)과 같이 파라미터를 다르게 정의한다면, 자식 클래스에서 정의하여 사용할 수 있을까요?
학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 1. "Message Relay는 전송이 실패한 이벤트에 대해서만 Outbox Table에서 polling하면된다 " 그리고 생성 10초 이후 이벤트를 polling 하는 이유가 "중복 이벤트 발송을 방지하기 위해서"라고 말씀하셨는데 그 부분이 잘 이해가 안됩니다. 우선 첫번째로, 예를 들어 위와 같은 상황에서 1.Article Service는 API 요청을 받으면 2가지 동작을 한다. 2.Message Relay로 직접 이벤트를 전달하고, Outbox table에 이베트를 삽입한다. 위와 같이 이해를 했습니다. 그런데 이 2가지 동작 다음에 "Message Relay는 전송이 실패한 이벤트에 대해서만 Outbox Table에서 polling해서 중복된 이벤트를 처리하는 일이 없도록 한다"라는 동작을 어떻게 어떤 순서로 수행할 수 있는건가요?? 그리고 여기에 추가로 "생성 10초 이후 이벤트를 polling 해서 중복 이벤트 발송을 방지할 수 있다"라는 부분도 어떤 순서로 동작하기에 가능한 일인지 잘 모르겠습니다 제가 헷갈리는 부분은 이벤트를 직접 받기도 하고, 2.위 ppt 설명에서 2개의 애플리케이션이 있다면, 0~1번 샤드와 2~3번 샤드를 각각 polling한다.가 잘 이해가 되질 않습니다. 예를 들어 A 애플리케이션이 0~1번 샤드에 할당된 상태 B 애플리케이션이 2~3번 샤드에 할당된 상태일때, 만약, A 애플리케이션의 데이터가 유실됐다는 오류가 발생 -> Message Relay는 Outbox table에서 0~1번의 샤드만 polling한다. 이런 식으로 이해하면 옳게 이해한 것이 맞을까요? 매번 질문글에 상세한 답변 감사합니다 좋은 하루 되세요
강의를 들으면서 데이터 엔지니어를 준비하고 있는 학부생입니다. 취업사이트에 데이터 엔지니어를 찾아보면 대게 경력 위주로 채용을 진행하고 있는데 데이터 엔지니어가 신입으로 일을 할 수 있는 방법이 있는 지 ? 아니면 신입으로서 바로 데이터 엔지니어로 일하기는 조금 어려운게 현실인지 궁금하여 글 작성합니다. 괜찮으시다면 데이터엔지니어 직무 입사자가 이런 경험이 있으면 채용하겠다는 부분이 있는 지 알려주시면 감사하겠습니다.
안녕하세요. Java의 정적 변수, 정적 메서드(static)강의 중 9분에 나오는 빈칸 채우기 기출 문제에서 질문이 있어서 남깁니다. Test라는 클래스에서 void타입을 리턴하는 static 메서드 main()에서 Test.check(1);을 출력하게 되는데, 이 때 Test는 클래스명이므로, 클래스에서 직접 접근 가능한 메서드이기 때문에 check는 int형 파라미터를 받는 static 메서드인 것으로 보입니다. 혹시, 여기서 앞에 public, private, protected 등을 붙일 경우 오답처리가 되나요?? 아니면, 이런 경우는 명확하게 정답의 글자 수를 알려준다는 등의 방법으로 답이 static이 될 수 밖에 없는 방식으로 문제가 출제되나요? 우선 강의를 다 들은 후에 기출문제를 풀어보려 하니 아직 문제가 나오는 형식을 잘 몰라서 질문을 남깁니다! 추가적으로, 9분 14초 정도에 나오는 기출문제에서, 인스턴스 변수인 name에 접근하기 위해서는 (파라미터를 받는 Person 생성자에서, 인스턴스 메서드인 print()에서) this 키워드를 통해 해당 생성자나 메서드 등을 호출한 주체를 찾아야 한다고 배웠었는데, 왜 여기서는 this.name으로 접근하는 것이 아닌 name으로 접근해도 에러가 발생하지 않는 것인가요??
Sqlalchemy 라이브러리와 Python-oracledb 드라이버를 이용해 DB 연결을 하려고 하는데 쉽지 않습니다.. 저는 service name 정보만 있고 SID 정보는 없는 상태인데, 공식문서를 참고해 아래와 같이 접속을 시도해도 에러가 발생합니다..ㅠ 에러 내용 ) File "src/oracledb/impl/thin/transport.pyx", line 289, in oracledb.thin_impl.Transport.send_oob_break OSError: [Errno 22] Invalid argument DB 접속 코드 ) import sqlalchemy engine = sqlalchemy.create_engine("oracle+oracledb://MY_USERNAME:MY_PASSWORD@MY_DB_HOST:MY_DB_PORT/?service_name=MY_DB_SERVIC_NAME") disable_oob=True로 하면 될 것 같은데, sqlalchemy에서 어떻게 해당 값을 세팅해야 하는지 모르겠습니다...ㅠ 따로 설정파일을 만들어야 하나요?ㅠㅠ
안녕하세요 강사님. 제목의 강의 중에서 depth_first 함수의 동작이 궁금하여 기본 코드에서 "2.코드 변경"과 같이 print 문을 추가 하여 분석 중 "3. 실행결과"와 같이 출력 되는 것을 확인 하였습니다. 질문 Node(3) 출력하기 전에 s-yield가 한번 출력 되어야 할 것 같은데 두 번 출력에 대한 해석이 안됩니다. f-yield Node(3) s-yield Node(1) Node(3) s-yield Node(0) Node(3) Node(3) @@추가 질문을 올려 놓고 고민 하다 보니 Node(1).depth_first() 함수가 한번만 호출 된다고 생각했는데. 프로그램이 종료 될 때 까지 총 4번이 호출 되면 말이 되는 듯 한데.. 추측한 시나리오가 맞는지요? Node(1).depth_first() : next(Node(1)) 4번 호출 Node(3).depth_first() : next(Node(3)) 2번 호출 Node(4).depth_first() : next(Node(4)) 2번 호출 Node(2).depth_first() : next(Node(2)) 3번 호출 Node(5).depth_first() : next(Node(5)) 2번 호출 코드 변경 def depth_first(self): print("f-yield",self) yield self print("f-next",self) for c in self: for x in c.depth_first(): print("s-yield",self,x) yield x print("s-next",self,x) 실행 결과 f-yield Node(0) Node(0) f-next Node(0) f-yield Node(1) s-yield Node(0) Node(1) Node(1) s-next Node(0) Node(1) f-next Node(1) f-yield Node(3) s-yield Node(1) Node(3) s-yield Node(0) Node(3) Node(3) s-next Node(0) Node(3) s-next Node(1) Node(3) f-next Node(3) f-yield Node(4) s-yield Node(1) Node(4) s-yield Node(0) Node(4) Node(4) s-next Node(0) Node(4) s-next Node(1) Node(4) f-next Node(4) f-yield Node(2) s-yield Node(0) Node(2) Node(2) s-next Node(0) Node(2) f-next Node(2) f-yield Node(5) s-yield Node(2) Node(5) s-yield Node(0) Node(5) Node(5) s-next Node(0) Node(5) s-next Node(2) Node(5) f-next Node(5)
안녕하세요, 데이터 엔지니어에 관심을 가지고 이제 막 공부를 시작한 학생입니다. 섹션 8 yfinance 첫 번째 강의를 수강하던 도중에 에러가 생겨서 문의 남깁니다. 작성되어 있는 코드 중에 extract(symbol) >> load(file_path, symbol, schema, table) 이 부분에서 문제가 생겼었습니다. 그래서 file_path = extract(symbol) extract(symbol) >> load(file_path, schema, table) 이렇게 수정해서 오류를 해결했는데, airflow web ui에서 다른 오류가 발생했길래 또 찾아보니 load함수에서 문제가 생긴 것 같습니다. file_path를 load함수에서도 다시 만들어줘서 snowflake에 데이터를 적재할 때 올바른 파일 경로를 찾지 못해서 생기는 오류가 발생하는거 같아요. def load(file_path, schema, table): cur = util.return_snowflake_conn("snowflake_conn") try: cur.execute(f"USE SCHEMA {schema};") cur.execute( f"""CREATE TABLE IF NOT EXISTS {table} ( date date, open float, close float, high float, low float, volume int, symbol varchar )""" ) cur.execute("BEGIN;") delete_sql = f"DELETE FROM {table}" logging.info(delete_sql) cur.execute(delete_sql) # 바로 받은 file_path 사용 (더 이상 경로 재생성 X) util.populate_table_via_stage(cur, table, file_path) cur.execute("COMMIT;") except Exception as e: cur.execute("ROLLBACK;") raise e finally: file_name = os.path.basename(file_path) table_stage = f"@%{table}" cur.execute(f"REMOVE {table_stage}/{file_name}") cur.close() 요렇게 변경해주니까 데모 영상에 나온 것과 같이 똑같이 스노우플레이크에 잘 적재되었습니다.! 제가 제대로 해결한게 맞을까요??
7:36초 부분에 대해 문의드립니다. 자식 클래스를 생성하면 부모 클래스에 있는 기본 생성자인 Car()가 한번 호출된다고 말씀해주셨는데, 만약 자식 클래스의 생성자와 부모 클래스의 생성자에 동일한 파라미터로 구성된 경우에는 어떻게 동작하나요? 예를 들어, 부모 클래스에 Car(String name, Int price)라는 생성자가 있고, ElectricCar(String name, Int price)라는 생성자가 있을때, ElectricCar의 두 파라미터를 입력하여 객체를 생성하는 경우입니다. 이런 경우에도 부모 클래스에서는 파라미터가 들어간 생성자가 호출되는 것이 아니라, 기본 생성자가 호출되나요?
안녕하세요. redis를 공부하던 중 궁금한 점이 생겨서 질문드립니다. 개발상황 window10 springboot 3.4.3 티스토리 를 참고해서 redis 설치 window for docker 설치 문제상황 docker의 compose.yml을 생성해서 docker 이미지(springboot와 redis)를 생성해서 동작을 시켰습니다. 이때 window에서 동작 중인 redis를 중지시키지 않았지만 docker의 redis는 포트 충돌 없이 정상적으로 동작합니다. window와 docker에서 redis가 여전히 동작 중인 것은 확인했습니다. Dockerfile FROM openjdk:17-jdk COPY build/libs/*SNAPSHOT.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"] compose.yml services: api-server: build: . ports: - 8080:8080 depends_on: cache-server: condition: service_healthy cache-server: image: redis ports: - 6379:6379 healthcheck: test: [ "CMD", "redis-cli", "ping" ] interval: 5s retries: 10 docker와 window에서 redis 서버를 동작시키는 상황에서 Windows 명령 프롬프트에서 netstat 명령어를 통해서 포트번호와 IP를 확인했습니다. C:\Users>netstat -ano | findstr :6379 TCP 0.0.0.0:6379 0.0.0.0:0 LISTENING 15492 TCP 0.0.0.0:6379 0.0.0.0:0 LISTENING 19004 TCP [::]:6379 [::]:0 LISTENING 15492 TCP [::1]:6379 [::]:0 LISTENING 3800 아래는 docker redis만 동작시켰을 때 상황입니다. C:\Users>netstat -ano | findstr :6379 TCP 0.0.0.0:6379 0.0.0.0:0 LISTENING 15492 TCP [::]:6379 [::]:0 LISTENING 15492 TCP [::1]:6379 [::]:0 LISTENING 3800 아래는 window redis만 동작시켰을 때 상황입니다. C:\Users>netstat -ano | findstr :6379 TCP 0.0.0.0:6379 0.0.0.0:0 LISTENING 19004 질문 redis는 docker와 window가 다른 네트워크 인터페이스를 가지고 있어서 포트 번호가 같아도 충돌이 나지않는걸까요? 그렇다면 왜 springboot 어플리케이션은 같은 포트로 동작시켰을 때 포트 충돌이 발생하지 않아야하는거 아닐까요? springboot 어플리케이션은 포트 충돌로 인해 docker 또는 window 둘 중 하나에서만 실행시킬 수 있습니다. docker, redis에 깊은 이해를 하고 있지 않아서 많이 어려운 것 같습니다. 문제 접근 방식이 잘못된건지 저에게는 어렵네요
안녕하세요 더치 페이 함수 만들기에서 going_dutch 함수 리턴값 계산하실 때 return float(total) / num_of_ppl 로 int 값인 total을 float으로 바꾸셨는데 굳이 float으로 바꾸신 이유가 궁금합니다 어차피 int끼리 나눗셈(/)을 하면 결과가 무조건 float으로 나오는데, 굳이 total을 float으로 바꾸신 이유가 있을까요? 바꾸지 않아도 결괏값은 float으로 나오지 싶어서요. 답변 기다리겠습니다. 감사합니다
안녕하세요 강의 주제와는 맞지 않는 질문일 수도 있는데 모놀리식 아키텍처에서는 그냥 게시글 생성/수정/삭제, 댓글 생성/삭제 등 이런 로직에서 점수를 업데이트하면 될 것 같아서 그런데 모놀리식 아키텍처에서는 이벤트 방식으로 인기글을 선정하는 방법은 불필요하게 복잡하게 구현하게 되는걸까요?