프로그래밍 언어

SQLAlchemy 2.0 #7 Alembic과 실전 구성: 마이그레이션, 비동기, 팀 규약
6 분 소요

SQLAlchemy 2.0 #7 Alembic과 실전 구성: 마이그레이션, 비동기, 팀 규약

시리즈 마지막 편으로 운영 단계의 주제를 정리합니다. create_all이 스키마 변경을 해결하지 못하는 이유와 Alembic 도입, autogenerate가 감지하는 것과 놓치는 것, 마이그레이션 파일 리뷰 원칙, create_async_engine과 AsyncSession으로 넘어가는 비동기 구성과 지연 로딩 제약, 모델·세션·설정을 배치하는 프로젝트 구조, 팀에서 지킬 규약까지 다룹니다.

Rust 기초 강좌 #7 컬렉션과 이터레이터: Vec·String·HashMap과 for문을 대체하는 체인
4 분 소요

Rust 기초 강좌 #7 컬렉션과 이터레이터: Vec·String·HashMap과 for문을 대체하는 체인

실무 코드의 몸통인 세 컬렉션을 다룹니다. 가변 길이 배열 Vec과 인덱스 대신 get을 쓰는 이유, 왜 String은 인덱스로 접근할 수 없는지(UTF-8과 바이트·문자의 차이), HashMap과 entry API, 그리고 for 반복문을 map·filter·collect 체인으로 바꾸는 이터레이터 스타일과 지연 평가까지 다루겠습니다.

SQLAlchemy 2.0 #6 쿼리 심화: 조인, 집계, 서브쿼리, 대량 처리
5 분 소요

SQLAlchemy 2.0 #6 쿼리 심화: 조인, 집계, 서브쿼리, 대량 처리

select() 하나로 실전 쿼리를 조립하는 법을 정리합니다. scalars와 execute의 반환 형태 차이, 여러 조건과 or_, 조인과 명시적 ON 절, group_by와 집계 함수에 라벨을 붙여 읽는 법, 서브쿼리와 EXISTS, LIMIT·OFFSET 페이지네이션과 그 한계, ORM 단위 작업을 우회하는 대량 INSERT·UPDATE까지, 2.0 스타일 쿼리의 실무 레퍼토리를 다룹니다.

Rust 기초 강좌 #6 에러 처리: Result와 ? 연산자, panic·unwrap 사용 기준
5 분 소요

Rust 기초 강좌 #6 에러 처리: Result와 ? 연산자, panic·unwrap 사용 기준

예외(exception)가 없는 Rust의 에러 처리를 다룹니다. 실패 가능성을 반환 타입에 드러내는 Result, match 중첩을 한 글자로 줄이는 ? 연산자와 에러 전파, main이 Result를 반환하는 실용 형태, 그리고 unwrap·expect·panic을 언제 써도 되고 언제 쓰면 안 되는지의 판단 기준까지 다루겠습니다.

SQLAlchemy 2.0 #5 관계 매핑: 1:N, N:M, 그리고 N+1 문제
5 분 소요

SQLAlchemy 2.0 #5 관계 매핑: 1:N, N:M, 그리고 N+1 문제

ORM의 꽃이자 함정인 relationship을 정리합니다. 외래 키와 relationship의 역할 분담, back_populates로 양방향을 잇는 1:N 선언, secondary 테이블을 쓰는 N:M, 부모 삭제 시 자식 처리를 정하는 cascade와 delete-orphan, 지연 로딩이 만들어 내는 N+1 문제를 echo 로그로 확인하는 법, selectinload와 joinedload로 해결하는 기준까지 다룹니다.

Rust 기초 강좌 #5 구조체와 열거형: match와 Option, null이 없는 언어의 설계
4 분 소요

Rust 기초 강좌 #5 구조체와 열거형: match와 Option, null이 없는 언어의 설계

데이터를 구조화하는 두 축인 구조체(struct)와 열거형(enum)을 다룹니다. impl 블록으로 메서드를 붙이는 법, variant마다 다른 데이터를 담는 Rust 열거형의 표현력, 모든 경우를 검사했는지 컴파일러가 강제하는 match, 그리고 null 대신 "값이 없을 수 있음"을 타입으로 드러내는 Option까지, Rust 코드의 뼈대가 되는 도구들을 다루겠습니다.

SQLAlchemy 2.0 #4 세션: 변경 추적, flush와 commit, 객체의 네 가지 상태
5 분 소요

