상권's

TIL 53 (배포 자동화)(2021.12.06) 본문

~2022 작성 글/TIL

TIL 53 (배포 자동화)(2021.12.06)

라마치 2021. 12. 6. 22:51
-오늘의 코플릿 2021.12.06
문제
세로와 가로의 길이가 각각 R, M인 2차원 R X M 배열 grid가 주어졌을 때, '1'은 땅을 의미하고 '0' 은 물을 의미합니다. 주어진 2차원 배열에 존재하는 섬의 개수를 리턴해야 합니다.
입력
인자 1 : grid
세로와 가로의 길이가 각각 R, M인 2차원 배열arr.length는 Rarr[i].length는 Marr[i][j]는 0 또는 1
출력
number 타입을 리턴해야 합니다.
주의사항
섬이란 물로 둘러싸여 있는 땅을 말합니다.가로 혹은 세로로 땅이 연결되어 있는 경우 하나의 섬으로 간주합니다.2차원 배열의 범위 밖은 물로 둘러싸여 있다고 가정합니다.
  // 분할을 해서 진행하는 거는 어려울 거 같다
  // 그러면 0,0부터 돌면서
  // 1 이면 전부 0으로 바꿔준다
  // true로 바꿔주고 진행을 해보자
const countIslands = function (grid) {
  if(grid.length === 0) return 0
  let count = 0
  let isIsland = function(a, b) {
    if( a >= grid.length || b >= grid[0].length || a < 0 || b < 0 ) return;
    if (grid[a][b] === '0' || grid[a][b] === true) return;
    grid[a][b] = true
    isIsland(a + 1, b)
    isIsland(a, b - 1)
    isIsland(a, b + 1)
  }
  for (let n = 0; n < grid.length; n++ ) {
    for(let j = 0; j < grid[0].length; j++ ) {
      if(grid[n][j] === '1' ) {
      isIsland(n, j)
      count++
      }
    }
  }
  return count
};

배포 자동화

배포 자동화란 한 번의 클릭 혹은 명령어 입력을 통해 전체 배포 과정을 자동으로 진행하는 것을 뜻합니다.

  • 먼저 수동적이고 반복적인 배포 과정을 자동화함으로써 시간이 절약됩니다.
  • 휴먼 에러(Human Error)를 방지할 수 있습니다. 여기서 휴먼 에러란 사람이 수동적으로 배포 과정을 진행하는 중에 생기는 실수를 뜻합니다. 그전에 했던 배포 과정과 비교하여 특정 과정을 생략하거나 다르게 진행하여 오류가 발생하는 것이 휴먼 에러의 예로 볼 수 있습니다. 배포 자동화를 통해 전체 배포 과정을 매번 일관되게 진행하는 구조를 설계하여 휴먼 에러 발생 가능성을 낮출 수 있습니다.

배포 자동화 파이프라인

배포에서 파이프라인(Pipeline)이란 용어는 소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조를 뜻합니다.

 

파이프라인은 전체 배포 과정을 여러 단계(Stages)로 분리합니다. 각 단계는 파이프라인 안에서 순차적으로 실행되며, 단계마다 주어진 작업(Actions)을 수행합니다.

파이프라인을 여러 단계로 분리할 때, 대표적으로 쓰이는 세 가지 단계가 존재합니다.

  1. Source 단계: Source 단계에서는 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행합니다.
  2. Build 단계: Build 단계에서는 Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공합니다. 또한 Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행합니다.
  3. Deploy 단계: Deploy 단계에서는 Build 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행합니다.

파이프라인의 단계는 상황과 필요에 따라 더 세분화되거나 간소화될 수 있습니다.

 

AWS 개발자 도구

AWS에는 개발자 도구 섹션이 존재합니다. 개발자 도구 섹션에서 제공하는 서비스를 활용하여 배포 자동화 파이프라인을 구축할 수 있습니다.

CodeCommit

Source 단계를 구성할 때 CodeCommit 서비스를 이용합니다. CodeCommit은 GitHub과 유사한 서비스를 제공하는 버전 관리 도구입니다.

AWS CodeCommit는 클라우드에서 자산 (예: 문서, 소스 코드, 바이너리 파일) 을 비공개로 저장하여 관리하는 데 사용할 수 있는 Amazon Web Services Services에서 호스팅되는 버전 관리 서비스입니다. 출처 AWS

CodeCommit과 GitHub의 차이점

CodeCommit 서비스는 GitHub과 비교했을 때 보안과 관련된 기능에 강점을 가집니다. 소스 코드의 유출이 크게 작용하는 기업에서는 매우 중요한 요소입니다. 하지만 과금이 발생할 수 있기 때문에, 소규모 프로젝트나 소스 코드는 GitHub을 이용하는 것이 효과적일 수 있습니다.

 

