172만명의 커뮤니티!! 함께 토론해봐요.
미해결
[DevOps] 빠르고 안전한 어플리케이션 배포 파이프라인(CI/CD) 만들기
1. 무엇을 하고 싶으신가요? gitleaks가 secret을 판별하는 기준에 대해서, 또 지금 현 상황에 대한 이유가 궁금합니다. 2. 언제, 어떤 오류가 발생하시나요? from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "AROAWU22AXDEPO3JX44FD" @app.route("/rextest") def rextest(): return "REXTEST_PATH" if __name__ == "__main__": app.run( host="0.0.0.0", port=8080, debug=True, ) app.py 코드를 위처럼 작성해서 MR을 날릴 경우, 파이프라인에서 gitleaks에 시크릿 값(AWS 예제)가 스캔되지 않습니다. 때문에 build job까지 문제 없이 실행이 됩니다. 3. 어떤 시도를 해보셨나요? 로컬 환경에서 강사님 코드를 pull 하고 tools 디렉토리의 gitleaks 디렉토리에서 gitleaks detect -v --no-git 명령을 수행해도 디스코드 예제와 깃랩 예제 2 종류만 스캔될 뿐 AWS 예제는 스캔되지 않습니다. 그래서 app.py 파일에 디스코드 예제를 넣어서 파이프라인을 실행할 경우, 정상적으로 gitleaks에서 시크릿이 스캔되어 job이 실패합니다. 이러한 경우, 코드 문제가 아니라 gitleaks에 대한 문제라고 생각이 드는데, 강의 영상에서는 AWS 예제가 스캔되어 job이 실패되고 저는 정상적으로 실행되는 이유가 궁금합니다. 4. 작성한 코드를 공유해주세요. stages: - gitleaks - build - deploy default: image: name: bentolor/docker-dind-awscli id_tokens: GITLAB_OIDC_TOKEN: aud: https://gitlab.com variables: AWS_DEFAULT_REGION: ap-northeast-2 IMAGE: ${CI_PROJECT_NAME}:latest REMOTE_LATEST_IMAGE: ${AWS_ECR_REPO_URL}:latest REMOTE_REGULAR_IMAGE: ${AWS_ECR_REPO_URL}:${CI_COMMIT_SHORT_SHA} .get_aws_role: &get_aws_role - > export $(printf "AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s AWS_SESSION_TOKEN=%s" $(aws sts assume-role-with-web-identity --role-arn ${AWS_ROLE_ARN} --role-session-name "GitLabRunner-${CI_PROJECT_ID}-${CI_PIPELINE_ID}" --web-identity-token ${GITLAB_OIDC_TOKEN} --duration-seconds 3600 --query 'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]' --output text)) .get_ecr_token: &get_ecr_token - *get_aws_role - aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin ${AWS_ECR_REPO_URL} gitleaks: stage: gitleaks image: name: zricethezav/gitleaks:latest entrypoint: [""] script: - gitleaks detect -v --no-git --redact --report-format json rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" changes: paths: - app.py - Dockerfile - requirements.txt build-container-image: stage: build services: - name: docker:dind before_script: - *get_ecr_token script: - docker build -t ${IMAGE} . - docker tag ${IMAGE} ${REMOTE_LATEST_IMAGE} - docker push ${REMOTE_LATEST_IMAGE} - docker tag ${IMAGE} ${REMOTE_REGULAR_IMAGE} - docker push ${REMOTE_REGULAR_IMAGE} rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" changes: paths: - app.py - Dockerfile - requirements.txt deploy: stage: deploy image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest before_script: *get_aws_role variables: AWS_DEFAULT_REGION: ap-northeast-1 script: - | export SERVICE_NAME="${CI_PROJECT_NAME}-service" export AR_SERVICE_NAME=$(aws apprunner list-services --query "ServiceSummaryList[?ServiceName=='${SERVICE_NAME}'].ServiceName | [0]" --output text) # AppRunner에 해당 레포의 매핑되는 서비스가 없는 경우 if [ ${AR_SERVICE_NAME} != ${SERVICE_NAME} ]; then export AR_SERVICE_ARN=$(aws apprunner create-service --service-name "${SERVICE_NAME}" --source-configuration "{\"AuthenticationConfiguration\": {\"AccessRoleArn\": \"${AWS_APP_RUNNER_SERVICE_ROLE_ARN}\"}, \"ImageRepository\": {\"ImageIdentifier\": \"${REMOTE_LATEST_IMAGE}\", \"ImageRepositoryType\": \"ECR\"}}" --instance-configuration 'Cpu="0.25 vCPU",Memory="0.5 GB"' --output text --query "Service.ServiceArn") echo "[+] Creating ${AR_SERVICE_ARN}" # AppRunner 서비스가 존재하는 경우 else export AR_SERVICE_ARN=$(aws apprunner list-services --query "ServiceSummaryList[?ServiceName=='${SERVICE_NAME}'].ServiceArn | [0]" --output text) aws apprunner start-deployment --service-arn ${AR_SERVICE_ARN} echo "[+] Deploying ${AR_SERVICE_ARN}" fi export AR_SERVICE_STATUS=$(aws apprunner describe-service --service-arn ${AR_SERVICE_ARN} --output text --query "Service.Status") while [ ${AR_SERVICE_STATUS} != "RUNNING" ]; do echo "[*] Waiting..." sleep 10 export AR_SERVICE_STATUS=$(aws apprunner describe-service --service-arn ${AR_SERVICE_ARN} --output text --query "Service.Status") if [ ${AR_SERVICE_STATUS} = "CREATE_FAILED" ]; then echo "[-] ${AR_SERVICE_ARN} ${AR_SERVICE_STATUS}" exit 1 fi done echo "[+] ${AR_SERVICE_ARN} deployed!" rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH changes: paths: - app.py - Dockerfile - requirements.txt
aws docker ci/cd Terraform gitlab devsecops trivy semgrep gitleaks
taeho Kim
2025-12-03T07:48:44.157Z
댓글 2
좋아요 1
조회수 101
해결됨
한 입 크기로 잘라먹는 Next.js
안녕하세요. 강의 나름 열심히 듣고있는 수강생입니다..! 정환님 강의 React.js, typescript,다 수강하고 이어서 next.js 수강중입니다. 지금은 2.10) 사전 렌더링와 데이터페칭 보고있는데요. 리액트에서의 데이터 페칭 설명해주시면서 기억나시나요?? 물어보셨는데 혹시 정환님 React.js 강의에서 데이터페칭 설명해주신 부분이 있었나요?? ㅠㅠㅠ 제가 놓친건지.. 다시 찾아봐도 찾기가 힘들어서요.. 답변 부탁 드립니다.
열시미하겟슴다
2025-12-03T05:41:44.899Z
댓글 3
좋아요 0
조회수 93
해결됨
메이드 인 RAG(로컬 LLM Q&A시스템) With Docker + ollama + R2R
강의 내용대로 설정하여 http://localhost:7273/documents 페이지에서 문서를 업로드하였는데, 아래와 같은 메시지가 표시되면서 업로드가 실패하였습니다. Upload Failed Status 500: An error "500: Error during ingestion: OpenAl credentials not configured but openai/ model prefix used' occurred during create_document 내용 확인 부탁드립니다. 감사합니다.
이성수
2025-12-03T04:05:47.996Z
댓글 1
좋아요 0
조회수 117
미해결
한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
todo리스트 구현중 TodoItem.jsx에서 memo에 대해 강의를 보며 공부중입니다. 이렇게 console.log로 찍었는데 체크박스를 한 개만 찍어도 3가지 모두 다 console로 찍히는데 제대로 적용된 것 맞나요? 하이라이트를 켜도 색상이 비슷해서 구분이 잘 가지않습니다. 로그는 이렇게 찍힙니다. prev next = {"id":0,"isDone":false,"content":"React 공부하기","date":1764731042079}{"id":0,"isDone":true,"content":"React 공부하기","date":1764731042079} TodoItem.jsx?t=1764729548020:40 prev next = {"id":1,"isDone":false,"content":"빨래하기","date":1764731042079}{"id":1,"isDone":false,"content":"빨래하기","date":1764731042079} TodoItem.jsx?t=1764729548020:40 prev next = {"id":2,"isDone":false,"content":"노래 연습하기","date":1764731042079}{"id":2,"isDone":false,"content":"노래 연습하기","date":1764731042079} import { memo } from 'react'; import './TodoItem.css' function TodoItem({id, isDone, content, date, onUpdate, onDelete}) { const onChangeCheckbox = () => { onUpdate(id); } const onClickDeleteButton = () => { onDelete(id) } return ( <div className="TodoItem"> <input onChange={onChangeCheckbox} readOnly checked={isDone} type="checkbox"/> <div className="content">{content}</div> <div className="date">{new Date(date).toLocaleDateString()}</div> <button onClick={onClickDeleteButton}> 삭제 </button> </div> ); } export default memo(TodoItem, (prevProps, nextProps) => { console.log("prev next = " + JSON.stringify(prevProps) + JSON.stringify(nextProps)) if(prevProps.id !== nextProps.id) return false if(prevProps.isDone !== nextProps.isDone) return false if(prevProps.content !== nextProps.content) return false if(prevProps.date !== nextProps.date) return false return true });
javascript react node.js 카카오공채-개발
최어진
2025-12-03T03:09:17.678Z
댓글 2
좋아요 0
조회수 70
미해결
김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 입문 > 반복문을 공부하고 있는 학생입니다. for, while문에 대해 1번 2번 문제와 풀이를 하는 중인데요, 답안을 보니 int num, int count라는 변수를 각각 사용했더라구요. 그런데 저는 num선언을 통해서만 작성했는데. 보통 반복문의 경우 count라는 변수를 별개로 선언하여 반복하는 횟수를 잡아 개발하는지 문의드립니다. 참고로 제가 작성한 코드는 아래와 같습니다. /* for(int count = 1; count<=10; count++){ System.out.println(count); } int count1 = 1; while (count1<=10){ System.out.println(count1); count1++; } */ int num = 2; while (num<=20){ System.out.println(num); num = num+2; } for(int num1=2; num1<=20; num1=num1+2){ System.out.println(num1); //num1++; }
민지
2025-12-02T20:21:27.679Z
댓글 1
좋아요 0
조회수 93
미해결
실전! 스프링 데이터 JPA
@PrePersist 가 있는 메서드는 영속성 컨텍스트에 엔티티를 저장할때 즉, save()나 persist() 호출 시점에 호출되는것인가요? 아니면 flush()이후에 INSERT쿼리가 실행되기 직전에 호출되는것인가요? @PreUpdate 가 있는 메서드는 엔티티의 변경 감지가 일어나고 트랜잭션 커밋 또는 em.flush()시점에 UPDATE쿼리가 실행되는데, 이 UPDATE쿼리가 실행되기 직전에 호출되는것이 맞을까요?
오리쉐리
2025-12-02T16:28:34.147Z
댓글 2
좋아요 0
조회수 124
해결됨
개발자를 위한 쉬운 도커
11월 초에 나온다고 하셔서 기다리고 있습니다. 아직 완강하지 않았더라도 연재식으로라도 강의 올려주셨으면 좋겠어요
docker 가상화 ci/cd docker-compose github-actions docker-volume docker-image container
kkhs1kim
2025-12-02T15:18:30.920Z
댓글 2
좋아요 2
조회수 159
해결됨
비전공자도 이해할 수 있는 Docker 입문/실전
윈도우의 Powershell 관리자 모드에서 실행했습니다. 강의를 보기 전에 노션 학습 자료 먼저 예습하고 있었는데, docker image ls를 제가 실행해 보니 전혀 다른 내용으로 출력됩니다. 이건 운영체제 차이인가요 아니면 최근에 바뀐 건가요?
docker docker-compose docker-volume docker-image container ecr
11 1
2025-12-02T14:36:49.715Z
댓글 2
좋아요 0
조회수 123
해결됨
수익형 AI Agent n8n 전문가 강의, 블로그·쇼츠 자동화
if로 분기해서 데이터가 존재하지 않았을때 생성해서 넘어가는것은 에러 없이 진행되는데 존재 할때는 저렇게 str에러가 발생합니다. 에어 테이블에서 받아올때 문제가 발생하는것같은데 어떻게 해야 할지를 모르겠습니다.
docker n8n 인공지능(ai) 프롬프트엔지니어링 ai-활용-(ax) 카카오공채-개발
stylebygio
2025-12-02T12:04:04.846Z
댓글 3
좋아요 0
조회수 72
해결됨
카카오 면접관이 알려주는 MSA 관점에서의 분산 트랜잭션 패턴
안녕하세요! 과거에, MSA 학습용으로 모의 주식 투자 서비스(?)를 만들어본 사람입니다. 당시에, 주식 매수의 기능을, 2개의 service 로 운영했었고, 이때 각 요청의 순서는 이벤트 기반으로 처리하였습니다. client -> stock service -> kafka -> payment service(이벤트 구독) 이때, 특정 문제에 대한 트랜잭션 보장을, 보장 로직을 통해 구현하였었습니다. 이때, kafka pub/sub 이벤트를 동기적으로 처리되었는지 확인하도록 구성해놓았었습니다. 주식 거래와 같은 일관성이 매우 중요한 서비스에서 어떤 방향성이 더 올바른(?) 방향이라고 생각하고, 어떤 생각을 가지고 계신지 궁금합니다. 현재 생각으로는, 2pc 를 채택하는게 더 올바른 선택이었다고 생각이 듭니다.
java spring mysql spring-boot msa
BeakGwa
2025-12-02T10:01:45.939Z
댓글 2
좋아요 0
조회수 123
미해결
한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편
안녕하세요 Tailwind CSS IntelliSense 작동이 안되서 그러는데 확인해 본 결과로 index.css에서 @import "tw-animate-css"; 이거와 @layer base { * { @apply border-border outline-ring/50; } body { @apply bg-background text-foreground; } } 이 코드가 들어가면 작동을 하지 않습니다 혹시 이게 왜 그럴까요...?
react typescript react-query supabase zustand
박 태영
2025-12-02T09:56:42.030Z
댓글 2
좋아요 0
조회수 92
해결됨
한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
강사님이 사용하시는 코드에서 오류가 났을때 빨간문자로 보이는 도움말? 은 무슨 플러그인을 사용하시는건가요?
javascript react node.js 카카오공채-개발
athena1998
2025-12-02T09:01:10.744Z
댓글 2
좋아요 0
조회수 75
해결됨
한 입 크기로 잘라먹는 Next.js
next.js 는 핸드북 없나요?
react typescript next.js 카카오공채-개발
dorasir
2025-12-02T08:19:33.458Z
댓글 2
좋아요 0
조회수 90
미해결
죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
킬구형 메타데이터쪽 update를 읽다가 이해가 안가는게 있는데 형이 update() 메서드는 매 트랜잭션의 커밋 직전에 호출된다. 단, 처리 도중 예외가 발생하여 트랜잭션이 롤백되는 경우에는 호출되지 않는다. 이는 실패한 처리 내용이 실행 정보에 반영되는 것을 방지한다. 라고 했는데 그러면 문제가 생겨서 update를 호출하지 않고 롤백이 됬다고 하면 open입장에서는 실패했는지 안했는지도 모르는거아니야? 실패를 해도 마지막으로 저장된 곳부터 다시 시작하니까 실패를 아예 저장을 안한다는거야? 재시작할때 메타테이블에서 execution값을 받아와서 괜찮은건가?
java spring spring-boot spring-batch backend
ABBCD
2025-12-02T08:04:38.855Z
댓글 2
좋아요 1
조회수 95
미해결
대세는 쿠버네티스 (초급~중급편)
아래 내용으로 파일을 만들면 해당 에러가 나오고있습니다.. apiVersion: v1 kind: Pod metadata: name: pod-1 labels: app: pod spec: nodeSelector: kubernetes.io/hostname: k8s-node1 containers: - name: container image: kubetm/app ports: - containerPort: 8080 올려주신 링크에들어가서 똑같이 만들고 노드랑도 다 지우고 재설치 했는데 계속 같은 증상입니다..
docker kubernetes devops container
ar
2025-12-02T07:45:41.525Z
댓글 2
좋아요 1
조회수 78
미해결
만들면서 배우는 리액트 : 기초
API 스펙이 변경되었네요! 제보 감사합니다. https://github.com/milooy/cat-jjal-maker/blob/main/answers/29-useEffect.html#L48 위 코드를 참고해서 fetchCat 함수를 변경해주세요. 위 답변해주신대로 소스를 변경해도 고양이 이미지가 엑박으로 뜨질 않습니다.
gangsugi
2025-12-02T07:13:31.859Z
댓글 1
좋아요 0
조회수 86
미해결
코드로 배우는 React 19 with 스프링부트 API서버
강의중에는 private long tno; private String title; private String content; private boolean complete; private LocalDate dueDate; 위와같은 설정인데, 왜 갑자기 private long tno; private String title; private String writer; private boolean complete; private LocalDate dueDate; 로 바뀌는 건가요? 이것에 대한 설명은 어디에 있는거죠? 몇강 몇분대에 있는지에 대해서 알려주시면 감사하겠습니다.
react typescript spring-boot jpa jwt
jhoh
2025-12-02T06:47:36.855Z
댓글 2
좋아요 0
조회수 76
미해결
김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 혹시 이 코드도 정답으로 인정되나요? package array.ex; import java.util.Scanner; public class ArrayEx6 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("입력받을 숫자의 개수를 입력하세요:"); int n = sc.nextInt(); System.out.println(n + "개의 정수를 입력하세요:"); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } int max = Integer.MIN_VALUE; int min = Integer.MAX_VALUE; for (int i = 0; i < n; i++) { max = Math.max(max, arr[i]); min = Math.min(min, arr[i]); } System.out.println("가장 작은 정수: " + min); System.out.println("가장 큰 정수: " + max); } }
lgh8079
2025-12-02T06:11:34.044Z
댓글 1
좋아요 0
조회수 88
미해결
대세는 쿠버네티스 (초급~중급편)
사진 보내 드린것처럼 파드를 만들면 해당 에러가 게속나오는데 이유가 뭘까요...
docker kubernetes devops container
ar
2025-12-02T05:34:43.255Z
댓글 4
좋아요 1
조회수 149
미해결
도커 마스터즈! CI/CD, DevSecOps로 자동화 보안 실무까지!
안녕하세요. 강의 내용 알차게 잘 듣고 있습니다. 다만, 강사님과 같이 docker inspect nginx:1.28.0-alpine3.21-slim 명령을 실행했을 경우 GraphDrvier 항목을 찾을 수 없고 바로 RootFS 항목만 확인되어 질문 드립니다. root@vagrant:~# docker images i Info → U In Use IMAGE ID DISK USAGE CONTENT SIZE EXTRA nginx:1.28.0-alpine3.21-slim ce2bd4775ed6 20.6MB 6.29MB root@vagrant:~# docker inspect nginx:1.28.0-alpine3.21-slim [ { "Id": "sha256:ce2bd4775ed6859d35f47d65401ee9f35f1dd00b32ed05f0ce38b68aa1830195", "RepoTags": [ "nginx:1.28.0-alpine3.21-slim" ], "RepoDigests": [ "nginx@sha256:ce2bd4775ed6859d35f47d65401ee9f35f1dd00b32ed05f0ce38b68aa1830195" ], "Comment": "buildkit.dockerfile.v0", "Created": "2025-08-13T16:03:17Z", "Config": { "ExposedPorts": { "80/tcp": {} }, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "NGINX_VERSION=1.28.0", "PKG_RELEASE=1", "DYNPKG_RELEASE=1" ], "Entrypoint": [ "/docker-entrypoint.sh" ], "Cmd": [ "nginx", "-g", "daemon off;" ], "WorkingDir": "/", "Labels": { "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>" }, "StopSignal": "SIGQUIT" }, "Architecture": "arm64", "Variant": "v8", "Os": "linux", "Size": 5802435, "RootFS": { "Type": "layers", "Layers": [ "sha256:982780712fdf5e22c7ed01172785fd7059a9ec11cb375c7133dc5b06c24250ff", "sha256:0d43a52040463d2c8abf5dbcfdf7494c64098f7eab47f4499e759d796c66d90c", "sha256:b81791db8dfbab361faf2ce24c74cf8da607971931576b0ba83e2dc8755af4e8", "sha256:098b681d959ad46239860f217c74a463292b5262fe004da34aa0414fe885a78e", "sha256:12d33c2f4dc442cbdfb0c830f359cfd92e0560c34678a1198ea68f281ada2d21", "sha256:76a1ff61253d86aafba3fd803cc79eb75dd573fb1ee00c6f716a8ea44dcfc414", "sha256:734a6dcc0d105722be038d38341a5f9c30a119082eaac2fa45fb8d51eb335451" ] }, "Metadata": { "LastTagTime": "2025-12-02T04:04:23.335181057Z" }, "Descriptor": { "mediaType": "application/vnd.oci.image.index.v1+json", "digest": "sha256:ce2bd4775ed6859d35f47d65401ee9f35f1dd00b32ed05f0ce38b68aa1830195", "size": 10293 } } ]
docker kubernetes ci/cd devsecops 보안-교육
taeho Kim
2025-12-02T04:49:04.081Z
댓글 2
좋아요 0
조회수 139