SQLAlchemy 2.0 #4 세션: 변경 추적, flush와 commit, 객체의 네 가지 상태

ORM의 심장인 Session을 정리합니다. 세션이 단위 작업(Unit of Work)으로 변경을 모았다가 한 번에 SQL로 내보내는 원리, flush와 commit의 차이, transient·pending·persistent·detached라는 객체의 네 가지 상태, 같은 행은 같은 객체로 돌려주는 identity map, commit 후 속성 접근이 다시 쿼리를 날리는 이유, 웹 애플리케이션에서 요청당 세션 하나라는 스코프 원칙까지 다룹니다.

Rust 기초 강좌 #4 참조와 빌림: &와 &mut, 빌림 규칙 관련 컴파일 에러 해결
5 분 소요

Rust 기초 강좌 #4 참조와 빌림: &와 &mut, 빌림 규칙 관련 컴파일 에러 해결

소유권을 옮기지 않고 값을 사용하는 참조(&)와 가변 참조(&mut)를 다룹니다. "불변 참조는 여러 개, 가변 참조는 하나"라는 빌림 규칙이 무엇을 막는지(반복 중 수정, 데이터 레이스), cannot borrow as mutable 에러를 읽고 푸는 법, 해제된 메모리를 가리키는 댕글링 참조가 컴파일 단계에서 차단되는 구조, 그리고 &str과 슬라이스까지 다루겠습니다.

SQLAlchemy 2.0 #3 ORM 모델 정의: DeclarativeBase, Mapped, mapped_column
5 분 소요

SQLAlchemy 2.0 #3 ORM 모델 정의: DeclarativeBase, Mapped, mapped_column

테이블을 파이썬 클래스로 선언하는 2.0 스타일 ORM 모델 정의를 정리합니다. DeclarativeBase를 상속하는 구조, Mapped 타입 힌트와 mapped_column의 역할 분담, 파이썬 타입이 DB 타입으로 매핑되는 규칙, Optional과 nullable의 연동, 기본값·유니크·인덱스 선언, 제약 조건 이름을 자동으로 붙이는 네이밍 컨벤션까지 다룹니다.

Rust 기초 강좌 #3 소유권: move가 기본인 언어, GC 없이 메모리가 정리되는 원리
5 분 소요

Rust 기초 강좌 #3 소유권: move가 기본인 언어, GC 없이 메모리가 정리되는 원리

Rust의 심장인 소유권을 정면으로 다룹니다. 모든 값에 소유자가 하나뿐이라는 세 규칙, 대입과 함수 호출에서 값이 이동(move)한 뒤 원래 변수를 사용할 수 없게 되는 이유, 스택에 저장되는 고정 크기 타입만 누리는 Copy, 비용이 코드에 드러나는 clone, 그리고 스코프 끝에서 자동으로 해제되는 drop까지, use-after-free가 컴파일 에러로 바뀌는 구조를 다루겠습니다.

SQLAlchemy 2.0 #2 엔진과 트랜잭션: 커넥션 풀, commit의 두 가지 패턴
5 분 소요

SQLAlchemy 2.0 #2 엔진과 트랜잭션: 커넥션 풀, commit의 두 가지 패턴

SQLAlchemy의 토대인 엔진과 트랜잭션을 정리합니다. 커넥션 풀이 왜 필요하고 어떻게 동작하는지, pool_size와 max_overflow가 실제로 제한하는 것, connect()와 begin()으로 갈리는 commit-as-you-go와 begin-once 패턴, 트랜잭션이 자동 커밋되지 않는 이유, MetaData와 Table로 테이블을 정의하고 Core 표현식으로 CRUD를 실행하는 것까지 다룹니다.

Rust 기초 강좌 #2 변수와 타입: let과 mut, 섀도잉, 함수는 표현식으로 끝난다
4 분 소요

Rust 기초 강좌 #2 변수와 타입: let과 mut, 섀도잉, 함수는 표현식으로 끝난다

불변이 기본인 let과 명시적으로 붙이는 mut의 의미부터 시작합니다. 같은 이름을 다시 선언하는 섀도잉이 왜 실무 관용구인지, 정수·부동소수점·bool·char 스칼라 타입과 오버플로 동작, 튜플과 배열, 그리고 세미콜론 하나로 문장과 표현식이 갈리는 Rust 함수의 반환 규칙까지 다루겠습니다.