본문 바로가기

전체

(142)
타입스크립트의 잉여속성검사(Excess Property Checks) 1. 핵심개념객체 리터럴을 변수에 바로 대입하거나 인자로 넘길 때, 그 타입에 정의되지 않은 속성이 포함되면 오류가 발생한다.하지만 일반 변수에 저장 후 넘기면 오류가 발생하지 않는다.interface User { name: string; age: number;}const u: User = { name: "Alice", age: 30, email: "example@example.com"} 위의 코드에서 u의 email User 타입에 없으므로 에러가 발생한다. 하지만 아래와 같은 예시처럼 잉여속성검사를 우회할 수 있다. 1. 구조적 타이핑 : 타입이 선언된 이름과 무관하게 속성의 구조가 같으면 호환된다고 판단하는 방식. 협업 시 유연함을 주지만, 너무 느슨할 수도 있음.// User에는 emai..
FastAPI 학습 5일차 1. SQLAlchemy 사용법파이썬에서 가장 널리 사용되는 SQL Toolkit이자 ORM이다. SQL 쿼리를 Python 코드로 변환할 수 있게 해주고 DB 테이블과 Python 클래스 간의 매핑을 가능케한다.# database/connection.pyfrom sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerDATABASE_URL = ""engine = create_engine(DATABASE_URL, echo=True)SessionFactory = sessionmaker(autocommit=False, autoflush=False, bind=engine)def get_db(): session = SessionFactory..
FastAPI 공부 4일차 1. 파이썬의 비동기 프로그래밍비동기 작업은 보통 async/await 키워드를 사용하여 정의하는데, async를 이용해 비동기함수(코루틴) 정의하고, await를 이용해 비동기 함수 내에서 시간이 오래걸리는 작업을 수행할 때 사용한다. 이를테면 대용량 파일을 읽고 쓰는 작업, db쿼리, 많을 수의 클라이언트를 처리해야 하는 웹서버에서 주로 사용한다.from pydantic import BaseModelclass UserSchema(BaseModel) id: int name: str class Config: orm_mode = True async def get_user_by_id(user_id: int): async with AsyncSessionLocal() as session: ..
FastAPI 공부 3일차 1. 주요 구성요소from fastapi import FastAPIimport uvicorn# 핵심 인스턴스로, 모든 라우팅, 미들웨어, 이벤트핸들러 등을 관리한다.app = FastAPI()if __name__ == '__main__': uvicorn.run(app, host='localhost', port=8000) C나 Java같은 프로그래밍 언어에선 항상 main()이라는 함수를 시작으로 프로그램을 실행시키는데, 파이썬은 main함수가 존재하지 않고 들여쓰기를 통해 코드 실행의 레벨을 결정한다.__name__ 내장변수는 현재 모듈의 이름을 담고있는 내장변수로, 직접 실행된 모듈의 경우 __main__이라는 값을 갖게되며, 직접 실행하지 않은 import된 모듈은 모듈의 이름(파일명)을 갖게 된..
FastAPI 공부 2일차 1. 인증 및 인가웹 인증방법과 도구는 다양하다유저아이디/비밀번호: 전통적인 HTTP 기본 및 다이제스트 인증API 키: 비밀정보가 담긴 임의의 긴 문자열OAuth2: 인증 및 인가를 위한 일련의 표준JSON 웹 토큰(JWT): 암호로 서명된 유저 정보 인코딩 방식# HTTP 기본 인증을 사용해 유저 정보 가져오기: auth.pyimport uvicornfrom fastapu import Depends, FastAPIfrom fastapi.security import HTTPBasic, HTTPBasicCredentialsapp = FastAPI()basic = HTTPBasic()@app.get("/who")def get_user( creds: HTTPBasicCredentials = Depends(..
FastAPI 공부내용 1일차 1. 모던 파이썬1.1 가상환경파이썬은 가상환경을 지원하는데, pip가 다운로드한 패키지를 저장하기 위한 디렉터리다. 가상환경을 활성화하면 쉘은 파이썬 모듈을 로드할 때 이곳을 먼저 확인한다.가상환경을 설정할 때는 venv라는 모듈을 활용하며 독립된 프로그램으로도, 파이썬 모듈로도 실행가능하다.- venv를 파이썬 모듈로 실행하는 명령어python -m venv venv1- 생성한 가상환경을 실행하는 쉘 명령어source venv1/bin/activate 위 명령어를 실행하여 가상환경에 진입하면 앞으로 pip install 명령을 수행할 때마다 venv1 디렉터리 하위에 패키지를 설치한다. 그리고 파이썬 프로그램을 실행하면 venv1에 있는 파이썬 인터프리터와 모듈이 실행된다.1.2 Poetrypip와 ..
도커 컨테이너 tz 설정 서버에서 jwt 토큰을 사용하려 했는데, jwt.io에서 정상인 것을 확인해도 이상하게 verify에서 에러가 발생했다. 기존에 쓰던 코드를 썼던 터라 문제가 없을 것이라 생각했는데, 예외처리가 잘 되어 있지 않아 어디가 문제인지 확인하기 힘들었다. 예외처리에서 error를 받아보니 TokenExpiredError: jwt expired 이 에러가 떴다. 하지만 만료시간은 3600s로 환경변수도 정상적으로 받아오는 것을 확인했다. 알고보니 docker 컨테이너의 time-zone 문제였다. redis 이미지를 사용하기 위해 로컬에서 redis, backend의 컨테이너를 compose로 구동중이었는데, 호스트 컴퓨터와 컨테이너 내부의 시간이 달라서 발생하는 만료에러였다. 일단 이렇게 docker-comp..
데이터 공부 with 파이썬 2일차 데이터베이스 접근 권한이 업격히 관리되거나, 민감한 개인정보가 있거나 아예 네트워크가 분리되어 물리적인 접근이 불가능할 수도 있다. 이럴 때 인증된 URL만 있으면 언제든지 필요한 데이터에 편리하게 접근할 수 있는 방식이 있다. 이럴때 API를 사용해 접근하면 되고 웹 기반의 API가 널리 쓰인다. API를 만드는 것은 프로그래머의 몫이고 데이터분석가는 API를 사용하는 법을 아는 게 중요하다. 1. 데이터 형식 다루기데이터분석가는 웹 기반 API에서 HTML 대신 CSV나 JSON, XML을 사용한다. 특히, CSV는 항목의 개수가 정확하게 맞지 않으면 읽을 수 없고 복잡한 데이터구조를 표현하기 어렵기에 JSON이 선호된다.JSON은 마치 파이썬의 딕셔너리와 리스트를 중첩해놓은 것과 비슷하다. 키와 값..