선생님 안녕하세요! Kaggle 노트북(predict.ipynb) 관련해서 문의 드립니다. 강의에서와 같이 Supabase URL/Key를 Kaggle의 Secrets 기능에 등록했는데요, 막상 노트북이 실행될 때마다 Kaggle 웹사이트에서 소스를 열어보면 Secrets가 아니라 실제 키 값이 노트북 코드에 그대로 박혀서 올라가는 현상을 발견했습니다. 클로드 한테 확인했더니 아래와 같이 설명해주었는데요. - app/services/ml_trigger_ service.py 의 push_kernel()이 Kaggle에 push할 때마다, predict.py 원본 코드를 읽어서 .env의 실제 SUPABASE_URL / SUPABASE_KEY(또는 SUPABASE_SERVICE_ROLE_KEY) 값을 노트북 첫 셀에 os.environ[...] = '실제값' 형태로 직접 주입한 뒤, 그렇게 만들어진 predict.ipynb를 push합니다. - 코드 주석에 따르면, 이렇게 우회한 이유는 "Kaggle Secrets(UserSecretsClient)가 API(kaggle kernels push)로 만든 커널에서는 'Connection error'로 실패한다" 는 걸 실측 확인했기 때문이라고 되어 있습니다. 즉 Kaggle 웹 UI에서 직접 만든 커널이 아니라 API로 push한 커널에서는 Secrets 기능 자체가 안 먹혀서, 그 대안으로 값을 직접 박아 넣는 방식을 쓰고 있는 구조였습니다. - 실제로 predict.py 에도 1순위로 os.environ에서 값을 읽고(=주입된 값), 값이 없을 때만 2순위로 Kaggle Secrets(user_secrets.get_secret(...))를 시도하도록 되어 있어서, 제가 등록한 Secrets는 지금 구조에서는 거의 항상 안 쓰이고 있는 상태였습니다. - 제가 Kaggle Secrets 등록 자체는 Kaggle 노트북 편집 화면의 Add-ons → Secrets 메뉴로 등록했고, 이름도 SUPABASE_URL / SUPABASE_KEY(및 SUPABASE_SERVICE_ROLE_KEY)로 코드와 동일하게 맞췄습니다. 제가 여쭤보고 싶은 건: 1. 혹시 제가 Secrets 등록 과정이나 코드 설정(.env, kernel-metadata.json 등)에서 뭔가 빠뜨리거나 잘못한 부분이 있어서 이런 현상이 생긴 걸까요? ㅠㅠ 2. 이게 강의에서 의도하신 정상적인 설계(=Kaggle Secrets는 폴백용이고, 실제로는 매번 키를 직접 주입하는 방식)가 맞는지 확인 부탁드립니다. 감사합니다. 참고 1 : 캐글 실행시 마다 재생성된 predict.ipynb 파일 참고 2 : 캐글 노트북 참고 3 : 캐글 시크릿키 등록
안녕하세요, AWS 입문/실전 강의를 잘 듣고 있습니다. 쉽게 따라할 수 있도록 되어 있어 잘 따라오면서 학습을 진행하고 있습니다. 다만 S3 부분을 들어감에 있어, 설정을 할 때 왜 이렇게 설정을 해야 하는지에 대해 좀 더 자세히 설명을 해주시면 좋을 것 같습니다. 특히 ACL 비활성화와 IAM 사용자 부분이 좀 아쉬웠던 것 같습니다. 우선 S3에 접근을 할 때 'IAM 키로 서명된 요청'과 '인증 정보가 없는 익명 요청'으로 구분될 수 있으며, "인증"이라는 개념을 미리 인지를 하고 있어야 각 경우에 따라서 구분해서 보고 왜 ACL을 비활성화 하는지, 왜 퍼블릭 엑세스 차단을 해제해야 하는지 좀 더 명확하게 이해할 수 있을 것 같습니다. 이러한 "인증"에 대한 인지를 하고 있고, 해당 부분에 대한 이해를 전제로 해야 추후 CloudFront를 도입했을 때도 어떻게 외부에서 S3의 사진을 가져올 수 있는지 명확하게 이해를 하고 활용을 할 수 있을 것 같습니다. 또한 S3에 사진을 업로드 할 때의 차이도 이 "인증"의 개념을 인지하고 있어야 왜 백엔드 서버를 거쳐서 파일을 업로드 하는지, 백엔드 서버에 부담이 될 수 있어 미리 서명이 들어간 presigned-url 방식도 존재한다는 것을 강의를 듣고 직접 찾아보면서 이해하게 되었습니다. 물론 해당 강의가 "AWS 입문/실전"이라는 부분에서 아무래도 쉽게 구현하는 것에 초점이 맞추어져 있다는 부분은 감안을 하면서 듣고 있습니다. 다만 S3의 경우는 아무래도 "인증"이라는 부분과 인증의 유무에 따라 구분해서 설명을 해야 왜 버킷을 생성할 때 이렇게 옵션을 선택을 해야 하는지 명확하게 알고 사용할 수 있을 것 같습니다. 추가로 요즘은 백엔드 서버의 부담을 줄이라고자 presigned-url 방식도 많이 사용한다고 하던데 해당 부분에 대해서도 S3 부분에 추가를 해주시면 더욱 좋을 것 같습니다. 혹시 "AWS 중급/실전"에 있나 봤는데 해당 부분은 없는 것 같습니다. 아직까지 강의를 들었을 때는 S3를 제외한 다른 부분들은 모두 기존의 설명이나 내용만으로도 어느정도 충분히 잘 이해하면서 사용할 수 있었습니다. 아무래도 배우는 입장이다 보니 제가 개념을 찾고 이해를 해나가는 과정에 대한 제 설명이 좀 부족하겠으나, 강의 구성에 있어 해당 부분에 대해 한번 고려해주시면 감사하겠습니다.
안녕하세요, AWS 입문/실전 강의를 잘 듣고 있습니다. 쉽게 따라할 수 있도록 되어 있어 잘 따라오면서 학습을 진행하고 있습니다. 다만 S3 부분을 들어감에 있어, 설정을 할 때 왜 이렇게 설정을 해야 하는지에 대해 좀 더 자세히 설명을 해주시면 좋을 것 같습니다. 특히 ACL 비활성화와 IAM 사용자 부분이 좀 아쉬웠던 것 같습니다. 우선 S3에 접근을 할 때 'IAM 키로 서명된 요청'과 '인증 정보가 없는 익명 요청'으로 구분될 수 있으며, "인증"이라는 개념을 미리 인지를 하고 있어야 각 경우에 따라서 구분해서 보고 왜 ACL을 비활성화 하는지, 왜 퍼블릭 엑세스 차단을 해제해야 하는지 좀 더 명확하게 이해할 수 있을 것 같습니다. 이러한 "인증"에 대한 인지를 하고 있고, 해당 부분에 대한 이해를 전제로 해야 추후 CloudFront를 도입했을 때도 어떻게 외부에서 S3의 사진을 가져올 수 있는지 명확하게 이해를 하고 활용을 할 수 있을 것 같습니다. 또한 S3에 사진을 업로드 할 때의 차이도 이 "인증"의 개념을 인지하고 있어야 왜 백엔드 서버를 거쳐서 파일을 업로드 하는지, 백엔드 서버에 부담이 될 수 있어 미리 서명이 들어간 presigned-url 방식도 존재한다는 것을 강의를 듣고 직접 찾아보면서 이해하게 되었습니다. 물론 해당 강의가 "AWS 입문/실전"이라는 부분에서 아무래도 쉽게 구현하는 것에 초점이 맞추어져 있다는 부분은 감안을 하면서 듣고 있습니다. 다만 S3의 경우는 아무래도 "인증"이라는 부분과 인증의 유무에 따라 구분해서 설명을 해야 왜 버킷을 생성할 때 이렇게 옵션을 선택을 해야 하는지 명확하게 알고 사용할 수 있을 것 같습니다. 추가로 요즘은 백엔드 서버의 부담을 줄이라고자 presigned-url 방식도 많이 사용한다고 하던데 해당 부분에 대해서도 S3 부분에 추가를 해주시면 더욱 좋을 것 같습니다. 혹시 "AWS 중급/실전"에 있나 봤는데 해당 부분은 없는 것 같습니다. 아직까지 강의를 들었을 때는 S3를 제외한 다른 부분들은 모두 기존의 설명이나 내용만으로도 어느정도 충분히 잘 이해하면서 사용할 수 있었습니다. 아무래도 배우는 입장이다 보니 제가 개념을 찾고 이해를 해나가는 과정에 대한 제 설명이 좀 부족하겠으나, 강의 구성에 있어 해당 부분에 대해 한번 고려해주시면 감사하겠습니다.
선생님 안녕하세요! 알파벤티지 api 호출 관련 문의드립니다. 강의 내용만 듣고 문의드립니다.(알파벤티지 호출 실행 안해본 상황) 알파벤티지 무료플랜이 분당 5회 제한으로 알고있는데, sleep을 5초로 하는 경우 분당 최대 10~12회 호출이 될것으로 예상이되는데요, sleep을 최소 12 이상으로 설정하는게 맞지 않나 싶어서 문의드립니다.
지난 한달 동안 모의 계좌에서 테스트를 했습니다. 기대한만큼의 성과를 확인하긴 했는데, 막상 실계좌로 테스트를 하려니 두려움과 망설임이 있네요. 등락이 있긴 합니다만, 최근 한달 간 비교적 상승 구간에 있었기도 했고요. 아무래도 상승장 보다는 하락장에서 얼마만큼 대처해줄 수 있을지가 궁금한데, 미국 주식이다보니 테스트에 들어가는 비용이 커 조심스럽습니다. 먼저 운영해 보신 선배님들의 경험담 있으시면 부탁드려 봅니다.
내도메인한국에서 다음과 같이 CNAME 이름과 값을 입력했는데도 검증 대기중으로 계속 뜹니다. 인터넷에서 내도메인한국에 CNAME값과 이름을 넣을때 CNAME 값에서 .api.내도메인 이름은 제외하고 넣으라고 나와서 입력해서 넣었는데 수정은 잘 됐지만 AWS에 HTTPS 인증서는 계속 기다려도 검증 대기중으로 뜹니다. .api.내도메인을 빼지 않고 넣으면 애초에 수정부터 안되더라구요
pip install -r requirements.txt 라고 터미널에 적었는데 이렇게 떠요 pip : 'pip' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로 그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + pip install -r requirements.txt + ~~~ + CategoryInfo : ObjectNotFound: (pip:String) [], Command NotFoundException + FullyQualifiedErrorId : CommandNotFoundException
C:\Users\USER>git clone https://gitlab.com/banbu3/banbu-stocktrading-final.git 'git'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. C:\Users\USER> 처음부터 소스코드 복사해서 다운받으려고 하는데 저렇게 뜨는데 어떻게 해야 되나요
강사님 답변처럼 SUPABASE_SERVICE_ROLE_KEY 복사하고 붙인 후 실행 했는데도 아래처럼 나오네요. 무시하고 계속 수업 진도를 나갈려고 하는데 내가 워낙 쌩 초보라 13번째 강의에서도 또 언급되길래 계속 무시하고 수업을 끝까지 들으면 해결 할 수 있는지 의심스럽습니다. 그리고 localhost:8000/docs 가 강사님 처럼 열리지 않네요... ㅠㅠ "사이트에 연결할 수 없음. localhost에서 연결을 거부했습니다"라고 하네요 PS C:\박영준\banbu-stocktrading-final> python run.py ⚠ SUPABASE_SERVICE_ROLE_KEY 미설정 - anon 키 사용 중. RLS가 켜져 있으면 쓰기가 차단될 수 있 습니다. Supabase URL: https://fohjixoviclcuwdtadxf.supabase.co INFO: Started server process [23136] INFO: Waiting for application startup. 서비스 시작 시 경제 데이터 수집을 즉시 실행합니다... 경제 지표 및 주가 데이터 업데이트 작업 시작... 2026-07-27 16:39:01,751 - httpx - INFO - HTTP Request: GET https://fohjixoviclcuwdtadxf.supabase.co/rest/v1/economic_and_stock_data?select=%EB%82%A0%EC%A7%9C&order=%EB%82%A0%EC%A7%9C.desc&limit=1 "HTTP/2 403 Forbidden" 마지막 수집 날짜 조회 중 오류 발생: {'message': 'permission denied for table economic_and_stock_data', 'code': '42501', 'hint': 'Grant the required privileges to the current role with: GRANT SELECT ON public.economic_and_stock_data TO service_role;', 'details': None} 2026-07-27 16:39:01,798 - httpx - INFO - HTTP Request: GET https://fohjixoviclcuwdtadxf.supabase.co/rest/v1/economic_and_stock_data?select=%2A&%EB%82%A0%EC%A7%9C=eq.2005-12-31 "HTTP/2 403 Forbidden" 경제 데이터 업데이트 중 오류 발생: {'message': 'permission denied for table economic_and_stock_data', 'code': '42501', 'hint': 'Grant the required privileges to the current role with: GRANT SELECT ON public.economic_and_stock_data TO service_role;', 'details': None} Traceback (most recent call last): File "C:\박영준\banbu-stocktrading-final\app\services\economic_ service.py ", line 134, in update_economic_data_in_background prev_data_response = supabase.table("economic_and_stock_data").select("*").eq("날짜", previous_date).execute() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "C:\Users\박종한\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\postgrest\_sync\request_ builder.py ", line 96, in execute raise APIError(dict(json_obj)) postgrest.exceptions.APIError: {'message': 'permission denied for table economic_and_stock_data', 'code': '42501', 'hint': 'Grant the required privileges to the current role with: GRANT SELECT ON public.economic_and_stock_data TO service_role;', 'details': None} ERROR: Traceback (most recent call last): File "C:\박영준\banbu-stocktrading-final\app\services\economic_ service.py ", line 134, in update_economic_data_in_background prev_data_response = supabase.table("economic_and_stock_data").select("*").eq("날짜", previous_date).execute() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "C:\Users\박종한\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\postgrest\_sync\request_ builder.py ", line 96, in execute raise APIError(dict(json_obj)) postgrest.exceptions.APIError: {'message': 'permission denied for table economic_and_stock_data', 'code': '42501', 'hint': 'Grant the required privileges to the current role with: GRANT SELECT ON public.economic_and_stock_data TO service_role;', 'details': None} During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\박종한\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\starlette\ routing.py ", line 638, in lifespan async with self.lifespan_context(app) as maybe_state: ~~~~~~~~~~~~~~~~~~~~~^^^^^ File "C:\Users\박종한\AppData\Local\Python\pythoncore-3.14-64\Lib\ contextlib.py ", line 214, in aenter return await anext(self.gen) ^^^^^^^^^^^^^^^^^^^^^ async with original_context(app) as maybe_original_state: async with original_context(app) as maybe_original_state: ~~~~~~~~~~~~~~~~^^^^^ async with original_context(app) as maybe_original_state: ~~~~~~~~~~~~~~~~^^^^^ File "C:\Users\박종한\AppData\Local\Python\pythoncore-3.14-64\Lib\ contextlib.py ", line 214, in aenter return await anext(self.gen) ^^^^^^^^^^^^^^^^^^^^^ File "C:\박영준\banbu-stocktrading-final\app\ main.py ", line 18, in lifespan await startup() File "C:\박영준\banbu-stocktrading-final\app\ main.py ", line 48, in startup await update_economic_data_in_background() File "C:\박영준\banbu-stocktrading-final\app\services\economic_ service.py ", line 251, in update_economic_data_in_background raise Exception(f"경제 데이터 업데이트 중 오류: {str(e)}") Exception: 경제 데이터 업데이트 중 오류: {'message': 'permission denied for table economic_and_stock_data', 'code': '42501', 'hint': 'Grant the required privileges to the current role with: GRANT SELECT ON public.economic_and_stock_data TO service_role;', 'details': None}