본문 바로가기

분류 전체보기

(24)
Developer 로서 문제정의? OutlineSoftware Engineer로서 문제를 어떻게 바라보고, 확장하고, 정의하는지 고민해본다. Contents문제정의란, 인터넷에 많은 정의가 있지만 결국은 정상적이지 않은 상황을 인지하고, 이를 객관적으로 표현하는 것이다.그리고, Developer로서 해당 문제를 해결할 수 있는 방법들을 수립하고, 방법을 선택 후 그 방법이 문제를 해결하는데 적합한지 확인해야한다. 그리고 최종적으로는 정상적인 상황으로 해결하는 것이라고 생각한다. 문제정의를 하는 방법에 대해서는 모두가 다르다고 생각한다.회사의 상황(정책, 금전적, 비즈니스 모델)과 조직의 규모 그리고 팀장의 매니징에 대한 관점에 따라서 다를 것이고, 이 문제를 어느 관점에서 해결해야하는 가에 대한 입장에 따라서도 다를 것이다. 그러나, 결..
[python fastapi] Depends에 동적으로 parameter 사용하기 Why?코드의 깔끔함을 위해서, 조금 더 재사용성이 좋고, API에 명시적으로 권한을 보고 싶어서 진행. 본문fastapi에 Depends()를 이용해서, user를 판별하고 있었고, 특정 API 마다 접근 할 수 있는 role을 부여하고 싶었다.예를 들면, admin만 접근 할 수 있는 API라던지, 로그인 한 유저라면 얼마든지 사용할 수 있는 API 라던지. 다만, 고려했던 사항은, router 내부에 코드를 추가하고 싶지 않았다. router의 Depends() 레벨에서 해결하고 싶었다. 아래는 간단하게 작성한, prototype code 이다.from fastapi import HTTPException, Depends, FastAPIfrom fastapi.security import OAuth2P..
[python] shallow copy, deep copy, pass by assignment Why?예상한 대로 메모리 할당이 되지 않는 것 같아서 테스트 진행서론swallow copy는 원본 메모리를 참조한다.deep copy는 새로운 메모리에 할당한다.재할당(초기화)는 위와 다른 얘기다(새로운 메모리).본문mutable listlistsetdictimmutable listtupleboolintfloutstrfrozenset헷갈렸던 부분python tutor라는 사이트를 발견했고, 이 사이트에서 메모리 테스트를 하다가, 예상과 다르게 동작해서 다시 찾아보게 되었다.https://pythontutor.com/visualize.html#mode=edit 공식 문서의 이론은 다음과 같다.https://docs.python.org/ko/3/library/copy.html얕은 복사는 새로운 복합 객체를..
[python] vscode dotenv.load_dotenv() os.getenv()가 최신화 되지 않는 문제 Why?vscode에서 python 개발을 할때 .env파일을 변경했음에도, os.getenv()를 진행하였을 때, 기존의 값이 적용됨. 문제 원인python 개발을 진행할 때, vscode에서 venv를 이용하여, python main.py와 같이 terminal 실행을 자주 하는데, terminal에 최신 환경변수가 적용되지 않아서 발생함. 테스트 코드import psycopgfrom fastapi import FastAPIimport dotenvimport osimport uvicorndef get_db_connection(): dotenv.load_dotenv() DB_NAME = os.getenv("DB_NAME") URL = f"postgresql://postgres:passw..
[TimescaleDB] timezone이 필요한 날짜 데이터 빠르게 select 하기 들어가기 앞서TimescaleDB는 PostgreSQL 진영의 time series 데이터를 저장하기 위한 DB이다. 시계열 데이터를 처리하기 위해 최적화된 데이터베이스로, 실시간으로 쌓이는 대규모 데이터를 처리하기 위해 만들어졌다. 이 글을 작성하는 이유는, timezone을 계산해야하는 상황에서 쿼리가 보다 빠르게 동작시키기 위해서 고생한 흔적이 들어있다. 내용환경설정DB 실행docker run -d --name timescaledb -p 5432:5432 -e POSTGRES_PASSWORD=password timescale/timescaledb:latest-pg15 Table 생성create table realtime_datas ( id serial, event_time timestamptz no..
[TimescaleDB documents] time_bucket() Why?영어 공부 및 지식 습득Summarytime_bucket()을 이용하면, 시간 버킷을 단위로 데이터를 집계할 수 있다.내용TimescaleDB를 이용하면, time_bucket()함수를 사용 할 수 있는데, 이는 사용자가 원하는 시간 만큼 집계를 가능하게 한다. PostgreSQL의 date_bin() 함수와 비슷한데, 시작 시간과 버킷의 사이즈에 대해서 더 좋은 확장성을 가지고 있다. 시계열 데이터를 다루려면, 반드시 다운 샘플링(시간 빈도를 줄이는 것)이나 분석이 필요하다. Bucketing이 동작하는 방식time interval을 이용해서, 데이터를 그룹한다. time_bucket()함수는 interval length로 microseconds, milliseconds, seconds, min..
[fastapi documents] OpenAPI operationId Why?영어 공부 및 지식 습득SummaryOpenAPI에 API의 식별자를 변경할 수 있다.OpenAPI에서 API를 제외 시킬 수 있다.내용사용자 정의 OpenAPI path사용자가 직접 OpenAPI의 path operation을 operation_id를 이용해서 설정할 수 있다.from fastapi import FastAPIapp = FastAPI()@app.get("/items/", operation_id="some_specific_id_you_define")async def read_items(): return [{"item_id": "Foo"}]결과아래와 같이 구성하면, 함수 이름을 OpenAPI path operation으로 사용하는 것이 가능하다.from fastapi import..
[python documents] python3.11 pep655 TypeDict Why?영어 공부 및 지식 습득SummaryTypeDict의 각 요소에 required, not-required를 표시 할 수 있게 됨.내용Required, NotRequired를 이용해서, 각각의 요소들이 필요한지 여부를 쉽게 표현할 수 있다. 기존에는 이를 위해서 상속을 받아야 했다.기본적으로는 모든 field는 Required이지만, total parameter를 False로 셋팅하면, NotRequired가 기본이 된다.class Movie(TypedDict): title: str year: NotRequired[int]m1: Movie = {"title": "Black Panther", "year": 2018} # OKm2: Movie = {"title": "Star Wars"} # ..
문제를 정의 하는 방법에 대해서 Outline전략 기획을 담당하는 분과 대화를 하면서, 느꼈던 점에 대해서 정리한다.Contents대부분의 사람들이 해당하겠지만, 나는 문제를 직감적으로 느끼는 편인 것 같다. 사람들과 비즈니스 대화를 하거나, 일을 하거나 무언가 생산적인 일을 할때 현재 수면위로 올라오지 않은 문제점을 직감적으로 느낀다.예를 들면, 보통 대화나, 일을 하다 보면 다음과 같은 생각이 들 때가 있다.왜 이 주제로 대화가 나왔지?나는 왜 이 상황을 모르지?이 작업이 왜 반복되지?내가 가져야할 목표는 뭐지?우리의 목표는 뭐지?개발자라는 직업을 가져서 인지, 문제를 발견하면, 해결책을 고민하게 되는데 이 부분이 대해서 전략기획 담당자와 대화를 했다.내가 꺼냈던 말은 다음과 같다. 나: "책을 읽어보니, 사용자 스토리 맵이라는 방..
[python documents] python3.11 pep594 사용 중단된 기본 모듈 목록 Why?영어 공부 및 지식 습득Summarypython3.13부터 삭제될 모듈들을 사용 중단 처리 하였다.내용중단된 모듈 리스트aifcchunkmsilibpipestelnetlibaudioopcryptnissndhdruucgiimghdrnntplibspwdxdrlibcgitbmailcapossaudiodevsunau추가 정보asynchat, asyncore, smtpd이 3개의 모듈은 python3.6부터 사용 중단 처리되어 있었는데, 이제 python3.12에서 삭제 됨을 문서에 업데이트 했다.lib2to3, 2to3 패키지는 python3.10버전 이상으로 parsing이 정상적으로 동작하지 않을 수 있다. 새로운 PEG parse에 대해서는 pep617을 확인하면 된다.삭제 이유더 이상 잘 사용되지..
[python documents] python3.11 pep 681(Data class transforms) Why?영어 공부 및 지식 습득summary몇몇 인기 있는 라이브러리에는 dataclasses와 유사하지만, standard type annotation을 사용해서 설명할 수는 없다.위에 해당하는 라이브러리는 attrs, pydantic, ORM 등을 말한다.contentsmotivationdataclass와 비슷한 라이브러리가 type checker들에 자신의 동작을 선언할 수 있는 표준 방법이 없다.커스텀 라이브러리가 존재하나, 유지가 어렵고, 파이썬 개발자도 다운로드, 설정하고 사용해야한다.rationale(이유)dataclass와 비슷한 모든 라이브러리의 기능을 지원하는 것은 아니다.라이브러리들의 일반적인 기능을 정적 타입 체크와 호환되는 방식으로 사용할 수 있게 한다.라이브러리들이 지원하지만, ..
[python documents] python3.11 pep654(ExceptionGroup) Why?영어 공부 및 지식 습득Summarypep654는 프로그램이 관련없는 에러, 예외 사항 여러개를 동시에 발생시키고, 처리할 수 있게 한다.ExceptionGroup, BaseExceptionGroup이라는 기본 type으로 이를 가능하게 한다.except* 문법은 예외 그룹의 하위 그룹과 일치하도록 일반화 할 수 있다.(ExceptionGroup 처리)contentsneeds지금까지 interpreter는 순간에 1개의 에러만 전파하는게 가능했다. chaning기능은 원인과 내용으로 서로 관련된 예외를 연결하지만, 스택이 풀릴 때 관련이 없는 여러 에러들이 전파되기를 원할 수 있다.real world use casesconcurrent errorsmultiple failures when retry..
[Python documents] python3.11 속도 Why?영어 공부도 할겸, 필요한 부분만 번역서론python3.11은 공식문서에 따르면, 10 ~ 65% 빨라졌다.일반적인 경우를 벤치마크한 결과 약 1.25배의 성능 향상을 보인다.내용측정 방법Ubuntu Linux에서 GCC로 컴파일을 진행하여, pyperformance benchmark suite로 성능 측정 결과 Cpython3.10 보다 25% 빠르다.Interpreter 실행이 빨라진 이유python 3.10python3.10의 경우 module을 실행할 때 다음과 같은 순서로 진행된다.Read __pycache__ -> Unmarshal -> Heap allocated code object -> Evaluatepython 3.11python3.11은 필수적인 코어 모듈들이 동결되었다. 이는 ..
[TimescaleDB] TimescaleDB 동작 방식 Why? 동작원리를 이해함으로써 추후 문제의 원인 파악보다 넓은 관점에서 해석 가능하다. TimescaleDB? PostgreSQL을 기반으로하는 오픈소스 시계열 데이터베이스이다. 시계열 데이터를 효율적으로 저장하고, 쿼리를 할 수 있는 기능을 담당한다. 현재의 많은 기업들의 비즈니스 모델이 시계열 데이터를 기반으로 하는 만큼 PostgreSQL 진영에서 많이 사용된다. Hypertable TimescaleDB는 시계열 데이터를 관리하기 위해서 "하이퍼 테이블"을 이용한다. 하이퍼 테이블은 데이터를 시간별로 자동으로 분할하는 PostgreSQL 테이블이다. 하이퍼 테이블의 장점은 일반 PostgreSQL 테이블과 동일한 방식으로 하이퍼 테이블과 상호 작용하지만, 시계열 데이터를 보다 빠르고, 쉽게 관리할..
[클라우드] AWS와 같은 클라우드 컴퓨팅 서비스는 어떻게 모든 EC2에 IPv4를 제공해줄까? 의문의 시작? 과거부터 "IPv4의 공간이 부족해서..." 이런 문장을 많이 접했다. 그래서 사설 IP 개념이 나온 것도 부족한 IPv4를 해결하는데 적합했다라는 내용도 많이 보았다. 그런데 아마존의 AWS와 같이 클라우드 컴퓨팅 서비스를 제공하는 모든 회사들은 IPv4를 통해서 사용자가 서비스를 publish 할 수 있게 해준다. 예를 들어, EC2를 할당 받아서 웹서버를 열면 IPv4 80번 포트로 접근하면 해당 웹서버에 요청을 보낼 수 있다. 의문이 들기 시작한다. IPv4 수가 부족한데, 몇 개나 생성될지 모르는 EC2(클라우드 컴퓨팅)에 하나하나 IPv4를 부여해준다고 ?!?!! 검색 전 나의 생각 1. IPv6 스타링크도 IPv6를 이용한 통신을 한다고 언뜻 들었다. 과거에 IPv6 통신 수가..