Programming(80)
-
Kotlin: flatMapLatest
map과의 동작 비교를 통해 flatMapLatest를 알아보겠습니다. map 동작map의 반환값은 flow 임그래서 아래 코드와 같이 flow에 대해서 collect 할 수 있음val channelFlow = flow { emit("A") delay(100) emit("B")}channelFlow.map { name -> name // bypass}.collect { print(it)}출력ABflatMapLatest 동작새로운 작업이 들어오면 이전 작업을 바로 취소하고, 최신 작업 결과만 흘려보내는 연산자.val channelFlow = flow { emit("A") delay(1000) emit("B")}channelFlow.flatMapLatest { n..
2025.11.07 -
Kotlin Scope function, Receiver function
일반적인 함수 타입val func: () -> Unit = { ...}val func: (String) -> Int = { str -> str.length}func("hello") // 5스코프 함수객체의 범위 내에서 코드 블록을 실행특정 객체를 스코프(범위)에 넣고 작업Kotlin 기본 제공 5개의 스코프 함수|---|---|---|| | name | 특징 | 기타 ||1| apply | 자기 자신을 this로 설정 후 자신을 반환 | 체이닝 가능 ||2| also | 쿠가 작업 수행 | it으로 자신을 접근 설정 후 자신을 반환 | 체이닝 가능 + it을 사용해서 좀 더 명확 ||3| let | 변환 | it으로 자신을 접근해서 어떤 값을 명시적으로 반환 | 보통 반환되는 값이 변환 값 ..
2025.11.07 -
FastAPI를 사용하는 이유: 성능 외의 트레이드오프
Go가 처리량(RPS)과 지연 시간에서 우위를 보입니다만, FastAPI를 선택하는 이유는 성능만이 전부가 아니기 때문입니다. Go는 고트래픽, 저지연 미세 서비스나 실시간 시스템(예: 클라우드 네이티브 앱)에 최적화되어 있지만, FastAPI는 개발 속도, 유지보수성, Python 생태계 활용 측면에서 압도적 장점을 가집니다. 2025년 기준으로 FastAPI는 여전히 Python 백엔드의 표준으로 자리 잡았으며, 특히 중소규모 API나 프로토타이핑에서 "빠르게 만들어 유지하기 쉬운" 선택지로 사랑받고 있습니다. 아래에서 주요 이유를 정리하겠습니다. FastAPI의 핵심 장점 (Go 대비) 카테고리FastAPI 장점Go 대비 왜 선택하나? 예시/참조 개발 속도 & 생산성- 타입 힌트(Pydantic)로..
2025.10.26 -
Go로 서버를 구성하는 것과 Python FastAPI와 asyncio로 서버를 구성하는 것의 성능 차이
# Go 언어 vs FastAPI (asyncio) 서버 성능 비교Go (Golang)와 Python의 FastAPI (asyncio 기반)는 모두 고성능 웹 서버를 구축할 수 있는 인기 있는 선택지입니다. Go는 컴파일 언어로 가벼운 Goroutines를 통해 높은 병렬성을 제공하며, FastAPI는 Python의 비동기 I/O (asyncio)를 활용해 I/O-bound 작업에 강합니다. 그러나 여러 벤치마크에 따르면, Go가 전체적으로 FastAPI보다 우수한 성능을 보입니다. 이는 주로 Go의 낮은 오버헤드, 효율적인 가비지 컬렉션(GC), 그리고 CPU-bound 작업에서의 우월성 때문입니다. Python의 인터프리터 특성과 GIL(Global Interpreter Lock)이 병목이 될 수 있..
2025.10.26 -
asyncio를 사용한 비동기 요청 처리
Reactor pattern보통 asyncio를 사용해서 비동기 요청을 처리하는 서버를 구현한다고 했을때, 요청을 받자마자 queue에 넣고 이 queue에서 요청을 뽑아 비동기로 처리하는 reactor를 둡니다. 그리고 reactor에서 처리 완료된 결과를 결과 queue에 넣고 반환하는 처리를 합니다. 이런 패턴을 Producer-Consumer 라고 하기도 하죠. 여기서 producer는 서버 핸들러가 되고, 이는 클라이언트의 요청을 밪자마자 처리 큐에 넣어 즉시 응답을 반환하거나, 요청을 비동기로 대기 상태로 전환합니다. Consumer는 Reactor나 Worker pool이 되며, 여러 워크 태스크(reactor)가 큐에서 작업을 뽑아 비동기로 처리합니다. 워커 수를 제한해 리소스(CPU, ..
2025.10.26 -
Python async io
예제 1: 커피숍 비유로 이해하기상황: 5명의 손님이 커피를 주문했습니다커피 만드는 시간: 각 3초방법 1: 동기 방식 (Synchronous) - 비효율적인 직원import asyncio import time from datetime import datetime print("=" \* 60) print("☕ 커피숍 비유로 AsyncIO 이해하기") print("=" \* 60) def make\_coffee\_sync(customer): """커피를 만듭니다 (동기)""" print(f" \[{datetime.now().strftime('%H:%M:%S')}\] {customer}님 커피 제조 시작...") time.sleep(3) # 커피 만드는 시간 (3초 ..
2025.10.26