배포 최종 구성

환경 브랜치 프론트엔드 백엔드
prod main https://www.jachwi-sunbae.kr https://api.jachwi-sunbae.kr
dev develop https://dev.jachwi-sunbae.kr https://dev-api.jachwi-sunbae.kr

작업 브랜치는 develop에서 분기하고, 운영 배포는 develop에서 main으로 PR로 승격한다.

flowchart LR
    W["작업 브랜치"] -->|"PR"| D["develop"]
    D -->|"PR 승격"| M["main"]
    D -.->|"자동 배포"| DE["dev 환경"]
    M -.->|"자동 배포"| PE["prod 환경"]

1. 전체 구성

프론트엔드와 백엔드가 서로 다른 경로로 사용자에게 도달한다. 파이프라인은 환경 2 × 대상 2 = 넷이다.

flowchart TB
    U["사용자 브라우저"]

    subgraph DNS["가비아 DNS · CNAME 8개"]
        W["www"]
        DW["dev"]
        A["api"]
        DA["dev-api"]
    end

    subgraph CF["CloudFront"]
        CFP["prod E3LI41UZ24V9WD<br/>origin path /jachwi-sunbae/web"]
        CFD["dev ETE1HH7V9K0PO<br/>origin path /jachwi-sunbae/web-dev"]
    end

    WAF["WAF techcourse-project-waf"]
    ALB["ALB jachwi-sunbae-alb<br/>443 · 호스트 규칙으로 분기"]

    subgraph EC2S["EC2"]
        EP["prod t4g.small<br/>Spring Boot :80"]
        ED["dev t4g.micro<br/>Spring Boot :80"]
    end

    subgraph DATA["공유 데이터 저장소"]
        RDS["RDS jachwi-sunbae-db<br/>스키마 2개"]
        S3["S3 techcourse-project-2026<br/>접두사로 분리"]
    end

    U --> W --> CFP --> S3
    U --> DW --> CFD --> S3
    U --> A --> WAF
    U --> DA --> WAF
    WAF --> ALB
    ALB -->|"기본"| EP
    ALB -->|"Host = dev-api"| ED
    EP --> RDS
    ED --> RDS
    EP --> S3
    ED --> S3

새로 만든 것은 EC2 한 대와 CloudFront 하나뿐이다. RDS·ALB·WAF·S3는 두 환경이 공유한다. 따로 만들면 RDS 월 +$15, ALB 월 +$17이 더 든다.


2. 환경 격리

"dev와 prod가 나뉘어 있다"는 말로는 부족하다. 무엇이 나누는지를 알아야 새 리소스를 만들 때 빠뜨리지 않는다.

flowchart TB
    subgraph L["격리 계층 6개"]
        direction TB
        A["배포 대상<br/>EC2 태그 DeployTarget"]
        B["요청 라우팅<br/>ALB 호스트 헤더 규칙"]
        C["데이터<br/>RDS 스키마"]
        D["사진<br/>S3 접두사"]
        E["프론트 정적 파일<br/>CloudFront origin path"]
        F["토큰<br/>JWT_SECRET_BASE64"]
    end
계층 prod dev
EC2 태그 DeployTarget=jachwi-sunbae-prod DeployTarget=jachwi-sunbae-dev
ALB 라우팅 기본 동작 Host = dev-api.jachwi-sunbae.kr
RDS 스키마 jachwi_sunbae jachwi_sunbae_dev
DB 계정 jachwi_app jachwi_dev
사진 접두사 jachwi-sunbae/ jachwi-sunbae/dev/
프론트 경로 jachwi-sunbae/web/ jachwi-sunbae/web-dev/
JWT 시크릿 서로 다른 값 서로 다른 값

특히 위험한 두 지점