inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

베개투자법 완성: 아침이 설레는 AI 주식 완전 자동매매 Claude 바이브코딩

기술 지표 (1) SMA·RSI·MACD 계산과 의미

supabase_key 관련

62

박영준

작성한 질문수 6

1

강사님 답변처럼 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}

python 머신러닝 aws FastAPI 퀀트 cloud-computing claude

답변 3

1

박영준

감사합니다

 

0

치트키맨 (치트키 알려주는 남자)

진행하시다가 어려운 부분 있으시면 편하게 질문주세요~ ㅎㅎ

1

박영준

감사합니다. 해 보겠습니다.

0

치트키맨 (치트키 알려주는 남자)

안녕하세요, @박영준님.


Traceback을 보면 startup(lifespan) 단계에서 403 예외가 발생해 서버가 아예 뜨지 못하고 죽습니다. 그래서 "연결을 거부했습니다"가 나오는 겁니다.

SQL 실행 후 서버가 정상 기동되면 /docs도 열립니다.

@박영준 님께서 이전 답변에 댓글로 답변 달아주신 부분에 제가 상세 가이드 작성해놨으니 확인 부탁드립니다.

먼저 아래 내용 확인해주세욥~


  1. 터미널 환경에서 git pull 명령을 통해 레포지토리에 있는 코드를 다시 받아주세요.

  2. sql/errorfix.sql전체 복사 → Supabase 대시보드 SQL Editor에 붙여넣고 Run

  3. python run.py 재실행 → 403 사라지고 데이터 수집 시작되는지 확인

  4. 브라우저에서 localhost:8000/docs 접속 (열리는게 정상입니다. 열리지 않는다면 에러 메시지 지금처럼 드래그해주세요~)

.envSUPABASE_KEY는 anon 키로 되돌리고 SUPABASE_SERVICE_ROLE_KEY= 에 Service Role Key 넣어주면 됩니다.
그래도 안되시면 편하게 다시 질문주세요~

그리고 강의는 쭉 들어주시면 됩니다 ㅎㅎ

오늘 기준으로도 제가 클라우드 환경에서 정상적으로 자동매매 돌리고 있으니 서비스나 소스에 문제가 있는 것이 아니니 걱정하지 않으셔도 됩니다.

마지막까지 들으시고 안되시는 부분이 있으시다면 어떻게든 해결할 수 있도록 도움 드릴 것이니 걱정하지 않으셔도 됩니다.

감사합니다.



1

박영준

강사님 말씀처럼 했습니다.

제대로 했는지 몰라서 아래에 터미널창 내용을 복사해 왔습니다.

글고 브라우저에 localhost:8000/docs 를 치고 접속을 시도했는데 앞 전 상황과 같습니다.

 

PS C:\박영준\banbu-stocktrading-final> git pull

remote: Enumerating objects: 21, done.

remote: Counting objects: 100% (21/21), done.

remote: Compressing objects: 100% (12/12), done.

remote: Total 12 (delta 8), reused 0 (delta 0), pack-reused 0 (from 0)

Unpacking objects: 100% (12/12), 3.28 KiB | 39.00 KiB/s, done.

From https://gitlab.com/banbu3/banbu-stocktrading-final

7635781..7e3482f main -> origin/main

Updating 7635781..7e3482f

Fast-forward

app/db/supabase.py | 21 +++++++++++++++++++++

db_backup/schema/create_all_tables.sql | 14 ++++++++++++++

sql/errorfix.sql | 11 +++++++++++

3 files changed, 46 insertions(+)

PS C:\박영준\banbu-stocktrading-final> python run.py

Traceback (most recent call last):

File "C:\박영준\banbu-stocktrading-final\run.py", line 4, in <module>

uvicorn.run("app.main:app", host="0.0.0.0", port=8000, reload=False)

~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "C:\Users\박종한\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\uvicorn\main.py", line 609, in run

config.load_app()

~~~~~~~~~~~~~~~^^

File "C:\Users\박종한\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\uvicorn\config.py", line 427, in load_app

return import_from_string(self.app)

File "C:\Users\박종한\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string

module = importlib.import_module(module_str)

File "C:\Users\박종한\AppData\Local\Python\pythoncore-3.14-64\Lib\importlib\__init__.py", line 88, in import_module

return bootstrap.gcd_import(name[level:], package, level)

~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "<frozen importlib._bootstrap>", line 1406, in gcdimport

File "<frozen importlib._bootstrap>", line 1371, in findand_load

File "<frozen importlib._bootstrap>", line 1342, in findand_load_unlocked

File "<frozen importlib._bootstrap>", line 938, in loadunlocked

File "<frozen importlib._bootstrap_external>", line 759, in exec_module

File "<frozen importlib._bootstrap>", line 491, in callwith_frames_removed

File "C:\박영준\banbu-stocktrading-final\app\main.py", line 4, in <module>

from app.api.api import api_router

