시스템 인프라 운영 및 개발자와의 소통
혹은 상황에 따라 직접 개발 할 수도있는데 이러한 경우에 빌드와 배포에 대해서도 알아야한다.
문제가 발생했을때 , 빌드된 결과 때문인지? 배포중 오류가 난건지 구분해야 빨리 대응가능하기 때문입니다.
우선 빌드 배포를 알기전에
컴파일에 대해서 알아야합니다.
컴파일이란 무엇인가 ?
사람이 쓴 소스코드(.py, .java 등)를 컴퓨터가 실행할 수 있게 기계어로 번역하는 과정
아래 같은 코드를 작성한 것을 기계어(기계가 이해할 수 있게)로 번역.
쉽게 설명 :
가) 개발자 : “이런 스마트폰 만들자!” 하고 설계도(소스코드)를 그림
나) 컴파일 : 사람이 이해할 수 있는 설계도(코드)를, 기계가 이해할 수 있는 실행 파일로 바꾸는 과정
빌드와 배포란 무엇인가 ?
1. 빌드 : 코드를 실행 가능하게 만드는 단계
쉽게 설명 : 공장에서 스마트폰을 조립해서 완제품으로 만드는 과정
개발자가 만든 코드를 실행 가능하게 만드는 것을 의미한다
2. 배포 : 실제 서버나 서비스에 반영하는 단계
쉽게 설명 : 완성된 스마트폰을 택배로 소비자에게 보내는 것
실제 진행 프로세스 :
가) 개발자 → 코드 작성
나) 컴파일 : 코드를 기계어로 번역
다) 빌드 : 실행 가능한 파일로 만듬 (.exe , 실행파일)
라) 배포 : 만든 실행프로그램을 다른사람에게 전달 (사용할 수 있게 서비스로 제공)
빌드 vs 배포 시 흔히 발생하는 오류
빌드 시점 오류
제품을 만들때 발생하는 문제
예시) 스마트폰 공장에서 조립하는 도중 문제 생김
- 의존성(Dependency) 문제
→ 조립하려 했더니 부품이 빠졌거나 호환 안됨 (갤럭시 21 카메라가 다른 모델(갤럭시 22)이랑 맞지 않음) - 컴파일/번들링 문제
→ 핸드폰의 나사 위치를 잘못 넣어서 고장이 남 - 테스트 코드 오류: 단위 테스트 실패로 빌드 중단
→ 만든 핸드폰이 작동 테스트에서 불합격 - 환경 설정 문제: 잘못된 빌드 변수(KEY, ENV)로 원하는 결과물 미생성
→ 조립시 공장 설정값이 잘못돼서 원하는 기능이 빠짐
배포 시점 오류
완성된 제품을 배송/판매할 때 생기는 문제
- 파일/이미지 누락
→ 택배 박스에 충전기 안 넣음 → 고객 컴플레인 - 네트워크 설정 오류
→ 집 주소는 맞는데 문이 잠겨있어 배달 못 함 - 권한 오류
→ 고객이 물건을 꺼내보려 했는데 포장 테이프가 안 뜯어짐 - 환경 변수 누락
→ 설명서 없이 제품만 보내서 기능을 못 씀 (예: Wi-Fi 설정이 빠짐) - 배포 전환 실패
→ 새로운 물건을 교체하려 했는데 새 제품이 고장남
빌드/배포는 복잡, 귀찮고 사람이 하면 실수가 생깁니다.
그래서 자동화를 진행합니다.
자동화(CI/CD)가 왜 필요한가?
자동화가 없으면?
수동 배포를 해야합니다 수동배포 시
- 사람이 매번 손으로 빌드/배포 → 실수, 누락, 속도 느림
- 개발자가 바뀌면 같은 작업 다시 못 함 (재현 불가)
-> 얼마나 비효율적입니까.. 그리고 퇴사하면 인수인계가 사실상 불가능하죠
자동화가 있으면?
- 버튼 한 번, 혹은 git commit 만 해도 자동으로 빌드 + 테스트 + 배포
- 오류 나면 자동 알림, 실패하면 자동 복구(롤백)
- 모든 과정을 코드로 남겨둬서 누구나 다시 실행 가능
- 팀 전체가 표준화된 방식으로 협업 가능
즉, 사람의 실수 없이 안정적으로 반복 가능한 프로세스를 만드는 게 핵심.
그래서 기업에서 자동화는 필수이며, 개발자뿐만아니라 시스템 운영자도 당연히 알아야합니다.
CI/CD 이해하기
- CI(Continuous Integration) 지속적 통합:
→ 코드가 변경될 때마다 자동으로 빌드 + 테스트 실행
대표적인 툴 : Jenkins, Github Action, Gitlab CI/CD 등 - CD(Continuous Deployment / Delivery) 지속적 배포:
→ (Delivery) 테스트 통과하면 배포 준비 →
→ (Deployment) 실제로 운영 환경에 자동 배포
대표적인 툴 : jenkins, ArgoCD, Flux 등
결과적으로 코드 커밋 → 빌드 → 테스트 → 배포 전체 흐름이 자동으로 연결되는 것이 CI/CD 입니다.
'서버 및 운영 > 운영' 카테고리의 다른 글
Hyper-V to vmware (0) | 2024.01.01 |
---|---|
리눅스 vmstat 명령어 (0) | 2022.07.06 |
쿠버네티스(Kubernetes)란? (0) | 2022.06.06 |
도커(Docker) 이미지 설치 및 컨테이너 실행 (0) | 2022.05.30 |
가상화란? (0) | 2022.05.12 |