프로세스 풀, 스레드 풀, 코루틴 및 MySQL 데이터베이스 핵심

프로세스 풀과 스레드 풀

과도한 프로세스/스레드 생성은 CPU 성능 저하를 유발합니다. 이를 방지하기 위해 고정된 수의 실행 단위를 미리 생성하는 프로세스 풀/스레드 풀을 사용합니다. 초과 작업은 선행 작업 완료 시까지 대기합니다.

from concurrent.futures import ProcessPoolExecutor

executor = ProcessPoolExecutor(max_workers=4)
task_future = executor.submit(execute_function, arg1, kwarg1=val1)
task_future.add_done_callback(completion_handler)  # 작업 완료 시 핸들러 실행

코루틴

코루틴은 IO 작업 시 코드 수준에서 전환하여 OS가 IO를 인지하지 못하도록 합니다. 이는 스레드가 IO에서 차단되지 않은 것처럼 보이게 하여 CPU 우선순위를 높입니다.

from gevent import monkey; monkey.patch_all()
from gevent import spawn

def async_task():
    # IO 작업 포함 함수
    ...

greenlet = spawn(async_task)
greenlet.join()  # 코루틴 완료 대기

데이터베이스 이론

데이터베이스는 구조화된 데이터 관리를 위한 소프트웨어로, 일반적으로 클라이언트-서버 아키텍처로 동작합니다.

데이터베이스 유형

  • 관계형: 고정 스키마, 테이블 간 관계 지원 (MySQL, PostgreSQL)
  • 비관계형: 유연한 스키마, 키-값 저장 (Redis, MongoDB)

핵심 개념

개념설명
스키마데이터 구조 정의
테이블행/열 데이터 구조
레코드테이블의 단일 행

기본 SQL 구문

-- 테이블 생성
CREATE TABLE users (
    user_id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE
);

-- 데이터 조회
SELECT department, AVG(salary) 
FROM employees 
WHERE hire_date > '2020-01-01'
GROUP BY department;

MySQL 데이터 타입

유형예시특징
정수형TINYINT, INTunsigned/zerofill 지원
실수형DECIMAL(10,2)고정 정밀도
문자형CHAR(20), VARCHAR(255)고정/가변 길이

제약 조건

  • PRIMARY KEY: 레코드 고유 식별자
  • FOREIGN KEY: 테이블 간 관계 정의
  • AUTO_INCREMENT: 자동 증가 값
  • UNIQUE: 중복 값 방지
CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
    ON UPDATE CASCADE
    ON DELETE CASCADE
);

테이블 관계 설계

  1. 1:N 관계: 외래 키 사용
    CREATE TABLE departments (
        dept_id INT PRIMARY KEY
    );
    CREATE TABLE employees (
        emp_id INT PRIMARY KEY,
        dept_id INT REFERENCES departments(dept_id)
    );
  2. M:N 관계: 조인 테이블 사용
    CREATE TABLE student_course (
        id INT PRIMARY KEY,
        student_id INT REFERENCES students(id),
        course_id INT REFERENCES courses(id)
    );

단일 테이블 쿼리

SELECT department, COUNT(*) AS staff_count 
FROM employees 
WHERE salary > 50000
GROUP BY department
HAVING staff_count > 5
ORDER BY staff_count DESC
LIMIT 10;

태그: ProcessPoolExecutor ThreadPoolExecutor gevent MySQL SQL

6월 12일 19:15에 게시됨