
AWS์ ์ํด์ ์์ ๋ก๊ทธ์ธ ๋จผ์ ํ๊ณ ์ฝ์๋ก๊ทธ์ธ ํด์ผํจ!

๋ค์ AWS์ ์ฌ๋ ค์ ๋ณต์ฌ ๋ด์ฉ ๋ฐ๋




@backend/app ์ด FASTAPI ๋ฅผ EC2์ ์ ๋ก๋ํด์, restful api ๋ก ๋ฐฐํฌํ๊ณ ์ถ์ด. ๊นํ๋ธ ์ก์ ์ ์ด๋ฏธ์ง์ฒ๋ผ ์ค์ ์ด ์๋ฃ๋์์ด. ์ดํ CICD ๋ก ๋ฐฐํฌํ๋ ๊ณผ์ ์ ์ค๋ช ํด์ค.

์ผ๋จ ํค๊ฐ ๋ฐ๊ปด์ ๊ทธ๊ฑฐ ๋จผ์ ํด๋ก๋ํํ ์ ๋ ฅํ๊ธฐ!!!
ssh -i "labzang.pem" ubuntu@ec2-3-**-233-152.ap-northeast-2.compute.amazonaws.com ์ฌ๊ธฐ์์ ec2 ํธ์คํธ๋ฅผ ์ถ์ถํด์ค

ํ์นธ ๋์ฐ๊ณ ํด์ผํจ!
@backend/app ์ด ํ๋ก์ ํธ๋ฅผ CPU๋ก EC2์ ์ฎ๊ธฐ๊ณ ์ถ์ด. ์ด๋ ํด๋์ ์์น์ํค๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ์ ๋ต์ธ๊ฐ?
์บก์ณํด์ ๋ฌผ์ด๋ณด๊ธฐ



๋์ค๊ฒ ํ๋ ๋ฐฉ๋ฒ
esc-> shift+:->q!

esc-> shift+:->wq!
(๊ณ ์น๋ค์์ ์ ์ฅํ๊ณ ๋๊ฐ๋ ค๋ฉด w๋ถ์ฌ์ผํจ! ์ ๊ณ ์ณค๋๋ฐ ์ด๋ ๊ฒ ํ๋ฉด ๋ค ๋ ๋ผ๊ฐ! ์กฐ์ฌํ๊ธฐ)

์๋ชปํ๊ฑฐ ๊ฐ์์ ๋ค์ ํจ!
@backend/requirements.txt ์ฌ๊ธฐ์ ์ค์นํ ํจํค์ง๋ฅผ home/ubuntu ์ ์ค์นํ๋ ค๊ณ ํด. vim ์ผ๋ก ์คํํ ์ด ํ์ผ์ ๋ค์ด๊ฐ ๋ด์ฉ์ ๊ทธ๋๋ก ์นดํผํด์ ๋ถ์ฌ๋ฃ์ ์ ์๋๋ก ํด์ค. ๊ผญ CPU ๋ก ์คํํ๋๋ฐ ํ์ํ ํจํค์ง๋ง ์ ๋ฆฌํด์ค.

ํด๋ก๋๊ฐ ์ฝ๋ ์ค๊ฑฐ์
๊ทธ๊ฑฐ๋ฅผ vim ๋ค์ ๋ค์ด๊ฐ์ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ํ๊ณ
esc-> shift+:->wq!
๋๋ ๋ฐ๋ก ํด๋ก๋๊ฐ requirment-cpu.txt ํ์ผ์ ๋ฃจํธ์ ๋ง๋ค์ด์ค
์์ผ๋ฉด requirment.txt ํ์ผ ๋ฐ์ผ๋ก ๋นผ๊ธฐ -๋ฃจํธ๋ก

๊น ํธ์ํ๊ธฐ




ํด๋ก๋ํํ ์๋ฌ ์ก์๋ฌ๋ผ๊ณ ํ๊ธฐ

