windows 기준이고, docker desktop이 설치가 되어 있어야 합니다.
1. docker-compose.yml
version: '3.8'
services:
# Redis 설정
redis:
image: redis:latest
container_name: redis
ports:
- "6379:6379"
command: redis-server --requirepass mypassword --save 60 1000 # 60초 동안 1000번 이상 변경시 스냅샷 저장
restart: unless-stopped
volumes:
- redis-data:/data
# MongoDB 설정
mongodb:
image: mongo:latest
container_name: mongodb
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: rootpassword
MONGO_INITDB_DATABASE: mydatabase
volumes:
- mongodb-data:/data/db
- mongodb-config:/data/configdb
restart: unless-stopped
# MySQL 설정
mysql:
image: mysql:latest
container_name: mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydatabase
MYSQL_USER: user
MYSQL_PASSWORD: userpassword
MYSQL_AUTHENTICATION_PLUGIN: mysql_native_password
volumes:
- mysql-data:/var/lib/mysql
- mysql-config:/etc/mysql/conf.d
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: unless-stopped
kafka:
image: apache/kafka:latest
container_name: kafka
ports:
- "9092:9092"
environment:
# KRaft 모드 필수 설정
CLUSTER_ID: MkU3OEVBNTcwNTJENDM2Qk
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: broker,controller
# 컨트롤러 설정
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
# 리스너 설정 (내부/외부 통신용)
KAFKA_LISTENERS: PLAINTEXT://kafka:9092,CONTROLLER://kafka:9093
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
volumes:
- kafka-data:/var/lib/kafka/data
command: >
bash -c "
echo 'Initializing Kafka...' &&
/opt/kafka/bin/kafka-storage.sh format -t $${CLUSTER_ID} -c /opt/kafka/config/kraft/server.properties &&
echo 'Starting Kafka...' &&
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
"
restart: unless-stopped
# 볼륨 설정
volumes:
# Redis volumes
redis-data:
name: redis-data
# MongoDB volumes
mongodb-data:
name: mongodb-data
mongodb-config:
name: mongodb-config
# MySQL volumes
mysql-data:
name: mysql-data
mysql-config:
name: mysql-config
# Kafka volumes
kafka-data:
name: kafka-data
kafka-logs:
name: kafka-logs
2. 설치 / 실행
// 1. powershell 관리자 실행
// 2. docker.compose.yml이 있는 폴더로 이동
ex) cd C:\Users\my-account\IdeaProjects
// 3. 이미지 다운 and 컨테이너 실행
docker compose up -d
// 4. 그외 명령어
# 컨테이너 목록 확인
docker ps -a
# 컨테이너 로그 확인
docker logs [컨테이너명]
# 컨테이너 중지
docker stop [컨테이너명]
# 컨테이너 시작
docker start [컨테이너명]
# 컨테이너 삭제
docker rm [컨테이너명]
# 컨테이너 내부 접속
docker exec -it [컨테이너명] bash
3. application.yml
spring:
data:
# MongoDB 설정
mongodb:
uri: mongodb://root:rootpassword@localhost:27017/mydatabase
# Redis 설정
redis:
host: localhost
port: 6379
password: mypassword
# MySQL 설정
datasource:
url: jdbc:mysql://localhost:3306/mydatabase?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul
username: user
password: userpassword
driver-class-name: com.mysql.cj.jdbc.Driver
# JPA 설정
jpa:
hibernate:
ddl-auto: update # 개발환경에서만 사용
show-sql: true # 개발환경에서만 사용
properties:
hibernate:
format_sql: true
# Kafka 설정
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: my-group
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
properties:
auto.create.topics.enable: true
'개발 > 백엔드' 카테고리의 다른 글
Spring 대용량 엑셀 업로드 (0) | 2025.02.28 |
---|---|
Kotlin Spring의 장점과 코루틴 (0) | 2025.01.24 |
Spring Security OAuth (0) | 2025.01.07 |
Spring GraphQL (1) | 2025.01.06 |
빠르게 GraphQL 기본 개념 정리 (0) | 2025.01.06 |