2024/08 7

[SQLAlchemy] (2) Core 방식 vs ORM 방식

개요SQLAlchemy를 통해 DB와 상호 작용하는 코드를 작성할 때 작성 방법에는 크게 2가지 방향이 있다. Core 방식과 ORM 방식. Core 방식은 SQL 문을 보다 직접적인 컨셉으로 활용하여, 성능에 이점이 있는 방법이며, ORM 방식은 Python 클래스를 데이터 베이스의 테이블에 매핑한 추상화된 방식을 제공하여 더 사용하기 쉽게 만드는 방법이다. 1. SQLAlchemy Core 방식SQL 추상화 계층을 제공하고, 데이터베이스와 직접 작업할 수 있는 저수준 SQL 툴킷보다 직접적인 SQL 쿼리 작성을 통해 표현 하는 방법Session 객체 보다는 직접적인 커넥터를 통한 연결 방법과 비슷트랜잭션 및 연결 풀링에 대해 수동으로 처리 문법적인 차이- SQL 추상화 계층 함수(SQL 친화적인)들도..

DB/Sqlalchemy 2024.08.25

[SQLAlchemy] (1) 기본 개념 및 동작 방식

SQLAlchemy 란?SQLAlchemy는 파이썬 데이터베이스 ORM(Object Realtaional Mapping) 라이브러리Python 코드를 이용해 직관적으로 DB에 대한 CRUD 를 조작 하고, 직관성 높은 코드로 개발 가능 SQLAlchemy 기본 객체1. engine- 데이터베이스와의 연결을 관리 (URL 형식의 DB 접근 주소를 필요로 함 (create_engine)from sqlalchemy import create_engine# 1. engine 생성 engine = create_engine('mysql+pymysql://:@{HOST}:{PORT}/' echo=True, pool_size=2, pool_recycle=3600, max_overflow=0, ..

DB/Sqlalchemy 2024.08.24

파일 관리 서비스 2 - S3 폴더 구조 설계

S3(스토리지) 폴더 구조 설계하기스토리지에 파일을 저장할 때 다양한 기준으로 폴더 구조를 설계 하여 저장 할 수 있다.S3는 내부적으로 데이터를 파티셔닝하여 분산 저장하는데, 우리가 할 수 있는 폴더 구조, prefix 등을 잘 활용하여 설계 할 수록 성능적인 이점 뿐만 아니라 관리 자체를 효율적으로 할 수 있다. 설계 방법에 대한 규칙의 특징이 대해 알아본다. 날짜 기반 구조 (Date-Based Structure)예시2024/08/18/files/...2024/08/17/files/......2022/05/19/files/...특징백업, 로그 파일, 일별/월별 데이터 저장 관리시 적절날짜 기준 데이터 조회시 폴더 구조가 명확해져 검색 성능 개선단 files/ 아래에 파일들이 많을 때는 추가 규칙 p..

파일 관리 서비스 1 - 업로드 (Presigned URL)

개요많은 서비스가 사용자로 부터 파일을 받아, 이를 스토리지 등에 저장 해 두고 관리한다. 업로드 간 올바른 데이터가 잘 업로드 되도록 검증하거나, 유출되면 안되는 중요한 정보도 있기 때문에 이를 잘 관리하는 것 또한 중요하고, 스토리지가 유저에 의해 오남용 되는 경우도 주의해야 한다. 해당 글에서는 다음 정보에 대해 알아본다.파일 업로드 간 올바른 데이터(무결성) 관리를 위한 검증 목록파일 업로드 시 스토리지 접근 주체 (BE vs FE)파일 업로드 Presigned URL 방법 파일 업로드 간 올바른 데이터(무결성) 관리를 위한 검증 목록파일  간 꼭 모든 사항을 필수적으로 검증해야 하는 것은 아니고, 서비스에 맞게 하면됨.대분류소분류내용1. 파일 형식 검증확장자 검증file 이름에서 확장자 검증  ..

[좋은 DB 설계하기] 설계시 고려하면 좋을 기본 개념들

기본 원칙무결성 - 데이터베이스 내에 모든 값은 언제나 정확한 값을 유지해야 한다.유연성 - 데이터베이스 구조는 요구사항 변화에 대해 수정이 쉬워야 한다.확장성 - 데이터베이스 구조는 기능 확장에 대해서 수정이 쉬워야 한다. 엔티티 이해유형 엔터티 : 물리적인 형태 o, ex. 상품, 회원)개념 엔터티 : 물리적인 형태 x, 개념적, ex. 부서, 학과)사건 엔터티 : 행위로 인해 발생, ex. 주문, 이벤트 응모) 기본키 생성시 자연키 vs 인조키 기본 키란 해당 레코드를 식별하기 위한 유일한 값 자연키 (DB에서 자동으로 생성해주는 것)장점 : 자동으로 인덱싱 해줌단점 : 혹여 기본키 수정해야 될 상황 발생시 문제 발생 인조키 (직접 생성 후 지정)장점 : 비즈니스 로직으로 인한 기본키 변경시에도 유..

[Python] 데이터 직렬화 및 검증 라이브러리 비교 (with 웹프레임워크)

요약아래 표를 기준으로 사용 환경, 타입 검사, 문서화 여부 등이 주된 기준 요소 일 것 같다.제공되는 기능 자체는 동일해서, 라이브러리 사용 방식? 이 보다 편하게 느껴지는 것으로 선택하면 될 것 같다.   PydanticDRFMarshmallowCerberusColanderVoluptuousAttrsSchematics릴리즈 날짜2018년 1월2011년 7월2013년 5월2014년 1월2010년 6월2012년 9월2016년 4월2013년 7월사용 환경FastAPIDjangoFlaskChalice일반 PythonPyramid일반 Python타입 검사파이썬 타입 힌팅명시적 타입필드명시적 필드 타입명시적 필드 타입명시적 필드 타입명시적 필드 타입파이썬 타입 힌팅명시적 필드 타입유효성 검사다양한 기본 제공 유..

Python/Advanced 2024.08.04

[최적화] Python 인터닝(Interning) 기법

인터닝 (Interning)인터닝(Interning) 은 동일한 값을 가진 불변 "객체"를 하나만 유지하여 메모리 사용을 최적화하고, 객체 비교를 빠르게 하는 기술 파이썬에서의 인터닝의 특징일정 길이의 문자열에 대해서 자동으로 인터닝이 적용된다.일정 크기의 숫자에 대해서 자동으로 인터닝이 적용된다.사용자가 sys.intern 으로 직접 인터닝 풀에 집어넣어 놓고 관리할 수 있다.일정 길이, 일정 크기는 cpython 즉 python 버전에 따라 다를 수 있다.주로 메모리 사용 최적화에 사용된다. 인터닝 예시 코드# Python 언어의 자동 인터닝 o# 문자열 str1, str2 = 'abcdefg', 'abcdefg'# id 함수는 객체가 메모리 내에 위치 반환print(id(str1) == id(str..

Python/Advanced 2024.08.03