Docker 란?

Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼

  • Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함
  • Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장

Docker 작동 방식

Docker는 컨테이너를 위한 운영 체제

가상 머신이 서버 하드웨어를 가상화하는 방식과 비슷하게(직접 관리해야 하는 필요성 제거) 컨테이너는 서버 운영 체제를 가상화

Untitled

Container VS VM ?

Container의 장점

  • VM 보다 볼륨이 작다.
    • 위의 그림에서 보이듯이, Container는 Host의 커널을 공유한다. 따라서, 가상화된 하드웨어위에 OS가 올라가는 VM보다 볼륨이 작다.
  • 빠르다.
    • I/O가 발생하는 통로가 VM이 더 많을 수 밖에 없다. VM이 처리한 I/O를 Host OS의 커널에서 다시 받아 자신의 드라이버에 맞게 처리해줘야 한다. Container의 경우 커널을 공유하므로 들어온 I/O가 보다 쉽게 처리된다.
  • 라이프사이클
    • 개발 환경 내에서 image 만들어 배포하고 pull 받아서 다시 올리면 끝. 매우 편리하게 서비스를 관리할 수 있다.
    • 여러대의 host에서 실행중인 container를 관리할 수 있는 오케스트레이션 제공

→ MicroService로 발전할 수 있는 토대를 마련하고 적용해 나갈 수 있다.

VM의 장점

  • 보안
    • Container가 host 커널을 공유한다는 것은 container가 뚫리면 바로 host OS의 커널이 위험해질 수 있다. 동시에 호스트 커널까지 오지 않더라도 커널이 공격당하면, 커널을 공유한다는 개념 때문에 모든 Container가 위험해질 수 있다. 반면, VM의 경우 완벽하게 다른 VM이나 host가 보호된다.
  • 멀티 OS
    • 커널을 공유한다는 이유로 Container에서 할 수 없는 일이 바로 Host OS와 다른 OS를 올릴 수 없다는 점이있다.

Reference

Docker란 무엇입니까? | AWS

Docker와 VM

'Computer Science' 카테고리의 다른 글

SSL이란?  (0) 2024.02.19
HLS(HTTP 라이브 스트리밍)란?  (0) 2023.12.28
서버 이중화란? (HA, 클러스터링, Fail-Over)  (0) 2023.10.08

개요

SSL(Secure Sockets Layer)은 암호화 기반 인터넷 보안 프로토콜입니다. 인터넷 통신의 개인정보 보호, 인증, 데이터 무결성을 보장하기 위해 Netscape가 1995년 처음으로 개발했습니다. SSL은 현재 사용 중인 TLS 암호화의 전신입니다.

SSL/TLS를 사용하는 웹사이트의 URL에는 "HTTP" 대신 "HTTPS"가 있습니다.

SSL/TLS는 어떻게 작동합니까?

  • SSL은 높은 수준의 개인정보 보호를 제공하기 위해, 웹에서 전송되는 데이터를 암호화합니다. 따라서, 데이터를 가로채려는 자는 거의 해독할 수 없는 복잡한 문자만 보게 됩니다.
  • SSL은 두 통신 장치 사이에 핸드셰이크라는 인증 프로세스를 시작하여 두 장치의 ID를 확인합니다.
  • SSL은 또한 데이터 무결성을 제공하기 위해 데이터에 디지털 서명하여 데이터가 의도된 수신자에 도착하기 전에 조작되지 않았다는 것을 확인합니다.

SSL은 여러 번 개선되어 매번 성능이 개선됐습니다. 1999년에 SSL은 TLS로 업데이트됐습니다.

SSL/TLS는 왜 중요합니까?

원래 웹 상의 데이터는 메시지를 가로채면 누구나 읽을 수 있는 일반 텍스트 형태로 전송됐습니다. 가령 고객이 쇼핑 웹사이트를 방문하여 주문하고, 신용 카드 번호를 입력했다고 하면, 해당 신용 카드 번호가 숨겨지지 않은 채 인터넷을 이동하게 됩니다.

