묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
깃액션은 성공하지만 계속 서버가 Killed 됩니다.
name: Deploy TO EC2 on: push: branches: - main jobs: Deploy: runs-on: ubuntu-latest # SSH로 접속하는 명령어를 쳐주자. # 일일이 다 쳐도 되지만 불편하기때문에 github actions의 라이브러리를 사용하면 편하다 # uses는 내가 어떤 라이브러리를 쓸 건지 기재하는 곳이다. steps: # SSH는 다른 원격 컴퓨터로 접속하는 프로토콜이다. # Github Actions도 하나의 컴퓨터고, EC2도 하나의 컴퓨터이므로 SSH를 통해서 원격 접속을 진행해주자. - name: SSH(원격 접속)로 EC2에 접속하기 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.HOST }} # IP 주소를 말함 username: ${{ secrets.EC2_USERNAME }} # EC2를 연결할 때 사용자 이름 key: ${{ secrets.EC2_PRIVATE_KEY }} # EC2에 접근할 때 사용하는 키 페어 script_stop: true # run이 아닌 script로 실행하는 라이브러리도 있으니 예제파일을 참고하자 # EC2에 접속해서 실행한 명령어들을 차례대로 작성해주자 # 1. 프로젝트의 해당 경로로 이동 # 2. github에서 프로젝트 pull # 3. gradlew 재 빌드 # 4. 포트번호 8080서버를 끄거나 서버가 이미 꺼져있어도 true # 5. SNAPSHOT.jar로 끝나는 파일을 실행. 로그는 output이라는 파일에 남김 script: | cd /home/ubuntu/personal-cicd-server git pull origin main ./gradlew clean build sudo fuser -k -n tcp 8080 || true sudo java -jar /personal-cicd-server/build/libs/*SNAPSHOT.jar > ./output.log 2>&1 & 메모리 부족 문젠가 싶어서 https://velog.io/@kwontae1313/AWS-EC2-%EB%A9%94%EB%AA%A8%EB%A6%AC%EC%9A%A9%EB%9F%89-%EC%A6%9D%EC%84%A4위 링크를 보며 메모리 용량 증설도 해주었으나, 이후에도 안되어서 t3.small로 인스턴스 유형을 변경하였습니다.근데 계속 Killed이 뜨네요..ㅠㅠ 다시 서버를 실행시키면 코드가 변경은 되어있구요.. 왜 계속 프로세스가 죽는걸까요..??
-
미해결쿠버네티스 어나더 클래스-Sprint3 (#실무핵심 #Docker #Nginx #Minio #Longhorn)
강사님 질문 드립니다.
만약 ingress 서비스를 실제 업무에 사용하게 되면 blue/green 배포시에 어떻게 동작하는지 궁금합니다. 아울러 ingress 서비스가 사용되는 경우에 대한 설명 부탁드립니다. 감사합니다.
-
미해결쿠버네티스 어나더 클래스-Sprint3 (#실무핵심 #Docker #Nginx #Minio #Longhorn)
강사님 인그레스와 관련하여 질문 드립니다.
좋은 강의 정말 감사합니다. 다른 책이나 강의에서 들을 수 없었던 내용을 알게 되는 재미로 매일 듣고 있습니다.강사님 인그레스 관련하여 궁금한게 있어 질문 드립니다.인그레스와 nginx 사이의 관게를 클래스로 매칭 시킨다는 것은 어렴풋이 이해가 가는데 nginx 가 매칭된 인그레스의 패스정보 등은 어떻게 가져오는지 그 메카니즘이 궁금해서 문의 드립니다.감사합니다
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
리액트 배포하기..
안녕하세요!! 혹시 리액트로 배포하는 방법도 알려주시면 안될까요 ? ㅜ
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
팀프로젝트시
안녕하세요! 취준생입니다!교육받는 곳에서 취업을 목표로 팀프로젝트(4명)를 진행하려고 하는데, 방법4까지만 해도 괜찮을지 5까지 하면 포트폴리오로써 더 좋을지 궁금합니다..
-
해결됨실리콘밸리 엔지니어와 함께하는 테라폼(Terraform)
ppt 자료 공유 가능하실까요?
다른 강의에서 ppt 자료 공유해주셨는데, 이 강의에선 코드 자료밖에 없어서 ppt 자료도 공유해주시면 감사하겠습니다.
-
미해결실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
Elastic Cloud 에서 "Logs and metrics" 기능 관련 질문 있습니다.
Elastic Cloud 에서 "Logs and metrics" 기능 활성화를 통해 나중에 문제 발생시 로그 및 매트릭 확인을 위해서 해당 기능을 활성화 하고자 하는데요.이 기능은 좋은데 문제점이 너무 빠르게 용량을 잡아 먹는다는 것 입니다.저 예산으로 가야 되는 상황이라 어쩔 수 없이 낮은 사양으로 할 수 밖에 없는 상황이지만 그렇다고 "Logs and metrics" 기능을 비활성화 하기에 나중에 문제 발생시 대처가 안 될 것 같아서 고민이 됩니다. 한번 여러 방면으로 대책법을 찾아보니필수 로그 및 메트릭만 수집 (필터링)수집 주기 조정 (Metrics 기준)이렇게 대응 방법을 말해주고 있는데요. 지금부터 ChatGPT 가 답변해준 글을 공유 하도록 하겠습니다. ==================================================💥 주요 성능 부하 원인🔁수집량 과다수집 주기 짧음, 많은 필드 → 데이터 폭주📥Ingest Pipeline 부하Elastic Agent가 사용하는 Ingest Pipeline이 CPU/RAM 자원 소비💾인덱싱 부하많은 로그가 빠르게 들어오며 디스크 I/O 및 CPU 부하 증가🔍자동 매핑 확장필드가 자동으로 확장되어 메모리, 클러스터 상태 불안정🧠ILM 미적용 / 장기 보존오래된 데이터가 계속 쌓이며 성능 하락 및 디스크 압박✅ 해결책: 성능 최적화 전략1. 필수 로그 및 메트릭만 수집 (필터링)수집 대상 최소화:log.level: error, source: app-* 등 필요 데이터만 수집예: Elastic Agent policy에서 수집 대상 제외 설정processors: - drop_event: when: not: equals: log.level: "error"2. 수집 주기 조정 (Metrics 기준)리소스기본 주기추천 조정Metrics (System, Docker 등)10s~15s→ 30s~60s로 늘리기Elastic Agent 정책에서 조정 가능 (Kibana → Fleet → Integration Policy → Advanced options)3. ILM 수명주기 정책 설정오래된 로그/메트릭 자동 삭제 또는 cold/warm tier로 이동예: logs-*, metrics-* 인덱스 7일 후 삭제 📍 Elastic Agent Policy 설정 페이지 찾는 방법🔹 경로:Kibana에 로그인왼쪽 메뉴에서 "Management" → "Fleet" 클릭→ Fleet은 Elastic Agent를 중앙에서 관리하는 UI입니다.상단 탭에서 "Agents" 또는 "Agent policies" 클릭원하는 정책 이름 클릭 (예: Agent policy 1)Integrations 리스트가 보이면, 로그/메트릭 관련 항목 클릭 (예: System, NGINX, Kubernetes 등)Advanced Options 또는 Streams 탭에서 수집 조건/필터 조정 가능🎯 필수 로그/메트릭만 수집하는 핵심 위치Integrations 안의 Stream 설정예: system.syslog → enabled ✅ / ❌메트릭 → 수집 주기(Collect every 10s 등)Advanced YAML (고급 설정)예를 들어, error 레벨만 수집하도록 필터 추가:processors: - drop_event: when: not: equals: log.level: "error" 🧭 화면 예시 흐름Kibana └─ Management └─ Fleet ├─ Agent Policies ← 여기서 정책 선택 │ └─ [Agent policy 1] │ └─ System integration 등 클릭 │ └─ Streams or Advanced options 설정 ==================================================이렇게 필수로그 수집 기능 및 수집 주기 조정 기능으로 조금이나마 성능 부하를 줄이고자 할려고 하는데요. 말 그래도 키바나 접속 해서 Fleet 페이지로 가서 먼저 agent policy 등록를 하고등록한 agent policy 접근 해서 system-1 클릭하면 Edit System integration 페이지 접근 할텐데요. 여기서 Collect metrics from System instances 에서 Change defaults 클릭 하고 여기서 원하는 Period 를 설정 하면 되는게 맞는 것인지 궁금 합니다... 혹시 또 추가적으로 설정 해야 하는 부분이 있을까요?
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
argo image updater 이미지명 규칙 수정 문의
88. ArgoCD Image Updater를 이용한 이미지 자동배포 (💻 실습)강의 실습 도중 발생한 문제와 해결 방법에 대해서 공유 드립니다. ArgoCD를 통해서 2232 Application을 배포할 때values-dev.yaml 파일을 사용하여 helm chart 앱을 생성했습니다. 강사님께서 제공해주신 git 코드(fork한 코드 repo, 하기 코드 블록)를 통해서 application 생성 했을 때,자연스럽게 1pro/api-tester:1.0.0 이미지를 가지고 와서 pod를 생성했습니다. 2232/deploy/helm/api-tester/values-dev.yamlimage: repository: 1pro/api-tester pullPolicy: Always tag: 1.0.0이후 Image-updater를 사용하여 image의 변경사항을 감지하려고 했으나 image-updater 파드에서는 감지되지 않았고, 당연히 argo cd에서도 sync 되지 않았습니다. 해당 문제를 찾아보니 regex 식의 규칙과 기존 이미지의 이미지명 형태가 동일해야 image updater가 인지를 하는 것 같아 하기 argo application과 연결된 git 디렉토리의 코드(2232/deploy/helm/api-tester/values-dev.yaml)를 같게 변경했더니 image-updater가 정상동작하면서 auto sync도 제대로 실행되었습니다. image: repository: alchdliodd/api-tester pullPolicy: Always tag: 1.1.1-250604.171111 강의 영상에서는 이렇게 맞추지 않아도 정상적으로 동작하는 것 같았는데,이 현상이 argo image updater의 버그인지, 아니면 원래 해당 규칙을 맞추어야 하는 것인지 문의 드립니다.
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
PV/PVC (local, hostPath) 강의에 대한 질문입니다.
안녕하세요 !강의 5분에 hostPath, local 사용 목적에 관한 질문이 있어 글을 남기게 되었습니다.사용 목적 2번에서 노드의 디스크 공간이 한정적이라 디스크 공간이 부족해져서 노드가 죽어버리면 그 노드 위에 다른 Pod들도 함께 죽는다고 말씀해주셨습니다. 여기서 생긴 의문은 hostPath로 node의 Volume을 사용하든 PVC/PV를 이용하여 Volume을 사용하든 특정 Pod에서 사용량이 많으면 어떤 경우든 죽어버릴 것 같다는 것입니다.아니면, hostPath는 용량을 설정하지 않는데 비해, PVC/PV에서는 용량을 설정해주는 옵션이 있어 해당하는 Pod만 죽고 다른 Pod에는 영향이 없는 걸까요?
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
Jenkins 파일 - 파라미터 사용법 차이
안녕하세요섹션 18 - 82번 강의 : 배포 파이프라인 구축 후 마주하게 되는 고민들(실습)수강 중 Jenkins 파일에 대한 질문이 있어 문의 드립니다. Jenkins 파일을 작성할 때, parameter로 PROFILE(배포환경선택)과 DOCKERHUB_USERNAME(도커허브유저명)을 설정하셨는데 하기 코드를 보시면 parameters { // 배포 환경 선택 choice(choices: ['dev', 'qa', 'prod'], name: 'PROFILE', description: '배포 환경 선택') // DockerHub 사용자명 입력 string(name: 'DOCKERHUB_USERNAME', defaultValue: '', description: 'DockerHub 사용자명을 입력하세요.') // GitHub 사용자명 입력 string(name: 'GITHUB_USERNAME', defaultValue: '', description: 'GitHub 사용자명을 입력하세요.') } stage('헬름 배포') { steps { // helm 명령 사용 - [1] 중요 데이터 암호화 관리 withCredentials([file(credentialsId: 'k8s_master_config', variable: 'KUBECONFIG')]) { sh "helm upgrade api-tester-${CLASS_NUM} ./${CLASS_NUM}/deploy/helm/api-tester -f ./${CLASS_NUM}/deploy/helm/api-tester/values-${params.PROFILE}.yaml" + " -n anotherclass-222-${params.PROFILE} --install --kubeconfig " + '${KUBECONFIG}' + // [5] Helm 부가기능 " --wait --timeout=10m" + // 최대 10분으로 설정 // [2] 잦은 배포 - versioning 무의미, 계획된 배포 - versioning 필수 " --set image.tag=${TAG}" + " --set image.repository=${DOCKERHUB_USERNAME}/api-tester" } } } PROFILE은 앞에 "params"가 붙어있고 (${params.PROFILE}),DOCKERHUB_USERNAME은 환경변수처럼 그냥 ${DOCKERHUB_USERNAME}로 사용하신 것을 볼 수 있습니다. 혹시 choice문을 사용하여 사용자가 선택하는 prarmeter의 경우 params를 붙인다던가 하는 규칙이 있는 걸까요? 위 두 개 사용 방법이 다른 것에 원인이 있는지 궁금합니다.
-
미해결비전공자도 이해할 수 있는 쿠버네티스 입문/실전
50강 빌드파일
지금까지는 눈으로 학습했는데, AWS ECR에 올리는 실습을 직접 하려다 보니 로컬에서 spring boot 빌드하는 환경 구성에 시간을 잡아먹고있습니다. 개발자가 아니라서 이런 개발환경은 너무 낯선데, 다른방법으로 빌드할수는 없을까요. VSCODE에서 SpringBoot Extention Pack으로 고군분투해봐도 시간만 소요될 뿐 진행되지 않아 문의드립니다.
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
Dockerfile VS githubActions
안녕하세요, 강의 잘 듣고 있습니다 ! Dockerfile과 githubActions의 yml 파일의 경계를 잘 모르겠습니다.Dockerfile을 통해 jar를 만들어서 실행할 수도 있고,강의처럼 yml 파일에서 jar파일을 만들 수도 있는데,현업에서는 이 두 방식 중 어떤 걸 사용하는지 또, 어떤 이점 때문에 사용하는지 궁금합니다...! 추가로, mysql이나 redis 같은 경우는 따로 Dockerfile을 작성하지 않고compose.yml 에서 바로 이미지 생성을 하고 있는데이렇게 되는 경우, EC2에서 이미지가 만들어지니 각각의 Dockerfile을 만들어서 gitActions 단계에서 처리하는 게 좋을까요...?
-
미해결비전공자도 이해할 수 있는 쿠버네티스 입문/실전
빌드(jar 패키징) 오류 공유
아마 h2같은 in-memory DB를 사용하지 않고, 직접 mysql driver를 추가한 경우는 datasource객체를 만드려고 시도하면서 url, username, password같은 정보가 없다면 스프링 서버를 띄우기도 실패할 것입니다! 이렇게요.FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':test'.스프링 프로젝트를 생성하면 최초로 만들어지는// java @SpringBootTest public class XXTests { @Test void contextLoads() { } } // kotlin @SpringBootTest class XXTests { @Test fun contextLoads() { } }이 테스트코드도 실패할거에요그럴때는 해당 클래스 파일을 없애거나@SpringBootTest 어노테이션을 제거하거나맨 위에 @Disabled를 추가해줘서 테스트를 생략하게 하면 될 것 같습니다!보통 테스트코드에서도 스프링 컨테이너 뜰 때 드라이버가 있다면 DataSource 빈을 만드려고 시도하다가 기본 ENV가 없다면 실패할 것 같은데..재성님은 아마 테스트코드를 지우신게 아닐까 생각되네요!
-
해결됨비전공자도 이해할 수 있는 쿠버네티스 입문/실전
Secret 질문
재성님! 강의 잘 보고 있습니다!k8s에서 Secret 관련해서 예전에 본 걸 기억하기로는 value값은 base64로 인코딩된 값이어야 한다고 봤는데, 영상에서는 잘 동작하네요!?제가 잘못 알고 있는지, 아니면 다른 방식이 있는지 등 궁금합니다!
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
실무에서 젠킨스를 파드 형태가 아닌 서버에 직접 설치 해서 사용 하나요?
안녕하세요 선생님 스프린트 1,2 강의를 모두 듣고 젠킨스 운영 관련 궁금한 점이 생겼습니다. 학습에선 젠킨스를 vm 에 직접 설치하셨는데요. Grafana, Prometheus, Argo CD 등은 모두 파드로 컨테이너환경으로 설치 하셨습니다.젠킨스만 vm에 직접 설치한 이유가 있는건가요? 젠킨스도 pod 형태로 운영 하는 것에 어떤 제약이 있는 걸까요?실무에선 젠킨스를 보통 어떻게 운영 하는지 궁금 합니다. (현재 강의처럼 별도 서버에 직접 설치 운영 하는건지?)
-
미해결실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
must_not 쿼리는 term 쿼리만 사용 가능한가요 ?
안녕하세요. 유익한 강의 열심히 수강하고 있습니다. 이번에 must_not 쿼리를 공부하는 과정에서 filter와 같이 term 쿼리를 사용하셨습니다. 주어진 상황이 광고 게시판의 글이 아니고 공지 글이 아니라 유연한 검색이 필요하지 않는 상황이어서 term 쿼리를 쓰신 것 같습니다. 그럼 만약, "검색엔진" 키워드를 제외한 관련된 게시글을 조회하고 싶다고 가정한다면 아래와 같은 쿼리문을 작성할 수 있을까요 ? "query" : { "bool" : { "must_not" : [ "match" : { "title" : "검색엔진" } ] }}
-
해결됨쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
쿠버네티스 이해도에 대한 질문
안녕하세요! 현재 컴퓨터공학과 4학년에 재학 중인 대학생입니다.일프로님의 자세한 설명 덕분에, 현재 섹션 7까지 문제 없이 잘 따라가고 있습니다.감사합니다. 최근에 든 생각이 있습니다.일프로님이 강의에서 설계하신 인프라 구조나 Object들이 서로 어떻게 연결되고 어떤 역할을 하는 지는 강의를 들으면 이해가 됩니다. 물론, 복습도 꾸준히 하고 있습니다.하지만, 제가 그 구조를 어떠한 논리를 가지고 혼자서 설계를 하라면 못 할 것 같다는 것입니다. 아직 제가 강의 초반이라 그런 걸까요? 아니면, 제가 추가로 알아야 하거나 공부해야 될 지식이 있는 걸까요..?강의 자체는 이해가 되고 따라하며 잘 진행하고 있지만, 정확히 어떤 마음가짐(?)이나 방식으로 공부해야 할 지 잘 모르겠습니다.. ㅜㅜ 쿠버네티스는 이번이 처음이라 주저리 너무 길었네요.. 혹시나 답변 남겨주시면 참고하여 다시 공부해보겠습니다!감사합니다.
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
Argo Rollouts 에 대해 질문 드립니다.
강사님 Argo Rollouts 를 수업하실 때두개의 서비스 active 와 preview 를 기동시키셨는데 이게 실제 real system 에도 이렇게 운용되는 건지요?아니면 Active 만 운용하다가 blue/green 시점에 Appliacation 을 통해 preview를 배포하고 두개의 서비스를 등록하고 blue/green 배포를 실행하는 건지요? 아울러 일반적인 경우(롤링업데이트 포함)의 경우 deployment.yaml 을 사용하였고 이는 Helm과 연동됨을 확인하였습니다. 그렇다면 강사님께서 예로 드신 rollout.yaml 도 Helm과 연동시킬 수 있는 건지요? 예제에서는 Helm 이 전혀 보이질 않아서 여쭤 봅니다.
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
Argo 의 CRD 에 대해 질문 드리고 싶습니다.
Argo 의 경우 Application 이라는 새로운 CRD 를 이용하여 Deployment 등의 k8s 리소스를 관리하는 거 같습니다.CRD 의 경우 CRD 의 관리하에 생성된 리소스의 경우 CRD 가 삭제되면 같이 삭제되는 것으로 알고 있는데 Argo 의 Application 을 삭제하면 동일하게 동작하는게 아닌지요?좋은 강의 잘 듣고 있습니다. 어디서도 들을 수 없었던 강의 내용에 감사드립니다. 아울러 강사님의 강의자료를 바탕으로 저 만의 노트를 200페이지 정도 만들었습니다. 다 강사님 덕분입니다. Helm 도 다 들었고, sprinter 3, 4 도 구매했습니다. 빨리 5가 나왔으면 하고 기다리고 있습니다.
-
미해결실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
nori 관련 질문드립니다.
안녕하세요 강사님 강의 잘 보고 있습니다.다름 아니라 nori 토큰화 과정에서 이해가 안되는 부분이 있어서 질문드립니다.get /_analyze { "text":"", "analyzer":"nori" } 간단한 nori analyzer 테스트 쿼리입니다.해운대 결과{ "tokens": [ { "token": "해운", "start_offset": 0, "end_offset": 2, "type": "word", "position": 0 }, { "token": "대", "start_offset": 2, "end_offset": 3, "type": "word", "position": 1 } ] }해운대로 결과{ "tokens": [ { "token": "해운", "start_offset": 0, "end_offset": 2, "type": "word", "position": 0 }, { "token": "대", "start_offset": 2, "end_offset": 3, "type": "word", "position": 1 } ] }해운대구 결과{ "tokens": [ { "token": "해운대", "start_offset": 0, "end_offset": 3, "type": "word", "position": 0 }, { "token": "구", "start_offset": 3, "end_offset": 4, "type": "word", "position": 1 } ] }해운대, 해운대로 결과에서는 해운대가 해운 + 대 로 토큰화 되었습니다.해운대구 결과에서는 마찬가지로 해운 + 대 + 구 로 토큰화 될 것이라 예상했지만 해운대 + 구 로 토큰화 되었습니다. 어떤 이유로 이렇게 동작하는지 궁금합니다.