● 오늘 공부 한 것
- 개발 프로세스, 개발 생명주기
- 이전에 전통적인 개발 프로세스로 waterfal 방식에 대해서 배웠었고, 이런 전통적인 방식은 한번 진행하면 다음 개발 단계로 넘어가기까지 오랜 시간이 걸리며, 한번 진행하면 오류를 수정하기 힘들고, 수정하는 것도 어려워 이런 방법을 벗어나기 위해서 고안된 것이 애자일 방법이라고 배웠습니다.
- 애자일 방법은 중간에 뒤로 회귀할 수 있기 때문에, 진행하다가 오류가 있다면 쉽게 수정할 수 있고 하루에도 여러번의 배포가 가능해집니다. 또한 한번의 사이클(스프린트)의 기간이 유연하기 때문에 빠르게 개발을 할 수 있습니다.
- DevOps
- 원래는 개발팀과 운영팀이 분리돼서 운영이되었었는데, 이런 분리는 release 배포까지의 오랜기간이 걸리는 단점이 있고 앱 특성상 잦은 업데이트를 진행하게된다면 더욱 더 배포까지 오랜기간이 걸리게되기 때문에 개발과 운영이 합쳐지는 개념이 만들어지게 되었습니다. (DevOps) 소프트웨어를 자주, 빨리 그리고 안전하게 배포하는 것을 목표로 하며, 그렇기 때문에 애자일 개발 프로세스를 기반으로 한 것이라고 볼 수 있습니다.
- DevOps는 개발에서 운영까지 하나의 통합된 프로세스로 묶어내고 사용하는 툴과 시스템을 표준화하여 의사소통의 효율성을 확보하고 일련의 작업들을 자동화합니다. 즉 코드 통합, 테스트, 배포 과정이 자동화됩니다. 따라서 배포의 시간이 크게 단축될 수 있습니다.
- CI/CD
- CI는 Continuous Integration의 약자로 '지속적 통합'을 이야기합니다. 개발자들이 코드를 짜고, 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되는 것을 의미합니다. 따라서 동시에 애플리케이션 코드 작업을 하는 경우에 서로 충돌할 수 있는 문제를 해결할 수 있습니다. 지속적 통합은 모든 코드 변화를 하나의 리포지토리에서 관리하는 것부터 시작합니다. 모든 개발팀이 코드의 변화를 확인할 수 있기 때문에, 투명하게 문제점을 파악할 수 있습니다. 그리고 잦은 풀 리퀘스트(pull request)와 머지(merge)로 코드를 자주 통합합니다. 이때, 기본적인 테스트도 작동시킬 수 있습니다. 이렇게 지속적 통합을 통해 개발팀은 각자 개발한 코드를 이른 시점에 자주 합치고 자주 테스트 해볼 수 있습니다.
- CD는 continous Delivery의 약자로 '지속적 배포'를 의미합니다. 지속적 배포의 경우, 코드 변경 사항의 병합부터 프로덕션에 적합한 빌드 제공에 이르는 모든 단계로, 테스트 자동화와 코드 배포 자동화가 포함됩니다. 이 프로세스를 완료하면 프로덕션 준비가 완료된 빌드를 코드 리포지토리에 자동으로 배포할 수 있기 때문에 운영팀이 보다 빠르고 손쉽게 애플리케이션을 프로덕션으로 배포할 수 있게 됩니다.
최근에는 클라우드 기술 발전과 맞물려 지속적 통합과 지속적 배포가 빠른 속도로 진행되면서 CI/CD를 하나로 묶어서 다루는 경우가 점차 증가하고 있습니다. 예를 들어, 이전에는 배포 자체가 상당히 오래 걸리고 힘든 일이어서 배포 이전 단계에서 많은 고민을 하곤 했습니다. 서버를 전부 재시작해야 한다거나, 일부 기능을 제공하지 못하는 경우도 많았기 때문입니다. 요즘은 고객의 피드백을 빨리 받기 위해서라도, 서비스를 중단하지 않기 위해서라도 릴리스만 잘 기록해 두고 바로바로 배포하는 사례가 증가하고 있습니다.
- Github Action
- 깃허브 액션 실습을 했는데 너무 어려웠다.. YAML언어를 통해서 실습을 했는데, AWS도 잘이해를 못했어서 그런지 더 어렵게 느꼈던 것 같다.. 페어시간 내내 많이 헤맸다..ㅠ
깃허브 액션을 통한 배포 flow
- Source: Github reference 브랜치에 코드가 커밋되면
- Build: github acitons의 YAML 파일에 적힌 명령어를 토대로 Webpack을 이용해 빌드를 하고
- Deploy: github acitons의 YAML 파일에 적힌 명령어를 토대로 s3로 빌드 결과를 업로드합니다.