본문 바로가기

분류 전체보기127

JSON Web Token(JWT) 에 대해 살펴보자 목차 LIST JSON Web Token 이란 무엇인가? JSON Web Token(JWT)은 JSON 객체로 정보를 안전하게 전송하는 방법을 정의하는 공개된 표준(RFC 7519)입니다. 이 정보는 디지털로 서명이 되어있기 때문에 신뢰성이 높은 검증된 방법입니다. JWT는 HMAC 알고리즘으로 비밀키를 사용하여 서명될 수 있고, RSA나 ECDSA를 사용한 공개/비공개 키 쌍으로도 서명될 수도 있습니다. JWT는 두 당사자들 사이의 정보를 안전하게 전송하기 위해 "암호화"를 한다는 특징이 있습니다. 그리고 다른 중요한 특징은 "서명된 토큰"입니다. 서명된 토큰(signed token)은 그 안에 포함된 내용의 무결성을 확인할 수 있게 해주며, 암호화된 토큰(encrypted token)은 해당 내용을 .. 2023. 10. 4.
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.
반응형