Docker

Docker는 Linux의 응용 프로그램들을 프로세스 격리 기술들을 사용해 Container로 실행하고 관리하는 오픈 소스 프로젝트이다.

 

도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다.
코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 아우른다. 
이는 실행 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증한다.
reference : https://www.docker.com/resources/what-container/

 

개발자는 Docker를 통해서 application을 컨테이너로 패키징 할 수 있다. 

컨테이너란 application source code를 임의의 환경에서 해당 코드의 실행에 필요한 운영체제(OS), 라이브러리 및 종속 항목과 결합하는 실행 가능한 표준 컴포넌트를 의미한다. 

컨테이너는 분산형 application의 delivery를 간소화하며, 이는 기업의 클라우드 네이티브 개발 및 하이브리드 멀티클라우드 환경으로 이전하면서 점점 더 유명세를 타고있다.

 

개발자는 Docker를 사용하지 않고도 컨테이너를 구축할 수 있다. 그러나 Docker Platform을 이용하면 보다 더 쉽고, 간편하고, 안전하게 컨테이너를 빌드, 배치 및 관리할 수 있다. 

Docker는 기본적으로 개발자가 단일 API를 통한 업무 절감 자동화와 간단한 명령을 사용하여 컨테이너를 빌드, 배치, 실행, 업데이트 및 중지할 수 있도록 해주는 toolkit이다.

 

 

 


 

 

Reference

 

Docker란 무엇입니까? | AWS

Q: Docker로 어떤 작업을 할 수 있습니까? Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다. 이는 Doc

aws.amazon.com

 

Docker란 무엇인가?

Docker란 무엇이며 이 컨테이너 레지스트리는 클라우드에서 어떻게 사용되나요? 민첩한 운영 및 통합 컨테이너 보안을 활용하는 Docker가 클라우드 네이티브 애플리케이션을 위한 최고의 컨테이너

www.oracle.com

 

 

 

728x90

 CI/CD란?

CI(Continuous Integration)/CD(Continuous Delivery/Continuous Deployment)의 약자이다.

CI/CD는 application 개발 단계를 자동화(automation)하여 application을 보다 짧은 주기로 customer에게 제공하는 방법을 의미한다.

 

❗️CI/CD의 기본 개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포를 의미하며, 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제 ( integration hell ) 해결하기 위한 solution 이다.

 

CI(Continuous Integration) - "빌드와 테스트 자동화"

CI(Continuous Integration) 빌드/테스트 자동화 과정이다. CI는 개발자를 위한 자동화 프로세스인 지속적인 통합을 의미한다. 

CI를 성공적으로 구현할 경우 application에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 repository에 통합되므로 여러 명의 개발자가 동시에 application 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.

 

CI가 나오기 이전에는 개발을 마치고 배포가 되어야만 코드에 오류가 있는지 없는지, 해당 application이 제대로 동작하는지를 검증하며, 코드 품질을 관리할 수 있었다. 그러나 CI를 적용하게 되면서 각 개발자가 서로 다른 기능을 구현하고 완성된 후 main branch와 merge하고 만약 버그가 있다면 코드를 수정하여 해결한다. 

CI를 적용하기 전에는 개발자가 직접 코드를 병합, 빌드, 테스트 과정에 많은 시간이 소요되었었으나, CI를 적용하게 되면서 개발자가 코드를 branch에 merge하기만 하면 자동으로 빌드와 테스트를 검증할 수 있어 소요 시간이 감소되었다.

 

🙂 CI 간단한 순서

1. 개발자가 구현한 코드를 기존 코드와 병합(merge)한다.

2. 병합된 코드가 올바르게 동작하고 빌드되는지 검증한다.

3. 테스트 결과 문제가 있다면 수정하고 다시 1로 돌아간다. 문제가 없다면 배포를 진행한다.

 

CD(Continuous Delivery/Deployment)

CD(Continuous Delivery/Deployment)는 지속적인 서비스 및 지속적인 배포를 의미하며, 두 용어는 상호 교환적으로 사용된다. 두가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 한다. 

 

CD는 지속적 배포로 소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 관리하자는 개념으로 지속적 제공(Continuous Delivery)로 사용되기도 한다.

 

지속적 제공(Continuous Delivery)은 CI를 통해서 새로운 소스코드의 빌드와 테스트 병합까지 성공적으로 진행이 되었다면, 빌드와 테스트를 거쳐 github와 같은 저장소(repository)에 자동으로 업로드되는 것을 의미한다.

운영팀은 이 repository에서 application을 실시간 프로덕션 환경으로 배포할 수 있다. 지속적인 제공은 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로 한다.

 

지속적 배포(Continuous Deployment)는 성공적으로 병합된 내역을 저장소뿐만 아니라 사용자가 사용할 수 있는 배포환경까지 릴리즈하는 것을 의미한다. 이는 applicatin 제공 속도를 저해하는 수동 프로세스로 인한 운영팀의 프로세스 과부하 문제를 해결한다. 지속적인 배포는 파이프라인의 다음 단계를 자동화함으로써 지속적인 제공이 가진 장점을 활용한다.

 

 

 

Reference

 

CI/CD가 뭔가요? - 이론편

tecoble.techcourse.co.kr

 

CI/CD(지속적 통합/지속적 제공): 개념, 방법, 장점, 구현 과정

CI/CD는 애플리케이션의 통합 및 테스트부터 제공 및 배포까지 전체 라이프사이클에서 지속적인 자동화와 모니터링을 제공합니다. 개념, 차이점, 학습방법(인강)을 보세요.

www.redhat.com

 

728x90

'DevOps&etc' 카테고리의 다른 글

Git  (1) 2024.02.26

문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

제한사항
  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

입출력 예

입출력 예 설명

입출력 예 #1,2,3,4
문제의 예시와 같습니다.


내 코드

function solution(s){
    let answer = true;
    const LEFT = '(';
    const RIGHT = ')';
    
    const left = [];
    const right = [];
    
    const arr = s.split('');
    arr.forEach( (a) => {
        if(a === LEFT){
            left.push(LEFT);
        }
        else{
            if(left.length >= 1){
                left.pop();
            }
            else{
                answer = false;
            }
        }
    });
    
    return left.length === 0 ? answer : false;
}
728x90

문제 설명

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

 

제한사항
  • 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
  • completion의 길이는 participant의 길이보다 1 작습니다.
  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
  • 참가자 중에는 동명이인이 있을 수 있습니다.
입출력 예

입출력 예 설명

예제 #1
"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

 

예제 #2
"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

 

예제 #3
"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.


내 코드

function solution(participant, completion) {
    var answer = '';
    const obj = {};
    
    
    participant.forEach( p => {
        if(obj[p] === undefined){
            obj[p] = 0;
        }
        else{
            obj[p] += 1;
        }
    });
    
    completion.forEach( c => {
      obj[c] -= 1;  
    });
        
    participant.forEach( c => {
      if(obj[c] === 0){
          answer = c;
      }
    });
    
    return answer;
}
728x90

+ Recent posts