Study Blog
목록으로
DevOps· 2분 읽기

git clone과 CI(지속적 통합) 이해하기

#git#CI#npm#기초

git clone이란

먼저 Git이 뭔지 알아야 한다. Git은 코드의 변경 이력을 기록하는 버전 관리 시스템이다. 쉽게 말하면 "코드의 저장 + 히스토리 관리" 도구다.

그리고 GitHub는 그 Git 저장소를 인터넷에 올려두는 서비스다.

git clone은 인터넷에 있는 코드를 내 컴퓨터로 복사해오는 명령어다.

git clone https://github.com/facebook/react

이 명령어 하나면 React 소스코드 전체가 내 컴퓨터에 복사된다.

CI(Continuous Integration), 지속적 통합

팀으로 개발할 때 여러 명이 각자 코드를 작성한다.

개발자A → 회원가입 기능 작성
개발자B → 결제 기능 작성
개발자C → 상품 목록 기능 작성

각자 따로 작성하다가 합치면 이런 문제가 발생한다.

A코드 + B코드 → 충돌! 오류 발생
A코드 + C코드 → 충돌! 오류 발생

예전에는 이걸 며칠에 한 번씩 수동으로 합쳤는데, 오래 기다릴수록 충돌이 더 많이 쌓여서 해결하기 힘들었다.

CI가 해결하는 방법

"코드를 합칠 때마다 자동으로 테스트를 돌려줘"가 CI의 핵심이다.

개발자A가 코드 올림
    ↓
CI가 자동으로 실행 → 전체 코드 합쳐서 테스트 돌림
    ↓
문제 없음 → "통과" 알림
문제 있음 → "오류 발생" 알림

오류가 생기면 바로 알려주니까 빨리 고칠 수 있다.

CI 서비스 예시

CI를 해주는 도구가 있다.

  • GitHub Actions — GitHub에서 만든 CI 도구 (가장 많이 씀)
  • Jenkins — 오래된 CI 도구
  • CircleCI — 유명한 CI 서비스

CI 서버란

코드를 자동으로 테스트하고 배포해주는 컴퓨터다. 내 컴퓨터가 아니라 어딘가에 있는 별도의 컴퓨터가 자동으로 일을 해준다.

개발자가 코드를 GitHub에 올림
        ↓
CI 서버가 자동으로 감지
        ↓
CI 서버가 자동으로 실행:
  1. git clone (코드 받아오기)
  2. npm ci    (패키지 설치)
  3. npm test  (테스트 실행)
  4. npm build (빌드)
        ↓
성공 → 배포
실패 → 개발자한테 알림 "오류났어요!"

왜 CI 서버에서 npm ci를 쓰는가

CI 서버는 매번 새로 시작하는 깨끗한 환경이다.

내 컴퓨터  → node_modules 이미 있음, 개발하면서 이것저것 설치됨
CI 서버    → 아무것도 없는 깨끗한 상태에서 시작

그래서 CI에서는:

npm i   # package.json 기준 → 버전이 살짝 달라질 수 있음 → 위험
npm ci  # lock 파일 기준 → 항상 똑같은 버전 → 안전

"내 컴퓨터에서는 됐는데 서버에서는 안 돼요"라는 문제를 막기 위해 npm ci를 사용한다.

npm ci의 ci는 Continuous Integration의 약자다. CI 환경에서는 항상 동일한 결과가 나와야 하니까 lock 파일 기준으로 정확하게 설치하는 것이다.

npm i vs npm ci 사용 시점

npm i — 주로 로컬(내 컴퓨터)에서 사용:

- 새 패키지 설치할 때
- 처음 프로젝트 세팅할 때
- 개발하면서 의존성 추가/변경할 때

npm ci — 주로 CI 서버에서 사용:

- CI 서버에서 자동 실행할 때
- 팀원 코드 받아서 똑같은 환경 맞출 때
- 배포할 때

관련 글