본문 바로가기

분류 전체보기58

이펙티브 파이썬 3장 - 함수 Better way 19 함수가 여러 값을 반환하는 경우 절대로 네 값 이상을 언패킹하지 말라함수가 여러 값을 반환하는 경우, 언패킹 과정에서 오류가 일어나기 쉽다.# 안좋은 예시 - 언패킹하는 인자에서 순서가 바뀌었을 때, 오류를 인지하기 어렵다def get_stats(numbers): minimum = min(numbers) maximum = max(numbers) count = len(numbers) average = sum(numbers) / count return minimum, maximum, count, average# 정상적으로 호출minimum, maximum, count, average = get_stats([1,2,3,4]) # average, count 순서를 .. 2025. 3. 17.
[FastAPI] SQLModel 1. SQLModel이란?기존 Python SQL ORM 구현체인 SQLAlchemy와 검증 패키지 Pydantic을 결합한 Python 라이브러리이다.데이터베이스 작업을 보다 간결하고 직관적으로 수행할 수 있다.SQLAlchemy의 ORM 기능을 유지하면서도 Pydantic의 데이터 검증 기능을 제공하는 것이 특징이다.  2. SQLAlchemy vs SQLModelSQLAlchemy는 두 가지 주요 API 스타일을 제공한다.SQLAlchemy Core: 저수준 SQL 표현을 사용하여 SQL을 직접 다룰 수 있도록 설계됨SQLAlchemy ORM: 객체-관계 매핑(Object-Relational Mapping)을 통해 Python 클래스로 DB 모델을 다룰 수 있음SQLModel은 SQLAlchemy .. 2025. 3. 14.
이펙티브 파이썬 2장 - 리스트와 딕셔너리 Better way 11 시퀀스를 슬라이싱하는 방법을 익혀라a = ['a', 'b', 'c', 'd', 'e']# 처음 또는 끝까지 슬라이싱 할때는 처음과 끝 인덱스를 생략하자assert a[:5] == a[0:5] # Trueassert a[5:] == a[5:len(a)] # True# 슬라이싱 결과는 새로운 객체b = a[3:]assert a is b # False (다른 객체)assert a[3:] == b # True# 시작과 끝 인덱스 생략하면 원래 리스트를 복사한 리스트b = a[:]print(b)>>> ['a', 'b', 'c', 'd', 'e'] Better way 12 스트라이드와 슬라이스를 한 식에 함께 사용하지 말라# 슬라이드 list[시작:끝:증가값]x = ['빨강', '주황', .. 2025. 3. 12.
로드 밸런서 (Load Balancer) 1. 로드 밸런서란?로드 밸런서(Load Balancer)는 여러 서버로 들어오는 네트워크 트래픽을 효율적으로 분산하는 장치 또는 소프트웨어를 의미한다. 이는 특정 서버에 과부하가 걸리는 것을 방지하고, 성능을 최적화하며, 고가용성을 보장하는 역할을 한다. 2. 로드 밸런서의 필요성부하 분산: 다수의 서버에 트래픽을 고르게 분산하여 특정 서버의 과부하를 방지고가용성(High Availability): 일부 서버가 장애가 나더라도 서비스가 지속 가능하도록 보장확장성(Scalability): 서버를 추가하여 더 많은 트래픽을 처리할 수 있도록 지원보안 강화: 특정 서버의 직접적인 접근을 차단하여 보안을 강화할 수 있음 3. 로드 밸런서의 작동 방식로드 밸런서는 클라이언트의 요청을 여러 서버로 나누어 전달하며.. 2025. 3. 10.
이펙티브 파이썬 1장 - 파이썬답게 생각하기 Better Way 3. bytes와 str 차이를 알아두라# 잘못된 예print(b"hello" + "world") # TypeError 발생# 올바른 예print(b"hello" + b"world") # bytes끼리 결합 가능print("hello" + "world") # str끼리 결합 가능bytes와 str은 결합이 불가능 # 텍스트 모드로 파일 읽기 (str 반환)with open("example.txt", "r", encoding="utf-8") as f: text = f.read() print(text)# 바이너리 모드로 파일 읽기 (bytes 반환)with open("example.txt", "rb") as f: binary_data = f.read() prin.. 2025. 3. 6.
200년간 폐관수련했더니 PS 최강자가 된 건에 대하여 from collections import namedtuplefrom sys import stdinContest = namedtuple("Contest", ["limit", "prize"])N = int(stdin.readline())contests = [ Contest(*map(int, stdin.readline().split())) for _ in range(N)]result = "Kkeo-eok"total_prize = 0max_prize = 0skip_prize = 0skip = Falsefor limit, prize in contests: if total_prize - skip_prize > limit: # 넘어간 상금 기준으로 계산 if skip: # 불참한 적이 .. 2025. 2. 18.