TechFeedTechFeed
Cloud & DevOps

깃허브 액션, 동시성, 진행 중 취소, 대기 줄 | 같은 브랜치 푸시가 분을 두 번 깎을까?

같은 풀리퀘스트에 커밋을 연타하면 깃허브 액션이 겹쳐 돕니다. 동시성 그룹에 워크플로와 브랜치를 넣고, 검사는 진행 중 취소를, 배포는 대기 줄 최대로 나눈다. 개발자, 깃허브, Next.js, 클라우드, 데브옵스, 백엔드, API, 도커 기준으로 분이 겹치는 칸만 보고 OIDC·재사용 워크플로 글과 자리를 섞지 않는다. 2026년 8월 공식 문서.

by

같은 풀리퀘스트에 커밋을 세 번 밀면, 깃허브 액션이 세 줄로 같이 돕니다. 기본은 동시 실행입니다. 동시성 그룹을 적으면 같은 키는 한 줄만 살아 있습니다. 진행 중 취소를 켜면 옛 줄이 멈추고 새 줄이 바로 올라갑니다. 배포 워크플로에서는 끄고, 대기 줄을 최대로 두면 최대 백 개까지 줄을 섭니다. 두 옵션을 같이 쓰면 검증 오류입니다. 저는 비공개 검수 저장소에서 고침을 연타하고 분이 세 배로 나간 그 아침이 있습니다. 장기 키는 OIDC 글에, 파일 중복은 재사용 워크플로 글에 있습니다. 여기는 분이 겹쳐 깎이는 칸만 봅니다.


숫자는 2026년 8월 깃허브 액션 동시성 문서와 5월 7일 대기 줄 변경 로그 기준입니다.


같은 브랜치에 액션이 세 줄로 겹치면 분이 어디서 깎이나

동시성 키를 안 적으면 같은 브랜치의 워크플로가 동시에 돕니다. 비공개 저장소의 깃허브 호스트 러너는 그 시간만큼 계정 분을 깎습니다.


공식 문서는 기본이 동시 실행이라고 적습니다. 푸시를 연타하면 검사, 빌드, 플레이라이트가 옛 커밋과 새 커밋에서 같이 돕니다. 실패한 잡도 분을 씁니다. 10분짜리 잡이 5분에 깨지고, 고친 뒤 10분을 다시 쓰면 합은 15분입니다. 분은 저장소 주인 계정에 붙고, 버튼을 누른 사람에게 안 붙습니다.


개인 무료 플랜의 비공개 저장소는 한 달에 2,000분이 기본입니다. 조직 무료도 같습니다. 프로와 팀은 3,000분, 엔터프라이즈 클라우드는 50,000분입니다. 공개 저장소의 표준 호스트 러너와 깃허브 페이지, 디펜더봇은 그 한도에 안 들어갑니다. 큰 러너는 공개여도 항상 과금입니다. 저는 12개 사이트 중 비공개 검수 저장소에서 플레이라이트를 돌리다가, 같은 풀리퀘스트에 고침을 세 번 밀고 분이 세 배로 나간 날을 봤습니다. 화면 클릭 칸은 플레이라이트 글입니다. 오늘은 줄이 겹치는 칸만 봅니다.


동시성 없음그룹만진행 중 취소
돌아가는 줄제한 없음그룹당 하나그룹당 하나. 새 줄이 옛 줄을 끊음
대기 줄없음. 바로 시작기본 하나. 더 오면 이전 대기가 취소대기보다 취소를 우선
잘 맞는 자리서로 안 겹치는 잡배포, 스테이징 한 줄풀리퀘스트 검사, 최신 커밋만
이 글에서 안 보는 칸러너 종류 고르기OIDC 역할컴포지트 액션 파일

파이프라인 뼈대는 액션 가이드에 있습니다. 월 비용이 커진 사례는 비용 사례 글입니다. 두 글은 캐시와 러너 종류를 봅니다. 여기는 같은 키가 한 줄만 살게 하는 칸입니다.