SSL은 이 문제를 바로잡고, 사용자 개인 정보를 보호하기 위해 제작됐습니다. SSL은 사용자와 웹 서버 사이를 이동하는 모든 데이터를 암호화하여, 누군가 데이터를 가로채더라도 무작위 문자만 볼 수 있게 합니다. 이제 고객의 신용 카드 번호는 안전해졌으며, 고객이 번호를 입력한 쇼핑 웹사이트만 이를 볼 수 있습니다.

SSL은 특정한 유형의 사이버 공격도 차단합니다. SSL은 웹 서버를 인증하는데, 공격자들이 사용자를 속여 데이터를 훔치기 위한 가짜 웹사이트를 만드는 일이 있기 때문에, 이러한 인증이 중요합니다. 또한 약병의 조작 방지 봉인처럼, 공격자가 전송 중인 데이터를 조작하지 못하게 막기도 합니다.

SSL 인증이란 무엇입니까?

SSL은 SSL 인증서(공식적으로 "TLS 인증서")가 있는 웹사이트만 실행할 수 있습니다. SSL 인증서는 사람의 신원을 확인하는 신분증이나 배지와 같습니다. SSL 인증서는 웹사이트나 애플리케이션 서버가 웹에 저장하고 표시합니다.

SSL 인증서에 포함된 가장 중요한 정보 중 하나가 웹 사이트의 공개 입니다. 이 공개 키 덕분에 암호화와 인증이 가능합니다. 사용자의 장치는 공개 키를 보고 이를 이용하여 웹 서버와 안전한 암호화 키를 수립합니다. 한편, 웹 서버에도 기밀로 유지하는 개인 키가 있습니다. 개인 키는 공개 키로 암호화된 데이터를 해독합니다.

CA(인증 기관)는 SSL 인증서 발행을 담당합니다.

SSL의 동작 원리

Untitled

  1. 핸드셰이크 - 데이터를 주고받기 위해서 어떤 방법을 사용해야 하는지 서로 파악한다.
    1. SSL은 80 포트를 사용하는 http와 달리 443 포트를 기본으로 사용하는 TCP 기반의 프로토콜이다. 따라서, SSL 핸드셰이크 전에 TCP 3-way 핸드셰이크 또한 수행한다.
  2. 전송 - SSL 세션이 생성되고 클라이언트와 서버가 원하는 데이터를 주고받는다.
  3. 종료 - 데이터 전송의 끝을 서로 알리며 세션을 종료한다.

핸드셰이크 단계

Untitled

  1. Client Hello - 클라이언트가 서버에게 연락한다.
    1. 클라이언트는 자신의 브라우저가 지원할 수 있는 암호화 방식을 먼저 제시한다.
    2. 랜덤 데이터를 생성하여 추가로 전송한다.
  2. Server Hello - 서버가 클라이언트에게 연락한다.
    1. 클라이언트가 제시한 암호화 방식 중 하나를 선정하여 알려준다.
    2. 서버 자신의 인증서를 전달한다. (이 인증서에는 서버의 공개키가 포함되어 있다.)
    3. 클라이언트와 마찬가지로 서버에서 생성한 랜덤 데이터를 전송한다.
  3. Client Key Exchange - 클라이언트는 미리 주고받은 자신과 서버의 랜덤 데이터를 참고하여 서버와 암호화 통신 할 때 사용할 키를 생성하여 서버에 전달한다.
    1. 키는 서버로부터 받은 공개키로 암호화되어 보내진다.
  4. Finished - 핸드셰이크 과정이 정상적으로 마무리되면, 클라이언트와 서버 모두 “finished” 메시지를 보낸다.

SSL 적용하기

사전 준비

  1. NginX 버전
  2. 서버(EC2, LightSail) 준비
  3. 실제 존재하는 도메인
    1. 우리 서비스의 경우 싸피에서 발급받은 주소 사용

