DevOps = Development + Operation
즉, 개발과 운영을 분리하지 않고 유기적으로 연결하는 방식이다.
기존에는 개발팀이 소프트웨어를 만들고, 운영팀이 배포와 서버 관리를 따로 담당했다.
하지만 DevOps에서는 개발, 테스트, 배포, 운영이 하나의 흐름 안에서 빠르게 반복된다.
DevOps의 목적은 다음과 같다.
신규 소프트웨어 또는 수정된 소프트웨어를 빠르게 개발하고,
고객에게 최대한 빠르게 출시·배포하기 위한 체계와 철학
DevOps는 한 번 개발하고 끝나는 방식이 아니라, 계속 반복되는 구조다.

이 흐름이 무한대 기호처럼 반복된다.
| 단계 | 의미 |
|---|---|
| Plan | 개발할 기능과 작업 계획 |
| Code | 실제 코드 작성 |
| Build | 실행 가능한 형태로 빌드 |
| Test | 오류가 없는지 테스트 |
| Release | 배포 가능한 버전으로 준비 |
| Deploy | 실제 서버에 배포 |
| Operate | 서비스 운영 |
| Monitor | 서비스 상태 감시 |
핵심은 빠르게 만들고, 빠르게 테스트하고, 빠르게 배포하고, 다시 개선하는 것이다.
DevOps에는 여러 도구들이 함께 사용된다.
대표적인 도구는 다음과 같다.

| 영역 | 도구 예시 | 역할 |
|---|---|---|
| 계획 | Jira, Trello | 작업 관리 |
| 코드 관리 | Git, GitHub | 형상관리, 버전관리 |
| 빌드/테스트 자동화 | Jenkins | CI/CD 파이프라인 자동화 |
| 컨테이너 | Docker | 실행 환경 패키징 |
| 컨테이너 오케스트레이션 | Kubernetes | 여러 컨테이너 관리 |
| 설정/인프라 관리 | Chef, Puppet | 서버 환경 자동 설정 |
| 모니터링 | Nagios 등 | 운영 상태 감시 |

도커:
애플리케이션을 실행 환경까지 묶어서 어디서든 똑같이 실행되게 해주는 도구.
도커 컨테이너:
도커 이미지로 실행된 독립적인 실행 공간. 앱이 실제로 돌아가는 작은 가상 실행 환경.
젠킨스:
Git에서 코드를 가져와 빌드, 테스트, 배포 과정을 자동으로 실행해주는 CI/CD 자동화 도구.
쿠버네티스:
여러 개의 도커 컨테이너를 서버들 위에서 자동으로 배포·관리·복구해주는 도구.
PXEBOOT:
USB나 디스크 없이 네트워크를 통해 서버나 컴퓨터를 부팅하는 방식.
Chef:
여러 서버의 설치, 설정, 패키지 관리 등을 코드처럼 자동화해주는 서버 설정 관리 도구.
Jira는 팀 프로젝트에서 작업을 관리하는 도구다.
예를 들어 기능 개발, 버그 수정, 테스트 작업 등을 등록하고 담당자를 지정할 수 있다.
할 일 → 진행 중 → 완료
이런 식으로 작업 상태를 관리한다.

Trello는 Kanban 스타일의 작업 관리 도구다.
Kanban은 작업을 카드 형태로 두고, 상태에 따라 이동시키는 방식이다.
Backlog → Design → To Do → Doing → Code Review → Testing → Done
즉, 지금 어떤 작업이 어느 단계에 있는지 한눈에 볼 수 있다.

개발 단계에서는 보통 다음 두 가지를 사용한다.
IDE + 버전관리 시스템
코드를 작성하고 실행하는 개발 환경이다.
예시:
Eclipse, IntelliJ, VSCode
Git은 형상관리 시스템, 즉 버전관리 도구다.
코드의 변경 이력을 저장하고, 여러 명이 협업할 수 있게 해준다.
git clone git://git.kernel.org/pub/scm/git/git.git
원격 저장소의 프로젝트를 내 컴퓨터로 복제하는 명령어다.
주의할 점은, Git으로 받은 폴더가 바로 Eclipse 프로젝트로 실행 가능한 형태가 아닐 수도 있다는 것이다.
즉, clone은 단순히 저장소를 복제하는 작업이다.
git branch
현재 저장소의 브랜치를 확인하는 명령어다.
브랜치는 쉽게 말해 작업 공간의 갈래다.
예를 들어 main 브랜치에는 안정적인 코드가 있고, 새로운 기능은 별도 브랜치에서 개발할 수 있다.
main
└── search_revision
git tag -l
저장소에 저장된 프로젝트 버전 목록을 확인하는 명령어다.
예를 들어 v1.0, v1.1 같은 특정 버전을 표시할 때 사용한다.
git switch -c new 1.3.11
브랜치를 전환하거나 새 브랜치를 만들 때 사용한다.
기존 방식으로는 다음 명령어도 사용했다.
git checkout -b <new branch>
git add .
git commit -m "변경 사항 기록"
git add는 변경된 파일을 staging area에 올리는 작업이다.
git commit은 변경 내용을 로컬 저장소에 저장하는 작업이다.
중요한 점은 다음과 같다.
commit은 내 컴퓨터의 로컬 저장소에만 반영된 것이다.
아직 GitHub 같은 원격 저장소에는 올라가지 않았다.
git push -u origin master
로컬 저장소의 commit 내용을 원격 저장소에 업로드하는 명령어다.
내 컴퓨터의 commit → GitHub에 반영
git merge는 다른 브랜치에서 작업한 내용을 현재 브랜치에 합치는 명령어다.
예를 들어 search_revision 브랜치에서 기능 개발을 끝낸 뒤 main 브랜치에 합칠 수 있다.
search_revision에서 기능 개발
↓
테스트 완료
↓
main 브랜치로 merge
Docker는 프로그램을 실행하는 데 필요한 환경을 컨테이너로 묶어주는 도구다.
쉽게 말하면,
“내 컴퓨터에서는 되는데요?” 문제를 줄이기 위해
실행 환경 자체를 포장해서 어디서든 똑같이 실행되게 만드는 기술이다.

