[Web] 클라우드 & CI/CD

dee·2023년 2월 3일
3

web

목록 보기
2/2
post-thumbnail

기존의 Hello World 프로젝트를 Next.js로 마이그레이션을 하기로 했다. 마이그레이션과 함께 CI/CD를 도입하기로 팀원과 의견을 나누었고 AWS와 Jenkins를 사용하기로 결정했다. 그 전에 클라우드와 CI/CD에 대해 알아보자.

🤔클라우드가 왜 필요하지??

비즈니스의 비용 절감과 생산성 향상, 효율성 증가에 가장 큰 영향을 차지하는 것이 시스템 환경을 구축하는 것이기 때문이다. 또한 빅데이터의 수집, 저장, 분석과 인공지능 개발을 위한 대규모 컴퓨팅 자원을 저렴하게 활용할 수 있는 이유에서도 클라우드를 사용하는 것이 이득이다. 그렇담 그 전에는 어떤 방식으로 시스템을 구축했기 때문에 클라우드가 필요한 것인지부터 찬찬히 알아보자.


온프레미스(On-Premise)

  • 클라우드 이전에 기업에서 직접 구축한 시스템 환경
  • 기업이 직접 데이터센터(또는 서버실)에 서버와 네트워크, 스토리지 등의 인프라를 구매하여 구축하고 운영
  • 온도와 습도, 위치, 보안 등 고려해야할 것이 많음 -> 막대한 비용 발생

클라우드

  • 온프레미스의 단점을 극복하고자 등장한 개념.
  • 직접 데이터센터를 보유하지 않아도 필요한 자원을 사용할 수 있는 환경을 제공
  • 컴퓨터 통신망이 복잡한 네트워크 및 서버 구성 등을 알 필요 없이 구름과 같이 내부가 보이지 않음
  • 개인목적으로 저장해둔 데이터들이 사용자 본인이 아무리 관리를 철저하게 한다 해도 하루아침에 사라지거나, 전혀 상관없는 제3자에게 유출되거나 공개될 수 있는 매우 치명적인 단점이 존재

1. 클라우드 서비스

하드웨어나 소프트웨어 등을 직접 구축하지 않고, 제2의 전문업체로부터 인터넷을 통해 필요한 IT 자원을 원하는 만큼 받아 즉시 사용할 수 있으며, 사용한 시간만큼 비용을 지불하면 되는 서비스

2. 클라우드 컴퓨팅

가상화 기술을 토대로, 자원의 확대와 축소를 가능하게 하여 사용자가 요구한 특정 자원만을 제공할 수 있는 IT 환경

3. 클라우드 유형

  • 서비스 모델 유형
서비스 모델내용
IaaS (Infrastructure as a service)클라우드 공급자로부터 필요한 서버와 저장소를 임대
클라우드 인프라로 자체 응용 프로그램을 구축
기업이 토지 임대만 하고 건설 장비와 재료를 마련하는 것과 같음
ex> DigitalOcean, Google Compute Engine, OpenStack
PaaS (Platform as a service)호스팅된 애플리케이션에 비용을 지불하는 대신 자체 애플리케이션을 구축하는 데 필요한 것에 비용을 지불
기업이 집을 임대하고 집을 꾸미는 데 필요한 장비를 빌리는 것과 같음
ex> Heroku, Microsoft Azure
SaaS (Software as a service)SaaS 애플리케이션이 클라우드 서버에 호스팅되고 사용자는 인터넷을 통해 애플리케이션에 접근
기업이 집을 빌리는 것과 같은데 소유한 것처럼 사용하는 느낌
ex> Salesforce, MailChimp, Slack
FaaS (Function as a service)서버리스 컴퓨팅
다른 클라우드 컴퓨팅 모델과 마찬가지로 여전히 서버에서 실행, But 전용 머신에서 실행되지 않고 응용 프로그램을 구축한 기업이 서버를 관리하지 않아도 되기 때문에 서버리스
집을 조금씩 임대하는 느낌

  • 배치모델 유형
배치 모델내용
퍼블릭 클라우드전 세계에 있는 누구나 인터넷을 통해 접근해서 클라우드 서비스를 활용
전 세계적으로 개방된 자원을 사용하기 때문에, 보안수준이 상대적으로 저하
ex> AWS, MS Azure, GCP 등
프라이빗 클라우드제한되고 허가된 그룹 내에서만 활용
기업 또는 공공기관 등이 자체 데이터센터 내에서 클라우드 컴퓨팅 환경을 구축
온프레미스(On-premise)와 퍼블릭 클라우드의 중간 형태
사용자를 한정할 수 있기 때문에 보안에 유리하며 회사의 보안정책 적용이 용이
ex> G-Cloud(정부 클라우드)
하이브리드 클라우드퍼블릭 클라우드와 프라이빗 클라우드를 결합한 형태
보안성이 요구되는 핵심 시스템은 프라이빗 클라우드에 배치하고, 상대적으로 낮은 보안성이 허용되는 비핵심 시스템은 퍼블릭 클라우드에 위치시키는 방식

🤔 CI/CD가 필요한 이유??

개발의 최종 목적은 사용자에게 서비스를 제공하는 것이다. 이것은 구현 - 빌드 - 테스트 - 통합 - 배포의 무한 반복 과정을 가지게 된다. 이 과정을 개발자가 하나하나 수작업으로 진행을 하게 되면 일의 효율성도 떨어지고 하나를 빼먹게 되는 실수가 있을 수 도 있다. 이에 이 무한 반복 과정을 자동으로 해주는 것의 필요성을 느끼게 되었고 CI/CD가 도입되었다.


CI/CD란?

  • 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법 또는 전략
  • 코드통합, 테스트, 릴리즈, 배포(Deployment)의 애플리케이션 라이프사이클 전체 과정을 자동화하고 모니터링 가능하도록 하는 것, 이러한 연속된 과정
  • Jenkins, Travis, CircleCI 등

1. CI(Continuous Integration)

  • 여러 개발자들이 같은 애플리케이션을 동시에 작업할 수 있도록 하는 것이 목표
  • 기존 코드와 추가한 코드를 병합하고 병합한 코드가 올바르게 작동하는지 테스트하고 빌드한다.

2. CD(Continuous Delivery/ Continuous Deployment)

  • Continuous Delivery: 유효한 코드를 최종 프로덕션 환경의 레포지토리에 릴리즈.
    🧷 github같은 저장소에 저장하는 것을 말함.
  • Continuous Deployment: 애플리케이션을 레포지토리(SVN or GitHub)에서 프로덕션으로 자동 릴리즈 하는 작업

참고 자료
https://namu.wiki/w/%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C%20%EC%BB%B4%ED%93%A8%ED%8C%85
https://m.post.naver.com/viewer/postView.naver?volumeNo=29866499&memberNo=34865381
https://www.cloudflare.com/ko-kr/learning/cloud/what-is-the-cloud/
https://lifeplan-b.tistory.com/27
https://tecoble.techcourse.co.kr/post/2021-08-14-ci-cd/

profile
웹 프론트엔드 개발자

0개의 댓글