Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 

Repository files navigation

πŸ‹Docker Compose Spring Boot + MySQL Project

이 ν”„λ‘œμ νŠΈλŠ” Docker Composeλ₯Ό μ‚¬μš©ν•˜μ—¬ Spring Boot μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό MySQL λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ—°λ™ν•˜κ³ , 각 μ»¨ν…Œμ΄λ„ˆμ˜ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜κΈ° μœ„ν•œ ν—¬μŠ€μ²΄ν¬(Healthcheck) 섀정을 ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

1. μ„œλΉ„μŠ€ ꡬ성 및 ν—¬μŠ€μ²΄ν¬ μ„€μ •

λ°μ΄ν„°λ² μ΄μŠ€ μ„œλΉ„μŠ€ (db)

λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄λΆ€μ μœΌλ‘œ 쿼리 μ²˜λ¦¬κ°€ κ°€λŠ₯ν•œ μƒνƒœμΈμ§€ ν™•μΈν•©λ‹ˆλ‹€.

  • μ„€μ • μœ„μΉ˜: docker-compose.yml
  • 검증 방법: mysqladmin ping λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ²„ 응닡을 ν™•μΈν•©λ‹ˆλ‹€.
  • μ£Όμš” νŒŒλΌλ―Έν„°:
    • interval: 10s: 10μ΄ˆλ§ˆλ‹€ 체크 μˆ˜ν–‰
    • timeout: 5s: 응닡 λŒ€κΈ° μ‹œκ°„
    • retries: 10: μ΅œλŒ€ 10회 μž¬μ‹œλ„
    • start_period: 30s: 초기 ꡬ동 μ‹œ 30초 λ™μ•ˆμ€ μ‹€νŒ¨ν•΄λ„ λ¬΄μ‹œν•˜κ³  κΈ°λ‹€λ €μ€Œ

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλΉ„μŠ€ (app)

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발 λ‹¨κ³„μ—μ„œ μ„€μ •ν•œ μ—”λ“œν¬μΈνŠΈκ°€ 정상 응닡을 μ£ΌλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

  • μ„€μ • μœ„μΉ˜: Dockerfile
  • 검증 방법: curl을 μ‚¬μš©ν•˜μ—¬ νŠΉμ • 경둜(/emp/)의 응닡을 ν™•μΈν•©λ‹ˆλ‹€.
  • μ£Όμš” νŠΉμ§•:
    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ»¨ν…μŠ€νŠΈ 경둜(/emp)λ₯Ό λ°˜μ˜ν•˜μ—¬ μ²΄ν¬ν•©λ‹ˆλ‹€.
    • μ„œλ²„κ°€ ꡬ동 μ€‘μž„μ„ ν™•μΈν•˜κΈ° μœ„ν•΄ 404 응닡이라도 μ„œλ²„κ°€ μ‚΄μ•„μžˆλ‹€λ©΄ μ •μƒμœΌλ‘œ κ°„μ£Όν•˜λ„λ‘ μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

2. μ»¨ν…Œμ΄λ„ˆ κ°„ μ˜μ‘΄μ„± 관리 (depends_on)

λ³Έ ν”„λ‘œμ νŠΈλŠ” docker-compose.ymlμ—μ„œ λ‹€μŒκ³Ό 같은 μ˜μ‘΄μ„± 섀정을 μ‚¬μš©ν•©λ‹ˆλ‹€:

depends_on:
  db:
    condition: service_healthy

이 섀정은 λ‹¨μˆœνžˆ μ»¨ν…Œμ΄λ„ˆκ°€ 'μ‹€ν–‰ 쀑'인 것을 λ„˜μ–΄, λ°μ΄ν„°λ² μ΄μŠ€κ°€ ν—¬μŠ€μ²΄ν¬λ₯Ό ν†΅κ³Όν•˜μ—¬ healthy μƒνƒœκ°€ λ˜μ—ˆμ„ λ•Œλ§Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹œμž‘ν•˜λ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.

