Home > Spring > πŸƒ[Spring] λ°°ν¬λž€ λ¬΄μ—‡μΌκΉŒμš”?

πŸƒ[Spring] λ°°ν¬λž€ λ¬΄μ—‡μΌκΉŒμš”?
Spring Framework

πŸƒ[Spring] λ°°ν¬λž€ λ¬΄μ—‡μΌκΉŒμš”?

  • 배포(Deployment)λž€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(μ„œλ²„ μ½”λ“œ)λ₯Ό 개발 ν™˜κ²½μ—μ„œ μ‹€μ œ μ‚¬μš©μžλ“€μ΄ μ‚¬μš©ν•  수 μžˆλŠ” ν™˜κ²½(운영 ν™˜κ²½, ν”„λ‘œλ•μ…˜ ν™˜κ²½)으둜 μ΄λ™μ‹œν‚€κ³ , μ‹€ν–‰ κ°€λŠ₯ν•œ μƒνƒœλ‘œ λ§Œλ“œλŠ” 과정을 λ§ν•©λ‹ˆλ‹€.
    • 이 κ³Όμ •μ—λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λΉŒλ“œ, ν…ŒμŠ€νŠΈ, 배포 μ„œλ²„μ— μ˜¬λ¦¬λŠ” λ“±μ˜ μž‘μ—…μ΄ ν¬ν•¨λ©λ‹ˆλ‹€.

1️⃣ 배포의 μ£Όμš” 단계.

  • 배포 과정은 μ•„λž˜ 단계λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.

1️⃣ μ½”λ“œ μž‘μ„± 및 버전 관리.

1️⃣ μ½”λ“œ μž‘μ„±.

  • κ°œλ°œμžκ°€ 둜컬 ν™˜κ²½μ—μ„œ λ°±μ—”λ“œ μ½”λ“œλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.
    • Spring Boot, Node.js λ“± λ‹€μ–‘ν•œ λ°±μ—”λ“œ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

2️⃣ 버전 관리.

  • μž‘μ„±λœ μ½”λ“œλŠ” Gitκ³Ό 같은 버전 관리 μ‹œμŠ€ν…œμ— μ €μž₯λ˜μ–΄ ν˜‘μ—…κ³Ό λ³€κ²½ 이λ ₯을 κ΄€λ¦¬ν•©λ‹ˆλ‹€.

2️⃣ ν…ŒμŠ€νŠΈ 및 λΉŒλ“œ.

1️⃣ ν…ŒμŠ€νŠΈ.

  • μ½”λ“œλ₯Ό μ‹€μ œ 배포 전에 μ‹€ν–‰ν•˜μ—¬ 버그와 문제λ₯Ό μ‹λ³„ν•©λ‹ˆλ‹€.
    • λ‹¨μœ„ ν…ŒμŠ€νŠΈ, 톡합 ν…ŒμŠ€νŠΈ, E2E(End-to-End) ν…ŒμŠ€νŠΈ 등을 μ§„ν–‰ν•©λ‹ˆλ‹€.

2️⃣ λΉŒλ“œ.

  • μ†ŒμŠ€ μ½”λ“œλ₯Ό μ‹€ν–‰ κ°€λŠ₯ν•œ μƒνƒœλ‘œ νŒ¨ν‚€μ§•ν•©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, Spring Boot ν”„λ‘œμ νŠΈλŠ” jar λ˜λŠ” war 파일둜 λΉŒλ“œλ©λ‹ˆλ‹€.

3️⃣ 배포 μ€€λΉ„.

1️⃣ μ„œλ²„ μ„€μ •.

  • 배포할 μ„œλ²„λ₯Ό μ€€λΉ„ν•©λ‹ˆλ‹€.
    • μ΄λŠ” 물리적 μ„œλ²„, 가상 μ„œλ²„, ν΄λΌμš°λ“œ μ„œλΉ„μŠ€(AWS, Azure, GCP) 등이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ ν™˜κ²½ μ„€μ •.

  • λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° 정보, API ν‚€, 포트 번호 λ“± 배포 ν™˜κ²½μ— λ§žλŠ” μ„€μ • νŒŒμΌμ„ μž‘μ„±ν•©λ‹ˆλ‹€.

