전체 글 315

[Web] 웹 콘텐츠 캐싱 (브라우저, 프록시-CDN, 서버) 비교

개요웹 콘텐츠 캐싱은 이미지, 비디오, css, js 등과 같은 웹 콘텐츠를 사용자에게 더 빠르고 효율적으로 제공하기 위해 임시로 캐싱(저장)해두는 기술로 사용자의 원본 서버에 다시 접근하지 않고, 캐시에 저장된 데이터를 사용해 웹 페이지를 로드하는 방식 서버와 네트워크 부하를 줄여 응답 속도를 개선하고, 사용자 경험을 향상시킬 수 있는 장점이 있음 브라우저 캐시  vs 프록시 캐시 vs 서버 캐시주요 내용은 다음과 같다. 브라우저 캐시 (Client-Side)프록시 캐시 (Proxy or CDN)서버 캐시 (Server-side)목적동일 웹페이지 재방문시 빠른 로딩빠른 콘텐츠 전송 및 지연 시간 감소서버 부하 ↓ 응답 속도와 효율성 ↑대상정적 리소스 (CSS, JS, 이미지)정적(이미지) 및 동적(비디..

[좋은 DB 설계하기] 수치형 필드 설계하기

개요수치형 필드 설계시 효율적인 데이터 저장을 위해 나름의 현실에서 만들어 질 수 있는 필드들에 기준을 세워보았다.  수치형 필드 기준횟수(유한) / 일수 / 개수일반적인 (unsigned) Integer 필드DB 내부적으로 21억 이하의 정수 비즈니스 로직상으로 무한정 커질 수 없는 경우ex) 일 노출 횟수, 기간 일 수, 댓글 개수 금액 및 횟수 (무한)(unsigned) BigInteger 필드DB 내부적으로 63경 이하물론 꼭 Big 으로 필요는 없고 유연하게 하여도 됨)ex. 상품 단가, 최종 금액, 조회 수  Enum 값, 작은 단위의 값 (유한)TinyInteger, SmallInteger 필드 (일반적으로 256 또는 32767 이하) ex) 유저 타입, 상태값, 할인율 (0~100) 실..

[기술 면접 대비] Operating System 4 - CPU Scheduling

