분류 전체보기138 HyperLogLog에 대해 알아보자 목차 LIST HyperLogLog는 집합의 카디널리티를 추정하는 확률적 데이터 구조(probabilistic data structure)이다. 즉, 정확한 값을 제공하지 않고 확률적인 방법을 사용하여 집합의 카디널리티를 추정하는 것이다. HyperLogLog는 확률적 데이터 구조의 특성을 가지기 때문에 완벽한 정확도를 포기하고 대신 공간을 효율적으로 사용한다. (HyperLogLog trades perfect accuracy for efficient space utilization.) 대용량 데이터셋에서 유니크한 값, 즉 카디널리티를 어떻게 구할 것인가? 에 대한 문제를 Cardinality Estimation Problem 또는 Count-distinct problem 이라고 한다. HyperLogL.. 2023. 9. 16. 빈약한 도메인 모델(Anemic Domain Model) 목차 LIST 빈약한 도메인 모델이란? "빈약한 도메인 모델(Anemic Domain Model)" 소프트웨어 개발의 안티패턴 중 하나이다. 이 패턴에서 도메인 모델은 대부분의 로직 없이 단순한 데이터 구조로만 구성되며, 실제 비즈니스 로직은 서비스 계층에 위치하게 된다. 문제점 OOP(객체 지향 프로그래밍)의 이점 활용 못함: 객체는 상태와 행위를 가질 수 있는데, 빈약한 도메인 모델에서는 행위가 객체 외부에 있기 때문에 객체 지향의 특성과 장점을 제대로 활용할 수 없다. 코드 재사용의 어려움: 도메인 로직이 서비스 계층에 분산되어 있으면, 비슷한 로직이 여러 서비스에서 중복될 수 있다. 도메인 로직의 변경이 어려움: 서비스 계층에 비즈니스 로직이 집중되면, 로직의 변경이나 확장이 어려울 수 있다. 예.. 2023. 9. 10. 단위 테스트(Pytest, Mock)란 무엇인가? 목차 LIST 단위 테스트 단위 테스트는 보조 수단이 아닌 소프트웨어의 핵심이 되는 필수적인 기능으로 일반 비즈니스 로직과 동일한 수준으로 다뤄져야 함 단위 테스트는 비즈니스 로직이 특정 조건을 보장하는지 확인하기 위해 여러 시나리오를 검증하는 코드 특징 격리 :단위 테스트는 다른 외부 에이전트와 완전히 독립적/비즈니스 로직에만 집중해야 함. 데이터베이스 연결 X HTTP 요청 X 격리란 테스트 자체가 독립적이라는 걸 의미하며 이전 상태에 관계 없이 임의의 순서대로 실행될 수 있어야 함 성능 : 단위 테스트는 신속하게 실행되어야 하며 반복적으로 여러 번 실행될 수 있도록 설계해야 함 자체 검증 : 단위 테스트의 실행만으로 결과를 결정할 수 있어야 함. 단위 테스트를 처리하기 위한 추가 단계가 없어져야 함.. 2023. 9. 4. Python - SQLAlchemy 간단 정리 목차 LIST SQLAlchemy Python에서 사용하는 ORM(Object-relational mapping)이다. ORM은 말 그대로 객체(Object)와 관계(Relation)를 연결하는 것으로 데이터베이스 테이블의 데이터를 Object 필드와 매핑한다. 참고) 의존성 역전의 예제로 SQLAlchemy가 사용된다. SQLAlchemy를 사용하면 스키마를 별도로 정의하고, 스키마와 도메인 모델을 상호 변환하는 명시적인 매퍼(mapper)를 정의한다. 이렇게 ORM 기능을 사용하면 데이터와 애플리케이션 로직 사이의 강한 의존성을 줄이고, 도메인 모델과 데이터베이스 스키마 사이의 매핑을 추상화하여 의존성 역전 원칙이 적용된다. 장점 객체 지향적인 코드로 비즈니스 로직에 집중할 수 있다. 재사용 및 유지.. 2023. 8. 22. Python Thread는 블로킹I/O에 사용한다. GIL이란? 목차 LIST 핵심 파이썬 쓰레드는 전역 인터프리터 잠금(GIL : Global Interpreter Lock) 때문에 여러 CPU 코어에서 병렬로 바이트코드를 실행할 수 없음 GIL이 있지만 쓰레드는 여러 작업을 동시에 하는 것처럼 보여주기 쉬우므로 유용한 부분이 있다. 여러 시스템 콜을 병렬로 수행할 때 파이썬 쓰레드를 사용하자. 이렇게 하면 CPU 연산과 같은 계산 작업을 하는 동안에도 병렬로 I/O 작업을 수행할 수 있다. 쓰레드를 블로킹 I/O용으로 사용하고 병렬화용으로는 사용하지 말자 CPython은 파이썬 프로그램을 두 단계로 실행한다. 1) 소스코드를 바이트코드(byte code)로 파싱하고 컴파일한다. 2) 스택 기반 인터프리터로 바이트코드를 실행한다. 참고) CPython : 파이썬 코.. 2023. 8. 20. Python subprocess 모듈 목차 LIST 들어가기 전에 Concurrency(병행성) : 컴퓨터가 여러 일을 동시에 하듯이 수행하는 것 예) CPU 코어가 하나인 컴퓨터에서 운영체제는 단일 프로세서에서 실행하는 프로그램을 교대로 빠르게 변경하여 프로그램들이 동시에 실행되는 것처럼 보이게 한다. Parallelism(병렬성) : 실제로 여러 작업을 동시에 실행하는 것 CPU 코어가 여러 개인 컴퓨터는 여러 프로그램을 동시에 실행할 수 있다. 각 CPU 코어가 각기 다른 프로그램의 명령어(instruction)를 실행하여 같은 순간에 여러 프로그램들이 실행될 수 있다. Concurrency 와 Parallelism은 속도 향상의 측면에서 가장 큰 차이점을 가진다. 한 프로그램에서 서로 다른 작업을 병렬로 진행하면 전체 작업에 걸리는.. 2023. 8. 20. 이전 1 2 3 4 5 6 7 8 ··· 23 다음 반응형