✅ 이것만은 꼭 정리해놓자!
github actions
Workflow
워크플로우(Workflow) :: CI CD에 필요한 과정을 자동화 해놓은 것을 의미한다. 과정이 자동화 wrapper에 쌓여져 자동화화 된 느낌이다. 이 워크플로우를 YAML 파일을 통해 설정한다. .github/workflows 폴더 아래 YAML 파일을 만들어서 과정을 관리한다. 여러개의 YAML 파일을 만들 수 있다.
각 YAML 파일에는 크게 두가지 속성을 통해 과정을 서술한다. on 과 jobs 이다 on 의 경우 언제 과정을 실행 할 것인지 지정한다. jobs 의 경우 실행 할 것을 정의한다. 형태는 아래와 같다.
on:
push:
branches:
- main
jobs:
# ...(생략)...
on:
schedule:
- cron: "0 0 * * * "
jobs:
# ...(생략)...
Jobs
가상머신 또는 컨테이너에서 실행하는 처리 단위이다. 적어도 한개의 작업으로 구성되어야 한다. 기본 설정은 동시에 작업이 실행되는 구조이다. 그렇지만 작업 순서를 제어 할 수 있다. jobs 속성 안에 하위 job 을 두어서 기술한다.
3개의 하위 작업 추가하기
.github/workflows/example.yml
# ...(생략)...
jobs:
job1:
# job1에 대한 세부 내용
job2:
# job2에 대한 세부 내용
job3:
# job3에 대한 세부 내용
작업 세부 내용 지정하기
.github/workflows/example.yml
# ...(생략)...
jobs:
job1:
runs-on: ubuntu-latest
steps:
# ...(생략)...
하나의 작업에 대해 세부 내용을 지정할 수 있다. 이 때 필수로 runs-on 속성 지정을 통해 실행 환경을 지정해주어야한다. 위의 예제에선 우분투 최신 환경으로 설정해주었다. 그 다음 steps 속성을 설정한다. 해당 속성은 하위 잡( job1 )이 순차적인 작업으로 실행될 때 필요하다. 작업 단계 안에는 (command, script, action)이 있고 (command, script) 실행 시 run 속성을 (action) 사용시 uses 속성을 사용한다.
.github/workflows/example.yml
#...(생략)...
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm install
- run: npm test
위 코드에서 steps 내 작업과정 명시할 때 단계 앞에 - 를 붙여주어야 한다. 그리고 중요한 action인데 하는 역할은 특정 작업이 범용적으로 사용되는 작업일 경우 재사용이 가능하게 컴포넌트처럼 구성할 수 있다. 개인적으로 Action을 만들 수 있고 Marketplace에 있는 공용 Action을 사용할 수 있다.
정리
YAML 파일을 통해 JOB을 지정하여 CI·CD 과정을 Workflow화 한 것이라고 할 수 있다.
참고링크
Nginx
웹서버이다. 웹서버는 클라이언트의 HTTP 요청을 받아 Web contents를 전달하는 역할을 수행한다. Web contents 에는 웹페이지, 이미지, 비디오 그리고 기타 파일이 있다. 해당 소프트웨어 는 웹 트래픽을 처리하기 위해 디자인 되었다.
특징
높은 성능
자원을 많이 소모하지 않으면서 웹 트래픽을 효율적으로 처리한다.
확장성
증가하는 트래픽을 처리할 수 있는 능력
유연성
여러 운영체제(Window, Unix, Linux)와 같이 사용할 수 있다.
여러 언어와 프레임워크와 함께 사용할 수 있다.
기능
리버스 프록시
클라이언트와 웹서버 중간에 위치함으로써 중계기 역할을 수행한다. 클라이언트 요청이 들어와 특정 웹서버로 가기전에 중계기가 어느 웹서버로 갈지 안내해 준다. 리버스 프록시에는 다음과 같은 기능이 있다. *로드밸런싱, *보안 *캐싱 *SSL/TLS종료. 로드밸런싱은 트래픽을 분산시켜서 하나의 웹서버에 트래픽이 가중되지 않게 한다. 보안은 자원을 응답해주는 웹서버의 아이피 주소를 숨김으로써 웹공격으로 부터 보호한다. 캐싱은 클라이언트가 자주 요청하는 리소스를 리버스 프록시 서버 안의 메모리나 디스크에 저장한다. 저장 기간, 리프레쉬 기간, 제외할 자원 등. 프록시 서버 설정을 통해 자원을 관리할 수 있다.
종류
Apache, Nginx, NodeJs
Docker
운영체제와 상관 없이 앱이 동작할 수 있는 환경을 컨테이너로 만들어 해당 컨테이너 안에서 앱이 동작할 수 있게 한다.
도커를 사용하는 이유?
portable
도커를 실행할 수 있는 환경이 구축되어 있다면 운영체제와 상관없이 어플리케이션을 실행할 수 있는 환경을 일관성 있는 방법으로 구축할 수 있다.
scalability
컨테이너 환경으로 관리하기 때문에 서비스 규모에 맞게 앱이 있는 컨테이너 개수를 늘이거나 줄임으로써 탄력적으로 대응할 수 있다.
consistency
앱의 운영환경을 구축하는데 있어 방법을 제공함으로써 일관성 있게 운영환경을 관리할 수 있다. 따라서 내 컴퓨터 뿐만 아니라 다른 사람의 컴퓨터에서도 앱이 구동될 수 있다.
efficiency
컨테이너 환경을 구축하는데 있어 컴퓨터의 리소스를 많이 사용하지 않기 때문에 컨테이너를 관리하는데 많은 비용이 들지 않아 빠르다. 이런 특성으로 CI·CD에 들어가는 전반적인 비용이 적다.
security
앱 별 격리된 환경을 제공하기 때문에 어플리케이션을 보호할 수 있다.
자동 배포를 하는 이유?
서비스 이용자 입장에서 개발자가 작성한 코드가 운영서버에 빠르게 적용되면 서비스를 이용하는 이용자들의 만족감이 올라간다.
개발자 입장에서 배포에 필요한 여러 단계를 자동화함으로써 반복적인 작업을 없앨 수 있다.
'DevOps' 카테고리의 다른 글
CI · CD 4회 (0) | 2023.03.06 |
---|---|
CI · CD 3회 (0) | 2023.03.02 |
CI · CD 2회 (0) | 2023.02.28 |