도커 컴포즈를 배우면서 여러개의 컨테이너를 띄우고 spring에서 특정 db를 가리켜서 사용할 수 있는걸 이해했는데 이걸 ci&cd 배포를 추가한다고 치면 문제가 발생합니다. 제가 이해하기로는 docker compose는 build 부분에 도커파일을 넣게 되어 있는데 근데 이러면 ci&cd 할 때 스크립트 순서가 java 설치 -> checkout -> 빌드 -> jar파일, 도커 파일, 도커 컴포즈 파일 scp를 활용해 전달 -> ssh로 접근해서 도커 컴포즈 실행 이렇게 사용하면 이미지를 넣어두고 다른데서도 사용할 수 있어야 하는 그런 장점이 없어진다고 생각하는데 이걸 어떻게 배포를 해야 하는건가요? 제가 생각한 도커, 컴포즈 파일, jar 파일을 전달하고 해당 ec2에서 docker compose를 해야하는건가요??
동영상 강의에서 하신대로 my-first-docker 실행해서 docker run -p 5001:5000 my-first-docker를 실행하였습니다. 실행 되었다는 log를 보고, 영상에서와 같이 0.0.0.0:5001로 연결시도를 했는데, Address Invalid라고 나오네요.. 127.0.0.1:5001로 연결해 보니, "Welcome to the Docker Lecture App Thank you"가 나오네요.. 강의에서는 0.0.0.0으로 입력 되었는데.. 왜 전 안되는 걸까요?
kubectl apply -f https://github.com/storageos/cluster-operator/releases/download/1.5.0/storageos-operator.yaml namespace/storageos-operator unchanged clusterrole.rbac.authorization.k8s.io/storageos-operator configured serviceaccount/storageoscluster-operator-sa unchanged deployment.apps/storageos-cluster-operator unchanged resource mapping not found for name: " storageosclusters.storageos.com " namespace: "" from " https://github.com/storageos/cluster-operator/releases/download/1.5.0/storageos-operator.yaml ": no matches for kind "CustomResourceDefinition" in version "apiextensions.k8s.io/v1beta1" ensure CRDs are installed first resource mapping not found for name: " storageosupgrades.storageos.com " namespace: "" from " https://github.com/storageos/cluster-operator/releases/download/1.5.0/storageos-operator.yaml ": no matches for kind "CustomResourceDefinition" in version "apiextensions.k8s.io/v1beta1" ensure CRDs are installed first resource mapping not found for name: " jobs.storageos.com " namespace: "" from " https://github.com/storageos/cluster-operator/releases/download/1.5.0/storageos-operator.yaml ": no matches for kind "CustomResourceDefinition" in version "apiextensions.k8s.io/v1beta1" ensure CRDs are installed first resource mapping not found for name: " nfsservers.storageos.com " namespace: "" from " https://github.com/storageos/cluster-operator/releases/download/1.5.0/storageos-operator.yaml ": no matches for kind "CustomResourceDefinition" in version "apiextensions.k8s.io/v1beta1" ensure CRDs are installed first resource mapping not found for name: "storageoscluster-operator-rolebinding" namespace: "" from " https://github.com/storageos/cluster-operator/releases/download/1.5.0/storageos-operator.yaml ": no matches for kind "ClusterRoleBinding" in version "rbac.authorization.k8s.io/v1beta1" ensure CRDs are installed first 해당 오류가 StoragesOs Operator 설치할떄부터 발생하는거같은데 원인이 뭘까요 kubectl get all -n storageos 이 명령어로 설치확인이 안되서 의심가는 부분이 여기라 질문드립니다.
DevOps를 위한 Docker 가상화 기술 (Private Harbor Registry)
안녕하세요, Harbor+Jenkins 실습 중 문의사항이 생겨 질문 남깁니다. Jenkins에서 Harbor로 푸시를 할 때 에러가 발생해 확인해보니 https 관련 에러가 나는 것 같았습니다. 확인해보니 Harbor를 설치하고 며칠 뒤 실습을 진행해 host pc의 ip가 변경되었고, 이로 인해 문제가 발생하고 있었습니다. 이럴 경우, 매번 재설정을 해주는 것 외에 다른 해결법이 있을까요? 감사합니다.
공부를 하다가 궁금해진건데 예를 들어서 MYSQL을 사용하면 3306 포트를 호스트에 노출 시켜서 run하는 시점에 docker run -p 3306:3306 이렇게 매핑을 한다 쳤을 때 컨테이너 내부의 3306은 어떤 기준으로 열리게 된건지가 궁금합니다. 처음에는 프로그램마다 다를거라고 생각을 했습니다. MYSQL은 3306 포트를 열게하는 설정이 있다. 그리고 자바로 치면 application.yml을 보고 server.port을 참고하여 포트를 열어버린다? 근데 이렇게 생각하니까 외부 프로그램이 포트를 연다라는 발상을 하게 되는데 좀 이상한 것 같습니다. 또한 어떤 기준으로 포트가 열리는지 궁금합니다.
무슨 말인고 하니 똑같이 고의로 테스트를 실패하게 만들었는데 강사님 화면은 어디에서 테스트가 실패했는지 CI/CD 화면에서 보여주는데 제 화면은 스샷과 같이 안나옵니다. 강사님 화면에서는 github actions에서 아래의 화면처럼 테스트 실패 이유가 뜨는데 저는 안 떠요! =================================== 위의 사진은 저의 실제 코드 사진입니다. 제가 어디 잘못한게 있나요?
강사님과 같이 만들었습니다. 다만 제가 deploy.yml을 depoly.yml로 잘못 작성한거 빼고는 강사님과 같은데 설명에 .yml 앞의 이름은 상관 없다고 하셔서 큰 문제는 되지 않을거라고 생각합니다. 다만 사진과 같이 간단한 CI/CD 코드인데 2분이 넘도록 체크 표시가 안뜨는 문제가 있습니다. 제가 어떤 것을 잘못했을까요? 코드는 이렇게 작성했습니다.
self-signed certificate in certificate chain 발생합니다. 1번 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; 2번 // SSL 인증 무시를 위한 Agent 생성 const httpsAgent = new https.Agent({ rejectUnauthorized: false }); await axios.get("target_url", { httpsAgent: agent }); 1,2 번 외 해결 방법이 있을까요? 또는 2번을 적용하려면 어떻게 해야하나요? 또는 Java에서 로컬 톰캣 서버에서 HTTPS 설정하듯이 할수있는 방법이 있나요?
풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
안녕하세요. aws 의 용량부족이라 추가하고 mount 했고요. 순서대로 주피터노트북 연결까지는 성공을 했습니다. 그런데 !pip install pymysql 이 실행이 안되서, 도커연결 cmd 창에서 실행하니, pip가 없다고 나와서, sudo apt install python3-pip 로 인스톨을 하니 리부팅을 하라고 해서 리부팅까지 하고, 연결이 해제되고 docker ps 하니 실행되는게 없어서 다시 실행하고, 토큰 확인해서 다시 주피터 노트북연결해서 들어가고 나서 다시 !pip install pymysql을 실행하니까 안되네요. cmd 창에서 수행하니까, 에러가 나는데요, 확인해 보니 시스템이 관리하는 환경에서 직접적으로 패키지를 설치하려고 할 때 발생하는 거라, 이런 경우, Python 패키지를 설치하는 방법으로 가상 환경을 사용하거나 pipx 를 사용하라고 하는데요. 혹시 강의 중간에 제가 놓친 부분이 있는 걸까요? 가상환경으로 구축을 따로 해야 하는건지..??
안녕하세요. 강사님! 현재 AWS 강의를 잘 듣고 있는 학생입니다. 제가 Node.js / Nest.js를 주로 사용하고 있는데 강의 목록에 Nest에서 적용 할 수 있게 목록에 있더군요! 근데 Node에 대해서는 언급이 없는 것 같아서 Node에서도 적용 할 수 있게 해주는 내용이 강의에 있나요? 있다면 혹시 어느 목차에 있나요? 그리고 여러가지 언어에서 적용 할 수 있게끔 목록을 잘 나눠주셨더라고요! 혹시 필요한 부분만 듣고 나머지(ex_ 프론트 / 스프링 / etc..)들은 따로 안 들어도 제가 해당하는 부분만 들어도 적용과 이해에 무리가 없을까요?
안녕하세요. Docker Swarm 기반 마이크로서비스 아키텍처(MSA)를 구성 중입니다. 처음에는 Traefik 을 이용해 모든 내부 마이크로서비스 를 거치도록 (즉, serviceA가 serviceB를 호출할 때도 Traefik을 통해서만 통신) 운영하려고 했습니다. 그런데 그렇게 할 경우 아래와 같은 문제가 예상됩니다: 성능/오버헤드 모든 내부 트래픽이 Traefik을 중간에 두고 오가므로, 네트워크 홉이 추가됩니다. Keep-Alive 연결이 많아지고, Traefik이 병목이 될 가능성이 있음. 복잡한 설정 내부 수많은 서비스가 각각 Traefik의 라우터/서비스 규칙을 가져야 하므로 라벨 설정이 매우 복잡해질 수 있음. Path/Host 기반 라우팅 규칙도 내부 API 전부에 대해 관리해야 하므로 관리 부담 증가. 인증/인가가 불필요한 내부 통신 외부 노출이 전혀 필요 없는 내부 서비스 등까지도 Traefik을 거치는 것은 과도할 수 있음. 이러한 이유로, Traefik이 모든 트래픽을 일괄 처리 하는 대신, 내부 통신은 Docker Swarm 로드밸런싱 으로 처리하고, 외부 트래픽(HTTPS/도메인/인증서)은 Traefik 에 맡기는 구조로 변경하려고 합니다. 구체적으로는, Docker Swarm service 간에는 “user-service:8001” 식으로 연결 → Swarm 라운드 로빈 Keep-Alive나 오토스케일 시 컨테이너가 늘어나면 Swarm이 자동 분산 Traefik 오직 외부 접근이 필요한 Gateway나 public API에 대해서만 라벨(traefik.enable=true) 적용 HTTPS 인증서, Path/Host 라우팅, 미들웨어(인증/인가, IP 제한)를 외부 경계에서만 적용 내부적으로는 Swarm에 맡기고, Traefik은 외부→Gateway(혹은 외부→공개 서비스)만 처리 네트워크 분리 “public-net”: Traefik, Gateway 등 외부 노출이 필요한 서비스 “backend-net”: user-service 등 내부용 서비스만 존재, 외부와 직접 연결되지 않음 궁금한 점 위와 같은 구조(외부는 Traefik, 내부는 Swarm + 네트워크 분리) 가 흔히 권장되는 방식인가요? 내부 서비스까지 Traefik을 거치는 구조가 과연 득보다 실이 많을지 , 실제 운영 사례가 궁금합니다. 보안 측면 에서 “Traefik + Swarm ” 방식을 쓸 때 주의해야 할 점이나, 더 권장되는 패턴이 있으면 알려주세요! 감사합니다.
gradlew build 이후 compose up 했을 때 mysql만 올라오고 spring boot서버는 안올라오는 상황입니다. gui db로 접속하려고 하니 밑의 그림과 같이 뜹니다. 제가 직접 컨테이너에 접근하여 접속한 결과 다음과 같이 똑같은 id,pw로 로그인이 되는데 왜 gui환경에서만 로그인이 안되는 걸까요? root계정으로 접속 후 저 계정에 대한 비밀번호를 변경해보았습니다. root계정 접속 후 저 계정에 대한 모든 권한을 부여하였습니다. 차이점 application.yml파일에서 username: root로 실행하면 스프링부트도 잘 올라오는데 username:xoxoxmin1268 이런식으로 제 아이디를 넣으면 다음과 같은 로그 뜹니다.
안녕하세요 강사님. 강의 마지막에 API서브모듈에서 직접 MySQL로 여러 쓰레드가 JPA save를 통해 INSERT하는 과부하가 발생하던 것을 카프카를 통해서 처리량을 조절할 수 있다고 말씀하셨습니다. 카프카를 사용하는 것만으로도 처리량이 조절된다는 뜻이 잘 이해가 가지 않습니다. 특히 컨슈머서브모듈에서 보여지는 로그를 확인해보면 여전히 단 건으로 SQL들이 전송되는 것을 확인할 수 있었는데요. 배치방식으로 여러 SQL을 한데 모아 한번에 SQL횟수를 줄여주는 것을 기대했으나 그렇지 않아 어떤 원리로 처리량이 줄어드는 것인지 이해를 못했습니다ㅠㅠ
안녕하세요. 문제점 해결하기 강의에서 실습을 잘 진행했습니다. 실험을 하며 결과를 관측하던 중, @NoArgsConstructor(access = AccessLevel.PROTECTED) @RequiredArgsConstructor @Entity public class Coupon { @Id @GeneratedValue private Long id; } 위와 같이 @GeneratedValue를 적용하면 로그패턴도 달라지고 성능이 급격하게 나빠지더라고요 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) 로 지정하면 실습이 잘 진행됩니다. 왜 이런차이가 발생하는지 알 수 있을까요? strategy를 선택하지 않으면 AUTO이며 이는 mysql에서 IDENTITY를 선택한 것과 같게 나와야하는데 예상과 달라 질문드려봅니다.