Infrastructure
Google Cloud RunμΌλ‘ μ λ ΄νκ³ μ½κ² μ€νλ§λΆνΈ μλ² μ΄μνκΈ°
1/29/2025

λ§μ λΆλ€μ΄ μκ·λͺ¨ μ¬μ΄λ νλ‘μ νΈμμ Spring Bootμ AWS EC2λ₯Ό μ¬μ©νμ¬ λ°±μλ μ ν리μΌμ΄μ μ λ°°ν¬νμκ³€ ν©λλ€. EC2λ ν리ν°μ΄ μ€νμΈ t2.microλ₯Ό μ¬μ©νλ€λ κ°μ νμ ν리ν°μ΄ κΈ°κ°μ΄ λλλ©΄ λ§€ λ¬ μ½ 25,000 μμ μ§λΆν΄μΌνλ μλΉμ€λ‘, κ°λν νμ κ°λ°μλ€μ΄ μ°κΈ°μλ λΆλ΄ λ κΈμ‘μ λλ€.
Google Cloud Platformμλ μ΄λ¬ν λΉμ© λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ μλΉμ€κ° μ‘΄μ¬ν©λλ€. Google Cloud Runμ μλ²λ¦¬μ€ μ»΄ν¨ν μΈμ€ν΄μ€λ₯Ό μ 곡ν΄μ£Όλ μλΉμ€λ‘, μ½κ³ λΉ λ₯΄κ² μ ν리μΌμ΄μ μ ꡬμΆνκ³ λ°°ν¬ν μ μλλ‘ λμμ€λλ€.
GCRμ Pay-as-you-go (μ¬μ©ν λ§νΌ μ§λΆ) κ³ΌκΈ λ°©μμ κ°μ΅λλ€. λ°°ν¬ μ΄ν μλ²μ μμ²μ΄ λ€μ΄μ¨λ€λ©΄, κ·Έμ μμΌ λΆλ΄λΆλ΄ μλ² μΈμ€ν΄μ€λ₯Ό μμ±νκ³ , μΌμ κΈ°κ° μμ²μ΄ μμλ€λ©΄ μΈμ€ν΄μ€λ₯Ό μλμΌλ‘ μ’ λ£ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ λ§λ‘ μ¬μ©νλ μκ°μ λν΄μλ§ μΈμ€ν΄μ€ λΉμ©μ μ§λΆν μ μκ² λμ΄ EC2μ κ°μ μλΉμ€μ λΉν΄ μ λ ΄νκ² μ΄μν μ μμ΅λλ€. λν λ‘컬 κ°λ° νκ²½μΌλ‘λΆν° νλμ λͺ λ Ήμ΄λ§ μννλ©΄ λ°°ν¬κ° μλ£λλ©°, λ³λμ https μ€μ μ΄λ λλ©μΈ ꡬμ μ ν νμλ μλ€λ μ₯μ λ μ‘΄μ¬ν©λλ€.
Google Cloud RunμΌλ‘ μ€νλ§λΆνΈ λ°°ν¬νκΈ°
μ΄ μΉμ μμλ GCRμ μ¬μ©νμ¬ μ€νλ§λΆνΈλ₯Ό λ°°ν¬νλ μ μ°¨λ₯Ό λ¨κ³μ μΌλ‘ μ€λͺ ν©λλ€.
1. Google Cloud Project μμ±

λ΄ μ½μλ‘ μ΄λ -> μ νλ‘μ νΈ λ²νΌμ λλ¬ νλ‘μ νΈ μ΄λ¦κ³Ό κ²°μ μ 보λ₯Ό κΈ°μ νμ¬ νλ‘μ νΈλ₯Ό μμ±ν©λλ€.
2. λ‘컬μ gcloud cli μ€μΉ λ° κΈ°λ³Έ μΈν
μ λ¬Έμλ₯Ό μ°Έκ³ νμ¬ λ‘컬 μ»΄ν¨ν°μ gcloud cliλ₯Ό μ€μΉν©λλ€.
μ€μΉκ° μλ£λλ€λ©΄, Cloud Run μλΉμ€λ₯Ό μ¬μ©ν κΈ°λ³Έ νλ‘μ νΈλ₯Ό μ€μ ν΄μ€λλ€.
β gcloud config set project [project_id]

νλ‘μ νΈ IDλ μ½μμμ νμΈν μ μμ΅λλ€.
μ΄ν Cloud Run Admin API μ Cloud Build APIμ λν μ¬μ© μ€μ μ μ§νν΄μ€λλ€. ν°λ―Έλμ λ€μ λͺ λ Ήμ΄λ₯Ό μ λ ₯ν©λλ€.
β gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com
3. μ€νλ§λΆνΈ νλ‘μ νΈ μμ±
Spring Initializr νΉμ cliλ₯Ό ν΅ν΄ μ€νλ§ νλ‘μ νΈλ₯Ό μμ±ν΄μ€λλ€.
β curl https://start.spring.io/starter.zip \ -d type=gradle-project \ -d bootVersion=3.3.5 \ -d dependencies=web \ -d javaVersion=21 \ -d name=helloworld \ -d artifactId=helloworld \ -d baseDir=helloworld \ -o helloworld.zip
β unzip helloworld.zip
β cd helloworld
4. project.toml μμ±
μ€νλ§ μ ν리μΌμ΄μ
μ λ£¨νΈ λλ ν°λ¦¬μ project.toml μ΄λΌλ μ΄λ¦μ νμΌμ λ§λ€μ΄ μλ λ΄μ©μ μμ±ν΄μ€λλ€.
name = "GOOGLE_RUNTIME_VERSION"
value = "21" <-- μ€νλ§ νλ‘μ νΈ μμ± μ μ€μ ν μλ° λ²μ μ κΈ°μ
5. λ°°ν¬!
μ ν리μΌμ΄μ μ λ£¨νΈ λλ ν°λ¦¬μμ λ€μ λͺ λ Ήμ΄λ₯Ό μ¬μ©νμ¬ μ ν리μΌμ΄μ μ λ°°ν¬ν©λλ€. app-nameμλ λ°°ν¬λ 컨ν μ΄λμ μ΄λ¦μ, regionμλ μΈμ€ν΄μ€λ₯Ό μμΉμν¬ μ§μμ μ§μ ν΄μ€ μ μμ΅λλ€.
β gcloud run deploy [app-name] --source . \ --region asia-northeast3
Β
6. μλ£ λ° ν μ€νΈ