3. μ£Όμš” ν…ŒμŠ€νŠΈ 및 κ³ μ°° (Troubleshooting)

Q1. MySQL이 μ£½μ–΄μžˆκ±°λ‚˜ μ‹œμž‘λ˜μ§€ μ•ŠμœΌλ©΄ App μ»¨ν…Œμ΄λ„ˆλŠ” μ–΄λ–»κ²Œ λ˜λ‚˜μš”?

  • λ‹΅λ³€: app μ»¨ν…Œμ΄λ„ˆλŠ” 생성 및 μ‹€ν–‰λ˜μ§€ μ•Šκ³  λŒ€κΈ°ν•©λ‹ˆλ‹€. Docker ComposeλŠ” dbκ°€ healthy μƒνƒœκ°€ 될 λ•ŒκΉŒμ§€ app의 μ‹œμž‘μ„ 보λ₯˜ν•©λ‹ˆλ‹€.
  • μ†Œμš” μ‹œκ°„: λ§Œμ•½ MySQL이 끝내 μ‚΄μ•„λ‚˜μ§€ μ•ŠλŠ”λ‹€λ©΄, db μ»¨ν…Œμ΄λ„ˆκ°€ unhealthy둜 μ΅œμ’… 확정될 λ•ŒκΉŒμ§€ μ•½ 130초(30s + 10s * 10회) 정도 μ†Œμš”λ©λ‹ˆλ‹€.

Q2. 처음 μ‹€ν–‰ μ‹œ λ°μ΄ν„°λ² μ΄μŠ€ 접속 κΆŒν•œ μ—λŸ¬(Access Denied)κ°€ λ°œμƒν•œλ‹€λ©΄?

  • 원인: Docker λ³Όλ₯¨(db_data)에 이전 μ‹€ν–‰ 정보가 λ‚¨μ•„μžˆμ–΄ docker-compose.yml에 μ„€μ •ν•œ μƒˆλ‘œμš΄ 계정 정보가 λ°˜μ˜λ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν•΄κ²°: docker compose down -v λͺ…λ Ήμ–΄λ‘œ λ³Όλ₯¨μ„ μ™„μ „νžˆ μ‚­μ œν•œ ν›„ λ‹€μ‹œ λΉŒλ“œ(--build)ν•˜μ—¬ μ‹€ν–‰ν•˜λ©΄ μƒˆλ‘œμš΄ λ°μ΄ν„°λ² μ΄μŠ€μ™€ 계정이 μ •μƒμ μœΌλ‘œ μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€.

Q3. μ»¨ν…Œμ΄λ„ˆ μƒνƒœκ°€ unhealthy둜 ν‘œμ‹œλ  λ•Œ 확인해야 ν•  점

  • 포트 λ§€ν•‘: Dockerfile의 SERVER_PORT와 docker-compose.yml의 포트 맀핑이 μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€ (ν˜„μž¬ μ„€μ •: 80:80).
  • μ»¨ν…μŠ€νŠΈ 경둜: ν—¬μŠ€μ²΄ν¬ κ²½λ‘œμ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ΄λ¦„μ΄λ‚˜ μ»¨ν…μŠ€νŠΈ κ²½λ‘œκ°€ λˆ„λ½λ˜μ§€ μ•Šμ•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.

4. νŠΈλŸ¬λΈ”μŠˆνŒ…(Troubleshooting)

ν”„λ‘œμ νŠΈ ꡬ성 쀑 λ°œμƒν•  수 μžˆλŠ” μ£Όμš” λ¬Έμ œμ™€ ν•΄κ²° λ°©λ²•μž…λ‹ˆλ‹€.

