Week 1-2. 프로젝트를 지속적으로 통합하고 배포하는 법
AWS / AWS S3 / CRA / CI/CD / GitHub Actions
두번째 강의 시간에는 CI/CD에 대해 배웠다.
CI/CD라는 용어 자체도 낯설고 개념이 와닿지 않았는데 이번 강의를 통해 대략적으로 어떤 것이구나 하는 감을 잡게 되었다.
코드 테스트와 배포를 자동화 해서, 빠르고 자주 배포할 수 있도록 하는 개념이라고 이해했다.
실습 과정도 자세하게 차근차근 알려주셨는데 직접 따라해 보면서 익히면 될 것 같다.
취업하기 전에 이런 개념들과 방법을 알고 있으면 회사에서 협업하는 데에도 큰 도움이 될거라 생각한다.
1. 서버와 클라우드 컴퓨팅 그리고 AWS
서버란 무엇일까?
IT 업계에서 서버란, ‘무언가를 제공해주는 컴퓨터’
서버는 물리적인 실체가 있는 컴퓨터이다.
그렇기에 무언가를 제공해주는 프로그램이 만들어져 있다.
'서버가 터졌다'라는 말의 뜻은 컴퓨터가 더이상 운영되지 않는 상황 등을 가리킨다.
서버 컴퓨터를 안정적으로 운영하는 것은 굉장히 중요한 이슈이다.
요즘과 같은 연말에는 서버 개발자들이 항상 주의를 기울이고 있는데,
연말에 트래픽이 몰릴 것을 대비하며 고민하는 백엔드, 인프라 개발자(은행, 메신저 회사 등)를 예시로 들 수 있다.
서버를 운영하는 방법
1. 온 프레미스
선이 굉장히 복잡한 서버실 컴퓨터 이미지를 떠올리면 된다.
모니터가 필요 없기 때문에 CPU, RAM, memory 등만 존재한다.
전력과 공조 시스템이 필수적이고, 에어컨이 24시간 가등된다.
- 서버에 필요한 하드웨어를 직접 구매해서 사용
- 하드웨어 재판매 및 구축이 어려움
- 제반 시설을 모두 갖춰도 문제가 생기는지 모니터링 필요 ⇒ 유지보수가 어려워서 클라우드 컴퓨팅 기반 환경으로 변화
- 서버를 물리적인 부분까지 온전히 통제할 수 있다는 장점으로 인해, 보안이 중요한 곳에선 온 프레미스 방식으로 운영하기도 함(군대, 은행 등)
2. 클라우드 컴퓨팅, 오프 프레미스
인터넷을 이용한 클라우드 서비스를 통해 사용하는 것이다.
클라우드 서비스 제공자는 전세계에 걸쳐 서버를 운영할 수 있는 인프라를 구축해두고, 이곳에서 물리적인 컴퓨터를 관리한다.
- 필요한 사양을 필요한 시간만큼 대여해서 사용할 수 있음
- 비용이 효율적
- 서비스 확장 측면에서도 이점
클라우드 컴퓨팅의 구분
서비스의 수준에 따라 3가지 계층 구분이 있다.
1. IaaS
가장 기본 형태이며, 가장 많은 제어권을 가질 수 있다.
대신 많은 부분을 사용자가 일일이 구성하고 관리해줘야 한다.
예시 : AWS EC2(Elastic Compute Cloud) - 컴퓨터만 빌려주는 것
2. PaaS
IaaS에 추가로 개발하고 운영하기 위해 필요한 구성요소를 플랫폼화해서 제공한다. (OS가 추가되어 있다고 비유할 수 있다.)
소프트웨어의 운영에 대한 관리를 위임 가능
효율적인 개발 가능
예시 : AWS EC2 에서 플랫폼을 얹어줌
단점
- 특정 플랫폼에 종속적이 될 수 있음
- 해당 플랫폼에서 접근 불가한 부분은 제어 불가
- IaaS에 비해 비싼 비용
3. SaaS
위에 두가지는 개발자들을 위한 것이었다면, SaaS는 일반인도 사용하고 있다.
클라우드 서비스와, 이를 고객이 사용할 수 있는 소프트웨어가 함께 제공된다.
편리한 기능을 가지고 있다.
예시 : 드롭박스, 넷플릭스, 슬랙, 아이클라우드
AWS(Amazon Web Services)
아마존 웹 서비스, 클라우드 컴퓨팅 서비스를 제공하는 제공자이다.
많은 서비스를 제공하며 확장성, 안전성, 높은 보안수준을 제공한다.
AWS S3
심플 스토리지 서비스
스토리지란 특정 파일을 저장하고 인터넷상으로 접근할 수 있게 해주는 서비스이다.
정적 웹사이트 호스팅에도 사용된다.
클라이언트 사이드 렌더링 특징을 이용해 S3서비스를 통한 배포가 가능하다.
멘토님께서 아픈 경험을 얘기해 주셨는데,
람다를 이용하고 계셨는데 useEffect 등을 잘못 쓰면 걸리는 무한 요청으로 과금을 크게 하셨다고 한다.
그 후 EC2로 갈아타셨다고 하는 슬픈 사연이 있었다.
따라서 이런 일을 방지하고자 미리 금액 제한을 걸어서 요청이 많으면 알림메일 오게 해두면 좋다고 조언해 주셨다.
요청 오는 것 자체는 막을 수 없기 때문에 아예 서버를 닫아야 한다.
2. CI/CD with GitHub Actions
CI/CD
CI/CD는 Continuous Integration(CI)와 Continuous Delivery/Deployment(CD)를 통합해서 부르는 용어이다.
테스트, 배포 자동화를 통해 코드를 자동으로 테스트하고 배포할 수 있다.
빠르고 자주 배포할 수 있다는 의미이다.
1. CI : 자동화된 코드 테스트
지속적인 통합
코드 통합시 가장 걱정되는 부분은 ‘머지 후에 제대로 돌아가는가’이다.
코드가 유효한지 검사하고 문제 발생시 즉각적인 피드백을 줄 수 있다.
코드를 코드로 검사하는 과정이라고 보면 된다.
2. CD
통합된 코드를 실제 사용자가 사용하고 있는 프로덕션 환경에 배포하는 것
Delivery란 개발환경의 배포까지 자동화, 즉 내부 사용자들에게 보여지는 환경까지의 자동화를 의미한다.
Deployment란 실제 사용자에게 제공되는 프로덕션 환경까지의 배포 자동화를 의미한다.
CI/CD 전용 플랫폼
- 설치형
- 클라우드형(원격)
설치형
프로그램을 설계해두면 실행할 컴퓨터가 필요하다.
설치형은 직접 특정 컴퓨터에 CI/CD 플랫폼을 설치해서 활용하는 것이다.
예시 : 젠킨스
클라우드형
클라우드에서 모두 운영해주는 형태이다.
CI/CD 파이프라인 구축에만 신경쓸 수 있다.
단점으로는 컴퓨터에 직접 접근할 수 없고, 플랫폼에서 제공해주는 수준까지만 가능해서 세부 조정이 불가하다는 점이 있다.
예시 : 트래비스 ci, 깃허브 액션
CI/CD가 각광받는 이유
CI/CD에는 장점만 있는 것이 아니다. 구축 리소스, 관리 필요, 비용 소요 등의 문제가 있다.
그럼에도 어느정도 규모있는 회사가 CI/CD를 구축하려는 이유는 효율 때문이다.
유저 측면에서 보자면, 소프트웨어는 변경하기 쉽다.
유저의 피드백을 통해 더 빨리, 좋게 개선과 개발에 집중하라는 의미이다.
비용 측면에서 보자면, 하드웨어는 돈으로 해결하겠다는 뜻이다.
비싼 인력인 개발자는 핵심 가치를 창출하는데 집중시키려는 목적이다.
GitHub Actions
깃허브에서 제공하는 클라우드형 CI/CD 플랫폼
깃허브와 연동이 쉽고 레포 안에서 CI/CD까지 함께 구축 관리 가능하다는 장점이 있다.
1. Workflow
- GitHun Actions상에서 실행될 자동화된 일련의 작업 흐름
- YAML 형식의 파일을 통해서 Workflow를 설정
- 레파지토리 안에서 발생하는 이벤트나 예약된 스케줄에 의해서 실행될 수 있으며, 직접 수동으로 실행하는 것도 가능
2. Event
- 레파지토리에서 발생하는 push, pull request open, issue open등의 특정한 활동
- GitHub Actions에서는 특정한 Event가 발생했을 시, 그에 맞는 CI/CD 파이프라인을 구동하도록 설정할 수 있음
3. Jobs
- 하나의 runner에서 실행될 여러 step의 모음
- step은 실행가능한 하나의 shell script 또는 action
- job안의 step들은 순차적으로 실행
- 하나의 workflow안에 여러 job들을 설정할 수 있음
- workflow의 job들은 기본적으로 병렬(동시에) 실행
- 일부 job의 경우, 다른 job에 의존성을 설정해서 다른 job이 완료되고 난 뒤 실행하도록 할 수 있음
4. Actions
- GitHub Workflow에서 자주 사용되는 기능들을 모아둔 일종의 커스텀 애플리케이션(= 라이브러리)
- 설정파일에서 use 키워드와 함께 사용할 수 있음
- 브랜치로 체크아웃하고, 환경을 설정하는 등 복잡하지만 자주 사용되는 과정을 미리 정의해두고 편리하게 활용 가능
- GitHub Marketplace에서 Action들을 검색하고 활용 가능
5. Runner
- workflow를 실행할 서버를 의미
- 클라우드형 CI/CD 플랫폼인 GitHub Actions는 직접 컴퓨터를 관리할 필요 없이 가상의 Runner를 통해서 Workflow를 실행시킴
3. 프론트엔드가 배포까지 알아야 할까요?
프론트엔드 개발자에게 배포에 대한 지식은 필수적이다.
기획문서 - 개발 - 배포까지 개발 프로세스를 다 알아야 한다.
개발한 프로덕트가 배포 과정에서 문제가 생겼을 때 어느 부분에서 문제가 발생했는지 확인하고 대응할 수 있어야 하기 때문이다.
이번 수업은 CS를 공부하며 배운 부분도 있었고, 아예 모르고 있던 부분도 있었다.
특히 CI/CD를 이해하려면 시간이 조금 필요할 것 같다.
이렇게 한번씩 접하는 것만으로도 한 걸음 내딛은 것이니, 배운 내용을 바탕으로 더 공부해야겠다.
'교육 > 원티드 프리온보딩 인턴십' 카테고리의 다른 글
[원티드 프리온보딩 프론트엔드 인턴십] Week 3-1. React Hook의 심층 활용 - 강의 후기 (0) | 2023.01.08 |
---|---|
[원티드 프리온보딩 프론트엔드 인턴십] Week 1 과제 후기 (0) | 2022.12.27 |
[원티드 프리온보딩 프론트엔드 인턴십] Week 1-1. 개발자의 기본기 - 강의 후기 (0) | 2022.12.21 |
[원티드 프리온보딩 프론트엔드 인턴십] 합격 발표 (2) | 2022.12.18 |
[원티드 프리온보딩 프론트엔드 인턴십] 참가 에세이 - 오신정 (0) | 2022.12.14 |