Spring Boot ์ฑ์ Docker๋ก AWS์ ๋ฐฐํฌํ๋ ์ ์ฒด ํ๋ฆ ์ ๋ฆฌ
๋ชฉ์ฐจ

Docker์ AWS๋ฅผ ์ฒ์ ์ ํ๋ฉด ๊ฐ์ฅ ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ์ด ์๋ค. “Docker๋ฅผ ์ฐ๋ ๊ฑด๊ฐ? AWS๋ฅผ ์ฐ๋ ๊ฑด๊ฐ?” ์ด ๋์ ๊ด๊ณ๋ถํฐ ์ค์ ๋ฐฐํฌ ํ๋ฆ๊น์ง ํ ๋ฒ์ ์ ๋ฆฌํด๋ณด์.
Docker
๐ ๋ชฉ์ฐจ๋์ปค๋?ํต์ฌ ๊ฐ๋ VM๊ณผ Docker ์ฐจ์ด๋ฐฐํฌํ๋ค๊ณ ๊ฐ์ ํ ๋๊ธฐ๋ณธ ๋ช ๋ น์ด์ฐธ๊ณ ๋งํฌ๐ ๋์ปค๋?์ปจํ ์ด๋ ๊ธฐ๋ฐ ๊ฐ์ํ ๋๊ตฌ (2013๋ ๋ฑ์ฅ)๋ฆฌ๋ ์ค์ ํ๋ก์ธ์ค ๊ฒฉ๋ฆฌ ๊ธฐ์ ์ ํ์ฉํด ์ฑ ์คํ ํ๊ฒฝ์ ์ปจ
dev-cloud.tistory.com
1. Docker๊ฐ ์ ํ์ํ๊ฐ?
Spring Boot ์ฑ์ด ๋ก์ปฌ์์๋ ์ ๋์๊ฐ๋๋ฐ, ์๋ฒ์ ์ฌ๋ฆฌ๋ฉด ๊ฐ์๊ธฐ ์ค๋ฅ๊ฐ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ฐ ๋ฌธ์ ๋ ๋๋ถ๋ถ ์คํ ํ๊ฒฝ ์ฐจ์ด ๋๋ฌธ์ ๋ฐ์ํ๋ค. Java ๋ฒ์ ์ด ๋ค๋ฅด๊ฑฐ๋, OS ํ๊ฒฝ์ด ๋ค๋ฅด๊ฑฐ๋, ํ๊ฒฝ ๋ณ์ ์ค์ ์ด ๋ฌ๋ผ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๊ฒ์ด๋ค.
“๋ด ์ปดํจํฐ์์ ๋๋๋ฐ?”
Docker๋ ๋ฐ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ๋ค.
Docker๋ ์ฑ๊ณผ ์คํ ํ๊ฒฝ์ ํ๋์ ์ด๋ฏธ์ง๋ก ๋ฌถ๋๋ค. ์ฆ, ์ด๋์ ์คํํ๋ ๋์ผํ ํ๊ฒฝ์ ๋ณด์ฅํ ์ ์๋ค.
Docker๋ฅผ ๋น์ ํ๋ฉด?
๋ ์ํผ(์ฝ๋)๋ง ์ ๋ฌํ๋ ๊ฒ ์๋๋ผ, ์ฃผ๋ฐฉ ํ๊ฒฝ๊น์ง ํต์งธ๋ก ๋ฐ์ค์ ๋ด์ ๋ณด๋ด๋ ๊ฐ๋ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
2. Docker์ AWS์ ์ฐจ์ด
๊ฐ์ฅ ๋ง์ด ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ์ด ๋ฐ๋ก ์ด๊ฒ์ด๋ค.
| ๊ตฌ๋ถ | ์ญํ |
|---|---|
| Docker | ์ฑ์ ํจํค์งํ๊ณ ์คํํ๋ ๋ฐฉ์ |
| AWS | ์๋ฒ, DB, ๋คํธ์ํฌ ๋ฑ์ ์ ๊ณตํ๋ ์ธํ๋ผ |
์ฆ, ๋ ์ค ํ๋๋ฅผ ์ ํํ๋ ๊ฐ๋ ์ด ์๋๋ค. AWS๋ผ๋ ์ธํ๋ผ ์์์ Docker ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๊ฒ์ด๋ค.
3. AWS ์๋น์ค ์ญํ ์ ๋ฆฌ
Spring Boot ํ๋ก์ ํธ๋ฅผ AWS๋ก ๋ฐฐํฌํ ๋ ์์ฃผ ์ฌ์ฉํ๋ ์๋น์ค๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
| ์๋น์ค | ์ญํ |
|---|---|
| EC2 | Docker ์ปจํ ์ด๋๊ฐ ์คํ๋๋ ์๋ฒ |
| RDS | MySQL ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ |
| ElastiCache | Redis ์บ์ ์๋ฒ ์ ๊ณต |
| S3 | ํ์ผ ์ ์ฅ์ |
| CloudFront | CDN ๊ธฐ๋ฐ ๋น ๋ฅธ ์ ์ ํ์ผ ๋ฐฐํฌ |
4. ์ ์ฒด ์ํคํ ์ฒ ํ๋ฆ
์ ์ฒด ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
๊ฐ๋ฐ์ ์ฝ๋ ์์ฑ
↓
Docker ์ด๋ฏธ์ง ๋น๋
↓
DockerHub ๋๋ ECR ์
๋ก๋
↓
EC2 ์๋ฒ์์ ์ด๋ฏธ์ง pull
↓
Docker ์ปจํ
์ด๋ ์คํ
↓
RDS / Redis / S3 ์ฐ๊ฒฐ
↓
์ฌ์ฉ์ ์์ฒญ ์ฒ๋ฆฌ
์ฌ์ฉ์์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด Spring Boot ์ฑ์ด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ํ์ํ ๊ฒฝ์ฐ RDS(MySQL), Redis, S3์ ํต์ ํ๊ฒ ๋๋ค.
5. Dockerfile ์์ฑ๊ณผ ๋ฐฐํฌ
Spring Boot ์ฑ์ Docker ์ด๋ฏธ์ง๋ก ๋ง๋ค๊ธฐ ์ํด Dockerfile์ ์์ฑํ๋ค.
Dockerfile ์์
# Build Stage
FROM eclipse-temurin:17-jdk-alpine AS builder
WORKDIR /app
COPY . .
RUN ./gradlew bootJar
# Run Stage
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
COPY --from=builder /app/build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
Docker ์ด๋ฏธ์ง ๋น๋
docker build -t my-spring-app .
DockerHub ์ ๋ก๋
docker push your-dockerhub-id/my-spring-app
EC2์์ ์คํ
docker pull your-dockerhub-id/my-spring-app
docker run -d -p 80:8080 your-dockerhub-id/my-spring-app
application.yml ์์
spring:
datasource:
url: ${SPRING_DATASOURCE_URL}
username: ${SPRING_DATASOURCE_USERNAME}
password: ${SPRING_DATASOURCE_PASSWORD}
data:
redis:
host: ${SPRING_REDIS_HOST}
port: 6379
6. ๋ฐฐํฌ ๋ฐฉ์ ๋น๊ต
| ๋ฐฉ์ | ์ฅ์ | ๋จ์ |
|---|---|---|
| JAR ์ง์ ๋ฐฐํฌ | ๋จ์ํ๋ค | ํ๊ฒฝ ์ฐจ์ด ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ |
| Docker ๋ฐฐํฌ | ํ๊ฒฝ ์ผ๊ด์ฑ ๋ณด์ฅ | Docker ํ์ต ํ์ |
| Docker Compose | ์ฌ๋ฌ ์ปจํ ์ด๋ ๊ด๋ฆฌ ํธ๋ฆฌ | ์ด์ ํ๊ฒฝ์์ ๊ด๋ฆฌ ํ์ |
| PaaS (Railway ๋ฑ) | ๋ฐฐํฌ๊ฐ ๋งค์ฐ ์ฝ๋ค | ์ปค์คํฐ๋ง์ด์ง ์ ํ |
Docker Compose ์์
version: '3.8'
services:
app:
image: my-spring-app
ports:
- "80:8080"
db:
image: mysql:8
redis:
image: redis:7
7. ๋ง์น๋ฉฐ
Docker๋ ์ฑ์ ์ด๋ป๊ฒ ํจํค์งํ ์ง ๊ฒฐ์ ํ๋ ๊ธฐ์ ์ด๊ณ , AWS๋ ๊ทธ ์ปจํ ์ด๋๊ฐ ์ค์ ๋ก ์คํ๋๋ ์ธํ๋ผ๋ค. ๋์ ๊ฒฝ์ ๊ด๊ณ๊ฐ ์๋๋ผ ํจ๊ป ์ฌ์ฉํ๋ ์กฐํฉ์ด๋ค.
- Docker๋ ์คํ ํ๊ฒฝ์ ํต์งธ๋ก ํจํค์งํ๋ค
- AWS๋ ์๋ฒ์ ์ธํ๋ผ๋ฅผ ์ ๊ณตํ๋ค
- Spring Boot + Docker + AWS ์กฐํฉ์ ์ค๋ฌด์์๋ ๋งค์ฐ ๋ง์ด ์ฌ์ฉ๋๋ค
- ๋ค์ ๋จ๊ณ๋ก๋ GitHub Actions๋ฅผ ์ด์ฉํ CI/CD ์๋ ๋ฐฐํฌ๊น์ง ๊ณต๋ถํด๋ณด๋ฉด ์ข๋ค.
'๐ CS & Infra > Infrastructure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Docker (0) | 2026.03.10 |
|---|