File "C:\박영준\banbu-stocktrading-final\app\api\api.py", line 2, in <module>

from app.api.routes.stock_recommendations import router as stock_recommendations_router

File "C:\박영준\banbu-stocktrading-final\app\api\routes\stock_recommendations.py", line 2, in <module>

from app.services.stock_recommendation_service import StockRecommendationService

File "C:\박영준\banbu-stocktrading-final\app\services\stock_recommendation_service.py", line 8, in <module>

from app.db.supabase import supabase

File "C:\박영준\banbu-stocktrading-final\app\db\supabase.py", line 5, in <module>

from app.core.config import settings

File "C:\박영준\banbu-stocktrading-final\app\core\config.py", line 109, in <module>

settings = Settings()

File "C:\박영준\banbu-stocktrading-final\app\core\config.py", line 86, in init

super().__init__(**kwargs)

, in init

super().__init__(**__pydantic_self__.__class__._settings_build_values(sources, init_kwargs))

~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "C:\Users\박종한\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\pydantic\main.py", line 263, in init

validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)

pydantic_core._pydantic_core.ValidationError: 1 validation error for Settings

SUPABASE_SEVICE_ROLE_KEY

Extra inputs are not permitted [type=extra_forbidden, input_value='eyJhbGciOiJIUzI1NiIsInR5...wuzJtDE-KZyPTkm1awcZ5v4', input_type=str]

For further information visit https://errors.pydantic.dev/2.13/v/extra_forbidden

 

 

화면 캡처 2026-07-20 094255.png

 

 

화면 캡처 2026-07-20 094255_1.png

 

그리고 cursor를 실행할 때 항상 초기화면이 위 사진처럼 뜨던데 아래 사진처럼 초기화면이 뜨게 할 수 있는 방법이 있나요?

0

치트키맨 (치트키 알려주는 남자)

안녕하세요 박영준님!

우선 커서는 IDE가 업데이트 된 것이어서 저도 그렇게 로딩하고 있습니다.. ㅠ

에러 로그를 보시면:

.env 파일의 변수명에 오타가 있습니다. SUPABASE_SEVICE_ROLE_KEY라고 되어 있는데, SERVICE에서 R이 하나 빠져 있는 것 같습니다.

1️⃣ .env 파일을 열어 해당 줄의 변수명을 아래와 같이 정확히 수정해 주세요 (키 값은 그대로 두시면 됩니다):

SUPABASE_SERVICE_ROLE_KEY=eyJ...(지금 넣어두신 키 그대로)

2️⃣ 터미널에서 git pull 한 번 더 받아주세요. 같은 실수로 서버가 아예 멈추는 일이 없도록 방어 코드를 추가해 두었습니다.

3️⃣ python run.py 재실행 후 아래 두 가지를 확인해 주세요:

SUPABASE_SERVICE_ROLE_KEY 미설정" 경고가 사라졌는지

Supabase 키 role: service_role 로그가 찍히는지

4️⃣ 이전에 안내드린 sql/errorfix.sql을 아직 Supabase SQL Editor에서 실행 안 하셨다면 이것도 꼭 실행해 주세요. (이미 하셨다면 넘어가시면 됩니다)

여기까지 하면 403 에러 없이 데이터 수집이 시작되고, localhost:8000/docs도 정상적으로 열릴 겁니다.

혹시 그래도 안 되면 지금처럼 터미널 내용 전체를 복사해서 올려주세요.

이번처럼 로그만 있으면 바로 원인을 찾아드릴 수 있습니다. 😊

알파벤티지 sleep(5) 관련 문의

0

3

0

실전 계좌에서 운영하고 계신 분 계신가요?

1

16

2

클로드

0

37

2

pip install -r requirements.txt

0

44

2

명령 프롬프트

0

34

2

slack 알림 연동 강의 관련

1

66

2

python run.py 실행시 에러 문제

1

89

2

커서창

1

61

2

cursor 환경

1

61

2

개발 환경 준비와 프로젝트 구조 강의 관련

1

55

2

저장 공간

1

56

2

colab 코드 실행시 error

1

49

2

llm_decision_logs 저장 실패(실적 컬럼 불일치)를 어떻게 해결할까요?

2

73

4

kaggle notebook에 service key 설정이 누락된 것 같습니다

1

63

2

주말에 실행할 경우 update_economic_data_in_background에 로직 변경 필요성

1

54

1

프로그램 실행시간에 대한 질문

1

58

2

비중 및 매수 종목수 조정.

1

61

2

Claude api가 소식 동기화가 늦는 문제

1

73

2

슬롯 관련 문의

1

49

2

실제 계좌 잔고 및 테스트중에

1

107

4

안녕하세요

1

91

3

매일 사용시 토큰사용량

1

110

2

LLM판단에 문제가 있는 것 같습니다

1

64

2

실습 2인데 커서아이디 같은거 다운로드 안내같은건 따로없나요??

1

53

2