깨진 잡도 분을 씁니다 | 의존성이 없어서 5분에 멈추면 5분이 나갑니다. 고친 뒤 10분을 다시 쓰면 합은 15분입니다. 겹친 옛 줄까지 돌면 그 시간도 더해집니다.


그룹 이름에 워크플로와 브랜치를 같이 넣는 이유

그룹 문자열은 저장소 전체에서 공유됩니다. 워크플로 이름을 안 넣으면, 검사 줄이 배포 줄을 끊을 수 있습니다.


문서는 그룹을 아무 문자열이나 식이라고 적습니다. 쓸 수 있는 식 칸은 깃허브, 입력, 변수, 니즈, 전략, 매트릭스입니다. 워크플로 위에 두면 실행 전체가 한 그룹입니다. 잡 아래에 두면 그 잡만 묶입니다. 대소문자는 구분하지 않습니다. prodProd는 같은 줄입니다.


공식 예는 ${{ github.workflow }}-${{ github.ref }}입니다. 워크플로 이름을 앞에 두면, 검사 파일과 배포 파일이 같은 브랜치여도 서로 안 끊습니다. 브랜치만 넣으면 저장소의 모든 워크플로가 한 키를 씁니다. 문서가 그 실수를 따로 적습니다. 재사용 워크플로 파일 칸은 이전 글입니다. 오늘은 키 문자열만 봅니다.


풀리퀘스트 검사는 워크플로와 브랜치를 묶어 진행 중 취소를 켠다
name: ci on: pull_request: push: branches: - main concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: npm test
같은 브랜치에서 깃허브 액션 워크플로가 겹치지 않게 동시성 그룹으로 한 줄만 남기는 화면
그룹 이름에 워크플로와 브랜치를 같이 넣는다. 브랜치만 넣으면 다른 파일까지 끊긴다

빠른 갈래 | 검사 파일은 워크플로 이름과 브랜치를 묶고 진행 중 취소를 켭니다. 배포 파일은 같은 식을 쓰되 취소는 끕니다. 키를 저장소 전역 한 단어로 두지 않습니다.


배포 워크플로에서 진행 중 취소를 켜면 무엇이 잘릴까

배포 중에 새 푸시가 오면, 진행 중 취소가 켜져 있으면 업로드가 중간에 끊깁니다. 스테이징과 운영은 한 줄씩 끝까지 가게 둡니다.


문서는 스테이징처럼 충돌이 나면 안 되는 자리에 그룹을 쓰라고 적습니다. 그 자리에서는 돌아가는 줄을 끊지 않습니다. cancel-in-progress를 빼거나 거짓으로 두면, 새 실행은 대기가 되고 돌아가는 줄은 끝까지 갑니다. 기본 대기 깊이는 하나입니다. 대기가 이미 있으면 그 대기는 취소되고, 새 실행이 그 자리를 받습니다.


저는 버셀 프리빌트 배포를 액션이 아니라 로컬 스크립트로 올립니다. 그래도 태그 푸시로 릴리스 잡을 돌리는 저장소가 있으면, 그 잡은 취소를 켜지 않습니다. 클로드 코드가 액션을 도는 칸은 가이드 6편입니다. 시크릿 장기 키를 빼는 칸은 OIDC 글입니다. 여기는 배포 줄이 중간에 죽는 칸만 봅니다.


운영 배포는 같은 그룹에서 한 줄만 돌리고 진행 중 취소는 끈다
name: deploy-production on: push: branches: - main concurrency: group: production-deploy queue: max jobs: deploy: runs-on: ubuntu-latest environment: production steps: - uses: actions/checkout@v4 - run: npm run build

대기 줄은 기본 하나, 최대로 두면 백 개까지

