2022-08-21(일) TIL

황인호·2022년 8월 21일
0

TIL 모음

목록 보기
110/119

알고리즘 문제풀이

function solution(arr) {
	let answer = []
    for (let i = 0; i < arr.length; i++) {
    	// 배열안의 숫자를 서로 비교해야한다
        if (arr[i] !== arr[i+1]) {
        // 이렇게하면 0번 배열과 1번 배열을 비교할수있다.
        	answer.push(arr[i])
        }
    }
    return answer
}

let arr = [4,4,4,3,3]
console.log(solution(arr))

[기본풀이]

function solution(absolutes, signs) {
	let answer = 0;
    for (let i = 0; i < signs.length; i++) {
    	if (signs[i] === true) {
        	answer += absolutes[i]
        } else {
        	answer -= absolutes[i]
        }
    }
    return answer
}

[forEach를 활용한 풀이]

function solution(absolution, signs) {
	let answer = 0
    absolutes.forEach((num, i)=> {
    	signs[i] ? answer+=num : answer-=num
    })
    return answer
}

Docker 배포

어플리케이션 배포 환경의 변화

기존의 배포방식의 문제점이 있었습니다.
서버에 OS, App, HardWare 모든 설정을 정해놓고 실행을 하면, 갑자기 서버가
불타버리거나 침수되거나, 해킹당하거나 하면 다른 컴퓨터에서 실행시킬 수 없다

그래서 기존의 배포방식에 문제가 있어서 이를 가상화 하기로하였고
1개의 OS에서 1개의 환경에서 배포 환경이 정해진 것을 Wrapping 하며 Hypervisor 를 사용하여 가상 컴퓨터를 여러 개 구동할 수 있게 되었다.

이 두개의 가상환경을 서로 간섭하지 않아서 다중화되니 분산 처리를 할 수 있게 됩니다.

하지만 이 방법도 컴퓨터마다 가상환경을 일일이 다 설치해줘야 하기 때문에 힘들다

그래서 나온 방식이 Container 방식의 배포입니다.

Container 이란?

프로그램 구동을 위해 매번 OS 설치할 필요 없이
컨테이너는 기존 OS를 가상화 시키던 것과 달리 컨테이너는 OS Level 의 프로세스를 격리시켜 동작하는 방식으로 이루어집니다.

Container 방식이 OS 가상화방식보다 좋은가??
=> 그렇진 않다.

왜냐하면 OS 가상화는 컨테이너기반 가상화보다 더 높은 격리 레벨을 지원합니다.
이는 보안적인 측면에서 더욱 유리합니다.

그럼에도 불구하고 Docker를 쓰는 이유가 있다.
컨테이너 기반 가상화는 Docker 엔진 위에 Application 실행에 필요한 바이러니만 올라가게 됩니다.
OS 가상화를 보면 Host OS 와 완전히 분리되는 장점은 있지만 OS 위에 OS를 올리기 때문에 무겁고 느릴 수 밖에 없습니다.
하지만 컴테이너 기반 가상화는 Host OS 그리고 Docker 엔진위에서 바로 동작하며 Host의 커널을 공유합니다.
커널을 공유하게 되면 io(input / output)처리가 쉽게 되어 성능의 효율을 높일 수 있습니다.

  • 성능의 향상
  • 뛰어난 이식성
  • 쉽게 Scale Out을 할 수 있는 유연성

이런 장점이 있어서 Container 방식중 하나인 Docker의 구성요소를 알아보자

Docker 구성

1. Docker Image

Docker Image란 컨테이너를 실행할 수 있는 실행파일, 설정 값 들을 가지고 있는 것이라고 생각하면 됩니다.
여러분들 프로젝트에 담겨있는 DB설정, Spring Boot or Node.js 등등 개발환경을 모두 Images로 담을 수 있다고 생각하면 된다.

위의 그림과 같이 Image를 컨테이너에 담고 실행을 시킨다면 해당 프로세스가 동작하게 된다.

Image 생성 과정

이 그림을 잘 보면 Ubuntu 의 Base Image에 Nginx를 올렸다.
그 올린 이미지 위에 우리가 개발한 Web App Source를 올려서 이미지를 생성한다.
매번 Ubuntu 와 nginx 를 새로 생성해서 올리는게 아니라 이미 만들어진 이미지에 Web App만 올려서 Image를 생성하게 된다.

2. Dockerfile

Docker Image를 생성하기 위해 만든 Script를 Dockerfile 이라고 생각하면된다.

3. DockerHub

DockerHub란?
나는 작업하고있는 프로젝트나 코드들 버전관리를 위해 GitHub를 사용한다.
마찬가지로 DockerHub는 Docker Image를 관리하기 위한 서비스라고 생각하면 된다.

DockerHub 를 이용하면 손쉽게 image 를 pull 받아 컨테이너에 적용 시킬 수 있다.

GitHub 랑 개념이 같다.

즉, 개발환경의 버전관리 시스템이라고 생각하면 된다.

1. Docker Login
GitHub 에서 git config --global user.email {email} 이런식으로 업로드 하기 위해 로그인 설정을 하는 것처럼 docker login을 하면 Docker 에서 로그인을 합니다.
pull이나 push 하기 전에 필요한 절차이다.

2. Docker build
Docker build -t {DockerId}/{ContainerId}{배포 dir}

3. Docker push
docker push {dockerId}/{containerId}
DockerHub에 생성한 Docker Image를 push 한다.

4. Docker run
docker run -it -p 3000:3000
run을 통해 현재 Container 위에 있는 이미지를 싱행시킵니다.
배포하는것임

5. Docker pull
docker pull Docker Hub 에 올려둔 Docker Image를 가져올 수 있다.

profile
성장중인 백엔드 개발자!!

0개의 댓글