๋ฐ๋
@.github/workflows/deploy-ec2.yml ์ด ํ์ผ์ ๋ด ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฃจํธ ์์ฒด๋ฅผ ๋ฐ๊พธ๋ ๊ฑด ์ ๋์ง๋ง, GitHub Actions ์์์
app ํด๋๋ง ๋์์ผ๋ก ์์ ๋๋ ํฐ๋ฆฌ์ ๋ฐฐํฌ ๋์์ ์ง์ ํ๋ ๊ฑด ์ถฉ๋ถํ ๊ฐ๋ฅํฉ๋๋ค.
ํต์ฌ์ ๋ ๊ฐ์ง์ ๋๋ค.
1. Action ์คํ ๋๋ ํฐ๋ฆฌ๋ฅผ app ์ผ๋ก ๊ณ ์ ํ๊ธฐ
job ์์ http://defaults.run.working-directory ๋ฅผ ์ฐ๋ฉด, ๊ทธ job ์ ๋ชจ๋ run: ์ด ๊ธฐ๋ณธ์ ์ผ๋ก app ํด๋์์ ์คํ๋ฉ๋๋ค.
# .github/workflows/deploy.yml
name: Deploy app to EC2
on:
push:
branches: [ main ]
paths:
- 'app/**' # <- app ํด๋ ๋ณ๊ฒฝ์์๋ง ์คํ (์ ํ์ฌํญ)
jobs:
deploy:
runs-on: ubuntu-latest
defaults:
run:
working-directory: app # <- ์ฌ๊ธฐ์๋ถํฐ run ์ ์ ๋ถ app/ ๊ธฐ์ค
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install dependencies
run: |
pip install -r requirements.txt # app/requirements.txt ๊ธฐ์ค์ผ๋ก ์คํ
- name: Run tests
run: |
pytest
- name: Configure SSH
shell: bash
run: |
mkdir -p "$HOME/.ssh"
echo "${{ secrets.EC2_SSH_KEY }}" > "$HOME/.ssh/id_rsa"
chmod 600 "$HOME/.ssh/id_rsa"
ssh-keyscan -H "${{ secrets.EC2_HOST }}" >> "$HOME/.ssh/known_hosts"
- name: Deploy to EC2
shell: bash
run: |
# ํ์ฌ ๋๋ ํฐ๋ฆฌ๋ app/
rsync -avz . ubuntu@${{ secrets.EC2_HOST }}:/home/ubuntu/rag-app
# ๋๋ ssh ๋ก ๋ค์ด๊ฐ์ app ๊ธฐ์ค์ผ๋ก ๋ช ๋ น ์คํ
# ssh ubuntu@${{ secrets.EC2_HOST }} "cd /home/ubuntu/rag-app && uvicorn app_server:app --reload"
์ด๋ ๊ฒ ํ๋ฉด:
ํ ์คํธ, ๋น๋, ์์กด์ฑ ์ค์น ๋ชจ๋ app ํด๋ ๊ธฐ์ค์ผ๋ก ๋์๊ฐ๋๋ค.
๋ฆฌํฌ์งํ ๋ฆฌ ๋ฃจํธ์ frontend, libs, scripts ๊ฐ ์์ด๋ CI๋ app ๋ง ์ ๊ฒฝ ์๋๋ค.
paths: - 'app/**' ๋๋ถ์ app ์๋ ํ์ผ์ด ๋ฐ๋ ๋๋ง ๋ฐฐํฌ๊ฐ ๋์๊ฐ๊ฒ ํ ์ ์์ต๋๋ค.
2. EC2 ์๋ app ํด๋๋ง ๋ณด๋ด๊ธฐ
์ ์์์ Deploy to EC2 ์ฒ๋ผ:
rsync -avz . ubuntu@${{ secrets.EC2_HOST }}:/home/ubuntu/rag-app
ํ์ฌ ์์ ๋๋ ํฐ๋ฆฌ๊ฐ app ์ด๋ผ์, EC2 ์ชฝ์๋ /home/ubuntu/rag-app ์ app ๋ด์ฉ๋ง ๋๊ธฐํ๋ฉ๋๋ค.
scp -r app ubuntu@... ์ฒ๋ผ ๋ฃจํธ์์ ๋ช ์์ ์ผ๋ก app ๋ง ๋ณด๋ด๋ ๋ฐฉ์๋ ๊ฐ๋ฅํฉ๋๋ค.
์ ๋ฆฌํ๋ฉด,
GitHub Actions๋ ํญ์ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฃจํธ์์ ์์ํ์ง๋ง,
http://defaults.run.working-directory: app ๊ณผ paths: 'app/**' ์ค์ ์ผ๋ก
“์ด job ์ app ์๋ธ๋๋ ํฐ๋ฆฌ๋ง ๋ค๋ฃฌ๋ค” ๋ผ๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
๋ฐฐํฌ ๋จ๊ณ์์ rsync / scp ์ ๋์ ๋๋ ํฐ๋ฆฌ๋ฅผ app ์ผ๋ก ์ก์ผ๋ฉด, EC2 ์ชฝ์๋ ๋ฑ ๊ทธ ๋ถ๋ถ๋ง ์ฌ๋ผ๊ฐ๋๋ค.
์ง๊ธ ์ฌ์ฉ ์ค์ธ deploy.yml ์ ๋ณด์ฌ์ฃผ์๋ฉด, ์ ๊ตฌ์กฐ๋ก ๋ฑ ๋ง์ถฐ์ ์์ ๋ณธ๊น์ง ๊ฐ์ด ๋ง๋ค์ด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
/opt/rag-app/
โโโ main.py
โโโ core/
โโโ models/
โโโ requirements.txt
โโโ venv/--ec2๋ฐฐํฌ ์์น๋ฅผ home/ubuntu์ฌ๊ธฐ๋ก ์ค์ ํด์ค





'Project ESG+AI > [์ผ์ KPMG]ESG ๋ฐ์ดํฐ ํ์ฉ ํ์คํ ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 65์ผ์ฐจ. (1) | 2026.01.16 |
|---|---|
| 51์ผ์ฐจ. (0) | 2025.12.24 |
| 47์ผ์ฐจ. ํ๋ก์ ํธ์ ๋ง์ถฐ์ AI ๋ชจ๋ธ ์ ํํ๊ณ ์ค์ ํ๊ธฐ (1) | 2025.12.18 |
| 46์ผ์ฐจ. (1) | 2025.12.16 |
| 45์ผ์ฐจ. (0) | 2025.12.15 |