# 2022-07-28 수달의 아고라 - 선릉편
# 아고라
아고라
고대 그리스의 도시국가(폴리스)에서 자유 시민들이 자유롭게 토론을 벌이던 장소. 아고라라는 단어 자체의 의미는 '집결지'(Gathering Place)이다.
우리는 다양한 미션을 진행하며 많은 의문과 고민에 직면하게 된다. 미션을 진행하며 단순히 정답을 찾는 것이 아닌 자신만의 근거와 사례를 만들어가는 과정이라고 생각한다. 우리 아고라 에서는 구체적인 예시를 기반으로 다양한 상황을 제시한다. 참여자는 그에 대한 실제 적용 사례를 이야기 하거나 자신만의 근거를 이야기 하며 건전한 토론을 진행한다.
# 목적
미션을 진행하며 직면하는 다양한 의문들에 대한 자신만의 근거를 만들기 위한 의식적인 연습
과 자신의 생각을 의도에 맞게 적절히 전달할 수 있는 말하기 연습
이 가장 큰 목적이다.
# 🦦 수달의 아고라 (CI/CD)
WARNING
해당 내용은 토론을 진행할 때 주최자가 기록한 것을 기반으로 각색한 것입니다! 모든 내용을 기록하지 못했기 때문에 잘못된 부분이나 틀린 부분이 존재할 수 있습니다. 만약 잘못된 부분이나 추가하고 싶은 내용이 있다면 아래 코멘트에 남겨주세요!
# CI란?
CI는 간단히 요약하자면 빌드/테스트 자동화 과정
과정입니다. CI는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)
을 의미합니다. 커밋할 때마다 빌드와 일련의 자동 테스트가 이루어져 동작을 확인하고 변경으로 인해 문제가 생기는 부분이 없도록 보장합니다.
# CD란?
CD
는 간단히 말하면 배포 자동화 과정입니다. CD는 지속적인 서비스 제공(Continuous Delivery)
또는 지속적인 배포(Continuous Deployment)
를 의미하며 이 두 용어는 상호 교환적으로 사용됩니다. 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 합니다.
지속적 배포
는 빌드, 테스트 및 배포 단계를 자동화하는 DevOps 방식을 논리적 극한까지 끌어 올립니다. 코드 변경이 파이프라인의 이전 단계를 모두 성공적으로 통과하면 수동 개입 없이 해당 변경 사항이 프로덕션에 자동으로 배포됩니다. 지속적 배포를 채택하면 품질 저하 없이 최대한 빨리 사용자에게 새로운 기능을 제공할 수 있습니다.
# 도입 내용
CI/CD 가 스프린트3의 필수 요구사항이 되면서, 팀마다 다른 기준으로 CI/CD 를 구축하였다. 각자 도입하게 된 툴의 CI/CD 도입 배경
과 트러블 슈팅을 중점
으로 얘기를 나눠보자.
# CI/CD 구축 방법
Case☝🏻)
CI 는 github actions , CD 는 Jenkins ! (CI/CD) 가 분리됨.
이유) github actions 에 관해서 우테코에서 제공해주는 인스턴스로 사용하려면 ip 를 우회해서 해야해요.
그래서 많은 사람들이 젠킨스로 했던 것 같아요. 또한 현재 젠킨스 내에서 프론트 백엔드 CI/CD 작업을 둘 다 해야하는데 우리팀은 프리스타일로 적용을 해서 하드 메모리 부족으로 최초 Push 시 빌드는 github actions 에 위임해서 메모리를 아끼는 방향으로 했었어요.
Case✌🏻)
CI CD Jenkins (프리 스타일)
도입 배경은 다른 팀들이 많이 써서, 레퍼런스가 많았어요. 프리스타일을 적용한 이유는 현재 자동 CI/ CD 해놓은거 백엔드 밖에 없어서 그랬어요.
Case🤟🏻)
CI CD Jenkins (멀티 브랜치 파이프 라인)
핸들링이 쉬워지는 장점이 있어요. 그 과정에서 젠킨스에 있는 플러그 인 중 블루오션을 사용했어요.
멀티 브랜치 파이프 라인에서는 플러그인을 꼭 깔아야 해요. 멀티브런치 웹 훅 트리거를 사용했어요.
# 트러블 슈팅 내용
1️⃣ 메모리 부족 현상
우테코에서 제공하는 인스턴스 메모리가 2기가 밖에 안되어서 에러가 났어요. 😿
✅ 해결 방법
- jenkins 서버 메모리 스왑 (opens new window)을 할당하여 해결했다.
- 하드 메모리가 부족해서 CI/CD 작업을 분리해서 CI 는 github actions, CD 는 젠킨스를 사용했어요.
2️⃣ Jenkins Publickey 에러로 repository 접근할 때 error 발생하는 이슈
젠킨스에서 배포 서버로 배포 스트립트를 쏘려고 했는데, Permission denied 가 발생했다.
✅ 해결 방법
# 필수 요구 사항이 아니라면 CI/CD 를 했을까요? 🧐
그동안 인간 Jenkins 처럼 배포를 해야할 때 머지 될 때마다 수동으로 작업을 진행했어요.
휴먼 에러가 은근히 많이 발생하기 때문에 자동으로 스크립트 실행하는 것보다 많은 에러를 야기하는 것 같아요.
(진짜 사소한 문제 때문에 시간을 너무 허비했어요. ) 이런 기능을 지원한다는 것을 알았다면, 쓰지않을 이유가 없지 않을까요 ? 🥰
# CI/CD 란 무엇이고 왜 사용 했나요? 🤩
CI 란
개발자들이 빠른 피드백을 받아서 실수를 하고 있을 때, 빠르게 회복하고 복구 할 수 있도록 하는 작업인 것 같아요. 보통 코드 리뷰 요청을 받게되면 수행하는 작업이 1) 테스트가 잘 돌아가는가 ? 2) 빌드가 잘 되는가? 3)complict 나는 부분 + 코드 컨벤션 순으로 살펴보고 나야 비지니스 로직을 보게 되는데 123번을 자동으로 해주니까 비지니스 로직에 집중할 수 있어 CI 가 매력적이게 느껴져요.
CD 란
배포에 드는 리소스를 줄여주는 작업인 것 같아요. 이번 스프린트 때 프론트에서 굉장히 간단한 변경 사항을 요청했고, 그 과정에서 재배포를 하게 되었는데 무려 40분이나 걸렸어요. 배포 자동화를 하게 된다면 5분이면 가능해 져요.
종합하자면. CI/CD 는
개발자가 관리할 포인트를 줄여줌으로써 더 생산적인 일을 몰두할 수 있게 도와주는 시스템을 구축하는 과정이라고 생각해요. 그동안 코드를 통합하고,배포하는데 너무 많은 에너지가 들었어요. 진짜 개발자들이 해야할 일은 비지니스 로직을 구현하고 개선하는 일일텐데 말이죠!
# 결론
결론은 CI/CD 를 사용함으로 생산성이 올라가고, 비지니스 로직에 더욱 집중할 수 있게 된다. 😍