완벽한 IT 인프라 구축을 위한 Docker <책 요약 2>

YP J·2024년 2월 5일
post-thumbnail

하드웨어와 네트워크 기초 지식

서버장비

1.  CPU

  • CPU 는 고속으로 움직이므로 메모리와의 처리 속도 차이를 완화할 목적으로 캐시가 사용된다.
  • 이 캐시의 크기도 성능과 관련이 있다.
  • 그래서 GPU graphic processing Unit라고 하는 화상처리를 여러개의 코어로 동시 및 병렬로 처리할 수 있다.

2.  메모리

  • CPU 가 직접 액세스 할 수있는 기억장치를 메모리(주기억 장치) 라고 한다.

3.  스토리지

  • 보조기억장치. ( 하드디스트, SSD)
  • 스토리지의 용량, 읽기, 쓰기 속도가 시스템 전체의 응답 시간에 영향

그외에

네트워크 주소

  • 서버나 클라이언트, 각종 네트워크 장비등을 식별하기 위해 네트워크 주소를 사용한다.
  • 네트워크 주소에서 알아둬야 하는 아래 2가지

1. MAC 주소(물리 주소 / 이더넷 주소)

  • 네트워크 인터페이스 카드나 무선 LAN 칩과 같은 네트워크 부품에 물리적으로 할당되는 48비트 주소.
    • 앞 24비트는 네트워크 부품의 제조업체 식별 , 뒤 24비트는 중복되지 않도록 할당 ?
  • MAC주소는 16진수로 표기
  • 앞에서 2바이트씩 구분하여 표시한다.
  • OSI참조 모델의 2계층인 데이터 링크 계층이다.

2. IP 주소

  • 네트워크에 연결된 컴퓨터나 네트워크 장비에 할당되는 식별 번호
    • 예를들어 인터넷, 인트라넷?
  • IPv4 는 8비트씩 4개로 구분된 32비트 주소로 , 각 0 ~ 255
  • 2^8 이 4칸 있으므로 2^32 까지밖에 연결 할수 없다 (약 42억대)
    • 그래서 해결책으로 Private 서버와 pubilc서버 구분 그리고 그걸 변환해주는 NAT장비 설치 운용
    • IPv6 로 128비트 주소 사용하기
  • 주소할당은 중복되지 않도록 각 나라의 NIC가 수행하고 있다.

OSI 참조 모델과 통신 프로토콜

  • 통신
  • 웹, 메일, 파일전송, Secure Shell
  • 7: 응용, 웹의 HTTP나 메일 전송하는 SMTP 등과 같은 애플리케이션에 특화된 프로토콜
  • 6: 표현, 데이터의 저장 형식잉나 압축, 문자 인코딩과 같은 데이터 표현 형식 규정
  • 5: 세션, 세션 계층은 커넥션 확립 타이밍, 데이터 전송 타이밍 규정, 세션은 애플리케이션간에 일어나는 요청과 응답으로 구성
  • 4: 전송, 데이터 전송제어 계층, 전송 오류의 검출이나 재전송을 규정합니다. 대표적으로 TCP, UDP가 있다.
  • 3: 네트워크, 서로 다른 네트워크간에 통신을 하기위한 규정, 서로 다른 네트워크에 데이터 패킷을 전송하는 것을 라우팅이라 한다.
    라우터,레이어3 스위치 -> 패킷을 어디에서 어디로 전송할지에 대한 라우팅 테이블 을 관리한다.
  • 2: 데이터링크, 동일한 네트워크안 에 있는 노드간의 통신을 규정
    MAC주소로 데이터를 전송한다.
    레이어2 스위치 -> 통신하고싶은 노드가 어떤 포트와 연결되어 있는지를 MAC주소를 사용하여 판단 해서 패킷 전송
  • 1: 물리, 유무선, 통신장비 전압, 전류 할당 장비에

방화벽

  • 보안,
  • 방법중 하나가 불필요한 통신 차단,
  • 방화벽은 내부 네트워크와 외부와의 통신을 제어하고 안전을 유지하기 위한 기술

1. 패킷 필터형

  • 통과하는 패킷을 포트 번호나 IP 주소를 바탕으로 필터링 하는 방법
  • Access Control List

2. 어플리케이션 게이트웨이형

  • 패킷이 아니라 애플리케이션 프로토콜 레벨에서 외부와의 통신을 대체
  • 일반적으로 프록시 서버 라고 한다 우리말로 대리 서버

라우터/레이어 3 스위치

  • 라우터는 2개 이상의 서로 다른 네트워크 간을 중계하기 위한 통신 장비입니다.
  • OSI 3층 네트워크 에서 작동
  • 어떤 루트를 통해 데이터를 전송할지를 판단하기 위한 경로 선택 기능 이있다.
  • 라우팅 테이블로 정해지는 정적경로
  • 라우팅 프로토콜에서 설정된 동적경로 가 있다.
  • 레이어3 스위치는 라우터와 거의 똑같은 기능을 갖는다
  • 이 기계는 라우팅을 하드웨어로 처리해서 고속이고. 연결할수있는 포트수가 많다.