CodeBuild

Build 단계에서는 CodeBuild 서비스를 이용합니다. CodeBuild 서비스를 통해 유닛 테스트, 컴파일, 빌드와 같은 빌드 단계에서 필수적으로 실행되어야 할 작업을 명령어를 통해 실행할 수 있습니다.

AWS CodeBuild은 클라우드상의 종합 관리형 빌드 서비스입니다. CodeBuild 는 소스 코드를 컴파일하고 단위 테스트를 실행하며 배포할 준비가 완료된 아티팩트를 생성합니다. CodeBuild에서는 자체 빌드 서버를 프로비저닝, 관리 및 확장할 필요가 없습니다. 출처 AWS

CodeDeploy

Deploy 단계를 구성할 때는 기본적으로 다양한 서비스를 이용할 수 있습니다.

CodeDeploy는 Amazon EC2 인스턴스, 온프레미스 인스턴스, 서버리스 Lambda 함수 또는 Amazon ECS 서비스로 애플리케이션 배포를 자동화하는 배포 서비스입니다.
다음을 포함하여 다양한 애플리케이션 콘텐츠를 거의 무제한으로 배포할 수 있습니다.
코드
서버리스 AWS Lambda 함수
웹 및 구성 파일
Executables
패키지
스크립트
멀티미디어 파일
CodeDeploy는 서버에서 실행되고 Amazon S3 버킷, GitHub 리포지토리 또는 Bitbucket 리포지토리에 저장되는 애플리케이션 콘텐츠를 배포할 수 있습니다. 또한 CodeDeploy는 서버리스 Lambda 함수를 배포할 수 있습니다. CodeDeploy를 사용하기 위해 기존 코드를 변경할 필요가 없습니다.
CodeDeploy를 사용하면 다음 작업을 쉽게 수행할 수 있습니다.
새 기능을 신속하게 출시.
AWS Lambda 함수 버전 업데이트.
애플리케이션 배포 시 가동 중지 방지오류가 발생하는 수동 배포와 관련된 다양한 위험 없이 애플리케이션 업데이트에 따른 복잡성 처리.
이 서비스는 인프라와 함께 규모를 조정할 수 있으므로 인스턴스 하나 또는 수천 개에 쉽게 배포할 수 있습니다.
출처 AWS

CodePipeline

각 단계를 연결하는 파이프라인을 구축할 때 CodePipeline 서비스를 이용합니다.

AWS CodePipeline은 소프트웨어 릴리스에 필요한 단계를 모델링, 시각화 및 자동화하는 데 사용할 수 있는 지속적 전달 서비스입니다. 소프트웨어 릴리스 프로세스를 구성하는 여러 단계를 신속하게 모델링하고 구성할 수 있습니다. CodePipeline 은 소프트웨어 변경 내용을 지속적으로 릴리스하는 데 필요한 단계를 자동화합니다.
CodePipeline (CodePipeline) 을 사용하면 클라우드에서 애플리케이션을 자동으로 빌드, 테스트, 배포할 수 있습니다. 구체적으로 다음 작업이 가능합니다.
출처 AWS

궁금한 사항

CodeBuild를 클라이언트에서만 사용하는 이유?

=> 서버는 별도의 빌드가 필요없으므로, JS 파일을 node.js 런타임으로 실행하기만 해도 충분

CodeDeploy를 클라이언트에서 사용하지 않는 이유?

=> 클라이언트 결과물은, 호스팅만 해도 충분한 정적 파일이기 때문

CodeDeploy를 서버에서만 사용하는 이유?

=> 서버는 애플리케이션이 항상 실행되는 상태로 유지해야 함

    이 때 CodeDeploy는, 다음 작업을 실행함

     - EC2 인스턴스에 대한 배포(코드 다운로드)

     - AppSpec을 이용해 각각의 수명 주기에 필요한 명령 설정

     - 특히, 애플리케이션 중단 및 실행과 관련한 코드가 반드시 필요

 

'~2022 작성 글 > TIL' 카테고리의 다른 글

TIL 55 (복습)  (0) 2022.02.06
TIL 54 (복습)  (0) 2022.02.04
TIL 52 (Docker, Docker-compose, AWS ECS)(2021.12.03)  (0) 2021.12.03
TIL 51 (HTTP/1,2,3, git branch)(2021.12.02)  (0) 2021.12.02
TIL50 (aws)(2021.12.01)  (0) 2021.12.01
Comments