1차 인프라 아키텍처 다이어그램
graph LR
%% 테마 설정
%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#2c3e50', 'primaryTextColor': '#ffffff', 'lineColor': '#bdc3c7'}}}%%
%% 외부 사용자 및 개발자
Users(("일반 사용자<br>(인터넷)"))
Dev(("개발자<br>(로컬 PC)"))
%% CI/CD 파이프라인
subgraph CI_CD ["CI/CD 파이프라인"]
GithubActions["GitHub Actions<br>(빌드 및 배포)"]
end
%% AWS 클라우드 영역
subgraph AWS ["AWS 클라우드 (ap-northeast-2)"]
subgraph VPC ["VPC (가상 사설망)"]
subgraph Public ["퍼블릭 서브넷 (외부 접근 가능)"]
direction TB
ALB["애플리케이션 로드 밸런서<br>(ALB)"]
Bastion["베스천 호스트<br>(관리용 서버)"]
end
subgraph Private ["프라이빗 서브넷 (외부 접근 차단)"]
direction TB
subgraph ECS_Cluster ["ECS 클러스터"]
subgraph ASG ["오토 스케일링 그룹"]
App["스프링 부트 앱<br>(컨테이너)"]
end
end
RDS[("Amazon RDS<br>(PostgreSQL DB)")]
end
end
%% VPC 외부 AWS 서비스
ECR["Amazon ECR<br>(도커 이미지 저장소)"]
S3["Amazon S3<br>(썸네일 저장소)"]
end
%% 네트워크 연결 흐름
Users -- "HTTP 요청 (80)" --> ALB
Dev -- "Git Push (코드 변경)" --> GithubActions
GithubActions -- "도커 이미지 푸시" --> ECR
%% 내부 흐름
ALB -- "트래픽 분배 (8080 포트)<br>상태 확인 (/actuator/health)" --> App
%% 관리자 접속 흐름
Dev -. "SSH 접속 (22)" .-> Bastion
Bastion -. "SSH 터널링 (DB 우회 접속)" .-> RDS
%% 앱 연동 흐름
App -- "JDBC 연결 (5432)" --> RDS
ECS_Cluster -. "이미지 풀<br> (최신 이미지 다운로드)" .-> ECR
App -- "파일 업로드/다운로드" --> S3
%% 스타일링
classDef default fill:#34495e,stroke:#95a5a6,stroke-width:1px,color:#ffffff;
classDef aws fill:#232f3e,stroke:#ff9900,stroke-width:2px,color:#ffffff;
classDef network fill:#154360,stroke:#3498db,stroke-width:2px,stroke-dasharray: 5 5,color:#ffffff;
classDef cicd fill:#5b2c6f,stroke:#9b59b6,stroke-width:2px,color:#ffffff;
class ECR,S3,RDS,ALB,Bastion,ECS_Cluster,ASG aws;
class Public,Private network;
class GithubActions cicd;


최종 인프라 아키텍처 다이어그램

.png)