Spaces:
Running
Running
| [ | |
| { | |
| "id": "azure-rg", | |
| "certification": "AZ-104", | |
| "title": "Resource Group โ ๋ฆฌ์์ค ๊ทธ๋ฃน", | |
| "summary": "Azure ๋ฆฌ์์ค๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ฌถ๋ ์ปจํ ์ด๋์ ๋๋ค. ๋์ผ RG์ ๋ฆฌ์์ค๋ ํจ๊ป ๋ฐฐํฌยท๊ด๋ฆฌยท์ญ์ ๋๋ฉฐ, ์์น(region)๊ฐ ์๋ก ๋ฌ๋ผ๋ ๊ฐ์ RG์ ์ํ ์ ์์ต๋๋ค.", | |
| "example": "az group create --name myRG --location koreacentral\naz group list --output table\naz group delete --name myRG --yes", | |
| "common_mistake": "RG๋ฅผ ์ญ์ ํ๋ฉด ์์ ์ํ ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ํจ๊ป ์ญ์ ๋ฉ๋๋ค. RG ์์น์ ๋ด๋ถ ๋ฆฌ์์ค ์์น๋ ๋ณ๊ฐ์ ๋๋ค.", | |
| "keywords": [ | |
| "resource group", | |
| "container", | |
| "lifecycle", | |
| "region", | |
| "az group" | |
| ], | |
| "source_id": "azure-vm-overview", | |
| "details": [ | |
| "RG๋ ๋ฆฌ์์ค์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ํจ๊ป ๊ด๋ฆฌํ๊ธฐ ์ํ ๋จ์์ ๋๋ค. ํ๋ก์ ํธ๋ณ, ํ๊ฒฝ๋ณ(dev/prod), ๋๋ ํ๋ณ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค.", | |
| "RG ์์ฒด์ ์์น๋ ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ ์์น์ด๋ฉฐ, ๋ด๋ถ ๋ฆฌ์์ค๋ ๋ค๋ฅธ region์ ์์ด๋ ๋ฉ๋๋ค.", | |
| "์ํ ํจํด: RG ์ญ์ ์ ์ํฅ ๋ฒ์, RG์ RBACยทLockยทTag๋ฅผ ์ ์ฉํ๋ ์๋๋ฆฌ์ค, RG ์ด๋ ์ ํ ์ฌํญ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ", | |
| "related_practices": [ | |
| "azure-lab-1" | |
| ] | |
| }, | |
| { | |
| "id": "azure-storage", | |
| "certification": "AZ-104", | |
| "title": "Storage Account โ ์คํ ๋ฆฌ์ง ๊ณ์ ", | |
| "summary": "Blob, File, Queue, Table 4๊ฐ์ง ์คํ ๋ฆฌ์ง ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ต์์ ๋ค์์คํ์ด์ค์ ๋๋ค. SKU(Standard/Premium)์ ์ค๋ณต์ฑ(LRS/GRS ๋ฑ)์ ์์ฑ ์ ๊ฒฐ์ ํฉ๋๋ค.", | |
| "example": "az storage account create \\\n --name mystorageacct \\\n --resource-group myRG \\\n --sku Standard_LRS \\\n --kind StorageV2", | |
| "common_mistake": "Storage Account ์ด๋ฆ์ ์ ์ธ๊ณ์์ ์ ์ผํด์ผ ํ๋ฉฐ ์๋ฌธ์ยท์ซ์๋ง ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค(3~24์). SKU๋ ์์ฑ ํ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.", | |
| "keywords": [ | |
| "storage account", | |
| "Blob", | |
| "Files", | |
| "LRS", | |
| "GRS", | |
| "SKU", | |
| "StorageV2" | |
| ], | |
| "source_id": "azure-storage-account", | |
| "details": [ | |
| "StorageV2(๋ฒ์ฉ v2)๊ฐ ํ์ฌ ๊ถ์ฅ ํ์์ผ๋ก ๋ชจ๋ ์คํ ๋ฆฌ์ง ์๋น์ค์ ์ต์ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค.", | |
| "์ค๋ณต์ฑ: LRS(๋จ์ผ datacenter 3๋ณต์ ), ZRS(3 AZ), GRS(๋ค๋ฅธ region์ผ๋ก ๋น๋๊ธฐ ๋ณต์ ), GZRS(ZRS+GRS).", | |
| "์ํ ํจํด: ์ค๋ณต์ฑ ์์ค๋ณ ํน์ง, ์คํ ๋ฆฌ์ง ๊ณ์ ์ข ๋ฅ(Blob์ ์ฉ/StorageV2 ๋ฑ), ๋ณด์ ์ค์ (HTTPS ๊ฐ์ , ๋ฐฉํ๋ฒฝ) ๋ฌธ์ ๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ", | |
| "related_practices": [ | |
| "azure-lab-2" | |
| ] | |
| }, | |
| { | |
| "id": "azure-vnet", | |
| "certification": "AZ-104", | |
| "title": "Virtual Network โ ๊ฐ์ ๋คํธ์ํฌ", | |
| "summary": "Azure์์ ๋ฆฌ์์ค๊ฐ ํต์ ํ๋ ๊ฒฉ๋ฆฌ๋ ์ฌ์ค ๋คํธ์ํฌ์ ๋๋ค. ์๋ธ๋ท์ผ๋ก ๋๋๋ฉฐ, ์จํ๋ ๋ฏธ์ค ์ฐ๊ฒฐ(VPN Gateway, ExpressRoute)๊ณผ ํผ์ด๋ง์ ํตํด ํ์ฅํฉ๋๋ค.", | |
| "example": "az network vnet create \\\n --name myVNet \\\n --address-prefix 10.0.0.0/16 \\\n --subnet-name default \\\n --subnet-prefix 10.0.0.0/24", | |
| "common_mistake": "VNet ์ฃผ์ ๊ณต๊ฐ์ด ๊ฒน์น๋ฉด ํผ์ด๋ง์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ค๊ณ ์ด๊ธฐ์ IP ๋ฒ์๋ฅผ ์๋ก ๊ฒน์น์ง ์๊ฒ ์ก์์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "VNet", | |
| "subnet", | |
| "address space", | |
| "CIDR", | |
| "peering", | |
| "NSG" | |
| ], | |
| "source_id": "azure-vnet-overview", | |
| "details": [ | |
| "VNet ๋ด ๋ชจ๋ ๋ฆฌ์์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ก ํต์ ๊ฐ๋ฅํฉ๋๋ค. ์ธ๋ถ ์ธํฐ๋ท ํต์ ์ Public IP ๋๋ NAT Gateway๋ฅผ ํตํฉ๋๋ค.", | |
| "์๋ธ๋ท์ VNet ์ฃผ์ ๊ณต๊ฐ์ ์ผ๋ถ. Azure๊ฐ ๊ฐ ์๋ธ๋ท์์ 5๊ฐ IP๋ฅผ ์์ฝํฉ๋๋ค(์ฒซ 4๊ฐ + ๋ง์ง๋ง).", | |
| "์ํ ํจํด: VNet/์๋ธ๋ท ์ฃผ์ ๋ฒ์ ๊ณ์ฐ, NSG์ ์๋ธ๋ท ์ฐ๊ฒฐ, ํผ์ด๋ง ์กฐ๊ฑด(์ฃผ์ ๋น์ค์ฒฉ) ๋ฌธ์ ๊ฐ ์์ฃผ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ", | |
| "related_practices": [ | |
| "azure-lab-3" | |
| ] | |
| }, | |
| { | |
| "id": "azure-rbac", | |
| "certification": "AZ-104", | |
| "title": "Azure RBAC โ ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด", | |
| "summary": "๋๊ฐ(Who), ์ด๋ค ๋ฆฌ์์ค์(Scope), ๋ฌด์์ ํ ์ ์๋์ง(Role)๋ฅผ ์ ์ํฉ๋๋ค. ์ญํ ํ ๋น์ ๊ตฌ๋ ยทRGยท๋ฆฌ์์ค ๋ ๋ฒจ์์ ์์๋ฉ๋๋ค.", | |
| "example": "az role assignment create \\\n --assignee alice@example.com \\\n --role 'Contributor' \\\n --scope /subscriptions/SUB_ID/resourceGroups/myRG", | |
| "common_mistake": "RBAC๋ ๊ด๋ฆฌ ํ๋ฉด(Azure Portal/API) ์ ๊ทผ ์ ์ด์ ๋๋ค. VM ๋ด๋ถ OS ์ ๊ทผ์ด๋ Storage ๋ฐ์ดํฐ ์ ๊ทผ์ ๋ณ๋ ์ค์ ์ด ํ์ํฉ๋๋ค.", | |
| "keywords": [ | |
| "RBAC", | |
| "role assignment", | |
| "Owner", | |
| "Contributor", | |
| "Reader", | |
| "scope", | |
| "principal" | |
| ], | |
| "source_id": "azure-rbac-overview", | |
| "details": [ | |
| "๋ด์ฅ ์ญํ 3๊ฐ์ง: Owner(๋ชจ๋ ๊ถํ+์ญํ ํ ๋น), Contributor(๋ฆฌ์์ค CRUD, ์ญํ ํ ๋น ๋ถ๊ฐ), Reader(์ฝ๊ธฐ๋ง).", | |
| "์ญํ ํ ๋น ๋ฒ์: ๊ด๋ฆฌ ๊ทธ๋ฃน > ๊ตฌ๋ > RG > ๋ฆฌ์์ค. ์์ ๋ฒ์ ์ญํ ์ ํ์๋ก ์์๋ฉ๋๋ค.", | |
| "์ํ ํจํด: ์ต์ ๊ถํ ์์น์ ๋ฐ๋ฅธ ์ญํ ์ ํ, ๋ฒ์๋ณ ์ญํ ์์ ๊ฒฐ๊ณผ, Owner vs Contributor ์ฐจ์ด ๋ฌธ์ ๊ฐ ์์ฃผ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ", | |
| "related_practices": [ | |
| "azure-lab-5" | |
| ] | |
| }, | |
| { | |
| "id": "azure-policy", | |
| "certification": "AZ-104", | |
| "title": "Azure Policy โ ์ ์ฑ ", | |
| "summary": "๋ฆฌ์์ค๊ฐ ์กฐ์ง์ ๊ท์ ์ ์ค์ํ๋๋ก ๊ฐ์ ํฉ๋๋ค. ํน์ region๋ง ํ์ฉ, ํ๊ทธ ๊ฐ์ , SKU ์ ํ ๋ฑ์ ์ ์ฑ ์ ์๋ก ๋ง๋ค์ด ๊ตฌ๋ ยทRG์ ํ ๋นํฉ๋๋ค.", | |
| "example": "# ํ์ฉ location ์ ํ ์ ์ฑ ํ ๋น ์\naz policy assignment create \\\n --name 'allowed-locations' \\\n --policy 'e56962a6-4747-49cd-b67b-bf8b01975c4f' \\\n --params '{\"listOfAllowedLocations\":{\"value\":[\"koreacentral\"]}}'", | |
| "common_mistake": "Policy๋ ์ด๋ฏธ ์กด์ฌํ๋ ๋น์ค์ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ์์ ํ์ง ์์ต๋๋ค. ์์ ์ด ํ์ํ๋ฉด remediation task๋ฅผ ๋ณ๋๋ก ์คํํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "Azure Policy", | |
| "policy definition", | |
| "initiative", | |
| "compliance", | |
| "deny", | |
| "audit", | |
| "remediation" | |
| ], | |
| "source_id": "azure-policy-overview", | |
| "details": [ | |
| "ํจ๊ณผ(effect) ์ ํ: Deny(๊ฑฐ๋ถ), Audit(๊ฐ์ฌ๋ง), AuditIfNotExists, DeployIfNotExists(์๋ ๋ณด์ ๋ฐฐํฌ), Disabled.", | |
| "Initiative(์ด๋์ ํฐ๋ธ)๋ ์ฌ๋ฌ Policy๋ฅผ ๋ฌถ์ ์งํฉ. NIST, CIS ๋ฑ ๊ท์ ์ค์ ํ๋ ์์ํฌ๊ฐ ์ด๋์ ํฐ๋ธ๋ก ์ ๊ณต๋ฉ๋๋ค.", | |
| "์ํ ํจํด: Policy์ RBAC ์ฐจ์ด(RBAC๋ ํ์ ์ ์ด, Policy๋ ๋ฆฌ์์ค ์์ฑ ์ ์ด), ํจ๊ณผ ์ ํ๋ณ ๋์, ์ด๋์ ํฐ๋ธ vs ๋จ๋ ์ ์ฑ ๋ฌธ์ ๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ" | |
| }, | |
| { | |
| "id": "azure-vm", | |
| "certification": "AZ-104", | |
| "title": "Virtual Machine โ ๊ฐ์ ๋จธ์ ", | |
| "summary": "Azure์์ ์ ๊ณตํ๋ IaaS ์ปดํจํ ์ ๋๋ค. VM ํฌ๊ธฐ(SKU), OS ์ด๋ฏธ์ง, ๊ฐ์ฉ์ฑ ๊ตฌ์ฑ, ๋์คํฌ ์ ํ์ ์ ํํด ๋ฐฐํฌํฉ๋๋ค.", | |
| "example": "az vm create \\\n --name myVM \\\n --resource-group myRG \\\n --image Ubuntu2204 \\\n --size Standard_B2s \\\n --admin-username azureuser \\\n --generate-ssh-keys", | |
| "common_mistake": "VM์ '์ค์ง(Stop)'ํด๋ ํ ๋น ํด์ (deallocated)๊ฐ ์๋๋ฉด ์ปดํจํ ์๊ธ์ด ๊ณ์ ์ฒญ๊ตฌ๋ฉ๋๋ค. ๋น์ฉ ์ ๊ฐ์ ์ํด '์ค์ง(ํ ๋น ํด์ )'๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "VM", | |
| "SKU", | |
| "availability set", | |
| "managed disk", | |
| "deallocate", | |
| "NSG", | |
| "public IP" | |
| ], | |
| "source_id": "azure-vm-overview", | |
| "details": [ | |
| "VM ํฌ๊ธฐ ์๋ฆฌ์ฆ: B(๋ฒ์คํธ, ์ ๋น์ฉ), D(๋ฒ์ฉ), E(๋ฉ๋ชจ๋ฆฌ ์ต์ ํ), F(์ปดํจํ ์ต์ ํ), N(GPU). ์ซ์๋ vCPU ์๋ฅผ ์๋ฏธํฉ๋๋ค.", | |
| "VM ์์ฑ ์ ์๋์ผ๋ก NIC, OS ๋์คํฌ, Public IP(์ ํ)๊ฐ ํจ๊ป ์์ฑ๋ฉ๋๋ค.", | |
| "์ํ ํจํด: ์ค์ง vs ํ ๋น ํด์ ์๊ธ ์ฐจ์ด, VM ํฌ๊ธฐ ๋ณ๊ฒฝ ์ ์ฌ์์ ํ์ ์ฌ๋ถ, ๊ฐ์ฉ์ฑ SLA 99.9/99.95/99.99% ๊ตฌ์ฑ ๋ฐฉ๋ฒ์ด ์์ฃผ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ" | |
| }, | |
| { | |
| "id": "azure-vmss", | |
| "certification": "AZ-104", | |
| "title": "Virtual Machine Scale Sets โ ๊ฐ์ ๋จธ์ ํ์ฅ ์งํฉ", | |
| "summary": "๋์ผํ VM์ ์๋์ผ๋ก ํ์ฅยท์ถ์ํ๋ ๊ทธ๋ฃน์ ๋๋ค. ๋ถํ์ ๋ฐ๋ผ ์ธ์คํด์ค ์๋ฅผ ์๋ ์กฐ์ (Autoscale)ํ๊ณ , ๋ถํ ๋ถ์ฐ ์ฅ์น์ ํตํฉํฉ๋๋ค.", | |
| "example": "az vmss create \\\n --name myVMSS \\\n --resource-group myRG \\\n --image Ubuntu2204 \\\n --instance-count 2 \\\n --vm-sku Standard_B2s", | |
| "common_mistake": "VMSS์ ๊ฐ๋ณ ์ธ์คํด์ค๋ ์ ๊ทธ๋ ์ด๋ ์ ์ฑ (์๋/์๋/๋กค๋ง)์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ์๋ ์ ์ฑ ์ ์ธ์คํด์ค๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฌ์์ํฉ๋๋ค.", | |
| "keywords": [ | |
| "VMSS", | |
| "scale set", | |
| "autoscale", | |
| "instance count", | |
| "upgrade policy", | |
| "load balancer" | |
| ], | |
| "source_id": "azure-vmss-overview", | |
| "details": [ | |
| "Orchestration ๋ชจ๋: Uniform(๋์ผ VM, ์๋ ํ์ฅ ์ต์ ํ) vs Flexible(ํผํฉ VM ํฌ๊ธฐ ๊ฐ๋ฅ, Availability Zone ์ง์ ๊ฐํ).", | |
| "Autoscale ๊ท์น: CPU%, ๋ฉ๋ชจ๋ฆฌ, ํ ๊ธธ์ด ๋ฑ ๋ฉํธ๋ฆญ ๊ธฐ๋ฐ์ผ๋ก scale-out/in ์๊ณ๊ฐ์ ์ค์ ํฉ๋๋ค.", | |
| "์ํ ํจํด: VMSS vs Availability Set ์ฐจ์ด(AS๋ ์๋ ํ์ฅ ์์), ์ ๊ทธ๋ ์ด๋ ์ ์ฑ ์ ํ, ๋ถํ ๋ถ์ฐ๊ธฐ ํตํฉ ๋ฐฉ๋ฒ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-nsg", | |
| "certification": "AZ-104", | |
| "title": "Network Security Group โ ๋คํธ์ํฌ ๋ณด์ ๊ทธ๋ฃน", | |
| "summary": "์ธ๋ฐ์ด๋/์์๋ฐ์ด๋ ํธ๋ํฝ์ ํฌํธยทํ๋กํ ์ฝยท์๋ณธIP๋ก ํ์ฉ/๊ฑฐ๋ถํ๋ ๊ท์น ์งํฉ์ ๋๋ค. ์๋ธ๋ท ๋๋ NIC์ ์ฐ๊ฒฐํฉ๋๋ค.", | |
| "example": "az network nsg rule create \\\n --nsg-name myNSG \\\n --name allow-ssh \\\n --priority 100 \\\n --access Allow \\\n --protocol Tcp \\\n --destination-port-ranges 22", | |
| "common_mistake": "์ฐ์ ์์ ์ซ์๊ฐ ๋ฎ์์๋ก ๋จผ์ ์ ์ฉ๋ฉ๋๋ค(100์ด 200๋ณด๋ค ๋์ ์ฐ์ ์์). ๊ท์น ์ถฉ๋ ์ ๋ฎ์ ๋ฒํธ ๊ท์น์ด ์ด๊น๋๋ค.", | |
| "keywords": [ | |
| "NSG", | |
| "inbound", | |
| "outbound", | |
| "priority", | |
| "allow", | |
| "deny", | |
| "subnet", | |
| "NIC" | |
| ], | |
| "source_id": "azure-nsg-overview", | |
| "details": [ | |
| "NSG์๋ ๊ธฐ๋ณธ ๊ท์น์ด ์์ต๋๋ค: AllowVNetInbound(65000), AllowAzureLoadBalancerInbound(65001), DenyAllInbound(65500).", | |
| "NSG๋ฅผ ์๋ธ๋ท๊ณผ NIC ์์ชฝ์ ์ฐ๊ฒฐํ๋ฉด ํธ๋ํฝ์ด ๋ NSG๋ฅผ ๋ชจ๋ ํต๊ณผํฉ๋๋ค. ์ธ๋ฐ์ด๋๋ ์๋ธ๋ทNSGโNIC NSG ์์.", | |
| "์ํ ํจํด: ํน์ ํฌํธ ํ์ฉ/์ฐจ๋จ ๊ท์น ์ค๊ณ, ์ฐ์ ์์ ์ถฉ๋ ๊ฒฐ๊ณผ, ์๋ธ๋ท vs NIC ์ฐ๊ฒฐ ์ฐจ์ด ๋ฌธ์ ๊ฐ ์์ฃผ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ", | |
| "related_practices": [ | |
| "azure-lab-4" | |
| ] | |
| }, | |
| { | |
| "id": "azure-app-gateway", | |
| "certification": "AZ-104", | |
| "title": "Application Gateway โ ์ ํ๋ฆฌ์ผ์ด์ ๊ฒ์ดํธ์จ์ด", | |
| "summary": "HTTP/HTTPS ๋ ์ด์ด(L7) ๋ถํ ๋ถ์ฐ ์ฅ์น์ ๋๋ค. URL ๊ธฐ๋ฐ ๋ผ์ฐํ , SSL ์ข ๋ฃ, WAF(์น ๋ฐฉํ๋ฒฝ)๋ฅผ ์ง์ํฉ๋๋ค.", | |
| "example": "# ๊ตฌ์ฑ ์์: Frontend IP โ Listener โ Rule โ Backend Pool โ HTTP Settings\n# URL ๊ธฐ๋ฐ ๋ผ์ฐํ ์:\n# /images/* โ image-pool\n# /api/* โ api-pool", | |
| "common_mistake": "Application Gateway๋ L7, Azure Load Balancer๋ L4์ ๋๋ค. URL ๊ฒฝ๋ก๋ ํธ์คํธ ํค๋ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ด ํ์ํ๋ฉด App Gateway๋ฅผ ์๋๋ค.", | |
| "keywords": [ | |
| "Application Gateway", | |
| "L7", | |
| "WAF", | |
| "SSL termination", | |
| "URL routing", | |
| "backend pool" | |
| ], | |
| "source_id": "azure-app-gateway-overview", | |
| "details": [ | |
| "๊ตฌ์ฑ ํ๋ฆ: Frontend IP โ Listener(ํฌํธ/ํ๋กํ ์ฝ) โ Routing Rule โ Backend Pool(VM/VMSS/IP) โ HTTP Settings.", | |
| "WAF SKU๋ OWASP ๊ท์น์ ์ผ๋ก SQL injection, XSS ๋ฑ ์น ๊ณต๊ฒฉ์ ํ์งยท์ฐจ๋จํฉ๋๋ค.", | |
| "์ํ ํจํด: App Gateway vs Load Balancer ์ ํ ๊ธฐ์ค, URL ๊ฒฝ๋ก ๊ธฐ๋ฐ ๋ผ์ฐํ ๊ตฌ์ฑ, SSL ์คํ๋ก๋ฉ ๊ฐ๋ ์ด ์์ฃผ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-dns", | |
| "certification": "AZ-104", | |
| "title": "Azure DNS โ ๋๋ฉ์ธ ์ด๋ฆ ์๋น์ค", | |
| "summary": "Azure์์ DNS ์์ญ์ ํธ์คํ ํฉ๋๋ค. Public DNS Zone์ ์ธํฐ๋ท์ฉ, Private DNS Zone์ VNet ๋ด๋ถ ์ด๋ฆ ํด์์ ์ฌ์ฉํฉ๋๋ค.", | |
| "example": "az network dns zone create --name example.com --resource-group myRG\naz network dns record-set a add-record \\\n --zone-name example.com \\\n --record-set-name www \\\n --ipv4-address 1.2.3.4", | |
| "common_mistake": "Azure DNS๋ ๋๋ฉ์ธ ๋ฑ๋ก ์๋น์ค๊ฐ ์๋๋๋ค. ๋๋ฉ์ธ์ ๋ณ๋ ๋ฑ๋ก ๊ธฐ๊ด์์ ๊ตฌ๋งค ํ ๋ค์์๋ฒ๋ฅผ Azure๋ก ์์ํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "Azure DNS", | |
| "Public Zone", | |
| "Private Zone", | |
| "A record", | |
| "CNAME", | |
| "NS delegation" | |
| ], | |
| "source_id": "azure-dns-overview", | |
| "details": [ | |
| "Public DNS Zone ์์ฑ ํ Azure๊ฐ ์ ๊ณตํ๋ NS ๋ ์ฝ๋ 4๊ฐ๋ฅผ ๋๋ฉ์ธ ๋ฑ๋ก ๊ธฐ๊ด์์ ์ค์ ํด ์์ํฉ๋๋ค.", | |
| "Private DNS Zone์ VNet์ ์ฐ๊ฒฐ(link)ํ๋ฉด ํด๋น VNet์ VM์ด ์ฌ์ค ๋๋ฉ์ธ ์ด๋ฆ์ ํด์ํ ์ ์์ต๋๋ค.", | |
| "์ํ ํจํด: Public vs Private Zone ์ฌ์ฉ ์๋๋ฆฌ์ค, ๋ค์์๋ฒ ์์ ์ ์ฐจ, Azure ์๋น์ค์ DNS๋ณ์นญ(CNAME/alias) ์ฐ๊ฒฐ ๋ฐฉ๋ฒ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-blob-tier", | |
| "certification": "AZ-104", | |
| "title": "Blob Access Tier โ Blob ์ ๊ทผ ๊ณ์ธต", | |
| "summary": "๋ฐ์ดํฐ ์ ๊ทผ ๋น๋์ ๋ฐ๋ผ HotยทCoolยทColdยทArchive ๊ณ์ธต์ ์ ํํด ์คํ ๋ฆฌ์ง ๋น์ฉ์ ์ต์ ํํฉ๋๋ค. ์ ์ฅ ๋น์ฉ๊ณผ ์ ๊ทผ ๋น์ฉ์ ๋ฐ๋น๋กํฉ๋๋ค.", | |
| "example": "az storage blob set-tier \\\n --account-name myaccount \\\n --container-name mycontainer \\\n --name myblob.log \\\n --tier Cool", | |
| "common_mistake": "Archive ๊ณ์ธต์ Blob์ ์ฆ์ ์ฝ์ ์ ์์ต๋๋ค. ์ฝ์ผ๋ ค๋ฉด Hot ๋๋ Cool๋ก rehydration(๋ช ์๊ฐ~15์๊ฐ)์ด ํ์ํฉ๋๋ค.", | |
| "keywords": [ | |
| "blob tier", | |
| "Hot", | |
| "Cool", | |
| "Cold", | |
| "Archive", | |
| "rehydration", | |
| "lifecycle" | |
| ], | |
| "source_id": "azure-blob-access-tiers", | |
| "details": [ | |
| "๊ณ์ธต๋ณ ํน์ง: Hot(์์ฃผ ์ ๊ทผ, ๋์ ์ ์ฅ ๋น์ฉ ๋ฎ์ ์ ๊ทผ ๋น์ฉ), Cool(30์ผ ์ด์ ๋ณด๊ด), Cold(90์ผ ์ด์), Archive(180์ผ ์ด์, ์ ๊ทผ ๋น์ฉ ์ต๊ณ ).", | |
| "Archive์์ ๊บผ๋ผ ๋ ์ฐ์ ์์: Standard(์ต๋ 15์๊ฐ), High Priority(1์๊ฐ ์ด๋ด, ๋น์).", | |
| "์ํ ํจํด: ๊ณ์ธต๋ณ ์ต์ ๋ณด๊ด ๊ธฐ๊ฐ(Cool=30์ผ, Cold=90์ผ, Archive=180์ผ), ์กฐ๊ธฐ ์ญ์ ์ ์๊ธ ๋ถ๊ณผ, rehydration ์๊ฐ ๋ฌธ์ ๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ", | |
| "related_practices": [ | |
| "azure-lab-7" | |
| ] | |
| }, | |
| { | |
| "id": "azure-log-analytics", | |
| "certification": "AZ-104", | |
| "title": "Log Analytics Workspace โ ๋ก๊ทธ ๋ถ์ ์์ ์์ญ", | |
| "summary": "Azure Monitor์ ๋ฐ์ดํฐ ์ ์ฅ์์ ๋๋ค. VMยท์๋น์ค์ ๋ก๊ทธ์ ๋ฉํธ๋ฆญ์ ์์งํ๊ณ KQL(Kusto Query Language)๋ก ๋ถ์ํฉ๋๋ค.", | |
| "example": "# KQL ์: ์ต๊ทผ 1์๊ฐ ์ค๋ฅ ๋ก๊ทธ\nEvent\n| where TimeGenerated > ago(1h)\n| where EventLevelName == 'Error'\n| summarize count() by Source", | |
| "common_mistake": "Log Analytics๋ ์ ์ฅ์์ด๊ณ Azure Monitor๊ฐ ์์ง ์์ด์ ํธยท๊ฒฝ๋ณด๋ฅผ ํฌํจํ ํ๋ซํผ์ ๋๋ค. ๋์ ํจ๊ป ๋์ํ๋ฉฐ ๋ณ๊ฐ์ ๋๋ค.", | |
| "keywords": [ | |
| "Log Analytics", | |
| "KQL", | |
| "workspace", | |
| "diagnostic settings", | |
| "MMA", | |
| "AMA" | |
| ], | |
| "source_id": "azure-log-analytics-overview", | |
| "details": [ | |
| "๋ฐ์ดํฐ ์์ง: VM์ Azure Monitor Agent(AMA) ์ค์น ๋๋ Diagnostic Settings๋ก Azure ์๋น์ค ๋ก๊ทธ๋ฅผ Workspace๋ก ์ ์กํฉ๋๋ค.", | |
| "KQL ํต์ฌ: `| where`, `| project`(์ปฌ๋ผ ์ ํ), `| summarize`(์ง๊ณ), `| order by`, `| take`(์์ N๊ฐ).", | |
| "์ํ ํจํด: Diagnostic Settings ์ค์ ์ ์ฐจ, VM์ ์์ด์ ํธ ์ฐ๊ฒฐ, KQL ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ผ๋ก ๋ก๊ทธ๋ฅผ ์ฟผ๋ฆฌํ๋ ์๋๋ฆฌ์ค๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-recovery-vault", | |
| "certification": "AZ-104", | |
| "title": "Recovery Services Vault โ ๋ณต๊ตฌ ์๋น์ค ์๊ฒฉ ์ฆ๋ช ๋ชจ์", | |
| "summary": "Azure Backup๊ณผ Site Recovery ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ปจํ ์ด๋์ ๋๋ค. VM, SQL, Files ๋ฑ์ ๋ฐฑ์ ์ ์ฑ ์ ์ ์ํ๊ณ ๋ณต์ ์ง์ ์ ๊ด๋ฆฌํฉ๋๋ค.", | |
| "example": "az backup vault create \\\n --name myVault \\\n --resource-group myRG \\\n --location koreacentral\naz backup protection enable-for-vm \\\n --vault-name myVault \\\n --vm myVM \\\n --policy-name DefaultPolicy", | |
| "common_mistake": "Recovery Services Vault๋ ๋ฐฑ์ ๋์ ๋ฆฌ์์ค์ ๊ฐ์ region์ ์์ด์ผ ํฉ๋๋ค. ๋ค๋ฅธ region์ VM์ ๋ฐฑ์ ํ ์ ์์ต๋๋ค.", | |
| "keywords": [ | |
| "Recovery Services Vault", | |
| "Azure Backup", | |
| "backup policy", | |
| "restore point", | |
| "soft delete" | |
| ], | |
| "source_id": "azure-recovery-services-vault", | |
| "details": [ | |
| "๋ฐฑ์ ์ ์ฑ : ์ค์ผ์ค(์ผ๋ณ/์ฃผ๋ณ), ๋ณด์กด ๊ธฐ๊ฐ(์ผ/์ฃผ/์/๋ )์ ์ ์ํฉ๋๋ค. VM์ ๊ธฐ๋ณธ ์ ์ฑ (์ผ 1ํ, 30์ผ ๋ณด์กด)์ผ๋ก ๋น ๋ฅด๊ฒ ์์ ๊ฐ๋ฅํฉ๋๋ค.", | |
| "Soft Delete: ๋ฐฑ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ 14์ผ๊ฐ ๋ณต์ ๊ฐ๋ฅ ์ํ๋ก ์ ์งํฉ๋๋ค. ๋์ฌ์จ์ด ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค.", | |
| "์ํ ํจํด: ๋ฐฑ์ ์ ์ฑ ๊ตฌ์ฑ, ๋ณต์ ์ ํ(์๋ ์์น/์ ์์น), ์ง์ญ ๊ฐ ๋ณต์(CRR) ๊ธฐ๋ฅ, Soft Delete ํ์ฑํ ๋ฐฉ๋ฒ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ", | |
| "related_practices": [ | |
| "azure-lab-8" | |
| ] | |
| }, | |
| { | |
| "id": "azure-entra-id", | |
| "certification": "AZ-104", | |
| "title": "Microsoft Entra ID โ ID ๊ด๋ฆฌ", | |
| "summary": "Azure์ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ID ๋ฐ ์ ๊ทผ ๊ด๋ฆฌ(IAM) ์๋น์ค์ ๋๋ค(๊ตฌ Azure Active Directory). ์ฌ์ฉ์ยท๊ทธ๋ฃนยท์ ํ๋ฆฌ์ผ์ด์ ID๋ฅผ ๊ด๋ฆฌํ๊ณ MFA, ์กฐ๊ฑด๋ถ ์ ๊ทผ์ ์ ๊ณตํฉ๋๋ค.", | |
| "example": "az ad user create \\\n --display-name 'Alice Kim' \\\n --user-principal-name alice@mydomain.com \\\n --password 'TempPass123!'\naz ad group create --display-name 'Developers' --mail-nickname 'devs'", | |
| "common_mistake": "Entra ID์ ์จํ๋ ๋ฏธ์ค Active Directory๋ ๋ค๋ฅธ ์ ํ์ ๋๋ค. Entra ID๋ ํด๋ผ์ฐ๋ LDAP/Kerberos๊ฐ ์๋๋ฉฐ, ๋๋ฉ์ธ ์กฐ์ธ์ Entra Domain Services๋ฅผ ์ฌ์ฉํฉ๋๋ค.", | |
| "keywords": [ | |
| "Entra ID", | |
| "AAD", | |
| "tenant", | |
| "user", | |
| "group", | |
| "MFA", | |
| "SSO", | |
| "B2B", | |
| "B2C" | |
| ], | |
| "source_id": "azure-rbac-overview", | |
| "details": [ | |
| "ํ ๋ํธ(Tenant)๋ Entra ID์ ์ธ์คํด์ค์ด๋ฉฐ ์กฐ์ง ๋จ์์ ๋๋ค. ๊ตฌ๋ ์ ๋ฐ๋์ ํ๋์ ํ ๋ํธ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.", | |
| "์ฌ์ฉ์ ์ ํ: Member(๋ด๋ถ ์ฌ์ฉ์) vs Guest(B2B ์ด๋ ์ฌ์ฉ์). ๊ทธ๋ฃน ์ ํ: Security(RBAC ํ ๋น์ฉ) vs Microsoft 365.", | |
| "์ํ ํจํด: ์ฌ์ฉ์/๊ทธ๋ฃน ์์ฑยท๊ด๋ฆฌ, ๊ฒ์คํธ ์ฌ์ฉ์ ์ด๋(B2B), MFA ๋ฑ๋ก, SSPR ์ค์ , Entra ID vs ์จํ๋ ๋ฏธ์ค AD ์ฐจ์ด๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ" | |
| }, | |
| { | |
| "id": "azure-management-group", | |
| "certification": "AZ-104", | |
| "title": "Management Group โ ๊ด๋ฆฌ ๊ทธ๋ฃน", | |
| "summary": "์ฌ๋ฌ ๊ตฌ๋ ์ ๊ณ์ธต์ ์ผ๋ก ๋ฌถ๋ ์ปจํ ์ด๋์ ๋๋ค. ์ต์์ ๋ฃจํธ ๊ด๋ฆฌ ๊ทธ๋ฃน์์ RBAC์ Policy๋ฅผ ํ ๋นํ๋ฉด ํ์ ๊ตฌ๋ ์ผ๋ก ์์๋ฉ๋๋ค.", | |
| "example": "# ๊ณ์ธต ๊ตฌ์กฐ ์:\n# Root Management Group\n# โโ Production MG\n# โโ Sub-A\n# โโ Sub-B\naz account management-group create --name 'Production'", | |
| "common_mistake": "๊ด๋ฆฌ ๊ทธ๋ฃน์ ์ต๋ 6๋จ๊ณ(๋ฃจํธ ํฌํจ)๊น์ง ์ค์ฒฉ ๊ฐ๋ฅํฉ๋๋ค. ๊ตฌ๋ ์ ํ ๋ฒ์ ํ๋์ ๊ด๋ฆฌ ๊ทธ๋ฃน์๋ง ์ํ ์ ์์ต๋๋ค.", | |
| "keywords": [ | |
| "management group", | |
| "hierarchy", | |
| "policy inheritance", | |
| "RBAC", | |
| "root", | |
| "subscription" | |
| ], | |
| "source_id": "azure-rbac-overview", | |
| "details": [ | |
| "๋ฃจํธ ๊ด๋ฆฌ ๊ทธ๋ฃน์ ํ ๋นํ PolicyยทRBAC๋ ํ ๋ํธ์ ๋ชจ๋ ๊ตฌ๋ ์ ์์๋ฉ๋๋ค. ์ ์ฌ ๊ท์ ์ ์ฉ์ ์ฌ์ฉ๋ฉ๋๋ค.", | |
| "๊ด๋ฆฌ ๊ทธ๋ฃน ์ด๋: ๊ตฌ๋ ์ด๋ ํ์ ๊ด๋ฆฌ ๊ทธ๋ฃน์ ๋ค๋ฅธ ๊ด๋ฆฌ ๊ทธ๋ฃน์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค.", | |
| "์ํ ํจํด: ๊ด๋ฆฌ ๊ทธ๋ฃน ๊ณ์ธต ์ค๊ณ, Policy/RBAC ์์ ํ๋ฆ, ๊ด๋ฆฌ ๊ทธ๋ฃน vs ๊ตฌ๋ vs RG ๋ฒ์ ์ฐจ์ด ๋ฌธ์ ๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ" | |
| }, | |
| { | |
| "id": "azure-subscription", | |
| "certification": "AZ-104", | |
| "title": "Subscription โ ๊ตฌ๋ ", | |
| "summary": "Azure ๋ฆฌ์์ค๋ฅผ ๋ฐฐํฌํ๊ณ ๋น์ฉ์ ์ฒญ๊ตฌํ๋ ๊ธฐ๋ณธ ๋จ์์ ๋๋ค. ๊ตฌ๋ ๋ง๋ค ๋ฆฌ์์ค ํ๋(quota)๊ฐ ์์ผ๋ฉฐ ํ๋์ Entra ID ํ ๋ํธ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.", | |
| "example": "az account list --output table\naz account set --subscription 'My Subscription'\naz account show", | |
| "common_mistake": "๊ตฌ๋ ๊ณผ ํ ๋ํธ๋ 1:1์ด ์๋๋๋ค. ํ๋์ ํ ๋ํธ์ ์ฌ๋ฌ ๊ตฌ๋ ์ด ์ํ ์ ์๊ณ , ๊ตฌ๋ ์ ๋ค๋ฅธ ํ ๋ํธ๋ก ์ด์ ํ ์๋ ์์ต๋๋ค.", | |
| "keywords": [ | |
| "subscription", | |
| "tenant", | |
| "quota", | |
| "billing", | |
| "az account" | |
| ], | |
| "source_id": "azure-rbac-overview", | |
| "details": [ | |
| "๊ตฌ๋ ์ ํ: Pay-As-You-Go, Enterprise Agreement(EA), CSP(ํํธ๋ ์ ๊ณต) ๋ฑ. ๋น์ฉ ์ฒญ๊ตฌ ๊ณ์ ๊ณผ ์ฐ๊ฒฐ๋ฉ๋๋ค.", | |
| "๋ฆฌ์์ค ํ๋(Quota)๋ ๊ตฌ๋ ๋จ์๋ก ๊ด๋ฆฌ๋ฉ๋๋ค. ์: ํน์ region์ vCPU ์ต๋ ์. ํ๋ ์ฆ๊ฐ๋ Microsoft์ ์์ฒญํฉ๋๋ค.", | |
| "์ํ ํจํด: ๊ตฌ๋ ์ด๋(ํ ๋ํธ ๊ฐ), ๊ตฌ๋ ๋ ๋ฒจ RBAC, Cost Management์์ ๊ตฌ๋ ๋ณ ๋น์ฉ ๋ถ์ ์๋๋ฆฌ์ค๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ" | |
| }, | |
| { | |
| "id": "azure-resource-lock", | |
| "certification": "AZ-104", | |
| "title": "Resource Lock โ ๋ฆฌ์์ค ์ ๊ธ", | |
| "summary": "์ค์๋ก ๋ฆฌ์์ค๋ฅผ ์์ ยท์ญ์ ํ์ง ๋ชปํ๋๋ก ๋ณดํธํฉ๋๋ค. ReadOnly(์์ ยท์ญ์ ์ฐจ๋จ)์ CanNotDelete(์ญ์ ๋ง ์ฐจ๋จ) ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.", | |
| "example": "az lock create \\\n --name 'prod-lock' \\\n --resource-group myRG \\\n --lock-type CanNotDelete\naz lock list --resource-group myRG", | |
| "common_mistake": "Lock์ RBAC๋ณด๋ค ์ฐ์ ํฉ๋๋ค. Owner๋ผ๋ Lock์ด ๊ฑธ๋ฆฐ ๋ฆฌ์์ค๋ ์ ๊ธ์ ๋จผ์ ํด์ ํด์ผ ์์ ยท์ญ์ ํ ์ ์์ต๋๋ค.", | |
| "keywords": [ | |
| "resource lock", | |
| "CanNotDelete", | |
| "ReadOnly", | |
| "RBAC override" | |
| ], | |
| "source_id": "azure-vm-overview", | |
| "details": [ | |
| "ReadOnly Lock: ์ฝ๊ธฐ๋ ๊ฐ๋ฅํ์ง๋ง ์ฐ๊ธฐยท์ญ์ ๋ชจ๋ ์ฐจ๋จ. VM์ ๊ฑธ๋ฉด ์ฌ์์๋ ์ฐจ๋จ๋ ์ ์์ต๋๋ค.", | |
| "Lock์ RG์ ์ค์ ํ๋ฉด ํ์ ๋ชจ๋ ๋ฆฌ์์ค์ ์์๋ฉ๋๋ค. ๊ฐ๋ณ ๋ฆฌ์์ค์๋ง ๊ฑธ ์๋ ์์ต๋๋ค.", | |
| "์ํ ํจํด: Lock๊ณผ RBAC ์ํธ์์ฉ, CanNotDelete vs ReadOnly ์๋๋ฆฌ์ค, ์ ๊ธ ํด์ ์์ด ์ญ์ ์๋ ๊ฒฐ๊ณผ๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ", | |
| "related_practices": [ | |
| "azure-lab-6" | |
| ] | |
| }, | |
| { | |
| "id": "azure-tags", | |
| "certification": "AZ-104", | |
| "title": "Tags โ ํ๊ทธ", | |
| "summary": "๋ฆฌ์์ค์ ํค-๊ฐ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฌ ๋ถ๋ฅยท๋น์ฉ ์ถ์ ยท์๋ํ์ ํ์ฉํฉ๋๋ค. RG์ ํ๊ทธ๋ ๋ด๋ถ ๋ฆฌ์์ค์ ์๋ ์์๋์ง ์์ต๋๋ค.", | |
| "example": "az resource tag \\\n --tags Environment=Production CostCenter=IT \\\n --ids /subscriptions/SUB/resourceGroups/myRG\n# Policy๋ก ํ๊ทธ ๊ฐ์ :\n# 'Require a tag on resources'", | |
| "common_mistake": "ํ๊ทธ๋ RG์์ ๋ด๋ถ ๋ฆฌ์์ค๋ก ์๋ ์์๋์ง ์์ต๋๋ค. ์์์ด ํ์ํ๋ฉด Azure Policy๋ก ํ๊ทธ ์์ ๊ท์น์ ์ ์ฉํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "tags", | |
| "key-value", | |
| "cost center", | |
| "environment", | |
| "policy", | |
| "inheritance" | |
| ], | |
| "source_id": "azure-vm-overview", | |
| "details": [ | |
| "๋ฆฌ์์ค๋น ์ต๋ 50๊ฐ์ ํ๊ทธ. ์ด๋ฆ ์ต๋ 512์, ๊ฐ ์ต๋ 256์(์คํ ๋ฆฌ์ง ๊ณ์ ์ ์ด๋ฆ 128์).", | |
| "๋น์ฉ ๋ถ์์์ ํ๊ทธ๋ก ํํฐ๋งํ๋ฉด ๋ถ์๋ณยทํ๋ก์ ํธ๋ณ ๋น์ฉ์ ์ถ์ ํ ์ ์์ต๋๋ค.", | |
| "์ํ ํจํด: ํ๊ทธ ์์ ์ ํ, Policy๋ฅผ ํตํ ํ๊ทธ ๊ฐ์ ์ ์ฉ, ๋น์ฉ ๋ถ์์์ ํ๊ทธ ํ์ฉ ์๋๋ฆฌ์ค๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ" | |
| }, | |
| { | |
| "id": "azure-custom-role", | |
| "certification": "AZ-104", | |
| "title": "Custom Role โ ์ฌ์ฉ์ ์ง์ ์ญํ ", | |
| "summary": "๋ด์ฅ ์ญํ ์ด ๋๋ฌด ๊ด๋ฒ์ํ๊ฑฐ๋ ๋ถ์กฑํ ๋ ํน์ Actions๋ง ํ์ฉํ๋ ์ญํ ์ ์ง์ ๋ง๋ญ๋๋ค. JSON์ผ๋ก ActionsยทNotActionsยทDataActions๋ฅผ ์ ์ํฉ๋๋ค.", | |
| "example": "{\n \"Name\": \"VM Operator\",\n \"Actions\": [\n \"Microsoft.Compute/virtualMachines/start/action\",\n \"Microsoft.Compute/virtualMachines/restart/action\",\n \"Microsoft.Compute/virtualMachines/read\"\n ],\n \"AssignableScopes\": [\"/subscriptions/SUB_ID\"]\n}", | |
| "common_mistake": "Custom Role์ ํ ๋ํธ ๋ด์์ ๋ง๋ค์ง๋ง, AssignableScopes์ ์ง์ ํ ๊ตฌ๋ /RG ๋ฒ์์์๋ง ํ ๋นํ ์ ์์ต๋๋ค.", | |
| "keywords": [ | |
| "custom role", | |
| "Actions", | |
| "NotActions", | |
| "DataActions", | |
| "AssignableScopes", | |
| "JSON" | |
| ], | |
| "source_id": "azure-rbac-overview", | |
| "details": [ | |
| "Actions: ๊ด๋ฆฌ ํ๋ฉด ์์ ํ์ฉ. NotActions: Actions์์ ์ ์ธํ ์์ . DataActions: ๋ฐ์ดํฐ ํ๋ฉด ์์ (Blob ์ฝ๊ธฐ ๋ฑ).", | |
| "๊ธฐ์กด ๋ด์ฅ ์ญํ ์ ๋ณต์ฌํด ์์ ํ๋ ๋ฐฉ์์ด ํธ๋ฆฌํฉ๋๋ค: `az role definition list --name 'Contributor'`๋ก ์์.", | |
| "์ํ ํจํด: ์ต์ ๊ถํ ์์น์ ๋ฐ๋ฅธ Custom Role Actions ์ค๊ณ, DataActions vs Actions ์ฐจ์ด, AssignableScopes ์ค์ ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-sas", | |
| "certification": "AZ-104", | |
| "title": "Shared Access Signature โ SAS", | |
| "summary": "์คํ ๋ฆฌ์ง ๊ณ์ ์ ์ฒด๋ฅผ ๋ ธ์ถํ์ง ์๊ณ ํน์ ๋ฆฌ์์ค์ ์ ํ๋ ๊ถํ๊ณผ ์๊ฐ ๋ฒ์์ ์ ๊ทผ์ ํ์ฉํ๋ ์๋ช ๋ URL์ ๋๋ค.", | |
| "example": "az storage blob generate-sas \\\n --account-name myaccount \\\n --container-name data \\\n --name report.pdf \\\n --permissions r \\\n --expiry 2024-12-31", | |
| "common_mistake": "SAS URL์ด ๋ ธ์ถ๋๋ฉด ๋ง๋ฃ ์ ๊น์ง ๋๊ตฌ๋ ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค. ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ ์งง์ ๋ง๋ฃ ์๊ฐ์ ์ค์ ํ๊ณ , SAS๋ฅผ ์ ์ฅํ Stored Access Policy๋ฅผ ์ฌ์ฉํด ์ฆ์ ์ทจ์ํ ์ ์์ต๋๋ค.", | |
| "keywords": [ | |
| "SAS", | |
| "Service SAS", | |
| "Account SAS", | |
| "User Delegation SAS", | |
| "expiry", | |
| "stored access policy" | |
| ], | |
| "source_id": "azure-storage-account", | |
| "details": [ | |
| "SAS ์ ํ: Account SAS(์ ์ฒด ์คํ ๋ฆฌ์ง ์๋น์ค), Service SAS(ํน์ ์๋น์ค), User Delegation SAS(Entra ID ์๊ฒฉ ์ฆ๋ช ๊ธฐ๋ฐ, ๊ฐ์ฅ ์์ ).", | |
| "Stored Access Policy: ์๋น์ค SAS๋ฅผ ์ ์ฑ ์ ์ฐ๊ฒฐํ๋ฉด URL์ ์ฌ๋ฐ๊ธํ์ง ์๊ณ ์ ์ฑ ์ญ์ ๋ง์ผ๋ก ์ ๊ทผ์ ์ฆ์ ์ทจ์ํ ์ ์์ต๋๋ค.", | |
| "์ํ ํจํด: SAS ์ ํ ์ ํ, ๊ถํยท๋ง๋ฃ ์ค์ , Stored Access Policy๋ฅผ ํตํ ์ทจ์ ๋ฐฉ๋ฒ, ํค ๊ธฐ๋ฐ vs Entra ID ๊ธฐ๋ฐ SAS ์ฐจ์ด๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-storage-redundancy", | |
| "certification": "AZ-104", | |
| "title": "Storage Redundancy โ ์คํ ๋ฆฌ์ง ์ค๋ณต์ฑ", | |
| "summary": "๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํด ๊ฐ์ฉ์ฑ๊ณผ ๋ด๊ตฌ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ๋ณต์ ๋ฒ์(๋จ์ผ ๋ฐ์ดํฐ์ผํฐโAZโ๋ค๋ฅธ region)์ ๋ฐ๋ผ LRSยทZRSยทGRSยทGZRS ์ค ์ ํํฉ๋๋ค.", | |
| "example": "# ์์ฑ ์ SKU๋ก ๊ฒฐ์ \naz storage account create --sku Standard_GRS ...\n# ๋ณ๊ฒฝ (์ผ๋ถ๋ง ๊ฐ๋ฅ)\naz storage account update --sku Standard_RAGRS --name myaccount", | |
| "common_mistake": "GRS๋ ๋ณด์กฐ ์ง์ญ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ๊ธฐ ๋ถ๊ฐ์ ๋๋ค. ๋ณด์กฐ ์ง์ญ ์ฝ๊ธฐ๋ฅผ ํ์ฉํ๋ ค๋ฉด RA-GRS(Read-Access GRS)๋ก ์ค์ ํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "LRS", | |
| "ZRS", | |
| "GRS", | |
| "GZRS", | |
| "RA-GRS", | |
| "redundancy", | |
| "replication" | |
| ], | |
| "source_id": "azure-storage-account", | |
| "details": [ | |
| "LRS: ๋จ์ผ datacenter ๋ด 3๋ณต์ . ZRS: ๋์ผ region 3๊ฐ AZ์ ๋ณต์ . GRS: ๋ค๋ฅธ region์ ๋น๋๊ธฐ ๋ณต์ (LRSร2). GZRS: ZRS+GRS.", | |
| "๋ด๊ตฌ์ฑ(nines): LRS=11 9s, ZRS=12 9s, GRS=16 9s. ๋น์ฉ์ LRS<ZRS<GRS<GZRS ์์ ๋๋ค.", | |
| "์ํ ํจํด: ์๊ตฌ์ฌํญ(AZ ์ฅ์ ๋ณดํธ, region ์ฅ์ ๋ณดํธ)์ ๋ฐ๋ฅธ ์ค๋ณต์ฑ ์ ํ, RA-GRS์์ ๋ณด์กฐ ์ง์ญ ์ ๊ทผ ๋ฐฉ๋ฒ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-lifecycle", | |
| "certification": "AZ-104", | |
| "title": "Storage Lifecycle Management โ ์คํ ๋ฆฌ์ง ์๋ช ์ฃผ๊ธฐ", | |
| "summary": "Blob์ ์ผ์ ๊ธฐ๊ฐ ํ ์๋์ผ๋ก ๊ณ์ธต ์ ํ(HotโCoolโArchive)ํ๊ฑฐ๋ ์ญ์ ํ๋ ์ ์ฑ ์ ์ ์ํฉ๋๋ค. ๋น์ฉ ์๋ ์ต์ ํ์ ํ์ฉํฉ๋๋ค.", | |
| "example": "# ๊ท์น ์: 30์ผ ํ Cool, 90์ผ ํ Archive, 365์ผ ํ ์ญ์ \n{\n \"rules\": [{\n \"action\": {\"baseBlob\": {\n \"tierToCool\": {\"daysAfterModificationGreaterThan\": 30},\n \"tierToArchive\": {\"daysAfterModificationGreaterThan\": 90},\n \"delete\": {\"daysAfterModificationGreaterThan\": 365}\n }}\n }]\n}", | |
| "common_mistake": "์๋ช ์ฃผ๊ธฐ ์ ์ฑ ์ Blob ๋ ๋ฒจ์์๋ง ๋์ํฉ๋๋ค. ์ด๋ฏธ Archive ๊ณ์ธต์ธ Blob์ ์ ์ฑ ์ด ๋ค์ Archive๋ก ์ ํํ์ง ์์ต๋๋ค.", | |
| "keywords": [ | |
| "lifecycle policy", | |
| "tier transition", | |
| "Hot", | |
| "Cool", | |
| "Archive", | |
| "delete", | |
| "daysAfterModification" | |
| ], | |
| "source_id": "azure-blob-access-tiers", | |
| "details": [ | |
| "์กฐ๊ฑด ๊ธฐ์ค: ๋ง์ง๋ง ์์ ๋ ์ง, ๋ง์ง๋ง ์ ๊ทผ ๋ ์ง(์ ๊ทผ ์ถ์ ํ์ฑํ ํ์), blob ์์ฑ ๋ ์ง ์ค ์ ํํฉ๋๋ค.", | |
| "ํํฐ๋ก ํน์ ์ปจํ ์ด๋, ์ ๋์ฌ, blob ์ ํ(blockBlob/appendBlob)์๋ง ์ ์ฑ ์ ์ ์ฉํ ์ ์์ต๋๋ค.", | |
| "์ํ ํจํด: ํน์ ๋น์ฉ ์ต์ ํ ์๋๋ฆฌ์ค์์ lifecycle ์ ์ฑ ๊ท์น ์์ฑ, ์กฐ๊ฑด๋ณ ๊ณ์ธต ์ ํ ์์, ์ญ์ ํฌํจ ์ ์ฒด ํ๋ฆ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-files", | |
| "certification": "AZ-104", | |
| "title": "Azure Files โ ํ์ผ ๊ณต์ ", | |
| "summary": "SMB/NFS ํ๋กํ ์ฝ๋ก ๋ง์ดํธํ๋ ์์ ๊ด๋ฆฌํ ํด๋ผ์ฐ๋ ํ์ผ ๊ณต์ ์ ๋๋ค. VMยท์จํ๋ ๋ฏธ์คยท์ปจํ ์ด๋์์ ๋คํธ์ํฌ ๋๋ผ์ด๋ธ์ฒ๋ผ ์ฌ์ฉํฉ๋๋ค.", | |
| "example": "# Windows์์ ๋ง์ดํธ\nnet use Z: \\\\myaccount.file.core.windows.net\\myshare /user:myaccount [key]\n# Linux์์ ๋ง์ดํธ\nmount -t cifs //myaccount.file.core.windows.net/myshare /mnt -o user=myaccount,password=[key]", | |
| "common_mistake": "Azure Files SMB๋ ํฌํธ 445๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ผ๋ถ ISP์ ๊ธฐ์ ๋ฐฉํ๋ฒฝ์ด 445๋ฅผ ์ฐจ๋จํด ๋ง์ดํธ๊ฐ ์คํจํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.", | |
| "keywords": [ | |
| "Azure Files", | |
| "SMB", | |
| "NFS", | |
| "file share", | |
| "port 445", | |
| "Azure File Sync" | |
| ], | |
| "source_id": "azure-storage-account", | |
| "details": [ | |
| "์ฑ๋ฅ ๊ณ์ธต: Standard(HDD ๊ธฐ๋ฐ), Premium(SSD ๊ธฐ๋ฐ). Premium์ ๋ฎ์ ์ง์ฐ์๊ฐ์ด ํ์ํ ์ํฌ๋ก๋์ ์ฌ์ฉํฉ๋๋ค.", | |
| "Azure File Sync: ์จํ๋ ๋ฏธ์ค ํ์ผ ์๋ฒ์ Azure Files๋ฅผ ๋๊ธฐํํ๊ณ , ์์ฃผ ์ฐ์ง ์๋ ํ์ผ์ Cloud Tiering์ผ๋ก Azure์ ์ฌ๋ฆฝ๋๋ค.", | |
| "์ํ ํจํด: Blob vs Files ์ ํ ๊ธฐ์ค(ํ์ผ ์์คํ ๋ง์ดํธ ํ์ ์ฌ๋ถ), Azure File Sync ์ํคํ ์ฒ, ํฌํธ 445 ๋ฌธ์ ํด๊ฒฐ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-managed-disk", | |
| "certification": "AZ-104", | |
| "title": "Managed Disk โ ๊ด๋ฆฌ ๋์คํฌ", | |
| "summary": "VM์ ์ฐ๊ฒฐํ๋ ๋ธ๋ก ์คํ ๋ฆฌ์ง์ ๋๋ค. OS ๋์คํฌ์ ๋ฐ์ดํฐ ๋์คํฌ๋ก ๋๋๋ฉฐ, ์ฑ๋ฅ ์๊ตฌ์ ๋ฐ๋ผ Standard HDDยทStandard SSDยทPremium SSDยทUltra Disk๋ฅผ ์ ํํฉ๋๋ค.", | |
| "example": "az disk create \\\n --name myDataDisk \\\n --resource-group myRG \\\n --size-gb 128 \\\n --sku Premium_LRS\naz vm disk attach --vm-name myVM --name myDataDisk", | |
| "common_mistake": "๊ด๋ฆฌ ๋์คํฌ ํฌ๊ธฐ๋ ๋๋ฆด ์๋ง ์๊ณ ์ค์ผ ์ ์์ต๋๋ค. ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ค๋ฉด ์ ์์ ๋์คํฌ๋ฅผ ๋ง๋ค๊ณ ๋ฐ์ดํฐ๋ฅผ ์ด์ ํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "managed disk", | |
| "OS disk", | |
| "data disk", | |
| "Premium SSD", | |
| "Ultra Disk", | |
| "snapshot", | |
| "disk encryption" | |
| ], | |
| "source_id": "azure-storage-account", | |
| "details": [ | |
| "SKU ์ ํ: Standard HDD(๋น์ฉ ์ต์ , ๋ฐฑ์ ์ฉ), Standard SSD(์ผ๋ฐ ์ํฌ๋ก๋), Premium SSD(I/O ์ง์ฝ ์ฑ), Ultra Disk(DB, ์ต์ ์ง์ฐ).", | |
| "์ค๋ ์ท: ํน์ ์์ ์ ๋์คํฌ ์ํ๋ฅผ ์บก์ฒ. ๋ค๋ฅธ region์ ๋ณต์ฌํด ์ฌํด ๋ณต๊ตฌ์ ํ์ฉํ ์ ์์ต๋๋ค.", | |
| "์ํ ํจํด: ์ํฌ๋ก๋๋ณ ๋์คํฌ SKU ์ ํ, ๋์คํฌ ํ์ฅ ํ OS์์ ํํฐ์ ํ์ฅ ํ์ ์ฌ๋ถ, ์ค๋ ์ท vs ๋ฐฑ์ ์ฐจ์ด๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ" | |
| }, | |
| { | |
| "id": "azure-availability-set", | |
| "certification": "AZ-104", | |
| "title": "Availability Set โ ๊ฐ์ฉ์ฑ ์งํฉ", | |
| "summary": "๋์ผ ๋ฐ์ดํฐ์ผํฐ ๋ด์์ VM์ ๋ค๋ฅธ ๋ฌผ๋ฆฌ ๋(์ฅ์ ๋๋ฉ์ธ)๊ณผ ์ ๋ฐ์ดํธ ๊ทธ๋ฃน(์ ๋ฐ์ดํธ ๋๋ฉ์ธ)์ ๋ฐฐ์นํด ๋จ์ผ ์ฅ์ ์ ์ ์์ฑ๋๋ค.", | |
| "example": "az vm availability-set create \\\n --name myAS \\\n --resource-group myRG \\\n --platform-fault-domain-count 2 \\\n --platform-update-domain-count 5", | |
| "common_mistake": "Availability Set์ ๋จ์ผ ๋ฐ์ดํฐ์ผํฐ ๋ด ๋ณดํธ์ ๋๋ค. ๋ฐ์ดํฐ์ผํฐ ์ ์ฒด ์ฅ์ ๋ AZ ์ฅ์ ์ ๋์ํ๋ ค๋ฉด Availability Zones๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "availability set", | |
| "fault domain", | |
| "update domain", | |
| "UD", | |
| "FD", | |
| "SLA 99.95%" | |
| ], | |
| "source_id": "azure-vm-overview", | |
| "details": [ | |
| "์ฅ์ ๋๋ฉ์ธ(FD): ๊ณต์ ์ ์ยท๋คํธ์ํฌ ์ค์์น ๊ธฐ์ค ๋ฌผ๋ฆฌ ๋ ๋ถ๋ฆฌ. ๊ธฐ๋ณธ ์ต๋ 3๊ฐ.", | |
| "์ ๋ฐ์ดํธ ๋๋ฉ์ธ(UD): ๊ณํ๋ ์ ์ง ๊ด๋ฆฌ ์ ๋์์ ์ฌ์์ํ์ง ์๋ ๊ทธ๋ฃน. ๊ธฐ๋ณธ 5๊ฐ(์ต๋ 20๊ฐ).", | |
| "์ํ ํจํด: AS vs AZ ๋ณดํธ ์์ค ์ฐจ์ด, SLA(AS=99.95%, ๋จ์ผVM-Premium=99.9%, AZ=99.99%), AS์ VM ์ถ๊ฐ ์๊ธฐ ์ ํ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ ๋ฌธ" | |
| }, | |
| { | |
| "id": "azure-autoscale", | |
| "certification": "AZ-104", | |
| "title": "Autoscale โ ์๋ ํฌ๊ธฐ ์กฐ์ ", | |
| "summary": "๋ฉํธ๋ฆญ(CPU, ๋ฉ๋ชจ๋ฆฌ, ํ ๊ธธ์ด ๋ฑ)์ด๋ ์ผ์ ์ ๋ฐ๋ผ VM Scale Set ๋๋ App Service์ ์ธ์คํด์ค ์๋ฅผ ์๋์ผ๋ก ๋๋ฆฌ๊ณ ์ค์ ๋๋ค.", | |
| "example": "# Autoscale ๊ท์น ์:\n# CPU > 70% 5๋ถ ์ ์ง โ +1 ์ธ์คํด์ค ์ถ๊ฐ\n# CPU < 30% 5๋ถ ์ ์ง โ -1 ์ธ์คํด์ค ์ ๊ฑฐ\n# ์ต์ 2, ์ต๋ 10 ์ธ์คํด์ค", | |
| "common_mistake": "Scale-out(์ถ๊ฐ)๊ณผ Scale-in(์ ๊ฑฐ) ๊ท์น์ ๋ชจ๋ ์ค์ ํด์ผ ํฉ๋๋ค. Scale-out๋ง ์ค์ ํ๋ฉด ์ธ์คํด์ค๊ฐ ์ค์ด๋ค์ง ์์ ๋น์ฉ์ด ๊ณ์ ์ฆ๊ฐํฉ๋๋ค.", | |
| "keywords": [ | |
| "autoscale", | |
| "scale-out", | |
| "scale-in", | |
| "metric", | |
| "cooldown", | |
| "min/max instances" | |
| ], | |
| "source_id": "azure-vmss-overview", | |
| "details": [ | |
| "๋๊ฐ ๊ธฐ๊ฐ(Cooldown): Scale ๋์ ํ ๋ค์ ๋์๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ. ๋๋ฌด ์งง์ผ๋ฉด ์ง๋(flapping) ํ์์ด ๋ฐ์ํฉ๋๋ค.", | |
| "์ผ์ ๊ธฐ๋ฐ Autoscale: ํน์ ์์ผยท์๊ฐ๋์ ์ธ์คํด์ค ์๋ฅผ ๊ณ ์ ํ๊ฑฐ๋ ๋๋ฆด ์ ์์ต๋๋ค.", | |
| "์ํ ํจํด: Scale-in/out ๊ท์น ์ค๊ณ, ๋๊ฐ ๊ธฐ๊ฐ ๊ฐ๋ , ๋ฉํธ๋ฆญ ๊ธฐ๋ฐ vs ์ผ์ ๊ธฐ๋ฐ ์ ํ, VMSS์ App Service์ Autoscale ์ฐจ์ด๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-vnet-peering", | |
| "certification": "AZ-104", | |
| "title": "VNet Peering โ ๊ฐ์ ๋คํธ์ํฌ ํผ์ด๋ง", | |
| "summary": "๋ VNet์ Microsoft ๋ฐฑ๋ณธ ๋คํธ์ํฌ๋ก ์ง์ ์ฐ๊ฒฐํฉ๋๋ค. ๋์ผ region(Local Peering)๊ณผ ๋ค๋ฅธ region(Global Peering) ๋ชจ๋ ๊ฐ๋ฅํฉ๋๋ค.", | |
| "example": "az network vnet peering create \\\n --name VNet1-to-VNet2 \\\n --vnet-name VNet1 \\\n --remote-vnet VNet2 \\\n --resource-group myRG\n# ๋ฐ๋ ๋ฐฉํฅ๋ ์์ฑํด์ผ ํจ", | |
| "common_mistake": "ํผ์ด๋ง์ ๋น์ ์ด์ (non-transitive)์ ๋๋ค. AโB, BโC๋ก ํผ์ด๋งํด๋ A์์ C๋ก ์ง์ ํต์ ํ ์ ์์ต๋๋ค. AโC๋ฅผ ๋ณ๋๋ก ์ค์ ํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "VNet peering", | |
| "non-transitive", | |
| "local peering", | |
| "global peering", | |
| "transit" | |
| ], | |
| "source_id": "azure-vnet-overview", | |
| "details": [ | |
| "ํผ์ด๋ง ์กฐ๊ฑด: ๋ VNet์ ์ฃผ์ ๊ณต๊ฐ์ด ๊ฒน์น์ง ์์์ผ ํฉ๋๋ค. ํผ์ด๋ง์ ์๋ฐฉํฅ ์ค์ ์ด ๊ฐ๊ฐ ํ์ํฉ๋๋ค.", | |
| "๊ฒ์ดํธ์จ์ด ์ ์ก(Gateway Transit): ํผ์ด๋ง๋ VNet์ด ํ๋ธ์ VPN Gateway๋ฅผ ๊ณต์ ํด ์จํ๋ ๋ฏธ์ค ์ฐ๊ฒฐ์ ํ์ฉํฉ๋๋ค.", | |
| "์ํ ํจํด: ๋น์ ์ด์ฑ์ผ๋ก ์ธํ ์ฐ๊ฒฐ ๋ถ๊ฐ ์๋๋ฆฌ์ค, ์ฃผ์ ๊ณต๊ฐ ์ค์ฒฉ ์ค๋ฅ, Gateway Transit ์ค์ ๋ฐฉ๋ฒ์ด ์์ฃผ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ", | |
| "related_practices": [ | |
| "azure-lab-10" | |
| ] | |
| }, | |
| { | |
| "id": "azure-route-table", | |
| "certification": "AZ-104", | |
| "title": "Route Table โ ๊ฒฝ๋ก ํ ์ด๋ธ", | |
| "summary": "์๋ธ๋ท์ ํธ๋ํฝ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉ์ ์ ์ํฉ๋๋ค(UDR: User-Defined Route). ๊ธฐ๋ณธ ์์คํ ๊ฒฝ๋ก๋ฅผ ์ฌ์ ์ํด ํธ๋ํฝ์ NVA, VPN GW, VNet Gateway ๋ฑ์ผ๋ก ๋ณด๋ ๋๋ค.", | |
| "example": "az network route-table create --name myRT --resource-group myRG\naz network route-table route create \\\n --route-table-name myRT \\\n --name force-to-firewall \\\n --address-prefix 0.0.0.0/0 \\\n --next-hop-type VirtualAppliance \\\n --next-hop-ip-address 10.0.1.4", | |
| "common_mistake": "๊ฒฝ๋ก ํ ์ด๋ธ์ ์๋ธ๋ท์ ์ฐ๊ฒฐํด์ผ ํจ๊ณผ๊ฐ ๋ฉ๋๋ค. Route Table์ ๋ง๋ค๊ธฐ๋ง ํ๊ณ ์๋ธ๋ท์ ์ฐ๊ฒฐ(association)ํ์ง ์์ผ๋ฉด ์ ์ฉ๋์ง ์์ต๋๋ค.", | |
| "keywords": [ | |
| "route table", | |
| "UDR", | |
| "next hop", | |
| "NVA", | |
| "VirtualAppliance", | |
| "subnet association" | |
| ], | |
| "source_id": "azure-vnet-overview", | |
| "details": [ | |
| "Next hop ์ ํ: VirtualAppliance(๋ฐฉํ๋ฒฝ NVA), VirtualNetworkGateway(VPN), Internet, VnetLocal, None(ํธ๋ํฝ ๋๋กญ).", | |
| "๊ฐ์ ํฐ๋๋ง(Force Tunneling): 0.0.0.0/0์ VPN Gateway๋ก ๋ณด๋ด ์ธํฐ๋ท ํธ๋ํฝ๋ ์จํ๋ ๋ฏธ์ค ๊ฒฝ์ ํ๊ฒ ํฉ๋๋ค.", | |
| "์ํ ํจํด: ํน์ ํธ๋ํฝ์ NVA๋ก ์ฐํํ๋ UDR ์ค๊ณ, ๊ฐ์ ํฐ๋๋ง ๊ตฌ์ฑ, ์์คํ ๊ฒฝ๋ก vs ์ฌ์ฉ์ ๊ฒฝ๋ก ์ฐ์ ์์๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-private-endpoint", | |
| "certification": "AZ-104", | |
| "title": "Private Endpoint โ ํ๋ผ์ด๋น ์๋ํฌ์ธํธ", | |
| "summary": "Azure PaaS ์๋น์ค(Storage, SQL, Key Vault ๋ฑ)์ VNet ๋ด ์ฌ์ค IP๋ก ์ ๊ทผํฉ๋๋ค. ์ธํฐ๋ท์ ํตํ์ง ์์ ๋ฐ์ดํฐ ๋ ธ์ถ ์ํ์ ์ค์ ๋๋ค.", | |
| "example": "az network private-endpoint create \\\n --name myPE \\\n --resource-group myRG \\\n --vnet-name myVNet \\\n --subnet default \\\n --private-connection-resource-id /subscriptions/.../storageAccounts/myaccount \\\n --group-ids blob", | |
| "common_mistake": "Private Endpoint ์์ฑ ํ DNS ์ค์ ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. Private DNS Zone๊ณผ ์ฐ๊ฒฐํ์ง ์์ผ๋ฉด ๊ณต์ฉ DNS๊ฐ Public IP๋ฅผ ๋ฐํํด ์ธํฐ๋ท ๊ฒฝ๋ก๋ก ์ ์๋ฉ๋๋ค.", | |
| "keywords": [ | |
| "private endpoint", | |
| "private link", | |
| "private IP", | |
| "DNS zone", | |
| "Service Endpoint ์ฐจ์ด" | |
| ], | |
| "source_id": "azure-private-endpoint", | |
| "details": [ | |
| "Private Endpoint vs Service Endpoint: Private Endpoint๋ VNet์ ์ฌ์ค IP๋ฅผ ๋ถ์ฌ(๋ ์์ ), Service Endpoint๋ Public IP ์ ์งํ๋ VNet์์๋ง ํ์ฉ.", | |
| "Private DNS Zone ์๋ ํตํฉ: Private Endpoint ์์ฑ ์ DNS Zone Group์ ํตํด ์๋์ผ๋ก DNS ๋ ์ฝ๋๊ฐ ์์ฑ๋ฉ๋๋ค.", | |
| "์ํ ํจํด: Private Endpoint vs Service Endpoint ์ฐจ์ด, DNS ์ค์ ์์ ๋ ๋ฐ์ํ๋ ๋ฌธ์ , ์จํ๋ ๋ฏธ์ค์์ Private Endpoint ์ ๊ทผ ๋ฐฉ๋ฒ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ", | |
| "related_practices": [ | |
| "azure-lab-11" | |
| ] | |
| }, | |
| { | |
| "id": "azure-load-balancer-probe", | |
| "certification": "AZ-104", | |
| "title": "Load Balancer โ ๋ถํ ๋ถ์ฐ ์ฅ์น", | |
| "summary": "L4(TCP/UDP) ์์ค์์ ์ธ๋ฐ์ด๋ ํธ๋ํฝ์ ๋ฐฑ์๋ VM ํ๋ก ๋ถ์ฐํฉ๋๋ค. Public LB๋ ์ธํฐ๋ท ํธ๋ํฝ, Internal LB๋ VNet ๋ด๋ถ ํธ๋ํฝ์ ์ฒ๋ฆฌํฉ๋๋ค.", | |
| "example": "az network lb create \\\n --name myLB \\\n --resource-group myRG \\\n --frontend-ip-name frontendIP \\\n --backend-pool-name backendPool\n# ์ํ ํ๋ก๋ธ ์ถ๊ฐ\naz network lb probe create --lb-name myLB --name myProbe --protocol Http --port 80 --path /health", | |
| "common_mistake": "์ํ ํ๋ก๋ธ(Health Probe)๊ฐ ์คํจํ๋ฉด ํด๋น ์ธ์คํด์ค๋ก ํธ๋ํฝ์ ๋ณด๋ด์ง ์์ต๋๋ค. ํ๋ก๋ธ ๊ฒฝ๋ก(/health)๊ฐ ์ฌ๋ฐ๋ฅด์ง ์์ผ๋ฉด ์ ์ VM๋ ์ ์ธ๋ฉ๋๋ค.", | |
| "keywords": [ | |
| "load balancer", | |
| "health probe", | |
| "backend pool", | |
| "frontend IP", | |
| "SKU Basic/Standard" | |
| ], | |
| "source_id": "azure-load-balancer", | |
| "details": [ | |
| "SKU: Basic(๋ฌด๋ฃ, AZ ๋ฏธ์ง์, ๊ณต๊ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ) vs Standard(์ ๋ฃ, AZ ์ง์, HTTPS ํ๋ก๋ธ, SLA 99.99%). ์ ๊ตฌ์ถ์ Standard ๊ถ์ฅ.", | |
| "๋ถํ ๋ถ์ฐ ๊ท์น: ํฌํธยทํ๋กํ ์ฝยท์ธ์ ์ง์์ฑ(Client IP/Protocol)์ ์ค์ . Floating IP๋ก SQL AlwaysOn ๋ฑ์ ์ง์ํฉ๋๋ค.", | |
| "์ํ ํจํด: ํ๋ก๋ธ ์คํจ ์ ๋์, Public vs Internal LB ์ ํ, Basic vs Standard SKU ์ฐจ์ด, ์ธ์ ์ง์์ฑ ์ต์ ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-private-dns", | |
| "certification": "AZ-104", | |
| "title": "Private DNS Zone โ ์ฌ์ค DNS ์์ญ", | |
| "summary": "VNet ๋ด๋ถ์์๋ง ํด์๋๋ ์ฌ์ค ๋๋ฉ์ธ์ ํธ์คํ ํฉ๋๋ค. Private Endpoint, ๋ด๋ถ ์๋น์ค ๊ฒ์, ์จํ๋ ๋ฏธ์ค DNS ํตํฉ์ ์ฌ์ฉํฉ๋๋ค.", | |
| "example": "az network private-dns zone create \\\n --name 'privatelink.blob.core.windows.net' \\\n --resource-group myRG\naz network private-dns link vnet create \\\n --zone-name 'privatelink.blob.core.windows.net' \\\n --virtual-network myVNet \\\n --registration-enabled false", | |
| "common_mistake": "Private DNS Zone ์์ฑ๋ง์ผ๋ก๋ ์ ์ฉ๋์ง ์์ต๋๋ค. VNet์ ๋งํฌ(link)๋ฅผ ์ฐ๊ฒฐํด์ผ ํด๋น VNet์ VM์ด ์ฌ์ค DNS๋ฅผ ์ฟผ๋ฆฌํฉ๋๋ค.", | |
| "keywords": [ | |
| "private DNS zone", | |
| "VNet link", | |
| "registration", | |
| "privatelink", | |
| "custom DNS" | |
| ], | |
| "source_id": "azure-dns-overview", | |
| "details": [ | |
| "์๋ ๋ฑ๋ก(Auto-registration): VNet ๋งํฌ์์ ํ์ฑํํ๋ฉด ํด๋น VNet์ VM์ด ์๋์ผ๋ก A ๋ ์ฝ๋๋ก ๋ฑ๋ก๋ฉ๋๋ค.", | |
| "Private Endpoint DNS: `privatelink.blob.core.windows.net` ๊ฐ์ ํน์ ์์ญ์ ์ฌ์ฉํด PaaS ์๋น์ค์ ์ฌ์ค IP๋ฅผ ํด์ํฉ๋๋ค.", | |
| "์ํ ํจํด: Private Endpoint์ Private DNS Zone ์ฐ๋ ์์, ์๋ ๋ฑ๋ก vs ์๋ ๋ ์ฝ๋, VNet ๋งํฌ ์์ ๋ DNS ํด์ ์คํจ ์๋๋ฆฌ์ค๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-monitor-metrics", | |
| "certification": "AZ-104", | |
| "title": "Azure Monitor Metrics โ ๋ชจ๋ํฐ ๋ฉํธ๋ฆญ", | |
| "summary": "Azure ๋ฆฌ์์ค๊ฐ ์๋์ผ๋ก ์์งํ๋ ์์น ๋ฐ์ดํฐ(CPU%, ๋คํธ์ํฌ In/Out, ๋์คํฌ IOPS ๋ฑ)๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ๊ณ ๊ฒฝ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค.", | |
| "example": "az monitor metrics list \\\n --resource /subscriptions/.../virtualMachines/myVM \\\n --metric 'Percentage CPU' \\\n --interval PT1M", | |
| "common_mistake": "๊ธฐ๋ณธ ํ๋ซํผ ๋ฉํธ๋ฆญ์ 93์ผ ๋ณด๊ด๋ฉ๋๋ค. ๋ ์ค๋ ๋ณด๊ดํ๊ฑฐ๋ ์ปค์คํ ๋ฉํธ๋ฆญ์ ์ ์ฅํ๋ ค๋ฉด Log Analytics Workspace๋ก ์ ์กํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "metrics", | |
| "Azure Monitor", | |
| "CPU", | |
| "latency", | |
| "alert", | |
| "93 days retention" | |
| ], | |
| "source_id": "azure-monitor-overview", | |
| "details": [ | |
| "ํ๋ซํผ ๋ฉํธ๋ฆญ์ ๋ณ๋ ์ค์ ์์ด ์๋ ์์ง๋ฉ๋๋ค. ๊ฒ์คํธ OS ๋ด๋ถ ๋ฉํธ๋ฆญ(๋ฉ๋ชจ๋ฆฌ ๋ฑ)์ Azure Monitor Agent๊ฐ ํ์ํฉ๋๋ค.", | |
| "๋ฉํธ๋ฆญ ํ์๊ธฐ(Metrics Explorer)์์ ์ฌ๋ฌ ๋ฉํธ๋ฆญ์ ๋น๊ตํ๊ณ ์ฐจํธ๋ฅผ ๋์๋ณด๋์ ๊ณ ์ ํ ์ ์์ต๋๋ค.", | |
| "์ํ ํจํด: ๋ฉํธ๋ฆญ ๊ธฐ๋ฐ ๊ฒฝ๋ณด ์ค์ , ํ๋ซํผ ๋ฉํธ๋ฆญ vs ๊ฒ์คํธ ๋ฉํธ๋ฆญ ์์ง ๋ฐฉ๋ฒ, ๋ณด๊ด ๊ธฐ๊ฐ ํ๊ณ์ Log Analytics ์ฐ๋์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ", | |
| "related_practices": [ | |
| "azure-lab-15" | |
| ] | |
| }, | |
| { | |
| "id": "azure-activity-log", | |
| "certification": "AZ-104", | |
| "title": "Activity Log โ ํ๋ ๋ก๊ทธ", | |
| "summary": "๊ตฌ๋ ๋ ๋ฒจ์์ ๋ฐ์ํ๋ ๊ด๋ฆฌ ์์ (๋ฆฌ์์ค ์์ฑยท์ญ์ ยท๋ณ๊ฒฝ)์ ๊ธฐ๋กํฉ๋๋ค. ๋๊ฐ, ์ธ์ , ๋ฌด์์ ํ๋์ง ๊ฐ์ฌ(Audit)์ ํ์ฉํฉ๋๋ค.", | |
| "example": "az monitor activity-log list \\\n --resource-group myRG \\\n --start-time 2024-01-01 \\\n --end-time 2024-01-31\n# Portal: Monitor โ Activity Log", | |
| "common_mistake": "Activity Log๋ ๊ธฐ๋ณธ 90์ผ ๋ณด๊ด๋ฉ๋๋ค. ์ฅ๊ธฐ ๋ณด๊ด์ ์ํด Storage Account์ ์์นด์ด๋ธํ๊ฑฐ๋ Log Analytics๋ก ์ ์กํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "activity log", | |
| "audit", | |
| "management plane", | |
| "90 days", | |
| "diagnostic settings" | |
| ], | |
| "source_id": "azure-monitor-overview", | |
| "details": [ | |
| "๊ธฐ๋ก ๋ด์ฉ: ๋๊ฐ(caller), ์ธ์ (eventTimestamp), ๋ฌด์์(operation), ์ฑ๊ณต/์คํจ(status). ๋ฐ์ดํฐ ํ๋ฉด ์์ (Blob ์ฝ๊ธฐ ๋ฑ)์ ๊ธฐ๋ก๋์ง ์์ต๋๋ค.", | |
| "์ง๋จ ์ค์ (Diagnostic Settings)์ผ๋ก Activity Log๋ฅผ Log Analytics, Storage Account, Event Hub๋ก ์ ์กํ ์ ์์ต๋๋ค.", | |
| "์ํ ํจํด: ๋ฆฌ์์ค ์ญ์ ์ฑ ์์ ์ถ์ , 90์ผ ์ด์ ๋ณด๊ด ๋ฐฉ๋ฒ, Activity Log vs Diagnostic Log(๋ฆฌ์์ค ๋ ๋ฒจ) ์ฐจ์ด๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-alert", | |
| "certification": "AZ-104", | |
| "title": "Alert Rule โ ๊ฒฝ๋ณด ๊ท์น", | |
| "summary": "๋ฉํธ๋ฆญยท๋ก๊ทธยทํ๋ ๋ก๊ทธ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ฉด ์ด๋ฉ์ผยทSMSยทwebhookยทITSM ๋ฑ์ผ๋ก ์๋ฆฝ๋๋ค. Action Group์ ์๋ฆผ ๋์์ ์ ์ํฉ๋๋ค.", | |
| "example": "az monitor alert create \\\n --name highCPU \\\n --resource /subscriptions/.../myVM \\\n --condition 'avg Percentage CPU > 80' \\\n --action email alice@example.com", | |
| "common_mistake": "๊ฒฝ๋ณด๋ Action Group ์์ด๋ ๋ฐ์ํด๋ ์๋ฌด๋ ์ ์ ์์ต๋๋ค. ๋ฐ๋์ Action Group์ ์๋ฆผ ์ฑ๋์ ์ค์ ํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "alert rule", | |
| "action group", | |
| "metric alert", | |
| "log alert", | |
| "severity", | |
| "signal" | |
| ], | |
| "source_id": "azure-monitor-overview", | |
| "details": [ | |
| "์ ํธ ์ ํ: ๋ฉํธ๋ฆญ(์์น ์๊ณ๊ฐ), ๋ก๊ทธ(KQL ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ), ํ๋ ๋ก๊ทธ(ํน์ ์์ ๋ฐ์), ์๋น์ค ์ํ.", | |
| "Action Group: ์ด๋ฉ์ผ, SMS, ์ ํ, Azure Function, Logic App, webhook, ITSM ํตํฉ์ ์ ์ํฉ๋๋ค. ์ฌ๋ฌ ๊ฒฝ๋ณด์์ ๊ณต์ ๊ฐ๋ฅํฉ๋๋ค.", | |
| "์ํ ํจํด: ๋ฉํธ๋ฆญ ๊ฒฝ๋ณด ๊ตฌ์ฑ ์ ์ฐจ, Action Group ์์ฑ ๋ฐ ์ฐ๊ฒฐ, ๊ฒฝ๋ณด ์ฌ๊ฐ๋(0~4) ๋ ๋ฒจ, ์ ์ vs ๋์ ์๊ณ๊ฐ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ", | |
| "related_practices": [ | |
| "azure-lab-15" | |
| ] | |
| }, | |
| { | |
| "id": "azure-backup-policy", | |
| "certification": "AZ-104", | |
| "title": "Backup Policy โ ๋ฐฑ์ ์ ์ฑ ", | |
| "summary": "๋ฐฑ์ ์ค์ผ์ค(์ผ๋ณ/์ฃผ๋ณ)๊ณผ ๋ณด์กด ๊ธฐ๊ฐ(์ผ/์ฃผ/์/๋ )์ ์ ์ํฉ๋๋ค. Recovery Services Vault์์ ์ํฌ๋ก๋๋ณ๋ก ์ ์ฑ ์ ๋ง๋ค์ด ๋ฆฌ์์ค์ ์ ์ฉํฉ๋๋ค.", | |
| "example": "az backup policy create \\\n --vault-name myVault \\\n --resource-group myRG \\\n --name myPolicy \\\n --policy @policy.json\n# policy.json์ ์ค์ผ์ค๊ณผ ๋ณด์กด ๊ธฐ๊ฐ ์ ์", | |
| "common_mistake": "๋ฐฑ์ ์ ์ฑ ์ ๋ณ๊ฒฝํด๋ ๊ธฐ์กด ๋ณต์ ์ง์ ๋ณด์กด ๊ธฐ๊ฐ์ ์๊ธ ์ ์ฉ๋์ง ์์ต๋๋ค. ๋ณ๊ฒฝ ์ดํ ์์ฑ๋๋ ๋ณต์ ์ง์ ์๋ง ์ ์ ์ฑ ์ด ์ ์ฉ๋ฉ๋๋ค.", | |
| "keywords": [ | |
| "backup policy", | |
| "schedule", | |
| "retention", | |
| "RPO", | |
| "Recovery Services Vault" | |
| ], | |
| "source_id": "azure-recovery-services-vault", | |
| "details": [ | |
| "Enhanced Policy(ํฅ์๋ ์ ์ฑ ): ์๊ฐ๋น ๋ฐฑ์ , AZ ์ค๋ณต ๋ณต์ ์ง์ , Trusted Launch VM ์ง์ ๋ฑ ๋ ๋ง์ ์ต์ ์ ์ ๊ณตํฉ๋๋ค.", | |
| "๋ณด์กด ๊ณ์ธต: ์ผ๋ณ(์ต๋ 180์ผ), ์ฃผ๋ณ(์ต๋ 520์ฃผ), ์๋ณ(์ต๋ 120๊ฐ์), ์ฐ๋ณ(์ต๋ 10๋ ).", | |
| "์ํ ํจํด: RPO(๋ณต๊ตฌ ์์ ๋ชฉํ)์ ๋ฐ๋ฅธ ๋ฐฑ์ ์ค์ผ์ค ์ ํ, ์ฅ๊ธฐ ๋ณด์กด ์ค์ , GRS ๋ฐฑ์ ์ผ๋ก ์ง์ญ ๊ฐ ๋ณต์ ๋ฐฉ๋ฒ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ", | |
| "related_practices": [ | |
| "azure-lab-8" | |
| ] | |
| }, | |
| { | |
| "id": "azure-restore", | |
| "certification": "AZ-104", | |
| "title": "Restore โ ๋ณต์", | |
| "summary": "Recovery Services Vault์ ๋ณต์ ์ง์ ์์ VM, ๋์คํฌ, ํ์ผ์ ์๋ ์์น ๋๋ ์ ์์น๋ก ๋ณต์ํฉ๋๋ค.", | |
| "example": "az backup restore restore-disks \\\n --vault-name myVault \\\n --resource-group myRG \\\n --container-name myVM \\\n --item-name myVM \\\n --rp-name 'RecoveryPointName' \\\n --storage-account myStorageAcct", | |
| "common_mistake": "VM ์ ์ฒด ๋ณต์(Restore VM)๊ณผ ๋์คํฌ๋ง ๋ณต์(Restore Disks)์ ๋ค๋ฅธ ์ต์ ์ ๋๋ค. ๋์คํฌ ๋ณต์ ํ์๋ VM์ ๋ณ๋๋ก ์ฌ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "restore", | |
| "recovery point", | |
| "original location", | |
| "alternate location", | |
| "cross-region restore" | |
| ], | |
| "source_id": "azure-recovery-services-vault", | |
| "details": [ | |
| "๋ณต์ ์ต์ : ์๋ ์์น(๊ธฐ์กด VM ๋ฎ์ด์ฐ๊ธฐ), ์ ์์น(์ VM ์์ฑ), ๋์คํฌ๋ง ๋ณต์(Storage Account์ VHD ์ ์ฅ), ํ์ผ ๋ณต์(ํ์ผ ๋จ์).", | |
| "์ง์ญ ๊ฐ ๋ณต์(CRR): GRS Vault์์ ๋ณด์กฐ region์ ๋ณต์ ์ง์ ์ผ๋ก DR ๋ณต์. CRR ๊ธฐ๋ฅ์ Vault์์ ๋ช ์์ ์ผ๋ก ํ์ฑํํด์ผ ํฉ๋๋ค.", | |
| "์ํ ํจํด: ๋ณต์ ์ ํ ์ ํ(VM vs ํ์ผ), ์ง์ญ ๊ฐ ๋ณต์ ์๊ฑด, Soft Delete ์ํ์์ ๋ณต์ ๊ฐ๋ฅ ์ฌ๋ถ๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ", | |
| "related_practices": [ | |
| "azure-lab-8" | |
| ] | |
| }, | |
| { | |
| "id": "azure-app-service-plan", | |
| "certification": "AZ-104", | |
| "title": "App Service Plan โ ์ฑ ์๋น์ค ํ๋", | |
| "summary": "App Service ์ฑ์ด ์คํ๋๋ ์ปดํจํ ๋ฆฌ์์ค(CPU, ๋ฉ๋ชจ๋ฆฌ, ์คํ ๋ฆฌ์ง)๋ฅผ ์ ์ํฉ๋๋ค. ๋์ผ ํ๋์ ์ฑ์ ๊ฐ์ VM ์ธ์คํด์ค๋ฅผ ๊ณต์ ํฉ๋๋ค.", | |
| "example": "az appservice plan create \\\n --name myPlan \\\n --resource-group myRG \\\n --sku P1v3 \\\n --is-linux\naz webapp create --name myApp --plan myPlan --runtime 'NODE:18-lts'", | |
| "common_mistake": "Free/Shared ํ๋์ Autoscale๊ณผ ์ปค์คํ ๋๋ฉ์ธ SSL์ ์ง์ํ์ง ์์ต๋๋ค. ํ๋ก๋์ ์๋ Standard(S1) ์ด์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "App Service Plan", | |
| "SKU", | |
| "Free", | |
| "Basic", | |
| "Standard", | |
| "Premium", | |
| "Isolated", | |
| "autoscale" | |
| ], | |
| "source_id": "azure-app-service-overview", | |
| "details": [ | |
| "SKU ๊ณ์ธต: Free/Shared(๊ณต์ ์ธํ๋ผ, SLA ์์), Basic(์ ์ฉ VM), Standard(Autoscale, SSL), Premium(๊ณ ์ฑ๋ฅ), Isolated(VNet ์ ์ฉ ํ๊ฒฝ).", | |
| "๊ฐ์ ํ๋์ ์ฌ๋ฌ ์ฑ์ ๋ฃ์ผ๋ฉด ์ปดํจํ ์ ๊ณต์ ํฉ๋๋ค. ์ฑ์ด ๋ง์์ง๋ฉด ํ๋์ ์ค์ผ์ผ์ (ํฌ๊ธฐ ๋ณ๊ฒฝ)ํ๊ฑฐ๋ ๋ถ๋ฆฌํฉ๋๋ค.", | |
| "์ํ ํจํด: ํ๋ SKU๋ณ ์ง์ ๊ธฐ๋ฅ(Autoscale, Deployment Slots, VNet ํตํฉ ์กฐ๊ฑด), ํ๋ ๋ณ๊ฒฝ ์ ์ฑ ์ํฅ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "๊ณ ๊ธ", | |
| "related_practices": [ | |
| "azure-lab-13" | |
| ] | |
| }, | |
| { | |
| "id": "azure-container-registry", | |
| "certification": "AZ-104", | |
| "title": "Azure Container Registry โ ์ปจํ ์ด๋ ๋ ์ง์คํธ๋ฆฌ", | |
| "summary": "Docker ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ Helm ์ฐจํธ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ์ฌ์ค ๋ ์ง์คํธ๋ฆฌ์ ๋๋ค. AKS, Container Instances, App Service์ ํตํฉ๋ฉ๋๋ค.", | |
| "example": "az acr create \\\n --name myRegistry \\\n --resource-group myRG \\\n --sku Standard\naz acr build --registry myRegistry --image myapp:v1 .\ndocker pull myregistry.azurecr.io/myapp:v1", | |
| "common_mistake": "ACR์์ ์ด๋ฏธ์ง๋ฅผ pullํ๋ ค๋ฉด ์ธ์ฆ์ด ํ์ํฉ๋๋ค. AKS์์ ์ฌ์ฉ ์ Managed Identity ๋๋ Service Principal๋ก pull ๊ถํ์ ๋ถ์ฌํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "ACR", | |
| "container registry", | |
| "docker", | |
| "image", | |
| "geo-replication", | |
| "SKU Basic/Standard/Premium" | |
| ], | |
| "source_id": "azure-app-service-overview", | |
| "details": [ | |
| "SKU: Basic(๊ฐ๋ฐ์ฉ), Standard(์ผ๋ฐ, geo-replication ๋ฏธ์ง์), Premium(geo-replication, Private Link ์ง์).", | |
| "ACR Tasks: ์ด๋ฏธ์ง ๋น๋ยทํ ์คํธยทํจ์น๋ฅผ Azure์์ ์ง์ ์คํ. Docker ์์ด ํด๋ผ์ฐ๋์์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํฉ๋๋ค.", | |
| "์ํ ํจํด: ACR SKU๋ณ ๊ธฐ๋ฅ ์ฐจ์ด, AKS์์ ACR ์ด๋ฏธ์ง pull ๊ถํ ์ค์ (Managed Identity ์ฐ๊ฒฐ), geo-replication ์ค์ ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "๊ณ ๊ธ" | |
| }, | |
| { | |
| "id": "azure-key-vault", | |
| "certification": "AZ-104", | |
| "title": "Key Vault โ ํค ์๊ฒฉ ์ฆ๋ช ๋ชจ์", | |
| "summary": "๋น๋ฐ(Secret), ํค(Key), ์ธ์ฆ์(Certificate)๋ฅผ ์ค์์์ ์์ ํ๊ฒ ์ ์ฅยท๊ด๋ฆฌํฉ๋๋ค. ์ฑ ์ฝ๋์์ ์๊ฒฉ ์ฆ๋ช ์ ์ ๊ฑฐํ๋ ํต์ฌ ๋ณด์ ์๋น์ค์ ๋๋ค.", | |
| "example": "az keyvault create --name myKV --resource-group myRG --location koreacentral\naz keyvault secret set --vault-name myKV --name 'db-password' --value 'MyP@ss'\naz keyvault secret show --vault-name myKV --name 'db-password'", | |
| "common_mistake": "Key Vault์ ์ ๊ทผํ๋ ค๋ฉด Access Policy ๋๋ RBAC๋ก ๊ถํ์ ๋ถ์ฌํด์ผ ํฉ๋๋ค. Managed Identity๋ฅผ ํตํด ์ฑ์ด ์๊ฒฉ ์ฆ๋ช ์์ด Key Vault์ ์ ๊ทผํ๋ ๊ฒ์ด ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค.", | |
| "keywords": [ | |
| "Key Vault", | |
| "secret", | |
| "key", | |
| "certificate", | |
| "soft delete", | |
| "RBAC", | |
| "access policy" | |
| ], | |
| "source_id": "azure-key-vault-overview", | |
| "details": [ | |
| "์ ๊ทผ ์ ์ด: ๊ตฌ์ Access Policy ๋ฐฉ์๊ณผ ์ต์ Azure RBAC ๋ฐฉ์ ๋ ๊ฐ์ง. ์ ๊ตฌ์ถ์ RBAC ๋ฐฉ์ ๊ถ์ฅ.", | |
| "Soft Delete์ Purge Protection: ์ค์๋ก ์ญ์ ๋ ๋น๋ฐ์ 7~90์ผ ๋ด ๋ณต์ ๊ฐ๋ฅ. Purge Protection ํ์ฑํ ์ ์ญ์ ๋ ํญ๋ชฉ ์๊ตฌ ์ ๊ฑฐ ๋ถ๊ฐ.", | |
| "์ํ ํจํด: Managed Identity๋ก ์ฑ์์ ๋น๋ฐ ์ ๊ทผ, Soft Delete/Purge Protection ๊ฐ๋ , HSM(ํ๋์จ์ด ๋ณด์ ๋ชจ๋) ์ง์ SKU ์ฐจ์ด๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ", | |
| "related_practices": [ | |
| "azure-lab-9" | |
| ] | |
| }, | |
| { | |
| "id": "azure-cost-management", | |
| "certification": "AZ-104", | |
| "title": "Cost Management โ ๋น์ฉ ๊ด๋ฆฌ", | |
| "summary": "Azure ์๋น์ค ์ฌ์ฉ ๋น์ฉ์ ๋ถ์ํ๊ณ ์์ฐ์ ์ค์ ํด ์ด๊ณผ ์ ์๋ฆผ์ ๋ฐ์ต๋๋ค. ํ๊ทธยท๊ตฌ๋ ยทRG๋ณ๋ก ๋น์ฉ์ ์ธ๋ถํํ ์ ์์ต๋๋ค.", | |
| "example": "az consumption budget create \\\n --budget-name monthlyBudget \\\n --amount 1000 \\\n --time-grain Monthly \\\n --start-date 2024-01-01 \\\n --end-date 2024-12-31", | |
| "common_mistake": "์์ฐ ๊ฒฝ๋ณด๋ ์ง์ถ์ด ์๊ณ๊ฐ์ ๋๋ฌํ์ ๋ ์๋ ค์ฃผ๋ ๊ฒ์ด์ง, ์๋์ผ๋ก ๋ฆฌ์์ค๋ฅผ ์ค์งํ๊ฑฐ๋ ๋น์ฉ์ ์ฐจ๋จํ์ง ์์ต๋๋ค.", | |
| "keywords": [ | |
| "Cost Management", | |
| "budget", | |
| "alert", | |
| "cost analysis", | |
| "tags", | |
| "billing" | |
| ], | |
| "source_id": "azure-monitor-overview", | |
| "details": [ | |
| "๋น์ฉ ๋ถ์(Cost Analysis): ๊ธฐ๊ฐยท์๋น์คยทlocationยทํ๊ทธ ๋ฑ์ผ๋ก ํํฐ๋งํด ๋น์ฉ ๋ด์ญ์ ํ์ด/๋์ ์ฐจํธ๋ก ์๊ฐํํฉ๋๋ค.", | |
| "์์ฐ ๊ฒฝ๋ณด: ์ค์ ๋น์ฉ ๋๋ ์์ธก ๋น์ฉ์ด ์ค์ ๋น์จ(์: 80%, 100%)์ ๋๋ฌํ๋ฉด Action Group์ผ๋ก ์๋ฆผ์ ๋ณด๋ ๋๋ค.", | |
| "์ํ ํจํด: ์์ฐ ๊ฒฝ๋ณด ์ค์ ์ ์ฐจ, ํ๊ทธ๋ฅผ ํตํ ๋น์ฉ ๋ถ๋ฅ, Cost Management vs Azure Advisor ์ญํ ์ฐจ์ด๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-bastion", | |
| "certification": "AZ-104", | |
| "title": "Azure Bastion โ ์์ ํ ์๊ฒฉ ์ ์", | |
| "summary": "๊ณต์ฉ IP ์์ด Azure Portal์์ ์ง์ VM์ RDP/SSH๋ก ์ ์ํฉ๋๋ค. TLS 443 ํฌํธ๋ง ์ฌ์ฉํด VM์ ๊ด๋ฆฌ ํฌํธ๋ฅผ ์ธํฐ๋ท์ ๋ ธ์ถํ์ง ์์ต๋๋ค.", | |
| "example": "az network bastion create \\\n --name myBastion \\\n --public-ip-address myBastionIP \\\n --resource-group myRG \\\n --vnet-name myVNet \\\n --location koreacentral", | |
| "common_mistake": "Bastion์ VNet์ `AzureBastionSubnet`์ด๋ผ๋ ์ด๋ฆ์ ์๋ธ๋ท(/27 ์ด์)์ด ๋ฐ๋์ ํ์ํฉ๋๋ค. ์ด๋ฆ์ด ์ ํํ ์ผ์นํด์ผ ํฉ๋๋ค.", | |
| "keywords": [ | |
| "Azure Bastion", | |
| "RDP", | |
| "SSH", | |
| "AzureBastionSubnet", | |
| "port 443", | |
| "no public IP" | |
| ], | |
| "source_id": "azure-bastion-overview", | |
| "details": [ | |
| "Bastion SKU: Basic(RDP/SSH ๊ธฐ๋ณธ), Standard(ํ์ผ ์ ์ก, ๋ฉํฐํญ, ๊ธฐ๋ณธ ํธ์คํธ ํฌํธ ์ธ ํฌํธ, VM Auth ๋ฑ ์ถ๊ฐ ๊ธฐ๋ฅ).", | |
| "VM์ Public IP์ NSG์ RDP/SSH ํ์ฉ ๊ท์น์ด ์์ด๋ Bastion์ผ๋ก ์ ์ ๊ฐ๋ฅํฉ๋๋ค. ๊ณต๊ฒฉ ํ๋ฉด์ด ํฌ๊ฒ ์ค์ด๋ญ๋๋ค.", | |
| "์ํ ํจํด: Bastion ์๋ธ๋ท ์ด๋ฆยทํฌ๊ธฐ ์๊ตฌ์ฌํญ, Public IP ์๋ VM ์ ์ ๋ฐฉ๋ฒ, JIT(Just-In-Time) VM Access์ ์ฐจ์ด๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ", | |
| "related_practices": [ | |
| "azure-lab-12" | |
| ] | |
| }, | |
| { | |
| "id": "azure-nat-gateway", | |
| "certification": "AZ-104", | |
| "title": "NAT Gateway โ ์์๋ฐ์ด๋ ์ธํฐ๋ท ์ฐ๊ฒฐ", | |
| "summary": "์๋ธ๋ท์ ๋ชจ๋ VM์ด ๋์ผํ ๊ณ ์ ๊ณต์ฉ IP๋ก ์ธํฐ๋ท์ ๋๊ฐ๋๋ก ํฉ๋๋ค. ์์๋ฐ์ด๋ ์ฐ๊ฒฐ ์์ ์ฑ์ ๋์ด๊ณ SNAT ํฌํธ ๊ณ ๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.", | |
| "example": "az network public-ip create --name myNatIP --resource-group myRG --sku Standard\naz network nat gateway create \\\n --name myNatGW \\\n --resource-group myRG \\\n --public-ip-addresses myNatIP\naz network vnet subnet update --nat-gateway myNatGW ...", | |
| "common_mistake": "NAT Gateway๋ ์์๋ฐ์ด๋ ์ ์ฉ์ ๋๋ค. ์ธ๋ฐ์ด๋ ํธ๋ํฝ์ ๋ฐ์ผ๋ ค๋ฉด ์ฌ์ ํ Public IP ๋๋ Load Balancer๊ฐ ํ์ํฉ๋๋ค.", | |
| "keywords": [ | |
| "NAT Gateway", | |
| "outbound", | |
| "SNAT", | |
| "public IP", | |
| "port exhaustion", | |
| "static IP" | |
| ], | |
| "source_id": "azure-nat-gateway", | |
| "details": [ | |
| "SNAT(Source NAT): VM์ ์ฌ์ค IP๋ฅผ NAT Gateway์ ๊ณต์ฉ IP๋ก ๋ณํ. ์ฌ๋ฌ VM์ด ๊ฐ์ ๊ณต์ฉ IP๋ฅผ ๊ณต์ ํฉ๋๋ค.", | |
| "Load Balancer ์์๋ฐ์ด๋ ๊ท์น vs NAT Gateway: NAT Gateway๊ฐ ๋ ๋ง์ SNAT ํฌํธ(64,512 ร IP ์)๋ฅผ ์ ๊ณตํด ๊ณ ๋ถํ์ ์ ํฉํฉ๋๋ค.", | |
| "์ํ ํจํด: NAT Gateway ์๋ธ๋ท ์ฐ๊ฒฐ ๋ฐฉ๋ฒ, ๊ณ ์ ์์๋ฐ์ด๋ IP ์๊ตฌ ์๋๋ฆฌ์ค, Load Balancer์ ๋์ ์ฌ์ฉ ์ฐ์ ์์๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-app-service", | |
| "certification": "AZ-104", | |
| "title": "App Service โ ์น ์ฑ ํธ์คํ ", | |
| "summary": "์ฝ๋ ๋๋ ์ปจํ ์ด๋๋ฅผ ๋ฐฐํฌํ๋ ์์ ๊ด๋ฆฌํ PaaS ์น ํธ์คํ ์๋น์ค์ ๋๋ค. .NET, Node.js, Python, Java, PHP ๋ฑ ๋ค์ํ ๋ฐํ์์ ์ง์ํฉ๋๋ค.", | |
| "example": "az webapp create \\\n --name myWebApp \\\n --resource-group myRG \\\n --plan myPlan \\\n --runtime 'PYTHON:3.11'\naz webapp deployment source config-zip \\\n --name myWebApp --src app.zip", | |
| "common_mistake": "App Service์ ์ฑ ์ค์ (Application Settings)์ ํ๊ฒฝ ๋ณ์๋ก ์ฑ์ ์ฃผ์ ๋ฉ๋๋ค. ์ฝ๋์ ํ๋์ฝ๋ฉ๋ ์ค์ ๋ณด๋ค ์ฑ ์ค์ ์ ๋ฃ๋ ๊ฒ์ด ๋ณด์์ ์ข์ต๋๋ค.", | |
| "keywords": [ | |
| "App Service", | |
| "web app", | |
| "deployment slot", | |
| "custom domain", | |
| "SSL", | |
| "VNet integration" | |
| ], | |
| "source_id": "azure-app-service-overview", | |
| "details": [ | |
| "๋ฐฐํฌ ๋ฐฉ๋ฒ: ZIP ๋ฐฐํฌ, Git(๋ก์ปฌ/GitHub Actions), Docker ์ด๋ฏธ์ง, Azure DevOps. CI/CD ์ฐ๋์ด ์ฉ์ดํฉ๋๋ค.", | |
| "VNet ํตํฉ: Standard ์ด์ ํ๋์์ App Service๋ฅผ VNet์ ์ฐ๊ฒฐํด ์ฌ์ค ๋ฆฌ์์ค(DB, ์บ์)์ ์ ๊ทผํ ์ ์์ต๋๋ค.", | |
| "์ํ ํจํด: ์ปค์คํ ๋๋ฉ์ธยทSSL ๋ฐ์ธ๋ฉ, ๋ฐฐํฌ ์ฌ๋กฏ ์ค์, VNet ํตํฉ ์ค์ , App Settings vs Connection Strings ์ฐจ์ด๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "๊ณ ๊ธ", | |
| "related_practices": [ | |
| "azure-lab-13" | |
| ] | |
| }, | |
| { | |
| "id": "azure-deployment-slot", | |
| "certification": "AZ-104", | |
| "title": "Deployment Slot โ ๋ฐฐํฌ ์ฌ๋กฏ", | |
| "summary": "์ฑ์ ์คํ ์ด์ง ๋ฒ์ ์ ๋ณ๋ ์ฌ๋กฏ์ ๋ฐฐํฌํ๊ณ ํ ์คํธ ํ ํ๋ก๋์ ์ฌ๋กฏ๊ณผ ์ฆ์ ๊ต์ฒด(Swap)ํฉ๋๋ค. Standard ์ด์ ํ๋์์ ์ง์ํฉ๋๋ค.", | |
| "example": "az webapp deployment slot create \\\n --name myWebApp \\\n --resource-group myRG \\\n --slot staging\n# ํ ์คํธ ํ swap\naz webapp deployment slot swap \\\n --name myWebApp --slot staging", | |
| "common_mistake": "Swap ์ ์ฌ๋กฏ ๊ณ ์ ์ค์ (Slot Settings๋ก ํ์๋ ํญ๋ชฉ)์ ๊ต์ฒด๋์ง ์๊ณ ๊ฐ ์ฌ๋กฏ์ ๊ณ ์ ๋ฉ๋๋ค. ์: ์คํ ์ด์ง DB ์ฐ๊ฒฐ ๋ฌธ์์ด์ ํ๋ก๋์ ์ผ๋ก ๋ฐ๋ผ๊ฐ์ง ์์ต๋๋ค.", | |
| "keywords": [ | |
| "deployment slot", | |
| "staging", | |
| "swap", | |
| "slot settings", | |
| "traffic routing", | |
| "warm-up" | |
| ], | |
| "source_id": "azure-app-service-overview", | |
| "details": [ | |
| "Swap ๋์: ์ฌ๋กฏ์ด ์๋ฐ์ ๋ ํ ๋ผ์ฐํฐ ์์ค์์ ํธ๋ํฝ์ด ์ฆ์ ์ ํ๋ฉ๋๋ค. ๋ค์ดํ์ ์์ด ์ ๋ฒ์ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.", | |
| "ํธ๋ํฝ ๋ผ์ฐํ : % ๊ธฐ๋ฐ์ผ๋ก ์ผ๋ถ ํธ๋ํฝ๋ง ์คํ ์ด์ง ์ฌ๋กฏ์ผ๋ก ๋ณด๋ด A/B ํ ์คํธ๋ฅผ ํ ์ ์์ต๋๋ค.", | |
| "์ํ ํจํด: Slot Settings(์ฌ๋กฏ ๊ณ ์ ์ค์ ) ๊ฐ๋ , Swap ์ ์ค์ ๊ต์ฒด ๊ท์น, Auto Swap ๊ธฐ๋ฅ, ์ฌ๋กฏ ์ ์ ํ(Standard=5) ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "๊ณ ๊ธ", | |
| "related_practices": [ | |
| "azure-lab-14" | |
| ] | |
| }, | |
| { | |
| "id": "azure-aci", | |
| "certification": "AZ-104", | |
| "title": "Azure Container Instances โ ์ปจํ ์ด๋ ์ธ์คํด์ค", | |
| "summary": "VM์ด๋ ํด๋ฌ์คํฐ ๊ด๋ฆฌ ์์ด ์ปจํ ์ด๋๋ฅผ ์ด ๋จ์๋ก ๋น ๋ฅด๊ฒ ์คํํฉ๋๋ค. ๋จ์ ์์ , ๋ฐฐ์น ์ฒ๋ฆฌ, ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ฒ๋ฆฌ์ ์ ํฉํฉ๋๋ค.", | |
| "example": "az container create \\\n --name myapp \\\n --resource-group myRG \\\n --image nginx:latest \\\n --cpu 1 --memory 1.5 \\\n --ports 80 \\\n --dns-name-label myapp-dns", | |
| "common_mistake": "ACI๋ ๋จ๊ธฐ ์คํ ์ปจํ ์ด๋์ ์ ํฉํฉ๋๋ค. ์ง์์ ์ธ ๊ณ ๊ฐ์ฉ์ฑ ์น ์ฑ์ด๋ ๋ณต์กํ ๋ง์ดํฌ๋ก์๋น์ค์๋ AKS(Kubernetes)๊ฐ ๋ ์ ํฉํฉ๋๋ค.", | |
| "keywords": [ | |
| "ACI", | |
| "container", | |
| "serverless", | |
| "container group", | |
| "CPU/memory", | |
| "VNet" | |
| ], | |
| "source_id": "azure-container-instances", | |
| "details": [ | |
| "Container Group: ๋์ผ ํธ์คํธ์์ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ๋ ์ปจํ ์ด๋ ๋ชจ์. Kubernetes Pod ๊ฐ๋ ๊ณผ ์ ์ฌํฉ๋๋ค.", | |
| "VNet ๋ฐฐํฌ: ACI๋ฅผ VNet์ ๋ฐฐํฌํ๋ฉด ์ฌ์ค IP๋ฅผ ๋ถ์ฌ๋ฐ์ ๋ค๋ฅธ Azure ๋ฆฌ์์ค์ ์ฌ์ค๋ง์์ ํต์ ํฉ๋๋ค.", | |
| "์ํ ํจํด: ACI vs AKS ์ ํ ๊ธฐ์ค, ์ปจํ ์ด๋ ๊ทธ๋ฃน ๋ด ์ฌ์ด๋์นด ํจํด, ์ฌ์์ ์ ์ฑ (Always/OnFailure/Never) ์๋๋ฆฌ์ค๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "๊ณ ๊ธ" | |
| }, | |
| { | |
| "id": "azure-keyvault-secret", | |
| "certification": "AZ-104", | |
| "title": "Key Vault Secret โ ๋น๋ฐ ๊ด๋ฆฌ", | |
| "summary": "Key Vault์์ API ํค, ๋น๋ฐ๋ฒํธ, ์ฐ๊ฒฐ ๋ฌธ์์ด์ ๋ฒ์ ๊ด๋ฆฌ์ ํจ๊ป ์ ์ฅํฉ๋๋ค. ์ฑ์์ Managed Identity๋ก ์ฝ๋์ ์๊ฒฉ ์ฆ๋ช ์์ด ๋น๋ฐ์ ๊ฐ์ ธ์ต๋๋ค.", | |
| "example": "az keyvault secret set --vault-name myKV --name 'APIKey' --value 'secret123'\naz keyvault secret show --vault-name myKV --name 'APIKey' --query 'value'\n# ์ฑ์์: ํ๊ฒฝ๋ณ์ ๋๋ Key Vault ์ฐธ์กฐ๋ก ์ฃผ์ ", | |
| "common_mistake": "๋น๋ฐ์ ์ญ์ ํ๋ฉด ๋ชจ๋ ๋ฒ์ ์ด ์ญ์ ๋ฉ๋๋ค. Soft Delete๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ ๋ณต์ ๊ธฐ๊ฐ(90์ผ ๊ธฐ๋ณธ) ๋ด์ ๋ณต๊ตฌ ๊ฐ๋ฅํฉ๋๋ค.", | |
| "keywords": [ | |
| "secret", | |
| "version", | |
| "managed identity", | |
| "Key Vault reference", | |
| "rotation", | |
| "soft delete" | |
| ], | |
| "source_id": "azure-key-vault-overview", | |
| "details": [ | |
| "๋น๋ฐ ๋ฒ์ : ๊ฐ์ ์ ๋ฐ์ดํธํ ๋๋ง๋ค ์ ๋ฒ์ ์ด ์์ฑ๋ฉ๋๋ค. ์ฑ์ ๋ฒ์ ์์ด ์ฐธ์กฐํ๋ฉด ํ์ฌ ํ์ฑ ๋ฒ์ ์ ๋ฐ์ต๋๋ค.", | |
| "Key Vault ์ฐธ์กฐ: App Service ์ฑ ์ค์ ์์ `@Microsoft.KeyVault(SecretUri=...)` ํ์์ผ๋ก ๋น๋ฐ์ ์ง์ ์ฃผ์ ํฉ๋๋ค.", | |
| "์ํ ํจํด: App Service์์ Key Vault ์ฐธ์กฐ๋ก ๋น๋ฐ ์ฃผ์ , ๋น๋ฐ ์ํ(rotation) ์ค์ , Managed Identity์ Key Vault ์ฐ๋ ์ ์ฐจ๊ฐ ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "๊ณ ๊ธ", | |
| "related_practices": [ | |
| "azure-lab-9" | |
| ] | |
| }, | |
| { | |
| "id": "azure-managed-identity", | |
| "certification": "AZ-104", | |
| "title": "Managed Identity โ ๊ด๋ฆฌํ ID", | |
| "summary": "Azure ๋ฆฌ์์ค(VM, App Service ๋ฑ)์ Entra ID ID๋ฅผ ๋ถ์ฌํด ์๊ฒฉ ์ฆ๋ช ์์ด ๋ค๋ฅธ Azure ์๋น์ค์ ์ธ์ฆํฉ๋๋ค. ์ฝ๋์ ๋น๋ฐ์ ์ ์ฅํ ํ์๊ฐ ์์ต๋๋ค.", | |
| "example": "# VM์ System-Assigned MI ํ์ฑํ\naz vm identity assign --name myVM --resource-group myRG\n# MI์ ์ญํ ํ ๋น\naz role assignment create \\\n --assignee $(az vm show --name myVM --query identity.principalId -o tsv) \\\n --role 'Key Vault Secrets User' \\\n --scope /subscriptions/.../vaults/myKV", | |
| "common_mistake": "System-Assigned MI๋ ๋ฆฌ์์ค ์ญ์ ์ ํจ๊ป ์ญ์ ๋ฉ๋๋ค. ์ฌ๋ฌ ๋ฆฌ์์ค์์ ๊ณต์ ํ๋ ID๊ฐ ํ์ํ๋ฉด User-Assigned MI๋ฅผ ์๋๋ค.", | |
| "keywords": [ | |
| "managed identity", | |
| "system-assigned", | |
| "user-assigned", | |
| "principal ID", | |
| "service principal" | |
| ], | |
| "source_id": "azure-rbac-overview", | |
| "details": [ | |
| "์ ํ: System-Assigned(๋ฆฌ์์ค์ ์ข ์, 1:1), User-Assigned(๋ ๋ฆฝ์ ์ผ๋ก ์์ฑ, ์ฌ๋ฌ ๋ฆฌ์์ค์ ์ฐ๊ฒฐ ๊ฐ๋ฅ).", | |
| "๋์ ์๋ฆฌ: ๋ฆฌ์์ค๊ฐ Entra ID์์ ํ ํฐ์ ์๋ ํ๋ โ ํด๋น ํ ํฐ์ผ๋ก Key Vault, Storage ๋ฑ์ ์ธ์ฆํฉ๋๋ค.", | |
| "์ํ ํจํด: System vs User-Assigned ์ ํ ์๋๋ฆฌ์ค, MI์ RBAC ์ญํ ๋ถ์ฌ ์ ์ฐจ, App Service์์ MI๋ฅผ ํตํ Key Vault ์ ๊ทผ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "๊ณ ๊ธ" | |
| }, | |
| { | |
| "id": "azure-network-watcher", | |
| "certification": "AZ-104", | |
| "title": "Network Watcher โ ๋คํธ์ํฌ ์ง๋จ", | |
| "summary": "Azure ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋ฌธ์ ๋ฅผ ์ง๋จํ๋ ๋๊ตฌ ๋ชจ์์ ๋๋ค. IP ํ๋ฆ ํ์ธ, ์ฐ๊ฒฐ ๋ฌธ์ ํด๊ฒฐ, NSG ์ง๋จ, ํจํท ์บก์ฒ ๋ฑ์ ์ ๊ณตํฉ๋๋ค.", | |
| "example": "# NSG๊ฐ ํจํท์ ํ์ฉํ๋์ง ํ์ธ\naz network watcher test-ip-flow \\\n --vm myVM \\\n --direction Inbound \\\n --protocol TCP \\\n --local 10.0.0.4:80 \\\n --remote 0.0.0.0:*", | |
| "common_mistake": "Network Watcher๋ region๋ณ๋ก ํ์ฑํํด์ผ ํฉ๋๋ค. VNet์ ์์ฑํ๋ฉด ๋๋ถ๋ถ ์๋ ํ์ฑํ๋์ง๋ง, ๋นํ์ฑํ๋ region์์๋ ์ง๋จ ๊ธฐ๋ฅ์ด ๋์ํ์ง ์์ต๋๋ค.", | |
| "keywords": [ | |
| "Network Watcher", | |
| "IP flow verify", | |
| "connection troubleshoot", | |
| "NSG flow log", | |
| "packet capture" | |
| ], | |
| "source_id": "azure-vnet-overview", | |
| "details": [ | |
| "IP ํ๋ฆ ํ์ธ: ํน์ VM์์ ์ถ๋ฐ์ง/๋ชฉ์ ์ง IPยทํฌํธ๋ก NSG๊ฐ ํ์ฉ/๊ฑฐ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๊ท์น์ ์ฐพ์์ค๋๋ค.", | |
| "NSG Flow Log: ์๋ธ๋ทยทNIC๋ฅผ ํต๊ณผํ๋ ํธ๋ํฝ์ ํ์ฉ/๊ฑฐ๋ถ ํ๋ฆ์ Storage Account์ ๊ธฐ๋กํฉ๋๋ค. Traffic Analytics์ ์ฐ๋ํด ์๊ฐํ.", | |
| "์ํ ํจํด: IP ํ๋ฆ ํ์ธ์ผ๋ก NSG ๊ท์น ์ง๋จ, Connection Troubleshoot์ผ๋ก VM ๊ฐ ์ฐ๊ฒฐ ๊ฒ์ฆ, NSG Flow Log ์ค์ ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "์ค๊ธ" | |
| }, | |
| { | |
| "id": "azure-move-resource", | |
| "certification": "AZ-104", | |
| "title": "๋ฆฌ์์ค ์ด๋ โ Resource Move", | |
| "summary": "๋ฆฌ์์ค๋ฅผ ๋ค๋ฅธ Resource Group์ด๋ ๋ค๋ฅธ Subscription์ผ๋ก ์ด๋ํฉ๋๋ค. ์ด๋ ์ค ๋ฆฌ์์ค๋ ์ ๊ธฐ๋ฉฐ, ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ์ด๋์ ์ง์ํ์ง๋ ์์ต๋๋ค.", | |
| "example": "az resource move \\\n --destination-group targetRG \\\n --ids /subscriptions/SUB/resourceGroups/sourceRG/providers/Microsoft.Compute/virtualMachines/myVM", | |
| "common_mistake": "์ด๋ ํ ๋ฆฌ์์ค ID(ARM ID)๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค. ์ด ID๋ฅผ ํ๋์ฝ๋ฉํ ์คํฌ๋ฆฝํธยท๋ชจ๋ํฐ๋งยทRole Assignment๋ ์ ๋ฐ์ดํธ๊ฐ ํ์ํฉ๋๋ค.", | |
| "keywords": [ | |
| "resource move", | |
| "RG move", | |
| "subscription move", | |
| "ARM ID change", | |
| "limitations" | |
| ], | |
| "source_id": "azure-vm-overview", | |
| "details": [ | |
| "์ด๋ ์ ์ ํจ์ฑ ๊ฒ์ฌ: `az resource invoke-action --action validate-move`๋ก ์ด๋ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ๋ฏธ๋ฆฌ ํ์ธํฉ๋๋ค.", | |
| "์ด๋์ด ๋ถ๊ฐํ ๊ฒฝ์ฐ: ํน์ ๋ฆฌ์์ค ์ ํ, ๊ตฌ๋ ๊ฐ ์ด๋ ์ ์๋น์ค๋ณ ์ ํ, Key Vault(๊ตฌ๋ ์ด๋ ์ ์ผ๋ถ ์ ํ) ๋ฑ.", | |
| "์ํ ํจํด: ์ด๋ ํ ๋ฆฌ์์ค ID ๋ณ๊ฒฝ ์ํฅ, ์ด๋ ๋ถ๊ฐ ๋ฆฌ์์ค ์์, ๊ตฌ๋ ๊ฐ ์ด๋ ์ ์ถ๊ฐ ์กฐ๊ฑด(Entra ID ํ ๋ํธ ์ผ์น ๋ฑ)์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "๊ณ ๊ธ" | |
| }, | |
| { | |
| "id": "azure-template-deployment", | |
| "certification": "AZ-104", | |
| "title": "ARM/Bicep โ ์ธํ๋ผ ์ฝ๋ ๋ฐฐํฌ", | |
| "summary": "ARM Template(JSON) ๋๋ Bicep(DSL)์ผ๋ก Azure ๋ฆฌ์์ค๋ฅผ ์ ์ธ์ ์ผ๋ก ์ ์ํ๊ณ ๋ฐ๋ณต ๊ฐ๋ฅํ๊ฒ ๋ฐฐํฌํฉ๋๋ค. IaC(Infrastructure as Code)์ ํ์ค ๋ฐฉ์์ ๋๋ค.", | |
| "example": "# Bicep ๋ฐฐํฌ\naz deployment group create \\\n --resource-group myRG \\\n --template-file main.bicep \\\n --parameters environment=prod\n# ๊ตฌ๋ ๋ ๋ฒจ ๋ฐฐํฌ\naz deployment sub create --template-file rg.bicep --location koreacentral", | |
| "common_mistake": "ARM ๋ฐฐํฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก Incremental ๋ชจ๋(๊ธฐ์กด ๋ฆฌ์์ค ์ ์ง, ์ ๋ฆฌ์์ค ์ถ๊ฐ)์ ๋๋ค. Complete ๋ชจ๋๋ ํ ํ๋ฆฟ์ ์๋ RG ๋ด ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๋ฏ๋ก ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.", | |
| "keywords": [ | |
| "ARM template", | |
| "Bicep", | |
| "IaC", | |
| "incremental", | |
| "complete", | |
| "deployment scope" | |
| ], | |
| "source_id": "azure-vm-overview", | |
| "details": [ | |
| "๋ฐฐํฌ ๋ฒ์: Resource Group(๋๋ถ๋ถ), Subscription(RG ์์ฑ ํฌํจ), Management Group(Policy/RBAC), Tenant ๋ ๋ฒจ ์ค ์ ํํฉ๋๋ค.", | |
| "Bicep์ ARM JSON๋ณด๋ค ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ์ผ๋ก ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋๋ค. `bicep build`๋ก ARM JSON์ผ๋ก ์ปดํ์ผ ๊ฐ๋ฅํฉ๋๋ค.", | |
| "์ํ ํจํด: Incremental vs Complete ๋ชจ๋ ์ฐจ์ด, ๋ฐฐํฌ ๋ฒ์๋ณ ๋ช ๋ น(`deployment group/sub/mg create`), What-If ๊ฒ์ฆ ์ฌ์ฉ๋ฒ์ด ์ถ์ ๋ฉ๋๋ค." | |
| ], | |
| "level": "๊ณ ๊ธ" | |
| } | |
| ] |