전체 글 320

[DB] Postgresql 과 MySQL schema 구분 차이

Schema 란 스키마(schema)는 데이터베이스 내에서 객체(테이블, 뷰, 함수, 인덱스 등)를 논리적으로 구분 한 컨테이너이다. 하나의 데이터베이스 안에 여러 스키마를 포함하며, 스키마를 활용해  여러 namespace 공간을 제공하고, 각각의 공간에서는 동일한 이름의 객체를 가질 수 있다. public과 service1이 다른 schema라는 가정하에 다음과 같이 정의 할 수 있다.ex) public.user_table / service1.user_table Mysql mysql 에서 스키마(Schema)는 Database와 동일한 의미로 사용된다.즉, MySQL의 스키마(Schema)는 데이터베이스(Database) 하나 자체를 지칭하며,필요시 다른 데이터베이스(Database)를 활용하여 논리..

DB/이론 2024.12.21

[공유] 좋은 개발 글 모음

코드 리뷰코드 리뷰에 관한 생각 정리 : 코드 리뷰에 대한 가치관 및 좋은 견해 개발자, 커리어주니어/중니어/시니어의 역할 정리 : 주니어, 중니어  의 역할을 비교해보며 나는 어디쯤 속해있나 돌아보기 좋은 글. Tech 관련 PythonPython과 FastAPI로 지속 성장 가능한 웹서비스 개발하기Fastapi 콜 한줄한줄 따라가기CPython 3.13버전에서 기대되는 기능(A Per-Interpreter GIL)Python @Dataclass 이해하기파이썬과 인터페이스: 프로토콜에서 ABC까지메타 프로그래밍이란? 설계 / 배포uvicorn 에 대한 이해로그 서비스 설계 및 이해 무중단 배포 (Blue/Green)gRPC vs Websocket 차이 이해해보기 DBPostgresql 의 Schema ..

[시스템 장애] Cron 작업 과부하에 따른 서버 장애 발생

상황서버 CPU나 메모리가 일정 임계선을 넘어 서, 서비스에 장애가 생기는 경우 복구를 위해 서비스 재부팅 + 알림 메일이 오게 설정해두었는데, 3일 연속 자정에 서버가 임계선을 넘어가 재부팅 되었다는 알림 경보 메일을 받게 되어, 3일차에 문제 해결에 들어가게 되었다.(처음 1일 때는 일시적인 현상으로 지켜보면서 모니터링 만 하다가, 2~3일 때 반복적인 발생하는 이슈로 보았음) 문제 파악다른 시간대에는 문제가 없고, 자정에만 문제가 생기는 것으로 보아, 자정에 실행되는 이벤트 들에 문제가 있다고 생각하여 해당 크론들을 파악하게 되었다.(아래 AWS 지표를 볼 때, AWS는 기본 5분 단위로 평균을 집계(옵션 및 추가 비용을 내면 1분마다 집계 가능) 하여 그래프로 나타내준다. 23시 55분 ~ 00시..

[리팩토링] (3) early-return 적용하기

배경 복잡한 if-else  중첩 구조에 대한 수정  과정👉 리팩토링 전 - api.py 의 함수에 다음과 같은 조건문이 적혀있었고, 유지보수와 이해(가독성)에 매우 어려움이 존재# 리팩 전if a: if b: if c: return '성공' else: raise ApiError(에러c) else: raise ApiError(에러b)else: raise ApiError(에러a) 👉 리팩토링 후- 부정 문으로 상위 조건인 경우 return(raise)를 진행함 . early-return 을 통해 가독성 개선# 리팩 후if not a: raise ApiError(에러a)if not b: raise ApiError(에러b)if n..

[requests] 라이브러리 Timeout 에러 분류

Timeout 에러 timeout 에러 발생시, 다양한 이유에서 Timeout 504 에러가 발생 할 수 있다. ConnectTimeOut 연결 수립 과정(Connection TimeOut) 에서의 에러해당 서버로 아예 연결 수립 과정에서 막히는 경우timeout=0.0001 : 0.0001 초 안에 연결 수립 되어야 한다고 가정import requestsfrom requests.exceptions import ReadTimeout, ConnectTimeout############## Error - ConnectTimeout 에러! ##############url = "https://alden-kang.tistory.com/20"try: # 의도적으로 매우 짧은 타임아웃으로 연결 수립 조차 못하게 ..

Python/Advanced 2024.12.20

[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