4️⃣ μ½”λ“œ 배포.

1️⃣ 파일 μ—…λ‘œλ“œ.

  • λΉŒλ“œλœ νŒŒμΌμ„ μ„œλ²„μ— μ—…λ‘œλ“œν•©λ‹ˆλ‹€.
    • 이λ₯Ό μœ„ν•΄ FTP, SCP, CI/CD νŒŒμ΄ν”„λΌμΈ 등을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ μ‹€ν–‰.

  • μ—…λ‘œλ“œλœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ„œλ²„μ—μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€.
    • Spring Boot μ• ν’€λ¦¬μΌ€μ΄μ…˜μ€ 일반적으둜 java -jar λͺ…λ Ήμ–΄λ‘œ μ‹€ν–‰λ©λ‹ˆλ‹€.

5️⃣ μ„œλΉ„μŠ€ 가동 및 λͺ¨λ‹ˆν„°λ§.

1️⃣ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 가동.

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

2️⃣ λͺ¨λ‹ˆν„°λ§.

  • μ„œλΉ„μŠ€ μƒνƒœ, μ„œλ²„ λ¦¬μ†ŒμŠ€(CPU, λ©”λͺ¨λ¦¬) μ‚¬μš©λŸ‰ 등을 μ§€μ†μ μœΌλ‘œ ν™•μΈν•˜μ—¬ 문제λ₯Ό μ‹λ³„ν•©λ‹ˆλ‹€.

2️⃣ 배포 방식.

  • 배포 방식은 ν”„λ‘œμ νŠΈ 규λͺ¨, μ‚¬μš© 기술, μš”κ΅¬ 사항에 따라 λ‹€λ¦…λ‹ˆλ‹€.

1️⃣ μˆ˜λ™ 배포.

1️⃣ μ„€λͺ….

  • κ°œλ°œμžκ°€ 직접 μ½”λ“œλ₯Ό λΉŒλ“œν•˜κ³  μ„œλ²„μ— μ—…λ‘œλ“œν•˜μ—¬ μ‹€ν–‰ν•˜λŠ” 방식.

2️⃣ μž₯점.

  • κ°„λ‹¨ν•˜λ©° μ†Œκ·œλͺ¨ ν”„λ‘œμ νŠΈμ— 적합.

3️⃣ 단점.

  • λ§Žμ€ 인적 μž‘μ—…μ΄ ν•„μš”ν•˜κ³ , 였λ₯˜ λ°œμƒ κ°€λŠ₯성이 λ†’μŒ.

2️⃣ μžλ™ν™” 배포.

1️⃣ μ„€λͺ….

  • CI/CD(Continuous Integration/Continuous Deployment) 도ꡬλ₯Ό μ‚¬μš©ν•΄ λΉŒλ“œ, ν…ŒμŠ€νŠΈ, 배포λ₯Ό μžλ™ν™”.

2️⃣ 도ꡬ.

  • Jenkins, Github Actions, GitLab CI/CD, AWS CodePipeline

3️⃣ μž₯점.

  • 였λ₯˜λ₯Ό 쀄이고 배포 속도λ₯Ό ν–₯상.

4️⃣ 단점.

  • 초기 섀정이 볡작.

3️⃣ 블루/κ·Έλ¦° 배포.

1️⃣ μ„€λͺ….

  • κΈ°μ‘΄ ν™˜κ²½(블루)을 μœ μ§€ν•˜λ©΄μ„œ μƒˆλ‘œμš΄ ν™˜κ²½(κ·Έλ¦°)을 배포.
    • λ¬Έμ œκ°€ μ—†μœΌλ©΄ νŠΈλž˜ν”½μ„ 그린으둜 μ „ν™˜.

2️⃣ μž₯점.

  • 무쀑단 배포 κ°€λŠ₯.

3️⃣ 단점.

  • μΆ”κ°€ μ„œλ²„ λΉ„μš© λ°œμƒ.