실습코치님 추천 인증기관

  • zeroSSL (90일 무료)
  • certBot (무료)
  • letsEncrypt (무료)

인증서 발급 방법

조은비 코치님의 경우 아래의 링크를 따라서 발급 받았다고 함.

[Let's encrypt] 인증서 발급 및 갱신법

필자 개인적인 궁금증에 대한 정리

  • OpenSSL과 CA의 관계는?

    OpenSSL vs CA

    1. 인증 기관 대 라이브러리 : Let's Encrypt는 주로 무료 SSL/TLS 인증서를 제공하는 인증 기관인 반면, OpenSSL은 암호화 기능과 프로토콜을 제공하는 소프트웨어 라이브러리입니다.

    lets encrypt = 비행기

    openssl = 비행기 엔진

  • SSL은 HTTPS를 위해서만 사용하는가?

    Untitled

    SSL과 TLS는 ‘보안 계층’ 이라는 독립적인 프로토콜 계층을 만들어, 위 그림과 같이 응용 계층과 전송 계층 사이에 속하게 된다.

  • TCP/UDP와 같은 소켓 통신에도 SSL을 사용할 수 있는가?

    → 아래의 링크에 따르면 가능한것으로 보임.

    Adding SSL support to existing TCP & UDP code?

    [JAVA] 자바 SSL소켓통신 예제 (Java SSLServerSocket Example)

  • Self Signed Certificate?

    인증서(digital certificate)는 개인키 소유자의 공개키(public key)에 인증기관의 개인키로 전자서명한 데이타다.

    모든 인증서는 발급기관(CA) 이 있어야 하나 최상위에 있는 인증기관(root ca)은 서명해줄 상위 인증기관이 없으므로 root ca의 개인키로 스스로의 인증서에 서명하여 최상위 인증기관 인증서를 만든다.

    이렇게 스스로 서명한 ROOT CA 인증서를 Self Signed Certificate(SSC) 라고 부른다.

    IE, FireFox, Chrome 등의 Web Browser 제작사는 VeriSign 이나 comodo 같은 유명 ROOT CA 들의 인증서를 신뢰하는 CA로 브라우저에 미리 탑재해 놓는다.

    저런 기관에서 발급된 SSL 인증서를 사용해야 browser 에서는 해당 SSL 인증서를 신뢰할수 있는데 OpenSSL 로 만든 ROOT CA와 SSL 인증서는 Browser가 모르는 기관이 발급한 인증서이므로 보안 경고를 발생시킬 것이나 테스트 사용에는 지장이 없다.

    ROOT CA 인증서를 Browser에 추가하여 보안 경고를 발생시키지 않으려면 Browser 에 SSL 인증서 발급기관 추가하기 를 참고하자.

Reference

SSL 보안을 위한 SSL 인증서 | Cloudflare

HTTPS와 SSL 인증서 - 생활코딩

웹사이트 보안을 위한 방법, SSL이란? (feat. SSL과 HTTPS의 차이)

'Computer Science' 카테고리의 다른 글

Docker란?  (1) 2024.02.19
HLS(HTTP 라이브 스트리밍)란?  (0) 2023.12.28
서버 이중화란? (HA, 클러스터링, Fail-Over)  (0) 2023.10.08

HLS란?

HLS(HTTP 라이브 스트리밍)은 가장 널리 사용되는 비디오 스트리밍 프로토콜로써, 비디오 파일을 다운로드할 수 있는 HTTP 파일 조각으로 나누고 HTTP 프로토콜을 이용하여 전송한다.

HLS의 장점

  • 모든 인터넷 연결 장치가 HTTP를 지원하기 때문에 전용 서버가 필요한 스트리밍 프로토콜보다 간단하게 실행할 수 있다.
  • 재생에 지장을 주지 않고 네트워크 상태에 따라 비디오 품질을 높이거나 낮출 수 있다. (적응형 비트 전송률 비디오 전송) 이 기능이 없으면 네트워크가 느려진 경우 비디오 재생이 완전히 멈출 수 있다.

HLS는 어떻게 작동하는가

서버 : HLS 스트리밍은 미디어 파일이 저장된 서버스트리밍이 제작된 서버에서 시작된다.

서버에서 두 가지 주요 프로세스가 진행된다.

  1. 인코딩 : 비디오 데이터의 포맷을 다시 설정하여 모든 장치가 데이터를 인식하고 해석할 수 있게 한다. HLS는 H.264나 H.265 인코딩을 사용해야 한다.
  2. 조각화 : 비디오는 몇 초 길이의 세그먼트로 나뉜다.
  3. 비디오를 세그먼트로 나누는 것과 더불어 HLS는 비디오 세그먼트의 인덱스 파일을 만들어 세그먼트의 순서를 기록한다.
  4. HLS는 또한 480p, 720p, 1080p 등의 다양한 품질로 여러 세트의 세그먼트를 복제한다.

배포 : 인코딩된 비디오 세그먼트는 클라이언트 장치가 스트리밍을 요청하면 인터넷을 통해 클라이언트 장치로 전송된다.

클라이언트 장치 : 클라이언트 장치는 인덱스 파일을 참조하여 비디오를 순서대로 조합하고 필요에 따라 품질을 높이거나 낮춘다.

HLS로 영상을 인코딩 할 경우 m3u8 확장자와 ts 확장자를 가진 파일이 생성된다.

  • m3u8 파일은 영상 재생을 위한 메타 정보들이 담겨 있다.
  • ts 파일은 실제 스트리밍 영상 데이터이며, 시간 단위로 작게 쪼개져 있다.

m3u8 파일 예시

아래는 내가 개발중인 서비스의 영상 중 master m3u8 파일을 가져와 봤다.

3가지의 품질로 영상이 준비되어 있고, bandwidth에 따라서 품질을 선택할 수 있도록 작성되어 있다.

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=5640800,RESOLUTION=1080x1920,CODECS="avc1.640028,mp4a.40.2"
1080playlist.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=2855600,RESOLUTION=720x1280,CODECS="avc1.64001f,mp4a.40.2"
720playlist.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=1170400,RESOLUTION=480x854,CODECS="avc1.64001f,mp4a.40.2"
480playlist.m3u8

마무리

여러 영상 스트리밍 서비스를 둘러봤을 때 가장 범용적으로 사용하는 HLS 방식의 영상 스트리밍에 대해 간단히 알아봤다. 많은 기업이 HLS 방식을 이용한 스트리밍을 활용하고 있는 만큼 장점이 확실한 것 같다. (어댑티브 스트리밍, 여러 장치 지원)

Reference

동영상 플랫폼 이해하기 (1) - HLS

HLS (HTTP 라이브 스트리밍)이란 | Cloudflare

'Computer Science' 카테고리의 다른 글

Docker란?  (1) 2024.02.19
SSL이란?  (0) 2024.02.19
서버 이중화란? (HA, 클러스터링, Fail-Over)  (0) 2023.10.08

서버 이중화 개요

모 기업의 CS지식 문제에서 잘 모르는 내용이 있어서 정리하고 기록하기위해 포스팅 합니다.

목표 : HA, 클러스터링, Fail-Over를 이해하고 설명하는 것을 목표로 한다.

HA(High Availability)

고가용성은 서버, 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질을 말한다. 고(高)가용성이란 "가용성이 높다"는 뜻으로서, "절대 고장 나지 않음"을 의미한다. 고가용성은 흔히 가용한 시간의 비율을 99%, 99.9% 등과 같은 퍼센티지로 표현하는데, 1년에 계획된 것 제외 5분 15초 이하의 장애시간을 허용한다는 의미의 파이브 나인스(5 nines), 즉 99.999%는 매우 높은 수준으로 고품질의 데이터센터에서 목표로 한다고 알려져 있다. 하나의 정보 시스템에 고가용성이 요구된다면, 그 시스템의 모든 부품과 구성 요소들은 미리 잘 설계되어야 하며, 실제로 사용되기 전에 완전하게 시험되어야 한다.

HA 솔루션의 종류

  • 클러스터링
  • 서버 이중화
  • RAID
  • scalibity

https://docs.oracle.com/cd/E25054_01/fusionapps.1111/e14496/scale_config.htm

HA와 서버 이중화의 관계

HA는 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질을 말한다. 따라서, HA를 위한 솔루션으로 서버 이중화가 포함될 수 있다.

서버 이중화

서버 이중화란 운영중인 서비스의 안정성을 위해 각종 자원(하드웨어, OS, 미들웨어, DB 등)을 이중 혹은 그 이상으로 구성하는 것을 말한다.

서버 이중화의 목적

  1. 장애 또는 재해시의 빠른 서비스 재개를 위함 (Fail-Over)
  • 하드웨어, 미들웨어 등 다양한 지점에서 오류가 발생할 수 있으며 사용자가 이를 인지하지 못하도록 하기 위함
  • 서비스의 일시적인 중단이 발생하여도 재빠르게 대응하기 위함
  1. 원활한 서비스의 성능을 보장하기 위함 (Load Balancing)
  • 하나의 기기에서 일정량 이상의 사용자 트랜잭션을 처리하는 경우 응답시간이 느려질 가능성 존재
  • 사용 트랜잭션의 패턴과 사용량 등을 분석해 부하를 분산하여 효율적인 업무처리가 가능
  • 부하분산을 구현하고자 하는 지점에 따라 미들웨어, 네트워크, OS 등 다양한 지점에서 구현이 가능

서버 이중화 방법 및 고려요소

서버를 이중화를 구성할 때 Active-Active 또는 Active-StandBy 등으로 구성할 수 있다.

  • Active-Active : 부하분산 등의 목적으로 주로 사용. 서비스 단위를 나누어 분산시키기도 함
  • Active-Stand by : 즉각적인 Failover(장애 대비. 장애가 발생하였을때 예비 시스템으로 동작하는 것)을 위해 주로 구성

클러스터링

각기 다른 서비스를 하나로 묶어서 하나의 시스템같이 동작하게 함으로써 클라이언트에 고 가용성의 서비스를 제공 하는 것.

클러스터 기술은 세가지 유형의 장애를 대비한다.

  1. 어플리케이션과 서비스 장애
  • 어플리케이션과 필수 서비스에 영향을 미치는 경우
  1. 시스템과 하드웨어 장애
  • 하드웨어를 구성하는 CPU, drives, memory, network adapters, 전원공급기에 영향을 미치는 경우
  1. 여러기관의 사이트 장애
  • 자연재해, 정전, 연결 중단 등으로 발생할 수 있다.

→ 클러스터링도 장애에 대비하는 기능(Fail-Over) 기능을 제공한다.

정리

마무리 하자면, 서버의 고 가용성(HA)를 위해서 서버 이중화, 클러스터링과 같은 솔루션을 사용할 수 있으며, 이러한 솔루션은 대게 장애에 대비하는 기능(Fail-Over)를 제공한다.

정리한 내용에서 궁금한 점이나, 수정이 필요한 점은 댓글로 알려주시면 감사하겠습니다.

Reference

https://lipcoder.tistory.com/523#google_vignette

https://docs.oracle.com/cd/E25054_01/fusionapps.1111/e14496/scale_config.htm

https://yoonwould.tistory.com/152

https://velog.io/@ragnarok_code/서버클러스터란

'Computer Science' 카테고리의 다른 글

Docker란?  (1) 2024.02.19
SSL이란?  (0) 2024.02.19
HLS(HTTP 라이브 스트리밍)란?  (0) 2023.12.28

+ Recent posts