2026년 5월 7일부터 대기 줄을 최대로 열 수 있습니다. 기본은 하나이고, 최댓값은 백 개입니다. 진행 중 취소와는 같이 못 씁니다.


예전에는 그룹마다 돌아가는 줄 하나와 대기 하나였습니다. 세 번째가 들어오면 대기 중이던 줄이 취소되고 새 줄이 그 자리를 받았습니다. 변경 로그는 queue: max를 넣으면 대기가 백 개까지 쌓인다고 적습니다. 백 개가 찬 뒤의 실행은 취소됩니다. 공식 하우투도 같은 숫자를 적습니다. 기본값 이름은 single입니다.


순서는 디스패치 시각이 아니라, 그룹에서 기다리기 시작한 시각의 선입선출입니다. 실제 시작 시각이 흔들리면 순서는 보장되지 않는다고 문서가 못 박습니다. 운영 배포처럼 끊으면 안 되는 줄은 취소를 끄고 대기 줄을 최대로 둡니다. 검사 줄은 최신 커밋만 보면 되므로 취소를 켭니다. 두 키를 한 블록에 같이 쓰면 워크플로 검증이 실패합니다.


설정돌아가는 줄대기같이 못 쓰는 것
그룹만 (기본 대기)하나하나. 새 대기가 옛 대기를 교체없음
queue: max하나최대 100. 넘치면 추가분 취소진행 중 취소 참
진행 중 취소 참하나. 옛 줄 즉시 취소최신만 남김대기 줄 최대

운영 배포만 대기 줄을 최대로 연다
on: push: branches: - main concurrency: group: production-deploy queue: max
깃허브 액션 동시성 그룹에서 기본 대기 하나와 최대 백 개 대기 줄을 나눈 비교
2026년 5월 7일부터 대기 줄 최대가 열렸다. 진행 중 취소와는 한 블록에 못 넣는다

풀리퀘스트만 취소를 켜고 릴리스 가지는 남기는 식

진행 중 취소는 식도 받습니다. 릴리스 가지 이름만 빼면, 개발 브랜치는 끊고 릴리스는 끝까지 갑니다.


문서 예는 cancel-in-progress: ${{ !contains(github.ref, 'release/') }}입니다. release/1.2.3에 푸시가 겹쳐도 돌아가는 줄은 남습니다. main이나 기능 가지에서는 옛 줄이 취소됩니다. 식에 쓸 수 있는 칸은 그룹과 같습니다. 잡 아이디처럼 아직 없는 값은 이 시점에 못 읽습니다.


한 파일에 풀리퀘스트와 푸시를 같이 걸어 두면, 가지 이름으로 갈라지는 이 식이 짧습니다. 배포 전용 파일로 나누는 편이 더 읽기 쉬우면 파일을 나눕니다. 의존성 봇 풀리퀘스트가 쌓이는 칸은 디펜더봇 체크리스트입니다. 봇 피알도 같은 검사 그룹을 쓰면, 최신 커밋만 남기고 옛 줄은 끊깁니다.


릴리스 가지 이름만 진행 중 취소를 끈다
concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ !contains(github.ref, 'release/') }}

없는 칸을 그대로 넣지 않습니다 | 헤드 레프는 풀리퀘스트에만 있습니다. 문서가 그 자리에는 런 아이디 폴백을 쓰라고 적습니다. 안 넣으면 문법 오류입니다.


헤드 레프가 없는 이벤트는 런 아이디로 떨어뜨린다

github.head_ref는 풀리퀘스트에만 있습니다. 푸시와 워크플로 디스패치에는 없어서, 그대로 넣으면 문법 오류입니다.


문서는 폴백으로 github.run_id를 쓰라고 적습니다. 런 아이디는 실행마다 있고 겹치지 않습니다. 풀리퀘스트가 아니면 그룹이 실행마다 달라져서, 사실상 취소를 안 합니다. 풀리퀘스트일 때만 같은 헤드 브랜치가 한 그룹이 됩니다.


