Programming Language/Python 3

Python을 활용한 비동기 처리(Asyncio, Coroutine)

들어가며저번 프로젝트에서 FastAPI를 활용한 백엔드 개발을 수행했다. FastAPI 프레임워크는 ASGI 규약을 따르는 웹 어플리케이션으로, 비동기 처리를 지원하여 높은 성능을 뽑아낼 수 있다. 비동기 관련 개념에 대해 정리하고, Python에서는 어떻게 비동기 처리를 수행하는지 예제 코드와 함께 살펴보고자 한다. 동기/비동기, 블로킹/논블로킹비동기 처리와 관련해서, 동기/비동기와 블로킹/논블로킹은 늘 함께 등장하는 개념들이다. 프로그래밍의 관점에서, 어떤 함수(작업) 안에서 다른 함수(작업)를 호출하는 일은 빈번하게 일어난다. 관련 개념을 정리하면 다음과 같다.작업을 수행하며 작업을 호출한 쪽의 제어 흐름을 Block하면 블로킹, 그렇지 않으면 논블로킹해당 작업이 수행되어 마무리 될 때까지 기다리는..

Python ORM : SQLAlchemy

ORM(Object-Relational Mapping)ORM은 객체와 RDB 테이블을 매핑해주는 기술을 의미한다. 어플리케이션에서 DB I/O를 수행할 때, 추상화 계층을 한 번 더 두어서 SQL 쿼리가 아닌 프로그래밍 언어로 수행할 수 있게끔 한다. 이를 통해 개발자는 비즈니스 로직을 작성하는 데에 집중하게 되어 개발 생산성과 프로젝트의 유지/보수성이 높아진다. 관련 기술로는, 대표적으로 Java 진영의 JPA/Hibernate과 이를 보완하는 QueryDSL이 있다. Python 진영에서는 SQLAlchemy가 동일한 역할을 한다. SQLAlchemySQLAlchemy는 DB 연결, 자원 관리, SQL Expression Language, ORM 까지 DB I/O 기능을 제공하는 Python 패키지이..

Getter/Setter를 파이써닉하게 구현하기(@property)

캡슐화와 Getter/Setter객체 지향 프로그래밍의 관점에서, 객체의 필드가 외부에 노출되는 것은 적절하지 않다. 어떤 필드는 외부에 노출되거나 값이 변경되어서는 안되는데, 필드가 외부에 노출되어 직접 접근할 수 있다면 그러한 제약 사항이 위반될 것이다. 그러므로 일반적으로 필드를 감추고, 접근하거나(Getter) 수정하는(Setter) 메서드를 만들어서 외부에 노출시킨다. 그렇게 함으로써 어떤 객체의 필드를 일관된 방법으로 접근하고 수정할 수 있도록 제약할 수 있다. get_name, set_namePython의 네이밍 컨벤션에 맞추어, 흔히 Java에서 사용하듯 Getter와 Setter를 구현할 수 있다.class Duck(): def __init__(self, input_name): ..