본문 바로가기

전체 글

python에서 모듈 import 할 때 헷갈린다면? 파이썬에서 패키지를 만들고 모듈을 import 하려는데 모듈을 못찾는 경우가 종종있다. 예를들면 아래과 같은 케이스가 있다..├── pack│ ├── __init__.py│ └── mod.py└── index.pymod.py 에는 hello_print 라는 함수가 작성되어 있고 index.py에서 이 hello_print 함수를 호출하고 싶은 상태이다. 그래서 index.py를 아래와 같이 작성하면 어떻게 될까?import pack.mod.hello_printhello_print 함수를 찾을수 없다고 나올 것이다.아마 import에서의 .(점) 과 메소드 호출에서의 .(점)의 역할을 혼동해서일것이다. import에서의  .(점)은 파일상의 경로를 나타낸다. mod파일이 모듈로 불러온 이후에는 he.. 더보기
데이터 관리 인터페이스 회고 크롬 익스텐션을 개발하면서 데이터는 로컬 스토리지에 저장했다. 데이터는 당연히 key-value 구조로 저장된다.키 값은 {table}:{primaryKey} 와 같이 구성했다. 예를들면 student:INU201500000 와 같은 형태이다.정말 간단히 table네임을 키값으로 두고 하나에 객체 구조로 저장해도 됐지만 최대한 동시 수정 상황을 피하고 싶었다.// 간단한 구조{ student: { INU201500000: {...}, INU201500001: {...}, }}// 채택한 구조{ student:INU201500000: {...}, student:INU201500001: {...},}이런 커스텀한 키 관리 규칙 때문에 따로 ORM 라이브러리를 쓰지 않았다. 그런데 이로인해 .. 더보기
vue app 외부에서 메소드 호출하기 크롬 익스텐션 프로그래밍을 하다가 난관에 부딪혔다. content 영역의 특정 버튼을 클릭하면 vue로 작성된 모달이 열리도록 했는데 이 때 모달이 열릴때마다 매번 데이터를 새로 불러오도록 설계했다. 간단히 코드로 설명하면 아래와 같다.버튼 문제는 모달을 여닫는 해당버튼은 vue app에 포함되지 않는다는 점이다. 데이터를 불러오는 메소드는 app내에 정의되어 있는데 어떻게 호출할 수 있을까? 이것이 내가 당면한 문제였다. 외부에서 app의 메소드에 직접적으로 접근해서 호출할수 있을지 방법을 찾아봤지만 아무래도 어려워보였다.// 아래처럼 호출할 방법이 있을지 찾아봤다.app.config.globalProperties.reloadData()다행히 다른 해결방법을 찾아냈다. 버튼을 클릭할때 사용자 정의 이벤.. 더보기
크롬 익스텐션 sendResponse 응답값 전달 안 되는 문제 content_script에서 chrome.runtime.sendMessage로 메시지를 보내면 background에서  chrome.runtime.onMessage.addListener로 받아서 sendResponse로 응답을 보내도록 했다. 간단히 코드를 구성하면 아래와 같다.// content.jschrome.runtime.sendMessage({ action: "test", data: "Hello world",}).then(response => { console.log(response)})// background.jschrome.runtime.onMessage.addListener(async (message, sender, sendResponse) => { if(message.action .. 더보기
크롬익스텐션 content_script의 world속성 크롬익스텐션 프로그래밍중 fetch함수를 래핑해서 내 입맛대로 로직을 구성해보려 했었다. 즉, 아래와 같은 로직이 이뤄지길 바랬다.const originalFetch = window.fetchwindow.fetch = async (...args) => { // handle args ... return await originalFetch(...args)}이렇게 content_script에 등록해두면 동작이 이뤄지겠지? 전혀 아니었다. fetch함수를 확인해봐도 내가 선언한 함수로 재정의 되어있지 않고 그대로였다. 찾아보니 content_script는 격리된 Javascript 환경에서 실행된다 어쩌구 그러더라. 그래서 보안문제 등으로 안 되는가보다 하고 빠르게 납득했는데... 사실 위와 같은 기능을 .. 더보기
Firestore를 Python에서 사용할때 주의할점 Firestore세팅을 마치고 serviceAccountKey.json도 생성해서 로컬에 저장했다. 자 이제 잘 연결됐는지 확인해볼까?import firebase_adminfrom firebase_admin import credentials, firestore# Firebase 프로젝트 초기화cred = credentials.Certificate("./serviceAccountKey.json")app = firebase_admin.initialize_app(cred)print("Firebase App Name:", app.name)print("Project ID:", app.project_id)# Firestore 클라이언트 테스트db = firestore.client()print("Firestore C.. 더보기
PayPal 결제 API 사용 후기 아직까진 시스템에 적용해서 배포한건 아니다. 지금 개발중인 크롬 익스텐션의 BM을 구독으로 하려고 한다. 그 과정에서 회원 관리는 Firebase Authentication을 사용하고 구독 결제는 PayPal의 Subscription시스템을 이용하려 한다. 그리고 user_id와 subscription_id의 매칭은 Firestore Database에 저장해서 관리하고 간단한 백엔드는 Firebase Functions로 구성해서 개발공수를 최대한 줄이고 시스템을 이용하려했다. PayPal을 사용하기로 결정한 이유는널리 쓰여지고있는만큼 기존 사용자가 많아서 고객들이 좀 더 결제하는데 어려움을 덜 느낄거라고 생각했다한국의 다른 결제 서비스들은 구독과 같은 정기결제를 적극적으로 지원해주는 곳이 없다. 카드 .. 더보기
python패키지 관리를 poetry로 해보자 지금까지는 pip을 사용해서 python패키지 관리를해왔다. 그 과정에서 불편했던 점들이 있었고 그런 문제를 해결할 수 있었던 npm같은 패키지 관리툴이 부러웠다. 기존에는 다운로드했던 패키지들을 pip freeze > requirements.txt로 export한 후에 다른 작업공간에서 pip install -r requirements.txt로 불러들였다. 혹시라도 pip install로 설치해놓고 깜박해서 pip freeze를 해두지 않으면 문제가 생길수밖에 없는 구조이다.또 기존에는 pip install을 통해 새로 패키지를 추가할때마다 기존 패키지의 버전을 보장할수 없었다. 예를들어 어떤 패키지가 requests그리고 기존 방법으로는 개발환경에서만 설치하는 패키지를 분리할수 없었다. black, .. 더보기