Case 1. Dockerfile λΉŒλ“œ μ—λŸ¬ (COPY λͺ…λ Ήμ–΄ 였λ₯˜)

  • 증상: failed to solve: dockerfile parse error: COPY requires at least two arguments
  • 원인: COPY λͺ…λ Ήμ–΄μ—μ„œ μ†ŒμŠ€ νŒŒμΌμ€ λͺ…μ‹œν–ˆμœΌλ‚˜ μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ˜ λͺ©μ μ§€ 경둜λ₯Ό λˆ„λ½ν•œ 경우 λ°œμƒν•©λ‹ˆλ‹€.
  • ν•΄κ²°: COPY <source> <destination> ν˜•μ‹μ„ μ§€μΌœ λͺ©μ μ§€ 경둜(예: app.jar)λ₯Ό λ°˜λ“œμ‹œ μΆ”κ°€ν•©λ‹ˆλ‹€.

Case 2. λ°μ΄ν„°λ² μ΄μŠ€ 접속 μ—λŸ¬ (Communications link failure)

  • 증상: Spring Boot λ‘œκ·Έμ— Connection refused λ˜λŠ” Communications link failure λ°œμƒ.
  • 원인: DBκ°€ 아직 μ€€λΉ„λ˜μ§€ μ•Šμ•˜κ±°λ‚˜, 잘λͺ»λœ 호슀트/포트둜 접속을 μ‹œλ„ν•  λ•Œ λ°œμƒν•©λ‹ˆλ‹€.
  • ν•΄κ²°:
    • docker-compose.yml의 depends_on에 condition: service_healthyλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
    • JDBC URL에 ?allowPublicKeyRetrieval=true&useSSL=false μ˜΅μ…˜μ„ μΆ”κ°€ν•˜μ—¬ 접속 μ•ˆμ •μ„±μ„ λ†’μž…λ‹ˆλ‹€.

Case 3. κΆŒν•œ μ—λŸ¬ λ˜λŠ” DB 미생성 (Access Denied)

  • 증상: μ§€μ •λœ 계정(user01)으둜 접속이 λ˜μ§€ μ•Šκ±°λ‚˜, μƒμ„±ν•œ λ°μ΄ν„°λ² μ΄μŠ€(fisa)λ₯Ό 찾을 수 μ—†λŠ” 경우.
  • 원인: 이전 μ‹€ν–‰μ—μ„œ μƒμ„±λœ Docker λ³Όλ₯¨(db_data)에 κ΅¬ν˜• μ„€μ • 데이터가 λ‚¨μ•„μžˆμ–΄ μƒˆλ‘œμš΄ 섀정이 λ°˜μ˜λ˜μ§€ μ•ŠλŠ” κ²½μš°μž…λ‹ˆλ‹€.
  • ν•΄κ²°: docker compose down -v λͺ…λ Ήμ–΄λ‘œ λ³Όλ₯¨λ°μ΄ν„°λ₯Ό μ™„μ „νžˆ μ‚­μ œν•œ ν›„ μž¬μ‹œμž‘ν•˜μ—¬ DBλ₯Ό μƒˆλ‘œ μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.

Case 4. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœκ°€ unhealthy둜 ν‘œμ‹œλ  λ•Œ

  • 증상: docker ps κ²°κ³Όμ—μ„œ app μ»¨ν…Œμ΄λ„ˆκ°€ unhealthy둜 λ‚˜νƒ€λ‚¨.
  • 원인: ν—¬μŠ€ 체크 κ²½λ‘œκ°€ 잘λͺ»λ˜μ—ˆκ±°λ‚˜ 포트 맀핑이 μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” κ²½μš°μž…λ‹ˆλ‹€.
  • ν•΄κ²°:
    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ Context Path (예: /emp/)κ°€ ν—¬μŠ€ 체크 URL에 ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
    • Dockerfile의 SERVER_PORT와 docker-compose.yml의 호슀트 포트 λ§€ν•‘(80:80)을 ν™•μΈν•©λ‹ˆλ‹€.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors