jscode
@jscode
Students
31,154
Reviews
2,293
Course Rating
4.9
Posts
Q&A
Redis 볼륨 설정?
안녕하세요 ! 질문 너무 잘해주셨어요 !질문해 주신 내용에 대해 답변드려볼게요 ~"실무에서도 compose.yml 작성할 때 MySQL은 볼륨 설정을 하고, Redis는 볼륨 설정을 안 하는 편인가요?"-> 우선 실무에서 Redis 볼륨 설정을 하는지 안 하는지는 Redis를 어떤 용도로 사용하는지에 따라 달라져요 !Redis는 기본적으로 인메모리(In-Memory) 데이터 저장소이기 때문에 캐시 용도로 사용하는 경우가 대부분이에요 !캐시 데이터는 말 그대로 임시 데이터이기 때문에 컨테이너가 삭제되더라도 다시 만들어지면 되는 데이터라서 볼륨 설정을 따로 하지 않는 경우가 많아요 ~반면에 MySQL은 영구적으로 보존해야 하는 데이터를 저장하는 용도이기 때문에 컨테이너가 삭제되더라도 데이터가 유지되어야 해서 볼륨 설정을 해주는 것이에요 !다만 Redis를 단순 캐시가 아니라 세션 저장소나 메시지 큐 등의 용도로 사용하면서 데이터를 영구적으로 보존해야 하는 상황이라면 Redis에도 볼륨 설정을 해주는 것이 좋아요 !정리하자면 Redis를 캐시 용도로만 쓴다면 볼륨 설정 없이 사용해도 무방하고, 데이터를 영구적으로 보존해야 하는 용도라면 볼륨 설정을 해주시면 돼요 !추가로 궁금하신 점 있으시면 언제든 편하게 질문 남겨주세요~~
- 0
- 2
- 34
Q&A
기출문제 공부해서 시험은 붙는다해도
안녕하세요! 추가 질문 잘 해주셨어요 ~질문해 주신 내용에 대해 답변드려볼게요 ~ "실무적인 능력은 어떻게 배양해야할까요..? 조언부탁드립니다. 클라우드 엔지어가 되거나 이런게 목적은 아니고 창업할때 활용하고싶습니다."-> 창업에 활용하시는 게 목표라면, 사실 모든 AWS 서비스를 깊게 파실 필요는 없어요 !창업 시에 실제로 자주 쓰게 되는 핵심 서비스들 위주로 직접 구축해보시는 게 가장 효과적이에요~~예를 들어 웹 서비스를 만든다고 가정하면, EC2에 서버를 올리고, RDS로 DB를 연결하고, S3에 이미지를 저장하고, Route53으로 도메인을 연결하고, CloudFront로 정적 파일을 빠르게 전송하고, ELB로 로드밸런싱을 구성하는 이런 흐름을 직접 한 번 구축해보시는 게 제일 좋아요 !자격증 공부를 통해 각 서비스가 어떤 역할을 하는지 큰 그림을 이해하셨다면, 그 다음 단계는 실제로 AWS 콘솔에서 하나하나 직접 만들어보시면서 감을 잡아가시는 거예요 !처음에는 간단한 웹 애플리케이션을 하나 만들어서 AWS 위에 배포해보시는 것부터 시작하시면 좋아요 ~ 만약 혼자 공부하시는 게 힘드시다면 '비전공자도 이해할 수 있는 AWS 입문/실전' 강의를 들어보셔도 좋을 것 같아요! 이 강의가 실제 서비스를 배포하는 데 초점을 맞추고 있어서 창업을 하시는 분들한테도 직접적으로 도움이 되는 강의에요~!!참고로 창업 초기에는 비용도 중요한 부분인데, AWS 프리 티어를 잘 활용하시면 초기 비용 부담 없이 연습하실 수 있어요 :) 추가로 궁금하신 점 있으시면 언제든 편하게 질문 남겨주세요~~
- 0
- 2
- 24
Q&A
45강 문제 9번 질문드립니다
안녕하세요! 추가 질문 잘 해주셨어요 ~질문해 주신 내용에 대해 답변드려볼게요 ~D도 확장성을 확보할 수 있는 방법이긴 해요 !하지만 이 문제의 핵심 키워드는 "운영 부담을 줄이면서" + "비용을 최적화"하는 것이에요 !D의 경우 Auto Scaling으로 EC2 인스턴스를 늘리면 확장성은 확보되지만, 결국 EC2 인스턴스를 직접 관리해야 한다는 점에서 운영 부담이 '여전히' 존재해요 !반면 C의 서버리스 아키텍처(API Gateway + Lambda + DynamoDB + S3)는 서버를 직접 관리할 필요가 없어서 운영 부담이 대폭 줄어들고, 트래픽에 따라 자동으로 확장되면서 사용한 만큼만 비용을 지불하기 때문에 비용 최적화에도 더 적합하죠 :)정리하면 D는 "확장성 확보"는 가능하지만 "운영 부담 감소"와 "비용 최적화"라는 조건까지 함께 만족시키기 어렵기 때문에 C가 더 '적절한' 답이 되는 거예요:)추가로 궁금하신 점 있으시면 언제든 추가 질문 남겨주세요~~
- 0
- 1
- 19
Q&A
컨테이너의 IP
안녕하세요! 추가 질문 잘 해주셨어요 ~질문해 주신 내용에 대해 답변드려볼게요 ~ "컨테이너의 IP 정보가 없는데, 어떻게 매핑이 되나요? 컨테이너가 여러 개이고, 모두 동일한 포트를 쓰면 구분이 안가잖아요."-> 결론부터 말씀드리면, -p 옵션을 사용한 포트 매핑에서는 컨테이너 IP를 신경 쓸 필요가 없어요 !그 이유는 Docker가 내부적으로 알아서 처리해주기 때문인데요, docker run 명령어로 컨테이너를 생성하면 Docker가 자동으로 해당 컨테이너에 내부 IP(예: 172.17.0.2)를 할당해줘요 !그리고 -p 4000:80 옵션을 주면 Docker가 "호스트의 4000번 포트로 들어오는 요청을 이 컨테이너의 80번 포트로 보내줘"라는 규칙을 자동으로 만들어주는 거예요 !이 과정에서 Docker는 해당 컨테이너의 내부 IP를 이미 알고 있기 때문에 우리가 직접 IP를 지정하지 않아도 알아서 매핑이 돼요 ! "컨테이너가 여러 개이고, 모두 동일한 포트를 쓰면 구분이 안가잖아요."-> 이 부분도 걱정하지 않으셔도 돼요 !nginx 컨테이너를 3개 띄운다고 하면 아래처럼 호스트 포트를 다르게 지정해주면 돼요 !각 컨테이너는 독립적인 네트워크 네임스페이스를 가지고 있어서 구분이 돼요 !docker run -d -p 4000:80 nginx # 컨테이너1: IP 172.17.0.2docker run -d -p 5000:80 nginx # 컨테이너2: IP 172.17.0.3docker run -d -p 6000:80 nginx # 컨테이너3: IP 172.17.0.4이렇게 실행하면 세 개의 컨테이너가 모두 내부적으로는 80번 포트를 사용하지만, 각각 다른 IP 주소를 받아요 ~그리고 호스트의 4000, 5000, 6000번 포트가 각 컨테이너의 80번 포트로 매핑되는 거죠 !Docker는 "호스트 4000번으로 들어온 요청은 172.17.0.2:80으로 보내고, 5000번으로 들어온 요청은 172.17.0.3:80으로 보내자"라고 내부적으로 라우팅 규칙을 만들어줘요 !즉, 컨테이너끼리는 내부 IP가 다르기 때문에 Docker 입장에서는 구분이 가능하고, 외부에서 접근할 때는 호스트 포트 번호로 구분하는 구조인 거죠!정리하면, 컨테이너의 IP는 Docker가 자동으로 관리해주는 영역이라 우리가 직접 지정하거나 신경 쓸 필요 없이, 호스트 포트만 다르게 설정해주면 여러 컨테이너도 문제없이 사용할 수 있어요 :) 추가로 궁금하신 점 있으시면 언제든 편하게 추가 질문 남겨주세요~~
- 0
- 2
- 27
Q&A
명령어 어디에 있나요?
안녕하세요 현주님! 노션 강의 자료에서 찾으셨다니 다행이네요:)학습하시다 또 막히시는 점 있으면 언제든 질문 남겨주세요~~
- 0
- 3
- 31
Q&A
compose.yml 관리
안녕하세요 ! 질문 너무 잘해주셨어요 !질문해 주신 내용에 대해 답변드려볼게요 ~"현업에선 compose.yml도 .env와 마찬가지로 .gitignore에 추가하나요?"-> compose.yml 자체는 보통 Git에 포함시켜요 !compose.yml은 어떤 서비스들을 어떻게 구성할지에 대한 설정 파일이기 때문에 팀원들과 공유가 필요하거든요 ~다만 compose.yml 안에 비밀번호 같은 민감한 정보가 있다면, 그 값들을 .env 파일로 분리해서 .env만 .gitignore에 추가하는 방식을 많이 사용해요 !예를 들어 compose.yml에서 MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} 이런 식으로 환경 변수를 참조하고, 실제 값은 .env 파일에 넣어두는 거예요 ! "만약 RDS를 사용한다면 MySQL에 관련된 것은 도커 컨테이너에 띄우지 않는다고 이해했는데 맞나요?"-> 네, 맞아요 ! RDS를 사용하면 AWS에서 MySQL을 관리해주기 때문에 compose.yml에서 MySQL 관련 서비스는 빼고, Spring Boot의 application.yml에서 DB 접속 정보를 RDS의 엔드포인트 주소로 변경하면 돼요 !강의에서 Docker 컨테이너로 MySQL을 띄운 건 학습 목적이고, 실제 운영 환경에서는 RDS처럼 관리형 서비스를 사용하는 경우가 많아요 :) "ECR 리포지토리도 삭제하지 않는다면 비용이 발생할까요?"-> ECR은 저장된 이미지의 용량에 따라 스토리지 비용이 발생해요 !프리 티어 기준으로 월 500MB까지는 무료이기 때문에, 실습 수준의 이미지라면 크게 걱정하지 않으셔도 돼요 ~하지만 실습이 끝났다면 불필요한 이미지는 삭제해 주시는 게 좋아요 :)추가로 궁금하신 점 있으시면 언제든 편하게 질문 남겨주세요~~
- 0
- 2
- 33
Q&A
도커 이미지를 만들 때 application.yml
안녕하세요 ! 질문 너무 잘해주셨어요 !질문해 주신 내용에 대해 답변드려볼게요 ~말씀해 주신 것처럼 강의에서는 학습 목적으로 application.yml에 DB 비밀번호 등의 정보를 직접 넣어서 이미지를 빌드했는데요, 현업에서는 기업에 따라 다르게 결정하는 경우가 많아요!application.yml에 민감한 정보를 넣는다고 하더라도 Docker 이미지를 private으로 관리하면 크게 문제될 건 없습니다!하지만 보안에 더 민감하게 대처하는 기업에서는 이미지 안에 application.yml이 포함되어 있으면, 해당 이미지에 접근할 수 있는 사람이라면 컨테이너 내부에서 파일을 확인하거나 이미지 레이어를 분석해서 민감한 정보를 볼 수 있기 때문에 보안상 좋지 않다고 판단해요~!!그래서 보안에 민감한 기업에서는 주로 환경 변수를 활용하는 방식을 많이 사용해요 !예를 들어 compose.yml의 environment에 DB 접속 정보를 넣어두거나, Spring Boot의 환경 변수 주입 기능을 활용해서 민감한 정보를 외부에서 주입하는 방식이에요 !이 외에도 AWS Secrets Manager, HashiCorp Vault 같은 별도의 비밀 관리 도구를 활용하기도 해요 ~추가로 궁금하신 점 있으시면 언제든 편하게 질문 남겨주세요~~
- 0
- 2
- 29
Q&A
ECR 리포지토리에 이미지가 3개가 보입니다.
안녕하세요 ! 질문 너무 잘해주셨어요 !질문해 주신 내용에 대해 답변드려볼게요 ~결론부터 말씀드리면, 잘못된 게 아니니 걱정 안 하셔도 돼요 !이미지가 3개로 보이는 이유는 Docker 이미지의 구조 때문이에요 ~Docker 이미지는 하나의 덩어리가 아니라 여러 개의 레이어로 구성되어 있는데요, 첨부해 주신 이미지를 보시면 "Image Index" 유형 1개와 "Image" 유형 2개가 있는 걸 확인하실 수 있어요 !Image Index는 멀티 플랫폼을 지원하기 위한 매니페스트 목록이고, 나머지 Image들은 실제 이미지 레이어들이에요 !이렇게 하나의 이미지를 push하더라도 내부적으로는 여러 항목으로 나뉘어서 저장되기 때문에 3개로 보이는 거예요~~그리고 맥 명령어를 사용하신 부분도 문제가 되지 않아요 !ECR에 push하는 명령어 자체는 맥이나 윈도우나 동일하게 동작하기 때문에 그 부분은 신경 쓰지 않으셔도 돼요 !latest 태그가 잘 붙어있고 이미지 크기도 정상적으로 표시되고 있으니, push가 정상적으로 완료된 상태에요 :)이 외로 궁금하신 점 있으시면 또 질문 남겨주세요~~
- 0
- 2
- 35
Q&A
32강 4번 문제 질문드립니다.
안녕하세요 ! 질문 너무 잘해주셨어요 !질문해 주신 내용에 대해 답변드려볼게요 ~문제 4를 보시면 S3와 DynamoDB뿐만 아니라 CloudWatch와 같은 "다양한 AWS 서비스"에 접근해야 한다고 되어 있어요 ! CloudWatch 같은 서비스는 게이트웨이 VPC 엔드포인트를 지원하지 않고, 인터페이스 VPC 엔드포인트를 통해서만 프라이빗하게 접근할 수 있어요 !정리하자면 게이트웨이 VPC 엔드포인트는 S3와 DynamoDB 이 2가지 서비스만 지원해요 !반면에 인터페이스 VPC 엔드포인트는 CloudWatch, SQS, SNS 등 그 외의 대부분의 AWS 서비스를 지원해요 !그리고 S3도 인터페이스 VPC 엔드포인트로 연결이 가능해요 !그래서 문제 4처럼 여러 종류의 AWS 서비스에 프라이빗하게 접근해야 하는 상황에서는 인터페이스 VPC 엔드포인트가 정답이 되는 거예요 :)추가로 궁금하신 점 있으시면 언제든 편하게 질문 남겨주세요~~
- 0
- 1
- 42
Q&A
Docker Desktop 설치 관련 질문드립니다!
안녕하세요 ! 질문 너무 잘해주셨어요 !질문해 주신 내용에 대해 답변드려볼게요 ~connectex 오류는 kubectl과 쿠버네티스 클러스터 간의 버전 호환 문제 때문에 발생한 것으로 보이네요 !kubectl은 클러스터의 마이너(minor) 버전 차이가 1 이내에 있는 버전을 사용해야 해요 ~예를 들어 클러스터가 v1.34라면 kubectl은 v1.33, v1.34, v1.35를 사용할 수 있는 식이에요!다만 kubectl 1.35를 공식 페이지에서 별도로 다운받으셨을 때 connectex 오류가 발생한 건, kubectl 자체의 버전 문제라기보다는 kubectl이 바라보는 클러스터 주소 설정(kubeconfig)이 제대로 잡히지 않았을 가능성이 높아요 !Docker Desktop에서 Kubernetes를 활성화하면 kubeconfig가 자동으로 설정되는데, 별도로 kubectl을 설치하면 이 설정이 연결되지 않아서 오류가 나는 경우가 있거든요 !그래서 Docker Desktop에서 Enable Kubernetes를 활성화한 뒤 자동으로 설치된 kubectl 1.34를 사용하시는 게 가장 안정적이에요 !정상 확인되셨다면 그대로 진행하시면 돼요 :)추가로 궁금하신 점 있으시면 언제든 편하게 질문 남겨주세요 ~
- 0
- 2
- 30




