Python 345

Python _ TypedDict를 사용하는 이유(feat. mypy)

Python도 Type을 확인한다구! 파이썬은 타입 힌트를 제공함으로써 해당 데이터가 어떤 타입을 갖고 있는지 알 수 있다. 다만 파이썬은 타입을 강제하지 않기 때문에 일반 런타임 환경에서는 타입의 정상여부를 알기 어렵다. 때문에 타입이 정상인지 확인하기 위해 mypy 나 pyright 같은 정적 검사 도구를 이용한다. 하지만 그럼에도 애매한 경우가 있는데 바로 dict와 같은 value들이 다양한 타입을 가질 경우이다. dict value들의 타입을 일일이 확인하고 명시하기란 매우 귀찮은 일이다. 때문에 Dict[str, Any] 처럼 value에 해당되는 타입을 Any로 넘기는 경우가 많다. 하지만 이는 바람직하지 않다. Any가 어떤 문제를 일으키는지 먼저 살펴보고, 이에 대한 해결책으로서 Type..

Python _ dict의 keys()처럼 dataclass에서 속성 목록 가져오기

파이썬에서 객체를 만드는 방법 중에 dataclass가 있다. @dataclass 데코레이터를 사용하면 타입 유형을 명시한 객체를 만들 수 있다. dataclass를 만드는 코드는 아래와 같다. from dataclasses import dataclass @dataclass(frozen=True) class Dataclass: a:int b:int c:int data = Dataclass(a=1,b=3,c=5) print(data) # 출력 : Dataclass(a=1, b=3, c=5) print(data.a) # 1 print(data.b) # 3 print(data.c) # 5 이렇게 만든 객체는 타입 유형을 명시하고 싶을 때나 DTO, 값 객체 등의 불변 객체로도 사용할 수 있다. dataclas..

Python _ @dataclass 사용법과 타입 확인

파이썬에서는 @dataclass를 통해 데이터의 타입을 명시하고 안정적으로 다룰 수 있습니다. 이 글에서는 간단한 사용법을 소개하고 타입 확인까지 해보겠습니다. @dataclass 사용법 먼저 다음처럼 코드를 작성합니다. from dataclasses import dataclass @dataclass() class Data: name: str int: int dict: dict name은 str, int는 int, dict는 dict로 타입을 지정하였습니다. 이어서 데이터를 만들어보겠습니다. data1 = Data( name = "변덕순", int = 1, dict = {"a":"b"} ) Data클래스를 활용해 data1 이라는 인스턴스를 만들었습니다. print로 name과 타입을 출력해보겠습니다. ..

Repository Pattern

* 이 글은 책을 읽고 주관적인 생각과 함께 요약 정리한 글입니다. 설명을 위한 글이 아니므로 내용이 정확하지 않을 수 있습니다. 제목 : 파이썬으로 살펴보는 아키텍처 패턴 저자 : 해리 퍼시벌, 밥 그레고리 범위 : 3. 저장소 패턴 느낀 점 도메인 모델과 인프라간에 의존성을 줄여 변경에 용이하다. 가짜 저장소를 만들어 단위 테스트를 구현하는데 용이하다. 아직까지는 도메인 모델과 저장소 패턴의 장단점이 와닿지 않는다. 이번 프로젝트는 저장소 패턴을 구현하는 것인데 직접 경험해봐야겠다. 더보기 키워드 아키텍처 전반 양파 아키텍처 클린 아키텍처 저장소 패턴 - 이종립 저장소 패턴 - deviq dependency injection 덕 타이핑 abc (추상화 기반 클래스) 정리 저장소 패턴 저장소 패턴은 데..

도메인 관점에서 행동을 먼저 떠올리자

* 이 글은 책을 읽고 주관적인 생각과 함께 요약 정리한 글입니다. 설명을 위한 글이 아니므로 내용이 정확하지 않을 수 있습니다. 제목 : 파이썬으로 살펴보는 아키텍처 패턴 저자 : 해리 퍼시벌, 밥 그레고리 범위 : 1. 도입 ~ 2. 도메인 모델링 느낀 점 시스템을 설계할 때, 도메인 관점에서 행동을 먼저 떠올리자. 테스트 코드를 작성할 때, 코드만 보더라도 어떻게 동작하는지 알 수 있도록 작성하자. 값 객체, 엔티티 등, 데이터 클래스와 매직매서드를 활용해보자. 동사의 경우 되도록 함수로 표현하자. 클래스 내 ‘매서드’와 ‘일반 함수’, 이 둘을 어떤 기준으로 선택, 구현해야할까? 더보기 데이터 클래스 멀티패러다임 정리 도입 추상화는 00모듈이 검색 엔진 api를 캡슐화해준 것처럼 해동을 캡슐화하는..

docker-compose 작성하면서 생긴 이슈 세 가지 (feat. m1)

docker-compose를 이용해 app과 db를 각각 컨테이너로 구현해보고자 했다. 도커를 처음 사용하다 보니 여러가지 문제들이 있었는데 그 중에서 가장 애먹었던 세 가지 이슈에 대해서 적어본다. 이슈1. 도커 빌드 중에 asyncpg만 유독 설치되지 않는 문제가 있었다. 원인 - 정확히는 알기 어려우나 m1 관련 이슈로 보인다. 해결 - 빌드 과정에서 gcc를 추가 설치하여 해결할 수 있었다. # Dockerfile 에 추가 RUN apt-get install -y gcc gcc는 ‘다양한 프로그래밍 언어를 위한 컴파일러’ 라고 한다. 자세한 내용은 위키를 참고하기 바란다. 참고 링크 Error with pip install in Docker on Mac M1 when using Slim distr..