컨ν μ΄λ λΉλ λ° λ°°ν¬κ° λλλ©΄, ν°λ―Έλμ url νλκ° λΉλλ€. ν΄λΉ λ§ν¬κ° gcpμμ μλμΌλ‘ μμ±ν μ ν리μΌμ΄μ μ λ°°ν¬ λ§ν¬λ‘, ν΄λΉ λ§ν¬λ₯Ό ν΅ν΄ μ μνμ¬ μ λμνλ νμΈν΄λ³Ό μ μμ΅λλ€. λ°°ν¬λ 컨ν μ΄λμ λν λ‘κ·Έ λ° μμΈν μ 보λ Cloud Run μ½μμ μ μνμ¬ νμΈν μ μμ΅λλ€.
There is No Silver Bullet
λΉμ©μ μλΌλ λ§νΌ λͺκ°μ§ κ³ λ €ν΄μΌν μ μ΄ μκΉλλ€.
1. μΈλ©λͺ¨λ¦¬ κ³΅κ° μ¬μ©μ μ΄λ €μ
κΈ°λ³Έμ μΌλ‘ 15λΆ λμ μμ²μ΄ μ€μ§ μλλ€λ©΄ μΈμ€ν΄μ€κ° μ’ λ£λλ―λ‘, μ ν리μΌμ΄μ μ λ©λͺ¨λ¦¬μ μ μ§νκ³ μλ κ°μ λͺ¨λ νλ°λ©λλ€. λ°λΌμ λ‘μ§μ λμμ΄ μΈλ©λͺ¨λ¦¬μ μνμ μμ‘΄νμ§ μκ² ν΄μΌ ν©λλ€. λν μΈλ©λͺ¨λ¦¬ μΊμ μμ λΉν¨μ¨μ μΌλ‘ μλν κ²μ λλ€.
2. μ΄κΈ° μλ΅μκ°
μΈμ€ν΄μ€κ° μ’ λ£λ μνμμ μμ²μ΄ λ€μ΄μ¨λ€λ©΄, ν΄λΉ μμ²μ μ²λ¦¬νκΈ° μν΄μλ μ μΈμ€ν΄μ€κ° ν λΉλ μ΄ν μ€νλ§λΆνΈκ° μ΄κΈ°νλλλ° κΉμ§μ μκ°μ΄ νμν©λλ€. λ°λΌμ μ₯κΈ°κ° λ―Έμ¬μ©λ κ²½μ° μ΅μ΄ μμ²μ λν μλ΅μκ°μ΄ νλ νμμ΄ λ°μν©λλ€.
3. μ μμ 곡격
λλμ€μ κ°μ κ³Όλν νΈλν½μ μ λ°νλ μ μ± κ³΅κ²©μ΄ λ°μν κ²½μ°, μλ μ€μΌμΌλ§μ΄ λμνμ¬ κ΅μ₯ν λ§μ κ°μμ μΈμ€ν΄μ€κ° μμ±λλ―λ‘ λΉμ© ννμ μΌκΈ°ν μ μμ΅λλ€. μ΄λ max-instance λ₯Ό μΈν νλ λ°©λ²μΌλ‘ ν΄κ²°ν μ μμ΅λλ€.
4. μ€μΌμ₯΄λ¬ μ¬μ© λΆκ°λ₯
μλ²κ° μ¬μ©λμ§ μμ λμλ μΈμ€ν΄μ€κ° μ’
λ£λμ΄ μκΈ° λλ¬Έμ @Scheduled μ κ°μ μ€μΌμ₯΄λ§ κΈ°λ° μ½λ νΈλ¦¬κ±° λ°©μμ μ¬μ©λ μ μμ΅λλ€. μ΄λ₯Ό μ§μνλ λ³λμ μλΉμ€μΈ Cloud Schedulerλ₯Ό μ¬μ©νμ¬ Cloud RunμΌλ‘ λ°°ν¬λ μ ν리μΌμ΄μ
μ μλν¬μΈνΈλ₯Ό νΈμΆνλ λ°©μμΌλ‘ ꡬνν΄μΌ ν©λλ€.
λ°°ν¬κ° μλλ€λ©΄..
MAC OSλ₯Ό μ°λ μ PCμμλ μ μ μ°¨ κ·Έλλ‘ μννμ λ λ¬Έμ μμ΄ λμνμΌλ, μλμ° νκ²½μμλ λΉλ κ³Όμ μμ μλ¬κ° λ°μνλ κ²½μ°λ μμλ κ² κ°μ΅λλ€. μ΄ λμλ λΉλ μ λ°μνλ λ¬Έμ λ₯Ό μ ν΄κ²°νκ±°λ, μ μλλ€λ©΄ Cloud Shell μμ λ°°ν¬ λͺ λ Ήμ΄λ₯Ό μ¬μ©νλ λ°©μμΌλ‘λ κ°λ₯νλ μ°Έκ³ ν΄μ£Όμλ©΄ μ’μ κ² κ°μ΅λλ€.