OS(Linux) 기초 지식

  • 하드웨어, 네트워크를 제어하는것이 OS의 역할
  • Docker는 Linux 기능을 사용한 기술이기 이다 ! !

Linux

  • Unix의 호환 서버 OS이다.
  • 보안이 뛰어나고 안정적으로 작동한다

    Why??

    ### 2. 권한 분리 및 최소 권한 원칙

    Linux는 사용자와 프로세스 권한을 엄격히 구분합니다. 예를 들어, 시스템의 핵심 부분에는 루트(root) 사용자만 접근할 수 있으며, 일반 사용자는 제한된 권한을 가집니다. 이는 잠재적으로 해로운 소프트웨어가 시스템에 미치는 영향을 최소화합니다.

    ### 4. 보안 강화된 Linux(Security-Enhanced Linux, SELinux)

    SELinux와 같은 보안 강화 기능은 Linux 시스템의 보안을 한층 더 강화합니다. SELinux는 액세스 제어 정책을 통해 프로세스와 사용자가 시스템의 파일과 리소스에 접근하는 것을 제한합니다. 이는 잠재적인 보안 위협으로부터 시스템을 보호하는 데 도움이 됩니다.

1. Linux kernel

  • 커널은 OS의 코어가 되는 부분
  • 메모리 관리, 파일시스템, 프로세스관리, 디바이스 제어 등

2. Linux 배포판

  • 배포판에는 커널과 함께 각종 커맨드, 라이브러리, 애플리케이션이 포함되어 있다.
  • Linux 커널 이외의 부분을 사용자 공간 이라고 한다.
    • 사용자 공간에서는 디바이스에 직접 접근 못하니까 커널을 통해서 접근한다.

Linux 커널

  • C나 어셈블리 언어로 만들어 져있다. 하드웨어 제어한다.

1. 디바이스 관리

  • 커널은 하드웨어(CPU/Memory/Disk/IO 장치)를 디바이스 드라이버라는 소프트웨어를 이요해 제어 한다.

2. 프로세스 관리

  • 명령을 실행할때 해당 프로그램 파일에 쓰여있는 내용을 읽어서 메모리상에 전개후 메모리에 프로그램을 실행한다.-> 이렇게 실행된 프로그램을 프로세스라 한다.
  • 커널은 이러한 프로세스에 PID라는 식별자를 붙여 관리한다. + 효율

3. 메모리 관리

  • 프로세스가 실행되면 전개 됨과 동시에 프로그램 안에서 이용하는 데이터도 메모리상에 전개 된다.
  • 커널은 프로그램/데이터를 물리 메모리에 효율적으로 할당하는 역할
  • 또한 끝난 프로세스가 사용했던 메모리 영역을 해제하는 것도 커널의 역할
  • 프로그램/데이터 전개할때 하드디스크와 같은 보조기억 장치에 가상메모리 ! 영역을 만든다.
  • 이러한 영역을 스왑 이라고 한다.
  • 커널은 메모리상에 전개된 이용 빈도가 낮은 데이터를 스왑으로 보내고(스왑아웃), 스왑상의 데이터를 메모리로 되돌리는 스왑인 을 합니다

사용 빈도가 낮은 데이터를 스왑 영역으로 이동하는 것이 일반적인 운영 체제의 메모리 관리 전략입니다. 이 과정을 통해 시스템은 가장 자주 사용되는 데이터를 물리적 메모리(RAM)에 유지하면서, 사용 빈도가 낮은 데이터는 스왑 영역(일반적으로 하드 드라이브의 일부)으로 옮깁니다. 이러한 메커니즘은 시스템의

메모리 사용 효율성을 최적화하고, 전반적인 성능을 개선하는 데 도움을 줍니다.
스왑 아웃은 메모리 공간을 확보하기 위해 사용되며, 주로 시스템의 메모리가 부족하거나 메모리 사용량이 높을 때 발생합니다. 반면, 스왑 인은 스왑 영역에 저장된 데이터가 다시 필요해질 때, 즉 해당 데이터에 대한 액세스 요청이 있을 때 수행됩니다.

메모리 관리 시스템은 '페이지 교체 알고리즘'을 사용하여 어떤 데이터를 스왑 영역으로 이동할지 결정합니다. 여기에는 Least Recently Used (LRU), First In First Out (FIFO), Clock 알고리즘 등 다양한 방법이 있으며, 이러한 알고리즘은 시스템의 성능과 효율성을 최적화하기 위해 사용됩니다.

따라서, 사용 빈도가 잦은 데이터를 스왑 영역으로 이동시키는 것은 일반적인 전략이 아닙니다. 대신, 시스템은 가능한 한 사용 빈도가 낮은 데이터를 스왑 영역으로 옮겨 메모리의 가용성을 높이고, 더 중요하거나 자주 사용되는 데이터에 대한 빠른 액세스를 보장하기 위해 노력합니다.