한 줄 요약:
기존 가상머신 = 앱 + 운영체제를 통째로 실행
도커 컨테이너 = 운영체제는 공유하고 앱 실행 환경만 분리
Dockerfile은 Docker 이미지를 만들기 위한 설정 파일이다.
주요 명령어는 다음과 같다.
| 명령어 | 의미 |
|---|---|
| FROM | 기반 이미지 지정 |
| WORKDIR | 작업 디렉토리 설정 |
| COPY | 파일 복사 |
| RUN | 이미지 생성 중 실행할 명령 |
| CMD | 컨테이너 실행 시 실행할 명령 |
FROM golang:1.2
WORKDIR /usr/src/app
COPY . .
RUN go build rpserver.go
CMD ["rpserver"]
EXPOSE 5060
Go 언어 실행 환경을 기반으로 하고,
작업 폴더를 설정한 뒤,
현재 파일들을 복사하고,
Go 파일을 빌드한 뒤,
컨테이너 실행 시 rpserver를 실행한다.
#이미지 빌드
docker build -t rpserver .
#현재 폴더의 Dockerfile을 사용해 `rpserver`라는 이름의 이미지를 만든다.
#컨테이너 실행
docker run -dp 127.0.0.1:5000:5000 rpserver
#rpserver 이미지를 컨테이너로 실행한다.
#포트 매핑:내 컴퓨터의 5000번 포트 → 컨테이너의 5000번 포트
Kubernetes는 여러 개의 Docker 컨테이너를 관리하는 도구다.
Docker가 컨테이너 하나를 실행하는 데 초점이 있다면,
Kubernetes는 여러 서버와 여러 컨테이너를 체계적으로 운영하는 데 초점이 있다.
줄여서 k8s라고 부른다.
Cluster
├── Node 1
│ ├── Pod
│ └── Pod
└── Node 2
├── Pod
└── Pod

Node 안에 Pod가 있고,
Pod 안에서 Container가 실행된다.kubelet이라는 에이전트가 존재한다. kubelet은 해당 Node에서 Pod와 컨테이너가 잘 실행되도록 관리한다.Node 안의 컨테이너 실행 담당자서비스 주소 → 실제 Pod 주소
또는 포트포워딩도 수행한다.
223.50.192.60:8000 → 192.168.1.120:5358
이 의미는 외부에서 223.50.192.60:8000으로 접속하면, 내부의 192.168.1.120:5358로 연결된다는 뜻이다.
<key, value> 형태로 클러스터 정보 저장 예를 들어 어떤 Node가 있는지, 어떤 Pod가 어디에 있는지 등의 정보를 관리한다.새 Pod 생성 요청
↓
가용한 Node 확인
↓
적절한 Node에 Pod 배치PXEBOOT는 네트워크를 통해 컴퓨터를 부팅하는 방식이다.
일반적으로 컴퓨터는 로컬 디스크나 USB로 부팅하지만, PXEBOOT는 네트워크를 통해 부팅 이미지를 받아 실행한다.
DevOps나 인프라 관리에서는 여러 서버를 자동으로 설치하거나 설정할 때 활용될 수 있다.
Chef는 서버 설정을 자동화하는 도구다.
예를 들어 여러 서버에 같은 설정을 반복해서 적용해야 할 때 수동으로 하나씩 설정하면 시간이 오래 걸린다.
Chef를 사용하면 설정 내용을 코드처럼 관리하고, 여러 서버에 자동으로 적용할 수 있다.
서버 설정 자동화 도구
DevOps에서는 이런 방식을 Infrastructure as Code, 즉 IaC라고도 볼 수 있다.
DevOps는 개발과 운영을 통합하여 소프트웨어를 빠르게 개발, 테스트, 배포, 운영하는 체계이다. CI/CD는 DevOps의 핵심으로, Git에 코드가 올라가면 Jenkins가 자동으로 코드를 가져와 빌드와 테스트를 수행하고, Docker 이미지로 실행 환경을 통일한 뒤 Kubernetes를 통해 컨테이너를 배포·운영할 수 있다. Docker는 애플리케이션 실행 환경을 컨테이너로 묶어 “내 컴퓨터에서는 되는데요” 문제를 줄이고, Kubernetes는 여러 Node와 Pod에서 컨테이너를 안정적으로 관리한다.