4️⃣ 둀링 배포.

1️⃣ μ„€λͺ….

  • κΈ°μ‘΄ μ„œλ²„λ₯Ό μ μ§„μ μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜μ—¬ 배포.

2️⃣ μž₯점.

  • 점진적 배포둜 μ•ˆμ •μ„± 증가.

3️⃣ 단점.

  • μ—…λ°μ΄νŠΈ μ™„λ£ŒκΉŒμ§€ μ‹œκ°„μ΄ 였래 걸릴 수 있음.

3️⃣ λ°±μ—”λ“œ 배포에 ν•„μš”ν•œ 도ꡬ와 기술.

1️⃣ μ„œλ²„ 인프라.

  • 물리적 μ„œλ²„ λ˜λŠ” ν΄λΌμš°λ“œ μ„œλΉ„μŠ€(AWS EC2, GCP Compute Engine, Azure VM)
  • μ»¨ν…Œμ΄λ„ˆ 기반 배포(Docker, Kubernetes)

2️⃣ CI/CD 도ꡬ

  • Jenkins, Github Actions, GitLab CI/CD, CircleCI.

3️⃣ μ›Ή μ„œλ²„.

  • Nginx, Apache: λ‘œλ“œ λ°ΈλŸ°μ‹±κ³Ό 정적 파일 제곡.
  • Spring Boot λ‚΄μž₯ μ„œλ²„(Tomcat)둜 κ°„λ‹¨ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰.

4️⃣ λͺ¨λ‹ˆν„°λ§.

  • Promethus, Grafana: μ„œλ²„ μ„±λŠ₯ 및 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœ λͺ¨λ‹ˆν„°λ§
  • APM 도ꡬ: New Relic, Datadog, ELK μŠ€νƒ.

4️⃣ 배포의 μ£Όμš” 고렀사항.

1️⃣ 무쀑단 배포.

  • μ‚¬μš©μžκ°€ μ„œλΉ„μŠ€ 쀑단 없이 μƒˆλ‘œμš΄ μ½”λ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ μ„€μ •.

2️⃣ λ³΄μ•ˆ.

  • ν™˜κ²½ λ³€μˆ˜λ‚˜ λ―Όκ°ν•œ 정보λ₯Ό μ•ˆμ „ν•˜κ²Œ 관리(예: AWS Secrets Manager, Vault).

3️⃣ ν™•μž₯μ„±.

  • νŠΈλž˜ν”½ 증가에 λŒ€λΉ„ν•œ λ‘œλ“œ λ°ΈλŸ°μ‹±, μ˜€ν†  μŠ€μΌ€μΌλ§ ꡬ성.

4️⃣ μž₯μ•  볡ꡬ.

  • 문제 λ°œμƒ μ‹œ λΉ λ₯΄κ²Œ 이전 μƒνƒœλ‘œ 볡ꡬ할 수 μžˆλŠ” λ‘€λ°± μ „λž΅ μ€€λΉ„.

5️⃣ κ²°λ‘ .

  • λ°±μ—”λ“œ λ°°ν¬λŠ” λ‹¨μˆœνžˆ μ½”λ“œλ₯Ό μ„œλ²„μ— μ—…λ‘œλ“œν•˜λŠ” 것이 μ•„λ‹ˆλΌ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ•ˆμ •μ„±κ³Ό μ„±λŠ₯을 μœ μ§€ν•˜λ©΄μ„œ μ‚¬μš© κ°€λŠ₯ν•œ μƒνƒœλ‘œ λ§Œλ“œλŠ” 볡작적인 μž‘μ—…μž…λ‹ˆλ‹€.
  • ν”„λ‘œμ νŠΈμ— 따라 배포 방식과 도ꡬλ₯Ό μ„ νƒν•˜λ©°, 무쀑단 μ„œλΉ„μŠ€μ™€ μžλ™ν™”λ₯Ό λͺ©ν‘œλ‘œ μ μ§„μ μœΌλ‘œ κ°œμ„ ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.