Vite + Build + Root
Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/html". Strict MIME type checking is enforced for module scripts per HTML spec.
Streamlit에 Google login 컴포넌트를 만들어 넣고 있는데, URL로 불러오면 잘 보이는 것이 build해서 File로 serving하면 위와같은 메시지를 뿌린다.
뭘까? 한참을 읽어보고 network tab에서 읽어들이는 위치를 찾아보고 나서 이해가 된다.
http://localhost:9020/component/login_component.login_component/index.html?streamlitUrl=http%3A%2F%2Flocalhost%3A9020%2F
이 녀석이 Vite에서 생성된 index.html을 Streamlit에서 호출하는 녀석인데, Build된 녀석은 나름 저 혼자 돌아가는줄 알고 있을터이니, 빌드한 결과가 “/“로 잡혀있을 것이 분명했다.
Swagger + OAuth2
목표
- swagger에서
- google oauth를 swagger authorize ui에 적용
- 인증된 Token을 각 API에서 Header에 설정 할 수 있도록
custom open api
from fastapi.security.oauth2 import OAuth2AuthorizationCodeBearer
from fastapi.openapi.models import OAuthFlows as OAuthFlowsModel, OAuthFlowAuthorizationCode
from fastapi.openapi.models import SecurityScheme as SecuritySchemeModel
from fastapi.openapi.utils import get_openapi
# --------------------------------------------------------------
# Google oAuth2
CLIENT_ID = "...알아서"
CLIENT_SECRET = "...알아서"
TOKEN_URL = "...알아서"
AUTHORIZATION_URL = "...알아서"
class OAuth2Google(OAuth2AuthorizationCodeBearer):
def __init__(self):
super().__init__(authorizationUrl=AUTHORIZATION_URL, tokenUrl=TOKEN_URL)
oauth2_scheme = OAuth2Google()
# --------------------------------------------------------------
# Auth for Swagger
def custom_openapi():
if app.openapi_schema:
return app.openapi_schema
openapi_schema = get_openapi(
title="FastAPI with Google OAuth2",
version="1.0.0",
description="This is a FastAPI application integrating Google OAuth2",
routes=app.routes,
)
openapi_schema["components"]["securitySchemes"] = {
"OAuth2Google": {
"type": "oauth2",
"flows": {
"authorizationCode": {
"authorizationUrl": AUTHORIZATION_URL,
"tokenUrl": TOKEN_URL,
"scopes": {
"openid": "OpenID Connect",
"email": "Access to your email address",
"profile": "Access to your basic profile info"
}
}
}
}
}
app.openapi_schema = openapi_schema
return app.openapi_schema
# open api 변경
app.openapi = custom_openapi
이런 간단한 코드로 아래와 같은 훌륭한 화면을 도출 해 낼 수 있었으나.
HASS + Sonoff
Image Sample
![]() |
|---|
| configuration.yaml을 바꾸라는 정성스런 이미지. |
HASS OS를 올리고 sonoff를 위해 eWelink를 설치한것 까지는 좋았는데, 이 녀석이 동작을 안한다.
switch.turn_on을 찾을 수 없다는 메시지만 보여주고 답이 없다.
웃기는건 이전 버전에 어찌어찌 설치한 녀석들은 좀 야매스러워도 즉각 반응하는 것이 좀 이상했다.
약간의 구글링을 통해서 이 답변을 보고 configuration.yaml을 어찌 찾을 수 있을까 생각 해보니 SSH Addon이 보여서 설치하고 들어가.. 어 이미지에 있는 설정을 한땀 한땀 키인하고 재시작을 했더니 잘 적용이 된다.
HASS OS + Rpi3B
![]() |
|---|
| HASS OS Boot Image |
얼마전 NAS로 사용하고 있던 Ubuntu의 메모리가 2G인 것을 보고 깜짝 놀랐다. 최소 4G는 끼워준것같았는데.. 거기서 돌리고 있던 각종 서비스를 생각하면 너무한가 싶기도 하고 전혀 불편을 모르고 있었다는 것이 말이다.
지금 확인해봐도 1G사용에 800M cache다
토요일 처음 시작은 거실에서 사용하던 Rpi3+MPD에 Creative Roar2 Speaker를 USB로 붙이는 것이었는데, 자연스럽게 인식하던 Audio Engin2+와 다르게 usb device는 인식이 되는데 audio card에는 올라오지 않는다.
자 이렇게 뭔가 뜻하던 것이 안되는 상황이 되면, 그것을 해결하기 위해서 문제를 더 크게 만드는 재주가 있는듯 하다.
Swagger에 Google oAuth를 적용하며
Swagger에 Google oAuth를 적용하는 시도를 하고있었다.
대충 다 맞게 적용한거 같은데 자꾸만 redirect_uri_mismatch를 반환하는 것이다.
![]() |
|---|
| Swagge에서 보여주는 메시지 |
Google Console에서 설정하려고 아무생각없이 긁었는데.. 그게 문제다.
http://localhost:9031/docs/oauth2-redirect flowName=GeneralOAuthFlow
중간에 공백이 왜 있을까? 고민을 살짝 했으나.. 출력의 문제라고 판단하고
http://localhost:9031/docs/oauth2-redirect?flowName=GeneralOAuthFlow
당연히 될 일이 아니다.
결론은 아래와 같다.
http://localhost:9031/docs/oauth2-redirect
안내 메시지의 출력시 개행은 항상 중요하다.
요청 세부정보:
redirect_uri=http://localhost:9031/docs/oauth2-redirect
flowName=GeneralOAuthFlow
Memory 8G
![]() |
|---|
| cpu-x |
개인적으로 사용하고 있는 개발 노트북 녀석이 자꾸 죽어서 이상하다 생각하지 않고(AMD Vega Driver 이슈라고 막연히 생각) 있다가 혹시나 하는 생각에 메모리를 봤더니 8G.
음..
이 상태에서 Oracle XE를 올리고 몇 가지 서비스를 마구 올렸더니 뭔가 아주 느려지는 현상을 보여서 다 되서 그런가 보다 하고 있었는데..
많이 힘들었나 보다.
Memory 확인하는 명령어
Arch인 경우 pamac로 설치하면 된다. cpu-x dmidecode -t 17 (17번이 메모리인가 보다)
harlequin/dblab + Oracle
Github: Oracle + harlequin
Github: Oracle + dblab
1st
![]() |
|---|
| Oracle + dblab |
“한글"에서 “글"이 사라졌다. 뭐.. 깨지는 거야 입출력 Char Set이 안맞아서 그런다하지만 말이다.
2st
![]() |
|---|
| Oracle + dbeaver |
| 중간에 깨진 한글은 init.sql로 입력한 것이다. |
3st
![]() |
|---|
| Oracle + harlequin |
| sqlplus로 입력한 것, dbeaver에서 입력한것. 아무 설정도 하지 않은 상태에서 보는 것은 좀 무리가 있다. |
4st
![]() |
|---|
| Oracle + harlequin |
| harlequin으로 입력하고 난 다음 select로 혹시나 입력되었나 찾아보는 것. |
결론
한 이틀동안 신나게 Oracle을 설정하면서 재미나게 놀았으나, Oralce Docker내부에 Terminal SQL Client를 내재하는것은 딱히 sqlplus에 비해서 나은점이 없는 것으로 보인다.
startup은 되는데 setup은 안되는 이유? (Docker+OracleXE)
startup은 되는데 setup은 안된다.
![]() |
|---|
| 컨테이너를 시작 할 때마다 Script가 실행되고 있다. 이걸 바라는건 아니다. |
Oracle Docker Image설명에도 분명하게 나와있는 사항이기는 한데.
Docker Image를 만들면서 초기 Script를 넣어두는 작업을 하다가 보니 startup에 넣어둔 sql은 매번 구동이 되는데, setup에 넣어둔 sql은 처음 한 번만 실행 될 것을 기대했으나. (실행이)안된다.
setup에 DBMS, User를 생성하는 SQL을 넣어두러고 했던 것이다.
포기하고 다른 방법을 찾는다.
![]() |
|---|
| 빌드를 완료하고 화면상에 스크립트를 호출하는 명령을 출력한다. |
하루정도 투자 해서 이리해보고 저리해보다 포기하고 궁여지책으로 명령어를 출력하는 것으로 한다. 알아서 잘 사용해야 한다.
UUID V7과 DBMS (feat. harlequin)
![]() |
|---|
| VSCode terminal에서 harlequin을 실행한 모습 |
Mariadb Docker 환경(Github)을 하나 만들어 두려고 Dockerfile을 만지작거리고 있다보니 얼마전에 Geeknews에서 본 harlequin과 uuid를 PK로 가지는 것에 대한 논의가 혼합되면서 이왕이면 하는 생각으로 적용시켜보기로 한다.
사실 UUID의 경우 프로젝트에서 interface 전문의 PK로 많이 사용하기는 했지만, V4였기 때문에 조금 아쉬움이 있었다.(내가 생성하는 주체가 아니었기 때문에 V7으로 못했었다.)
mariadb에서 기본으로 제공하는 uuid() function은 아마도 v1인거 같아 따로 function을 만들어 넣었는데, 데이터 생성후 성능테스트까지는 안해봤다.
harlequin은 처음에 host에서 구동 할 생각이었으나, 특정 작업을 진행하는 도구로서 terminal은 언제나 아쉬움이 있기에 함께 넣어봤다.
코레일 잔여 승차권은 무슨 일이 있는 것일까?
![]() |
|---|
| 문제의 기차 예약 현황 |
아침 기차를 타고 서울에 갈 일이 생기는 상황이라 아주 오래된 코레일 멤버쉽을 이용해 예매를 하고 있다.
여의도로 출근하는 사람이 많아서일까? 8시 7분 기차는 거의 매진인 상황인데, 그 다음 기차인 8시 16분 기차는 낮에는 매진이지만, 새벽 2시에는 좌석이 없다가 새벽 4시가 되면 귀신처럼 좌석이 생기는 현상을 경험하고 있다.
이 단순한 현상만 가지고 유추해 볼 수 있는 것은.
- 부지런한 사람들이 새벽에 일어나서 취소를 하거나 예매를 하거나.(나처럼 말이다.)
- 코레일에서 새벽에 배치로 뭔가 조건에 부합하는 잔여좌석(묶어뒀던)을 배치를 돌려 방출하거나.
- 개인에게는 허락되지 않은 API를 사용 할 수 있는 어떤 조직(여행사?)에서 매크로(배치)를 돌리고 있거나.
사실 금일 새벽 3시에 조회를 했을 때에는 잔여좌석이 없어서 며칠간 추리를 하고 있던 것을 수정해야 하나? 하고 있었다.











