해결된 질문
작성
·
52
·
수정됨
0
섹션 6에서 스프링부트,mysql,redis를 컨테이너 동시에 띄워보기에서
services:
my-server:
build: .
ports:
- 8080:8080
depends_on:
my-db:
condition: service_healthy
my-cache-server:
condition: service_healthy
my-db:
image: mysql:8.0
environment:
MYSQL_DATABASE: mydb # MySQL 최초 실행 시 mydb라는 데이터베이스를 생성해준다.
MYSQL_ROOT_PASSWORD: pwd1234
volumes:
- ./mysql_data:/var/lib/mysql
ports:
- 3306:3306
healthcheck:
test: ["CMD","mysqladmin","ping"]
interval: 5s
retries: 10
my-cache-server:
image: redis
ports:
- 6379:6379
healthcheck:
test: ["CMD","redis-cli","ping"]
interval: 5s
retries: 10
spring:
datasource:
url: jdbc:mysql://my-db:3306/mydb
username: root
password: pwd1234
driver-class-name: com.mysql.cj.jdbc.Driver
data:
redis:
host: my-cache-server
port: 6379
이렇게 설정을하면
그림대로 컨테이너가 3개가 띄워지고 서로 연결이되서 JPA를 사용해서 mysql에 데이터를 넣을수있는 구조거나 아무튼 applicaion.yml에 연결을 해놔서 서로 잘 연결되는건 이해를 했습니다.
그런데 섹션8은
1.스프링부트를 이미지로 만든다
2.그 이미지를 ec2에서 받아서 배포를한다 인데
여기서 ec2에서 직접 mkdir instagram-server 폴더를 만들고 그 안에 compose.yml을 직접 만드신후
services:
instagram-server:
image: 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest
ports:
- 8080:8080
depends_on:
my-db:
condition: service_healthy
my-cache-server:
condition: service_healthy
my-db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: pwd1234
MYSQL_DATABASE: mydb
volumes:
- ./mysql_data:/var/lib/mysql
ports:
- 3306:3306
healthcheck:
test: [ "CMD", "mysqladmin", "ping" ]
interval: 5s
retries: 10
my-cache-server:
image: redis
ports:
- 6379:6379
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 5s
retries: 10
이렇게 적으셨잖아요 이러면 mysql,redis도 같이 배포되는건 이해를했다만
1.섹션8스프링부트에서는 applicaion.yml에서 섹션 6처럼 디비 연동한것도없으니
서로 연결(mysql,redis,스프링부트)이안되어있는상태인가요?
2.그리고 섹션8 스프링부트에서는 간단한 api만 만들어서 테스트를했는데
섹션6에서 만든 프로젝트를 섹션8처럼 배포를한다고하면 applicaion.yml,compose.yml은 삭제해야하나요?
3.섹션8 프로젝트에서 applicaion.yml에 mysql db연동하고 jpa를 사용해서 DB에 데이터를 넣고뺴고,compose.yml에 서 컨테이너를 생성하고 이걸 로컬에서 한다고 하면 aws에 배포를 어떻게 해야하나요?
aws rds 사용한다고하면 이 mysql을 컨테이너로 띄우는게 틀린걸까요?...
섹션6 스프링부트,mysql,redis를 컨테이너 동시에 띄워보기 이거를 aws에 배포하는걸 보면 바로 이해할것같은데 알방법이 있을까요?ㅠ
답변 2
1
안녕하세요 다정님 ! 질문 잘해주셨습니다 ㅎㅎ
전혀 죄송하지 않으셔두 되요 :)
질문주신 내용들 하나씩 답변 드려 볼게요 ~
해당 질문에서 말씀하신 "섹션6 스프링부트,mysql,redis를 컨테이너 동시에 띄워보기"가
섹션7을 말씀하시는거 같아 섹션 7을 의미하신거라 생각하고 답변 드려볼게요 !
"섹션8스프링부트에서는 applicaion.yml에서 섹션 6처럼 디비 연동한것도없으니 서로 연결(mysql,redis,스프링부트)이안되어있는상태인가요?"
-> 네 맞습니다 ! 섹션 8에서는 compose를 사용해 여러 컨테이너(spring, mysql, redis)를 띄우기만 했어요 ~ Mysql과 Redis는 Spring과 연결은 되지 않은 상태이고, 단순히 스프링부트 이미지로 띄워진 스프링 컨테이너로 API의 동작만 확인해 봤어요 :)
" 섹션7에서 만든 프로젝트를 섹션8처럼 배포를한다고하면 applicaion.yml,compose.yml은 삭제해야하나요?"
-> 삭제하실 필요 없어요 ! application.yml은 그대로 사용해야 해요! 그래야 그 안에 MySQL, Redis 설정으로 Spring Boot가 연결할 수 있어요 ~ compose.yml은 EC2에서 사용하는 인프라 구성 도구에요 ! 로컬에서 쓰던 compose.yml을 삭제 하지 않아도 되요 :)
"섹션8 프로젝트에서 applicaion.yml에 mysql db연동하고 jpa를 사용해서 DB에 데이터를 넣고 빼고,compose.yml에 서 컨테이너를 생성하고 이걸 로컬에서 한다고 하면 aws에 배포를 어떻게 해야하나요?"
"섹션8처럼 EC2에 배포할 때, MySQL을 RDS로 쓴다면 compose에서 컨테이너로 띄우는 게 틀린 건가요?"
-> 다정님 께서 compose의 사용과 배포에 대해 혼란스러워 하시는것 같아요 ! 우선 EC2에 배포할 때 Mysql을 RDS로 쓰시는건 전혀 틀린게 아니라 오히려 권장하는 구조에요 :) 또한 구조와 상황에 따라 다르지만 실무에서 일반적으로 "ec2 내부에서 컨테이너로 생성하거나 실제 mysql(redis)"을 동작시켜 배포를 하진 않아요 !
compose는 한번에 편하게 다양한 컨테이너를 다룰수 있다 ! 정도만 알고 이해하시면 충분해요 ! compose는 로컬 환경을 편하고 빠르게 구축할때 주로 사용을 하고 실제 서비스 운영에서는 거의 대부분 사용하지 않아요 ~
"스프링부트,mysql,redis를 컨테이너 동시에 띄워보기 이거를 aws에 배포하는걸 보면 바로 이해할것같은데 알방법이 있을까요?"
-> 76강의 AWS EC2에 SpringBoot, MySQL, Redis 배포하기를 토대로 application.yml을 다정님 프로젝트에 맞게 작성만 하시면 되요 ! 섹션 9를 수강하시면 전체적인 큰 흐름을 잡으실수 있으실거에요 :)
추가로 궁금하신점 있으시면 편하게 질문주세요~~😄😄
-1
안녕하세요, 인프런 AI 인턴입니다. 임다정님.
Docker와 AWS를 활용하여 스프링 부트 애플리케이션을 배포하는 과정에서 궁금한 점이 많으신 것 같습니다. 질문해 주신 내용을 바탕으로 각 주제를 잘 정리해 보겠습니다.
섹션 8에서 application.yml 파일에 데이터베이스나 Redis와 같은 외부 서비스와의 연결 설정이 보이지 않아 혼란스러울 수 있습니다. 이것은 실제로는 설정이 필요하며, 배포 환경에 맞게 application.yml 또는 application.properties 파일에서 설정을 해야 합니다. 이는 로컬에서와 마찬가지로, EC2 상에서도 동일하게 적용되어야 JPA를 통해 MySQL에 접근할 수 있습니다.
application.yml과 compose.yml 파일은 프로젝트의 설정과 컨테이너 오케스트레이션을 관리하는 중요한 파일들입니다. 이 두 파일은 유지하고, 그 내용을 배포 환경에 맞게 조정해야 합니다. 특히, 데이터베이스 연동 정보 등은 AWS 환경에 맞게 수정해야 하며, 그러기 위해 AWS RDS와 같은 서비스를 활용하실 수도 있습니다.
RDS 사용 시: AWS RDS를 사용하게 되면 MySQL을 별도 컨테이너로 실행할 필요 없이 AWS가 제공하는 데이터베이스 인스턴스를 사용하게 됩니다. application.yml 파일에서 MySQL 연결 정보를 RDS 인스턴스 주소 및 인증 정보로 변경해야 합니다.
Redis와 같은 캐시 서비스 사용 시: 만약 Redis도 AWS의 ElastiCache와 같은 서비스를 사용한다면, 이에 대한 연결 정보 역시 application.yml 파일에서 설정해 주셔야 합니다.
스프링 부트와 데이터베이스, 캐시 서버에 대한 설정은 로컬 개발 환경과 클라우드 배포 환경이 다를 수 있습니다. 배포 환경에서는 클라우드 서비스(AWS RDS, ElastiCache 등)를 활용하여 인프라 관리를 최소화할 수 있고, 이에 맞춰 환경설정을 조정해야 합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
감사합니다!