Docker Network ๋์: DB ์ฐ๊ฒฐ์ localhost ๋์ ์๋น์ค ์ด๋ฆ์ ์ฌ์ฉํด์ผ ํ๋ ์ด์
spring.datasource.url=jdbc:mysql://my-db:3306/mydb
spring.datasource.username=root
spring.datasource.password=pwd123
spring.datasource.driver-class-name=cohttp://m.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
DB ์ฐ๊ฒฐ ๋ฌธ์์ด์์ ํํ ๋ณผ ์ ์๋ ํจํด ์ค ํ๋๋ localhost:3306๊ณผ ๊ฐ์ ํํ๋ค. ๊ทธ๋ฌ๋ Docker ํ๊ฒฝ์ผ๋ก ์ ํํ ๋ ์ด ํจํด์ ๊ธฐ๋์ ๊ฐ์ด ๋์ํ์ง ์์ผ๋ฉฐ, localhost ๋์ ํด๋น ์๋น์ค ์ด๋ฆ์ ์ฌ์ฉํด์ผ ํ๋ค. ์ด ๊ธ์์ ๊ทธ ์ด์ ๋ฅผ Docker์ ๋คํธ์ํน ์๋ฆฌ๋ฅผ ํตํด ์์๋ณด๋ ค ํ๋ค.
๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์์ ์ฐ๊ฒฐ
๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ localhost๋ ์์ ์ ์ปดํจํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ํน๋ณํ ํธ์คํธ๋ช ์ด๋ค. ์ด๋ IP ์ฃผ์ 127.0.0.1์ ๋งคํ๋๋ฉฐ, ๋ฃจํ๋ฐฑ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋์ํ๋ค.
jdbc:mysql://localhost:3306/mysql
jdbc:mysql://127.0.0.1:3306/mysql
์ ๋ ์ฐ๊ฒฐ ๋ฌธ์์ด์ ๊ธฐ๋ฅ์ ์ผ๋ก ๋์ผํ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
- OS์ ํธ์คํธ ํ์ผ(/etc/hosts) ๋๋ DNS ๋ฆฌ์กธ๋ฒ๊ฐ localhost๋ฅผ 127.0.0.1๋ก ํด์
- ๋ฃจํ๋ฐฑ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ก์ปฌ ์ปดํจํฐ ๋ด์์ ํจํท ์ ์ก
- ๋คํธ์ํฌ ์นด๋(NIC)๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ด๋ถ์ ์ผ๋ก ์ง์ ํต์
- MySQL ์๋ฒ๊ฐ 3306 ํฌํธ์์ ๋๊ธฐ ์ค์ด๋ฉด ์ฐ๊ฒฐ ์ฑ๊ณต
MySQL ์๋ฒ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ์์๊ฒ ํธ์คํธ ๊ธฐ๋ฐ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๋๋ฐ, root ์ฌ์ฉ์๋ ์ผ๋ฐ์ ์ผ๋ก localhost์์๋ง ์ ์์ด ๊ฐ๋ฅํ๋๋ก ์ค์ ๋๋ค. ์ด๋ก ์ธํด ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ localhost ๋๋ 127.0.0.1์ ํตํ ์ ์์ ํ์ฉ๋์ง๋ง, ๋ค๋ฅธ IP ์ฃผ์๋ฅผ ํตํ ์ ์์ ๋ณ๋์ ๊ถํ ์ค์ ์์ด๋ ๋ถ๊ฐ๋ฅํ๋ค.
Docker ํ๊ฒฝ์ ๋คํธ์ํฌ ๊ตฌ์กฐ
Docker๋ ๋ฆฌ๋ ์ค ์ปค๋์ ๋ค์์คํ์ด์ค(namespace) ๊ธฐ์ ์ ํ์ฉํด ๊ฐ ์ปจํ ์ด๋์ ๋ ๋ฆฝ์ ์ธ ๋คํธ์ํฌ ํ๊ฒฝ์ ์ ๊ณตํ๋ค. ์ด ๋๋ฌธ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ๋ค๋ฅธ ์ค์ ์ด ํ์ํด์ง๋ค.
1. ์ปจํ ์ด๋ ๊ฒฉ๋ฆฌ์ ๋คํธ์ํฌ ๋ค์์คํ์ด์ค
Docker๋ ๋ฆฌ๋ ์ค ์ปค๋์ ๋ค์์คํ์ด์ค(namespace)๋ฅผ ์ฌ์ฉํด ๊ฐ ์ปจํ ์ด๋์ ๋ ๋ฆฝ์ ์ธ ๋คํธ์ํฌ ์คํ์ ์ ๊ณตํ๋ค.
- ๊ฐ ์ปจํ ์ด๋๋ ์์ฒด ๋คํธ์ํฌ ์ธํฐํ์ด์ค, ๋ผ์ฐํ ํ ์ด๋ธ, IP ์ฃผ์๋ฅผ ๊ฐ์ง๋ค.
- ์ปจํ ์ด๋ ๋ด๋ถ์์ localhost๋ ํญ์ ํด๋น ์ปจํ ์ด๋ ์์ ๋ง์ ๊ฐ๋ฆฌํจ๋ค.
- ์ฆ, ๋ค๋ฅธ ์ปจํ ์ด๋๋ ํธ์คํธ ๋จธ์ ์ ๊ฐ๋ฆฌํค์ง ์๋๋ค.
๋๋ฌธ์ Docker ํ๊ฒฝ์์ localhost:3306์ผ๋ก MySQL์ ์ฐ๊ฒฐํ ์ ์๋ ์ด์ ์ด๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋์์ ํด๋น ์ฃผ์๋ก ์ฐ๊ฒฐ์ ์๋ํ๋ฉด, ์ค์ ๋ก๋ ์๊ธฐ ์์ ์ 3306 ํฌํธ์ ์ฐ๊ฒฐ์ ์๋ํ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ์ ์๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋ ๋ด๋ถ์ 3306 ํฌํธ๊ฐ ์๋ MySQL ์ปจํ ์ด๋ ๋ด 3306 ํฌํธ๋ก์ ์ฐ๊ฒฐ์ด๋ค. ๋ฐ๋ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์ MySQL์ฐ๊ฒฐ์ ์คํจํ๊ฒ ๋๋ค.
2. Docker์ ๋ด์ฅ DNS ํด์ ์์คํ
Docker๋ ๋ด์ฅ DNS ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ์ด๋ฆ๊ณผ ์๋น์ค ์ด๋ฆ์ IP ์ฃผ์๋ก ๋ณํํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋ → "my-db" ์์ฒญ → Docker DNS → my-db ์ปจํ ์ด๋์ IP(ex: 172.18.0.3)
- ๋ชจ๋ ์ปจํ ์ด๋๋ Docker DNS ์๋ฒ๋ฅผ ์ฌ์ฉํ๋๋ก /etc/resolv.conf๊ฐ ์๋ ๊ตฌ์ฑ๋๋ค.
- ๋ด์ฅ DNS๋ ์๋น์ค ์ด๋ฆ์ ์ปจํ ์ด๋ IP๋ก ๋ณํํ๋ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ ์งํ๋ค.
- IP ์ฃผ์๊ฐ ๋ฐ๋์ด๋(ex: ์ปจํ ์ด๋ ์ฌ์์) DNS ํด์์ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋๋ค.
3. Docker Compose์ ์๋ ๋คํธ์ํฌ ๊ตฌ์ฑ
Docker Compose๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ผ๋ก ๋ชจ๋ ์๋น์ค๋ฅผ ์ํ ๊ธฐ๋ณธ ๋ธ๋ฆฟ์ง ๋คํธ์ํฌ๊ฐ ์์ฑ๋๋ค.
- ๊ฐ ์ปจํ ์ด๋์ ๋ด๋ถ IP ์ฃผ์๊ฐ ํ ๋น๋๋ค.
- ๋ชจ๋ ์ปจํ ์ด๋๋ ์ด ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋์ด ์๋ก ํต์ ํ ์ ์๋ค.
- Docker Compose๋ ๋ด์ฅ DNS ์๋ฒ๋ฅผ ๊ตฌ์ฑํ์ฌ ์๋น์ค ์ด๋ฆ์ ์ปจํ ์ด๋ IP ์ฃผ์๋ก ์๋ ํด์ํ๋ค.
์ค์ ์๋ ๋ฐฉ์ ์์
Docker Compose ํ๊ฒฝ์์์ ์ค์ ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ด ์ค์ ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํด๋ณด์.
์๋น์ค ์ด๋ฆ(my-db)์ ์ฌ์ฉํ ๊ฒฝ์ฐ
- my-server ์ปจํ ์ด๋๊ฐ my-db:3306์ ์ฐ๊ฒฐ ์๋
- Docker์ ๋ด์ฅ DNS๊ฐ my-db๋ฅผ ์ค์ IP ์ฃผ์(ex: 172.18.0.3)๋ก ๋ณํ
- ์ฐ๊ฒฐ์ด 172.18.0.3:3306์ผ๋ก ๋ผ์ฐํ ๋จ
- ์ด ์ฃผ์๋ MySQL ์ปจํ ์ด๋์ ์ค์ IP์ ํฌํธ๋ฅผ ๊ฐ๋ฆฌํด
localhost๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ - ์คํจ
- ์ฐ๊ฒฐ์ด 127.0.0.1:3306(์๊ธฐ ์์ )์ผ๋ก ์๋๋จ
- my-server ์ปจํ ์ด๋์๋ MySQL์ด ์คํ๋๊ณ ์์ง ์์ผ๋ฏ๋ก ์ฐ๊ฒฐ ์คํจ
์ ๋ฆฌ
Docker ํ๊ฒฝ์์ MySQL๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ ๋๋ localhost ๋์ ์๋น์ค ์ด๋ฆ์ ์ฌ์ฉํด์ผ ํ๋ค. ์ด๋ Docker์ ๋คํธ์ํฌ ๊ฒฉ๋ฆฌ์ ๋ด์ฅ DNS ์์คํ ๋๋ฌธ์ด๋ค. ๊ฐ ์ปจํ ์ด๋๋ ๋ ๋ฆฝ๋ ๋คํธ์ํฌ ํ๊ฒฝ์ ๊ฐ์ง๋ฉฐ, localhost๋ ํญ์ ์ปจํ ์ด๋ ์์ ์ ๊ฐ๋ฆฌํค๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ปจํ ์ด๋์ ์ ๊ทผํ๋ ค๋ฉด ์๋น์ค ์ด๋ฆ์ ์ฌ์ฉํด์ผ ํ๋ค.