묻고 답해요
148만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS)
ECS 의 Task 업데이트 속도 문제
[섹션 10 - Self-healing! - 죽은 서버(테스크) 자동으로 살려내는 AWS ECS service 알아보기] 강의에서Task 의 RollingUpdate 하는 모습과 health check 에 의한 Task 소멸 및 생성 모습을 보여주셨는데요.ECS 의 Task 소멸 및 생성 속도가 너무 느려서 놀랐습니다.집에서 Kubernetes 로 실습해본 경험에 의하면, K8S 에서는 3초면 되는 것이, ECS Fargate 에서는 3분이 걸리는 것 같은데요.원래 ECS 의 Fargate launch type 이 아주 느린 것인가요?ECS 의 EC2 launch type 이었다면 Fargate 보다는 조금 빠른지요? 로컬에서 돌리는 Kubernetes 만큼 몇초만에 수행을 완료할 정도로 빠르게 하는 방법은 없는지요?ECS 너무 느려서 이걸 써야 되나라는 실망스런 마음이 큰데요.반응 속도가 빠른 auto scailing 을 구현하려면, 직접 K8S 쓰는 것이 더 현실적인 방법인 것인지 고민이 됩니다.
-
미해결AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS)
ECS - Service 의 Load Balancer 요금
안녕하세요, 강사님,섹션 9 : Container Orchestration - [AWS ECS - Service 사용해서 여러개의 Task 생성하고 Load balancer 연결해주기] 강의에서ECS Cluster 에 Service 를 만들 때, Service 에 적용하는 Load Balancer 도 내부적으로는 EC2 를 이용한 것인가요? Service 에 만든 Load Balancer 에도 별도의 Load Balancer 비용이 부과되나요?LightSail 에서 적용했던 Load Balancer 와 동일하게 비용이 드는지 궁금합니다. 만약, 비용이 부과된다면, ECS 에서 여러 Task 에 auto scailing 을 적용할 경우, Load Balancer 의 갯수가 많아질텐데, 그 갯수만큼 비용이 부과되는지도 궁금합니다.
-
미해결쉽게 시작하는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}
CKA 랩 환경 vagrant up 시 에러 상황 문의
안녕하세요 강사님.강사님의 git에서 k8s-multicontext 다운로드 후,CKA 랩환경 vagrant up 시, 1. bk8s-m: Box 'sysnet4admin/Ubuntu-k8s' could not be found.-> 'sysnet4admin/Ubuntu-k8s' 찾을 수 없다고 나오는데 정상적인게 맞나요?bk8s-m ssh 접속 시도 중 private key 오류가 나는 것으로 보이는데 해당 키에 접근을 못하는지 알 수 있을까요?답변 부탁드립니다. 감사합니다.
-
해결됨개발자를 위한 쉬운 도커
컨테이너 .exe 실행파일 사용 문의
안녕하세요,수업을 듣고 있는 수강생입니다. 컨테이너 학습 하면서, 의문점이 생겨 질의드립니다. HostPC에서 exe를 cp하여 컨테이너로 넣은 후, 해당 exe 파일을 컨테이너에서 실행시킬 수 있나요? 찾아보니 이미지는 마이크로소프트에서 받아오면 되더라구요. 환경은 HostPC는 window이고, 컨테이너도 window로 세팅하고 싶습니다. 만약 exe를 실행시킬 수 있다면 복수의 컨테이너를 실행시키고 싶은데 이를 docker compose로 구성하는게 효율적일까요?이론만으론 가능 할 것 같아 실습해보던 중 cp부터 에러가 발생해 가능성 여부를 알고싶습니다. 감사합니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
14-04 Redis에서 cacheModule을 위한 @nestjs/common버전 업데이트
다른분이 질문주셨던 'app.module.ts에서 redis연결하는데 @nestjs/common에 CacheModule이 없습니다' 에 대한 답변대로 "@nestjs/common": "^9.0.0" 버전으로 업데이트해서 node_modules도 yarn install 해서 설치했습니다. yarn.lock 확인했는데 버전이 바뀌지 않아 "@nestjs/common": "9.0.0" 로 바꿔서 다시 yarn install 했구요.그런데 @nestjs/common 버전을 9.0으로 바꾸면 계속 mybackend-1(백엔드컴퓨터)에서 오류가 생깁니다. 기존버전 10.0.0이었을 때는 오류가 발생하지 않았었습니다. 실은 강의를 들으며 코드를 따라 치다 마지막에 docker-compose build후 up 했을 때 어디서 오류가 발생하는지 모르겠어서 처음부터 yarn add로 redis랑 cache-manager라이브러리 설치하는 것 부터 docker-compose build,up 하면서 확인을 해봤었는데 @nestjs/common 버전을 9.0으로 바꿨을 때 위 사진처럼 오류가 발생했습니다. package.json파일도 올려보내드립니다.@nestjs/common 버전을 바꿔야 될까요? 아님 다른 오류 원인이 있을까요..?
-
해결됨개발자를 위한 쉬운 도커
도커 볼륨 경로 지정
각 서비스들 마다 볼륨을 지정하는 경로가 정해져 있나요?강의에서는 postgresql을 사용했고 /var/lib/postgresql/data 를 볼륨위치로 지정한것은 해당 위치가 table 내용을 저장하는 위치라서 그런건가요? 그럼 mysql 이나 redis등 다른 db의 경우는 각각 경로가 지정되어있는건지 궁금합니다. 그리고 어느 경로로 지정할지는 어떻게 알 수 있나요?
-
해결됨개발자를 위한 쉬운 도커
멀티 스테이지 빌드 COPY 명령어 질문
멀티 스테이지 빌드 강의에서 사용된 Dockerfile.multistage에 관한 질문입니다!두 번째 스테이지(openjdk:11-jre-slim)에서 사용된COPY --from=build /app/target/*.jar ./app.jar에서 해당 명령어를COPY --from=build /app/target/*.jar ./라고 작성하면 안되는건가요? COPY 명령어는 로컬 컴퓨터에 있는 파일을 도커 컨테이너 내부 파일 시스템에 복사하는 명령어로 알고 있고, 명령어에 입력되는 값은 복사에 필요한 디렉토리를 설정하는 것으로 알고 있습니다. 1) 도커 컨테이너의 루트 디렉토리에 app.jar 파일을 복사하는 용도라면 위와 같이 작성해도 되는게 아닌지 궁금합니다!2) 또한 COPY 명령어의 처음 값으로 나오는 /app/target/*.jar에서 *.jar가 .jar로 끝나는 모든 파일을 지칭하는 것인지 궁금합니다! Maven으로 빌드시 생성되는 결과물이 여러개여서 그런건가요?
-
미해결대세는 쿠버네티스 [초급~중급]
cronjob 학습 수행 중 문의사항이 있습니다.
안녕하세요. CronJob 학습 중 몇 가지 애로 사항이 있어 확인 요청 드립니다. CronJob 생성하여 대시보드에서 cron-job 클릭 시 아래 오류 메시지와 함께 404 오류가 발생. 'the server could not find the requested resource' CronJob 학습 과정 중 Manual로 생성된 Job/Pod 는 CronJob을 삭제해도 삭제가 안된다고 하셨는데, 대시보드에서 Trigger로 생성된 job/pod는 삭제가 안되지만 master node 에서 아래 명령어로 생성한 job/pod 는 삭제됨 kubectl create job --from=cronjob/cron-job cron-job-manual-001 감사합니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
객체 createBoardInput을 왜 한번 더 { } 객체로 감싸서 보내는지 궁금합니다.
boards.resolver.ts 파일에서 createBoard 함수에서 boardsService클래스에 인자를 전달할때createBoardInput 객체를 보내는데낱개로 된 writer,title,contents 도 아닌데왜 굳이 한번 더 {createBoardInput} 객체로 감싸서 보내는지 이해가 잘 되지 않습니다. @Mutation(() => String) createBoard( @Args('createBoardInput') createBoardInput: CreateBoardInput, ): string { return this.boardsService.create({ createBoardInput }); //**차이점?? return this.boardsService.create(createBoardInput); } boards.service.ts 파일에서는create({ createBoardInput }: IBoardsServiceCreate): string { //**차이점?? create(createBoardInput: CreateBoardInput): string { //1.브라우저에서 보내준 데이터 확인하기 console.log(createBoardInput.writer); console.log(createBoardInput.title); console.log(createBoardInput.contents); //2. DB에 접속 후, 데이터를 저장 => 데이터 저장했다고 가정. //3. DB에 저장된 결과를 브라우저에 응답(response) 주기. return '게시물 등록에 성공하였습니다.'; }굳이 IBoardsServiceCreate의 인터페이스를 안만들어도이미 CreateBoardInput 이라는 Class를 타입으로 적용해서 받으면 되는데createBoardInput을 왜 한번 더 { } 객체에 감싸서 보내는지 궁금합니다.
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
context에서 useEffect 선언 부분 질문 있어요.
AuthProvider에서 useEffect를 추가해서 loadUser가 호출되도록 해주었는데 모든 페이지 접근시 2번씩 호출되는 원인이 무엇일까요?// app.tsx <AuthProvider> <Component {...pageProps} /> </AuthProvider> // AuthProvider useEffect(() => { async function loadUser() { try { const res = await axios.get("/auth/me"); dispatch("LOGIN", res.data); } catch (error) { console.log(error); } finally { dispatch("STOP_LOADING"); } } console.log("loadUser"); loadUser(); }, []);그리고 커뮤니티 생성 페이지에서는 getServerSideProps를 선언해두었기 때문에 여기서도 /auth/me api 를 호출해주어서 결국 커뮤니티 생성 페이지에서만 총 3번이 호출되고 있어요.제가 잘못 구현한 것일까요?정리하자면,1. 현재 코드에서는 loadUser() 메서드가 1회만 호출되어야 할 것 같은데, 2번 호출되는 이유는 무엇인지?2. 커뮤니티 생성 페이지에서는 /auth/me api를 3번 호출하고 있는데, 횟수를 줄일 수 있는지? (이건 url 직접 입력해서 들어가지 않으면 1회만 호출할 것 같긴 하네요.)서버 로그입니다.(각각 커뮤니티 생성 페이지, 로그인 페이지)
-
해결됨개발자를 위한 쉬운 도커
여러 개의 컨테이너가 1개의 도커 볼륨에 접근할 때 일관성 문제
여러 개의 컨테이너가 하나의 볼륨을 공유할 수 있다는 특징에 따라 다음과 같이 작성했습니다. 도커 볼륨 생성docker volume create myvolume컨테이너A 생성docker run -d --name my-containerA -e POSTGRES_PASSWORD=password -v myvolume:/var/lib/postgresql/data postgres:13컨테이너B 생성docker run -d --name my-containerB -e POSTGRES_PASSWORD=password -v myvolume:/var/lib/postgresql/data postgres:13컨테이너A에서 새로운 DB 생성docker exec -it my-containerA psql -U postgres -c "CREATE DATABASE mydb;"컨테이너A에서 DB 조회docker exec -it my-containerA psql -U postgres -c "\list"컨테이너A에서 DB를 생성하고 조회하면 정상적으로 조회가 되는데, 컨테이너B에서 DB를 조회하면 mydb가 생성되지 않은 채로 보이네요.일관성 유지를 위해 두 컨테이너에서 정상적으로 조회가 될 줄 알았는데 컨테이너B에는 새로운 DB를 생성한 게 동기화가 안되네요..근데 새로운 컨테이너C를 생성하여 DB를 조회하면 정상적으로 조회가 됩니다. 위 내용을 정리하면 여러 개의 컨테이너가 1개의 도커 볼륨에 동시에 마운트하여 사용하면 동기화가 되지 않고, 새로운 컨테이너를 생성하여 도커 볼륨에 마운트하면 정상적으로 동기화가 됩니다.이런 경우에는 어떻게 해결하나요?
-
해결됨개발자를 위한 쉬운 도커
USER 명령어 질문
도커파일에서 USER 명령어가 RUN과 CMD 사이에 와야하는 이유가 무엇인가요? 그리고 USER 명령어가 사용되는 이유에 대해 잘 이해가 가질 않아서 그런데 리눅스의 어떤 개념을 공부해야 하나요?
-
미해결개발자를 위한 쉬운 도커
CMD 부분에 질문이 있습니다.
CMD ["nginx" "-g" "daemon off;"] 이 부분이 잘 이해가 안가서 찾아보니foreground로 실행되게 변경하는것, 초기 프로세스가 종료되지 않고 컨테이너가 계속 실행된다.로 나와있던데이게 잘 와닿지가 않습니다.. 우선 저 명령어는 생성한 nginx 컨테이너에서 실행되는거라고 이해했는데foreground로 실행된다는게 정확히 어떤 뜻인가요?컨테이너도 도커가 켜져있고 안건드리면 계속 돌아가지 않나요?
-
해결됨[DevOps] 빠르고 안전한 어플리케이션 배포 파이프라인(CI/CD) 만들기
App Runner 서비스 생성 시 실패
1. 무엇을 하고 싶으신가요? App Runner 서비스 생성2. 언제, 어떤 오류가 발생하시나요? 생성 중 애플리케이션 배포 실패3. 어떤 시도를 해보셨나요? 도커 이미지 재생성 및 App Runner 서비스 재생성, App Runner 스펙업(cpu,mem), iam, root 계정에서 생성 시도(권한 문제는 아닌듯)4. 작성한 코드를 공유해주세요.이슈:hands-on-fast-and-secure-cicd-pipeline 깃헙 클론 - 도커파일 경로에서 도커 이미지 생성 - ecr에 푸시 - ecr 이미지 url 이용하여 App Runner 서비스 생성 시 생성 실패하는 상황입니다.의심 되었던 부분:1. 컨테이너 이미지나 포트 설정에 문제가 있었다면 localhost:8080으로 접속해도 문제가 생겼을텐데 문제 없이 접속 가능하고요.2. App Runner의 리소스 제한이 있었을까봐 cpu, mem을 스펙업하고 재생성 했는데도 상황은 동일합니다.3. 계정 간 권한의 문제일까봐 iam, root 계정에서 생성해보았습니다. 상황은 동일합니다. 스샷:에러 로그:02-16-2024 06:37:27 PM [AppRunner] Deployment with ID : 7b4ba5a1c8f0433187d873df5bd1aa8c started. Triggering event : SERVICE_CREATE02-16-2024 06:37:27 PM [AppRunner] Deployment Artifact: [Repo Type: ECR], [Image URL: 938923105461.dkr.ecr.us-east-1.amazonaws.com/chadtest], [Image Tag: latest]02-16-2024 06:37:51 PM [AppRunner] Pulling image 938923105461.dkr.ecr.us-east-1.amazonaws.com/chadtest from ECR repository.02-16-2024 06:37:54 PM [AppRunner] Successfully pulled your application image from ECR.02-16-2024 06:38:05 PM [AppRunner] Provisioning instances and deploying image for publicly accessible service.02-16-2024 06:38:15 PM [AppRunner] Performing health check on protocol TCP [Port: '8080'].02-16-2024 06:39:06 PM [AppRunner] Your application stopped or failed to start. See logs for more information. Container exit code: 102-16-2024 06:39:28 PM [AppRunner] Deployment with ID : 7b4ba5a1c8f0433187d873df5bd1aa8c failed.제가 겪은 이슈와 같은 상황을 겪고 있는 유저:https://repost.aws/ko/questions/QU0lse8IEMSi-H4mlp5AAFWw/apprunner-failed-to-deployhttps://komodor.com/learn/exit-codes-in-containers-and-kubernetes-the-complete-guide/이게 유력한 원인으로 보이는데요...이게 아니라면 App Runner가 업데이트 되어 강의의 생성 내용과 달라져서 그런 것 인지...흠...혹시 App Runner 부분이 정상적으로 진행되지 않는다면 이후 강의에 차질이 생길까요??
-
미해결AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS)
세션 6부터 봐도 될까요?
안녕하세요 수업 잘 듣고 있습니다 JSON을 처음 접하게 되었는데 막히는게 너무 많이서 세션6 도커 부터 듣고 이후헤 AWS를 들어도 될까요?세션4 중간 까지 했습니다 구글링해도 에러를 해결 하지를 못해서 시간을 너무 많이 잡아 먹습니다
-
미해결데브옵스(DevOps)를 위한 쿠버네티스 마스터
master init error
안녕하세요. 열심히 열공 하고 있습니다.저는 컴퓨터 환경이 우분투 데스크탑 서버 22.04 두대우분투 라이브 서버 두대 이렇게 운영중에 있습니다.kubernetes master init 에러 각 각 4대의 공유기로 따로 사설 Ip로 나가고 있습니다.몇가지 궁금한 점 1. 4대의 pc가 내부 ip로 연결이 안 되어 있습니다.(랜 카드을 두개 설치해서 각각 내부 ip로 연결이 되어야 하는지 궁금합니다.)2. Docker 서비스를 stop에서 사용해야 하는지 아니면 별개로 그냥 사용해도 되는지 궁금합니다.3. 우분투 데스크탑 서버 22.04 두대에 설치을 하면 똑같은 kubernetes master init 에러 error execution phase addon/coredns: couldn't retrieve DNS addon deployments: Get "https://192.168.0.4:6443/apis/apps/v1/namespaces/kube-system/deployments?labelSelector=k8s-app%3Dkube-dns": net/http: request canceled (Client.Timeout exceeded while awaiting headers)To see the stack trace of this error execute with --v=5 or higher이 메세지가 출력됩니다.4. kubeadm reset도 여러번 해봤습니다.5. 공유기 포트포워딩 8080, 6443, 모든 포트 개방 DMZ도 활성화 했습니다.
-
해결됨개발자를 위한 쉬운 도커
Dockerfile과 docker-compose.yml 파일
안녕하세요docker-compose.yml를 사용할 때사용자가 애플리케이션에서 변경한 내용을 다시 build 해야되는 경우가 아니면dockerfile은 없어도 되는 게 맞는걸까요??
-
미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
ResponseBody 강의에서 클래스 생성 관련 질문드립니다.
리턴을 new 키워드를 통해 인스턴스를 생성해서 하는데 클래스에 static키워드를 붙이는 이유가 있는지 궁금합니다.
-
해결됨실습으로 배우는 선착순 이벤트 시스템
kafka를 왜 사용하는지가 잘 이해가 안가서 질문 남깁니다!
안녕하세요! 강의 잘 듣고 있습니다. 감사합니다. https://www.inflearn.com/course/lecture?courseSlug=%EC%84%A0%EC%B0%A9%EC%88%9C-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%8B%A4%EC%8A%B5&unitId=156125&category=questionDetail&tab=community&q=1029856해당 질문과 답변을 보고 추가 질문 드리려고 합니다. 제가 kafka나 redis, 분산서버 등에 대해 이해도가 낮은 점 양해 부탁드립니다! 1.Kafka 미사용시 주문생성/회원가입요청의 타임아웃 및 10분뒤 실행에 대한 해결책으로 Kafka 를 선택한 이유는 배압조절(back pressure) 때문입니다.이렇게 말씀을 해주셨는데요,답변에서 말씀하신 예시에서 처럼 10000개 요청이 있고,카프카를 사용한다면,요청 100개가 쌓일때마다 db에 insert를 하고, 다시 요청 100개가 쌓일때까지 기다렸다가 insert 하기를 반복한다는 것으로 이해하면 될까요?2. 그게 맞다면, 강의에서 구현한 apply 메서드에서 100개의 요청이 왔는지 확인하지 않고, kafka를 사용해서 다른곳에 전달하여 처리하는 이유는 무엇인가요?예시로 apply 메서드 안에서 redis의 incr 값을 체크하면 요청이 몇개가 쌓였는지 알 수 있을테고, 데이터를 임시저장하다가 100개마다 처리할 수 있을거란 생각이 들었습니다. kafka로 다른 모듈로 전달하는 것과의 차이점이 무엇인가 궁금합니다.3.실제로 consumer에서 100개의 작업이 완료되었는지는 일반적으로 어떻게 확인하는 걸까요? db에 저장하기 전에 100개의 데이터는 어디에 임시저장을 하나요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
swagger 실행 오류
swagger 실행시 No operations defined in spec!라는 오류가 발생하는데 왜그럴가요?