2026/04 19

Prefect - 오케스트레이션

오케스트레이션이란오케스트레이션(Orchestration)은 여러 작업을 순서대로, 조건에 맞게, 안정적으로 실행하는 것을 말한다.오케스트라에서 지휘자가 각 파트(바이올린, 첼로, 플루트)를 박자에 맞춰 조율하는 것과 같다. 각 연주자(작업)는 자기 역할만 하고, 지휘자(오케스트레이터)가 전체 흐름을 책임진다.데이터 파이프라인으로 예를 들면, 아래 같은 상황이 생긴다.1. 외부 API에서 데이터 수집2. 수집한 데이터 정규화3. 중복 제거 후 DB 저장4. 저장 완료되면 슬랙 알림이걸 그냥 순서대로 실행하는 Python 스크립트를 짜면 되지 않냐고 할 수 있다. 근데 실제로는 문제가 생긴다.2번에서 실패하면 1번부터 다시 해야 하나?어느 단계에서 실패한 건지 로그 뒤져야 알 수 있음매일 자동 실행하려면 c..

Python 2026.04.07

Alembic - 스키마 버전 관리

Alembic이 필요한 이유DB 스키마를 바꿀 때 흔히 하는 실수가 있다. CREATE TABLE SQL을 직접 실행하거나, 팀원들이 각자 DDL을 돌리는 방식이다.문제는 재현성이다. 어떤 DDL이 어떤 순서로 실행됐는지 추적이 안 된다. 새 팀원이 환경을 셋업할 때, 스테이징에서 프로덕션으로 배포할 때 매번 수동으로 맞춰야 한다.Alembic은 마이그레이션을 파일로 관리한다. 각 파일은 upgrade() (스키마 적용)와 downgrade() (롤백)를 담고, 파일 간 연결은 revision ID로 이어진다. alembic upgrade head 한 번으로 현재 DB를 최신 상태로 만들 수 있다.초기 셋업# 프로젝트 루트에서alembic init alembic이 명령어 하나로 alembic/ 디렉토리와..

Python 2026.04.07

SQLAlchemy - Python ORM

ORM이란ORM(Object-Relational Mapping)은 DB 테이블을 Python 클래스로, 행(row)을 객체로 다루게 해주는 기술이다.ORM 없이 PostgreSQL을 쓰면 이렇게 된다.cursor.execute(""" INSERT INTO users (email, username) VALUES (%s, %s)""", ("hello@example.com", "goran"))SQLAlchemy ORM을 쓰면 이렇게 된다.user = User(email="hello@example.com", username="goran")session.add(user)session.commit()SQL을 직접 쓰지 않아도 되고, Python 객체처럼 다룰 수 있어서 코드가 일관성 있어진다. 타입 힌트도 붙..

Python 2026.04.07

Git — 커밋 컨벤션 · Branch 전략

Git — 커밋 컨벤션 · Branch 전략혼자 쓸 때와 팀으로 쓸 때의 Git은 다르다. 약속이 생산성을 만든다.1. 커밋 메시지 컨벤션 (Conventional Commits)왜 필요한가커밋 메시지는 코드만큼 중요한 문서다. 메시지가 일관성 없으면 히스토리가 노이즈가 되고, 나중에 "이 변경이 왜 들어갔지?"를 추적하기 어려워진다. Conventional Commits는 커밋 메시지의 구조를 표준화하는 스펙이다.기본 형식(): [body][footer]type — 변경의 종류 (필수)scope — 변경된 범위, 모듈명 등 (선택)subject — 변경 내용 요약, 50자 이내, 마침표 없음 (필수)body — 변경 이유, 상세 설명 (선택)footer — Breaking Change, 이슈 참조 등 ..

Git & GitHub 2026.04.06

Git Merge vs Rebase - 언제 쓰고, 무슨 차이일까?

Git Merge vs Rebase — 같은 목표, 다른 철학두 명령어의 차이를 이해하면 팀의 Git 히스토리가 달라집니다.1. 둘 다 "브랜치를 합친다"merge와 rebase는 모두 한 브랜치의 변경 사항을 다른 브랜치에 통합하기 위한 명령어다. 목적은 동일하지만, 히스토리를 만들어가는 방식이 근본적으로 다르다.Merge — 두 브랜치가 합쳐졌다는 기록 자체를 남긴다.Rebase — 커밋들을 다른 브랜치의 끝에 마치 처음부터 거기서 작업한 것처럼 재작성한다.2. 히스토리 구조 비교git mergeA --- B --- C ----------- M ← main (M = merge commit) \ / F1 --- F2 ← fea..