잡 단위로 묶을 때는 매트릭스 값을 그룹에 넣을 수 있습니다. 같은 잡이 운영체제마다 갈라질 때, 매트릭스 칸을 키에 붙이면 서로 안 기다립니다. 니즈 칸도 잡 단위 동시성에서 쓸 수 있습니다. 워크플로 맨 위 동시성에는 니즈가 아직 없습니다. 시크릿을 프론트 번들에 넣는 사고는 환경변수 체크리스트입니다. 여기는 키가 비는 이벤트만 봅니다.


풀리퀘스트만 헤드 브랜치로 묶고, 그 외는 런 아이디로 고유 그룹을 만든다
concurrency: group: ${{ github.head_ref || github.run_id }} cancel-in-progress: true
풀리퀘스트 헤드 브랜치와 런 아이디 폴백으로 동시성 그룹을 나누는 흐름
헤드 레프는 풀리퀘스트에만 있다. 없으면 런 아이디로 떨어뜨려 문법 오류를 막는다

리눅스 표준 러너 초과분은 분당 0.006달러, 윈도우는 0.010달러, 맥은 0.062달러입니다. 무료 한도를 넘기고 결제 수단이 없으면 실행이 막힙니다. 결제 수단이 있으면 예산을 따로 걸 수 있고, 포함 사용량이 90퍼센트와 100퍼센트에 메일 알림이 갑니다. 숫자는 2026년 8월 과금 문서 기준입니다. 카드 부가가치세는 계정 국가와 세금 설정에 따라 달라서, 여기서 단정하지 않습니다.


참고 자료


플랜 분과 분당 요금은 쓰는 계정 화면이 우선입니다. 위 표는 2026년 8월 공개 문서 기준입니다.


자주 묻는 질문

공개 저장소도 동시성을 넣나?

표준 호스트 러너는 공개 저장소에서 분이 안 깎입니다. 그래도 큐가 밀리고 결과가 엇갈리면 그룹을 넣습니다. 큰 러너는 공개여도 과금이라, 그 자리는 취소를 먼저 켭니다.


잡마다 그룹을 나눠야 하나?

워크플로 위에 두면 실행 전체가 한 줄입니다. 긴 배포 잡만 직렬이 필요하면 그 잡 아래에 둡니다. 검사 잡은 매트릭스 값을 키에 붙여 병렬을 유지합니다.


대기 줄 최대와 진행 중 취소를 같이 쓰나?

못 씁니다. 문서가 검증 오류라고 적습니다. 최신 커밋만 보면 취소를 켭니다. 배포처럼 순서가 필요하면 취소를 끄고 대기 줄을 최대로 둡니다.


무료 2,000분이 리눅스 기준인가?

포함 분은 플랜 숫자입니다. 개인 무료와 조직 무료는 비공개 저장소 월 2,000분입니다. 초과분은 러너 종류별 분당 요금이 붙습니다. 리눅스 2코어는 0.006달러, 윈도우 0.010달러, 맥 0.062달러입니다.


워크플로 이름만 그룹에 넣으면?

모든 브랜치가 한 줄을 싸웁니다. 기능 가지 검사가 메인 배포를 기다리거나 끊습니다. 워크플로와 브랜치를 같이 넣는 공식 예가 그 구멍을 막습니다.


클로드 코드 액션에도 붙이나?

그 워크플로가 같은 브랜치에서 겹치면 붙입니다. 설치와 권한 칸은 가이드 6편입니다. 오늘은 분이 겹치는 키만 봅니다. 시크릿 전달은 재사용 워크플로 글입니다.


깃허브 액션동시성진행 중 취소대기 줄CI/CD개발자깃허브Next.js클라우드데브옵스백엔드API도커

함께 보면 좋은 문제 해결

EXPLORE / Cloud & DevOps

이어서 읽어보기

전체 토픽 둘러보기