버스트 (Burst)네트워크 트래픽 / 리소스 관점 : 일정 기간 동안 임시로 허용되는 최대치 이상의 트래픽이나 리소스 사용 초과량컴퓨터 과학 관점 : CPU Scheduling이나  I/O 작업에서 프로세스의 한 작업이 연속적으로 실행되는 시간 프로그램은 일반적으로 CPU Burst - I/O Burst를 번갈아 가면서 실행된다. CPU Burst- 프로세스가 CPU에 할당된 후 실행을 시작하고, 중단 없이 처리되는 기간. 이후 I/O 작업이 필요하면 CPU Burst가 끝나고, I/O 작업 후 다시 CPU에 할당되면 새로운 Burst가 시작됨 Disk I/O Burst - 디스크나 네트워크 장치, DB 등에 대한 연속된 데이터 읽거나 쓰는 작업을 수행하는 것 바운드 (Bound)CPU 바운드 (CPU..

[테스트 코드]에 대한 가이드라인 및 항목 정리 (feat. Python)

개요테스트 코드를 작성시 어떤 도구로, 어떠한 것을 어떻게 작성 해야 될 까에 대한, 아직 경험이 부족하지만 이해한 바를 토대로 가이드라인 겸 항목 정리를 해보았다. (이해도가 높아질 때마다 계속 업데이트 해보는걸로..) 현재 개발 방식이 TDD(Test Driven Development)일 수도 있고 아닐 수도 있을 것이고, 스타트업 같은 만약 제품을 먼저 내야 하는 상황이면, 테스트 코드 작성 비용은 다소 부담스럽고 우선순위가 자연스럽게, 뒤로 밀릴 수 있다.혹은 완성된 서비스의 안정성을 높이기 위해, 테스트 코드를 넣으려는 경우, 방대한 서비스 코드의 모든 부분에 대해 테스트 코드를 채워 넣는 것 또한 다소 비효율적으로 느껴질 수 있다. 따라서 테스트 코드 작성시 '모든 것에 테스트 코드를 작성할 ..

[SQLAlchemy] (5-2) DB driver 종류 (postgresql)

개요해당 글은 Sqlalchemy 공식문서를 정리한 것이다.Sqlalchemy에서 postgresql에 지원하는 여러가지 Driver 들에 대해 알아본다.postgresql은 psycopg2, pg8000, asyncpg 다.  1. psycopg2공식 문서 : https://pypi.org/project/psycopg2/특징- fast-executions-helpers 라는 성능 개선 가능 (https://www.psycopg.org/docs/extras.html#fast-execution-helpers)- batch insert 관련 유연, 강점 (관련 키워드 insertmanyvalues 등)- psycopg  연결 방법 # 연결 string# postgresql+psycopg2://user:pas..

DB/Sqlalchemy 2024.09.18

[SQLAlchemy] (5-1) DB driver 종류 (mysql/maria)

개요해당 글은 Sqlalchemy mysql 파트 공식 문서  을 정리한 것이다. Sqlalchemy에서 mysql, mariadb에 지원하는 여러가지 Driver 들에 대해 알아본다.대부분의 라이브러리들은 mysql, maria 같이 지원한다.MySQL은 5.0.2 버전 ~ 최신 릴리스까지 지원, MariaDB는 모든 최신 버전 지원한다.MySQL과 MariaDB는 기본적인 호환성을 유지하지만 개발은 계속해서 갈라지고 있음, SQLAlchemy에서는 두 DB간 가벼운 차이만 있어, DB 연결 URL 등을 변경할 필요 없음. 1. mysqlclient공식 문서 : https://pypi.org/project/mysqlclient/특징- maria db에서도 사용 가능- SQLAlchemy 공식적으로 지원..

DB/Sqlalchemy 2024.09.16

[SQLAlchemy] (4) DML 예시 (by sqlalchemy 2.0)

sqlalchemy 2.0 특징SQL Core의 select(), insert(), update(), delete()- DML 함수들이 Core와 ORM 상호작용 공통의 방식으로 채택됨 Query 객체- defrecated 되었음. (링크)from sqlalchemy.orm import Query# legacy 처리 됨 (2.0 에서)q = session.query(SomeMappedClass) execute- core방식, orm 방식 둘다 사용 가능- core 방식 : conn.execute(stmt)- orm 방식 : session.execute(stmt)- session.execute(stmt) => Result 객체를 반환- Result 객체를 이용해 다양한 형태의 결과 처리 및 제어 가능 ex..

DB/Sqlalchemy 2024.09.08

[SQLAlchemy] (3) 모델 선언 방법 (선언형, 명령형)

개요SQLAlchemy에서 모델과 DB를 연결하기 위해서는, 객체-관계 매핑 (ORM)을 수행하는데 '사용 방법(문법)과 코드 스타일'에 있어 명령형, 선언형 두가지 방향성을 제시한다.물론 뻔한말로 프로젝트의 요구사항과 팀 방향성에 따라 선택 될 수 있다. Declarative Mapping은 더 간결하고, 유지보수가 쉬우며, 대부분의 일반적인 사용 사례에 적합한 반면,Imperative Mapping은 더 복잡하고, 맞춤형 데이터베이스 매핑이 필요한 경우 등에 유리두 방법을 혼합하여 사용할 수도 있으며, 상황에 따라 적절한 방식을 선택하는 것이 중요 Declarative Mapping 방식에서도 기존에 사용하던 방식 외에 2.0이 되면서 Mapped, mapped_column 이란 문법을 통해 좀더 o..

DB/Sqlalchemy 2024.09.08

[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