Git & GitHub 2026.04.06

Spring 프록시 원리

Spring의 프록시(Proxy)가 뭔지 제대로 이해해보자스프링을 공부하다 보면 "프록시"라는 말이 자꾸 나온다!@Transactional도 프록시, @Cacheable도 프록시, @Configuration도 프록시...도대체 프록시가 뭔지, 왜 쓰는 건지 알아보자!프록시가 뭘까?프록시를 한 마디로 표현하면 "진짜 객체 앞에 서서 호출을 가로채는 대리인" 이다.일상적인 비유로 설명하면 이렇다.팬 → 매니저(프록시) → 연예인(진짜 객체)팬이 연예인한테 직접 연락하는 게 아니라 매니저를 통해서 연락한다.매니저는 중간에서 "이 스케줄은 안 돼", "이건 전달할게" 같은 처리를 할 수 있다.코드로 보면 이렇다.// 프록시 없이 직접 호출UserService service = new UserService();s..

[클라우드 응용 SW 개발] 4,5주차

4주차: 클라우드 응용 SW 개념 정리1. 데이터의 구분데이터는 저장 방식에 따라 세 가지로 나뉜다.구조화 데이터: 행과 열로 구성된 테이블 형태. 스키마가 고정되어 있어 정형화된 데이터를 다루기에 적합하다.반구조화 데이터: JSON처럼 일정한 형식은 있지만 고정된 스키마가 없는 데이터.비구조화 데이터: 이미지, 음성, 영상처럼 형태가 정해지지 않은 데이터.2. 관계형 데이터베이스의 주요 객체2-1. 테이블 (Table)데이터가 실제로 저장되는 공간행(Row)과 열(Column)로 구성되며, 모든 행은 동일한 열 구조를 가진다각 열은 데이터 타입으로 정의된다 (예: INT, VARCHAR)2-2. 엔티티 (Entity)실제 존재하는 항목(고객, 제품)이나 가상의 항목(주문)을 나타낸다엔티티 간에는 관계(..

Weekly Paper #10

1. 계층별 입력값 검증 전략핵심 개념애플리케이션은 일반적으로 세 계층으로 나뉜다.Client → Presentation Layer (Controller) → Service Layer → Domain/DB Layer각 계층이 다른 이유로, 다른 관심사를 검증한다는 점이 핵심이다.이를 혼동하면 중복 검증이 생기거나, 반대로 특정 계층에서 검증이 누락되는 문제가 생긴다.계층별 책임 분리Presentation Layer (Controller/DTO)관심사: "이 데이터가 우리 시스템에 들어올 수 있는 형태인가?" (형식적 유효성)검증 대상:null / 빈 값이메일, 날짜 등 형식(Format) 오류기본적인 범위 위반 (수량 최솟값 등)public class CreateOrderRequest { @NotB..

Weekly Paper 2026.04.01

Docker 정리

OverviewDocker는 애플리케이션과 실행 환경을 컨테이너 단위로 패키징하여, 어디서든 동일하게 실행할 수 있도록 해주는 컨테이너 플랫폼이다. 2013년 dotCloud(현 Docker Inc.)에서 공개되었고, Linux Container(LXC) 계열 기술을 바탕으로 발전했다.Docker가 해결하려는 핵심 문제는 환경 불일치다."내 컴퓨터에서는 되는데요?"이 문제는 보통 OS, 런타임, 라이브러리 버전, 시스템 설정 차이에서 발생한다. Docker는 코드뿐 아니라 실행 환경 전체를 이미지로 패키징하여, 개발 환경과 운영 환경의 차이를 크게 줄인다.1. 왜 Docker를 쓰는가환경 불일치 문제 해결개발 환경과 운영 환경을 동일한 이미지로 통일할 수 있다.팀원이 바뀌어도 같은 명령으로 동일한 환경을..

Docker 2026.04.01