캐싱 ?

네, 맞습니다. 시스템은 사용 빈도가 높은 데이터를 캐시에 저장하여, 데이터에 대한 빠른 액세스를 가능하게 합니다. 캐시는 속도가 매우 빠른 메모리 유형으로, CPU 근처에 위치하며, 자주 사용되는 데이터나 명령어를 임시로 저장합니다. 이를 통해 프로그램 실행 시 데이터를 더 빠르게 불러올 수 있어 시스템의 전반적인 성능이 향상됩니다.

캐싱 메커니즘은 다양한 수준에서 이루어집니다:

CPU 캐시: CPU 내부에는 여러 레벨(L1, L2, L3 등)의 캐시가 있어, 가장 자주 접근하는 데이터와 명령어를 저장합니다. 이 캐시들은 접근 속도를 극대화하기 위해 CPU에 매우 가깝게 위치합니다.

메모리 캐싱: 운영 체제는 물리적 메모리 내에도 캐시 영역을 두어, 디스크 I/O 작업을 줄이고 접근 속도를 빠르게 합니다. 이는 파일 시스템 캐시 또는 버퍼 캐시라고 불리기도 합니다.

캐싱은 성능 최적화에서 매우 중요한 역할을 합니다. 데이터 또는 연산 결과가 캐시에 있으면, 시스템은 더 느린 스토리지나 네트워크를 거치지 않고 즉시 해당 데이터에 접근할 수 있습니다. 이러한 방식으로, 사용 빈도가 높은 데이터를 캐시에 저장하는 것은 시스템의 응답 시간을 단축하고, 전반적인 성능을 향상시키는 데 기여합니다.

  • 이러한 커널을 조작하기 위해서 쉘을 사용합니다.
  • 쉘은 사용자가 내린 명령을 커맨드로 받아 그것을 Linux 커널에 전달한다.
    • 애플리케이션 실행/정지
    • 환경변수 관리
    • 명령 이력 관리 (히스토리)
    • 명령 실행 결과 표시 및 파일 출력
  • 또한 쉘 명령어를 모아 텍스트로 만든걸 쉘스크립트 라고한다.
  • 디폴트 쉘 /bin/sh,

리눅스 파일시스템

  • 파일시스템은 리눅스에서 하드디스크나 USB메모리, DVD등과 같은 데이터에 액세스 하기 위한 장치이다.
  • 애플리케이션 입장에서 데이터가 하드디스크, 플래시 메모리, 데이터베이스 서버 에 저장 되어있는지 상관 안 하고 투과적으로 액세스 할수 있다면 편리할것이다.
  • 리눅스 커널은 Virtual File System 이라는 장치를 사용해서 데이터에 대한 투과 액세스 기능을 가능하게 한다.
    • VFS에서는 각 디바이스를 파일로 취급하는 것이 특징이다.

리눅스 디렉토리 구성

  • 리눅스 디렉토리 목록은 Filesystem Hierarchy Standard 라는 규격.
  • 배포판은 완전히 기준을 준거 하진 않는다.

리눅스 보안 기능

1. 계정에 대한 권한 설정

  • root 와 그외의 일반사용자가 있다.
  • root 는 시스템의 종료나 파일 시스템의 마운트/언마운트, 애플리케이션 설치,삭제 와 같은 권한 가짐
  • 또한 미들웨어와 같은 데몬을 기동시키기 위한 시스템 계정도 작성할수있다.
    • 시스템 계정은 특정 프로세스를 작동시키기 위한 계정입니다.
  • 디렉토리에 대한 액세스 권한, 퍼미션 설정 가능

2. 네트워크 필터링을 사용한 보안 기능

  • 리눅스는 네트워크를 경유하여 멀티 유저가 이용하는것을 전제로한 OS이다.
  • 그래서 네트워크에 관한 기능이 풍부하다.
  • iptables는 리눅스에 내장된 패킷 필터링 및 네트워크 주소 변환 NAT 기능을 설정하는 기능이다.
    • 패킷필터링이란 패킷 헤더 부분 (송신원, 수신원 IP주소, 포트 번호 등) 을 보고 조건과 일치하면 설정한 액션(전송, 파기, 주소수정 등)을 수행.

3. SELinux(Security-Enhanced Linux)

  • 미국 국가 안전보장국이 제공하는 리눅스 커널에 강제 액세스 제어 기능을 추가한 기능.
  • 퍼미션에 기초해서 허가하는데 루트 사용자는 다 액세스 가능.
  • 그러나 루트사용자가 해킹당하면 치명적이다.
  • 그래서 SELinux는 보안 대상에 따라 HTTP/FTP 와 같은 프로세스 마다 액세스 제한을 거는 Type Enforcement(TE) 와 root도 포함한 모든 사용자에 관해 제어를 거는 롤베이스 액세스 제어(RBAC) 등으로 리눅스를 제어한다.
  • 루트 사용자에 권한 집중되는것을 막아서 보안성 업!
profile
be pro

0개의 댓글