[CS] 시스템과 인프라 기초지식

한결·2023년 6월 19일
0

CS

목록 보기
17/34

시스템과 인프라 기초지식

Docker 공부를 본격적으로 시작하기 전 알아야하는 기초 지식

시스템 기반의 기초지식

폭포형 모델을 사용한 시스템 개발

  • 애플리케이션 실행환경 구축 -> 인프라 엔지니어가 담당
  • 애플리케이션 개발 부분 -> 애플리케이션 엔지니어가 담당

클라우드의 등장

  • 이전에는 온프레미스 환경에서 가동
    -> 클라우드의 등장으로 서버들을 클라우드 상의 가상 인스턴스로 옮김
    -> 실행환경의 구축 범위가 극도로 줄어듦
    -> 짧은 사이클로 릴리스 반복

클라우드를 구성하는 대부분의 기술은 한 대의 물리 호스트 상이 아닌 분산환경에서 가동

  • 인프라 엔지니어
    -> 분산환경에서는 수동으로 운용하지 않고 자동화 출을 사용해 오케스트레이션을 함
    -> 애플리케이션 엔지니어처럼 코드를 작성하는 스킬이 요구됨
  • 애플리케이션 엔지니어
    -> 인프라 엔지니어의 업무였던 제품 환경에 대한 배포나 테스트 등도 애플리케이션 엔지니어가 직접 할 수 있게 됨
    -> OS나 네트워크 등과 같은 인프라 기술의 기초지식을 알아둬야함

시스템 기반의 구성 요소

시스템 기반이란?
애플리케이션을 가동시키기 위해 필요한 하드웨어나 OS, 미들웨어 등과 같은 인프라를 말함

  • 기능 요구사항

    시스템의 기능으로서 요구되는 사항

    • 시스템이나 소프트웨어에서 무엇을 할 수 있는지를 모아 놓은 것
  • 비기능 요구사항

    시스템의 성능, 신회성, 확장성, 운용성, 보안 등과 같은 요구사항

    • 비기능 요구사항을 충족시키려면 프로그래밍 지식뿐만 아니라 시스템 기반에 관한 지식이 필요

아래부터 시스템 기반의 구성 요소

  • 하드웨어

    시스템 기반을 구성하는 물리적인 요소로서 서버 장비 본체나 데이터를 저장하기 위한 스토리지, 전원장치 등

    • 넓은 의미에선 데이터센터의 설비(건물, 공조, 보안, 소화설비 등) 포함
  • 네트워크

    시스템 이용자가 원격지에서 엑세스 할 수 있도록 서버들을 연결하기 위한 요구사항

    • 라우터, 스위치, 방화벽 등과 같은 네트워크 장비
    • 위를 연결하기 위한 케이블 배선 등도 관리
    • 무선 LAN으로 연결하는 경우엔 엑세스 포인트 등도 필요
  • 운영체제

    하드웨어나 네트워크 장비를 제어하기 위한 기본 소프트웨어, 하드웨어의 리소스나 프로세스 관리

  • 미들웨어

    서버 OS상에서 서버가 특정 역할을 다하기 위한 기능을 갖고 있는 소프트웨어

클라우드와 온프레미스

온프레미스(on-premises)
자사에서 데이터센터를 보유하고 시스템 구축부터 운용까지 모두 수행하는 형태

  • 초기 시스템 투자에 드는 비용 부담이 큼
  • 운용에 드는 비용도 시스템 이용량과 관계없이 일정 금액을 부담

퍼블릭 클라우드(Public cloud)
불특정 다수에게 제공되는 클라우드 서비스

  • 자사 데이터 센터 보유하지 않음
    -> 인프라 초기 투자 필요없음

  • IaaS/Paas/SaaS 등이 있음

  • 시스템 기반 부분을 이용하는 서비스는 IaaS

    • 이용하고 싶은 사양으로 된 가상머신이나 스토리지를 선택
    • 이용한 시간이나 데이터양에 따라 요금 지불
  • 시스템 이용량이 증가 했을 때 인프라 기반을 쉽게 증설시킬 수 있음

  • 아마존, 구글 등

프라이빗 클라우드
특정 기업 그룹에게만 제공되는 클라우드 서비스

  • 그룹 기업 내에서 데이터 센터를 공동으로 보유하는 듯한 이미지
  • 이용자를 한정
    -> 보안 확보, 독자적인 기능이나 서비스 추가하기 쉬움

시스템 기반의 운용 구축 흐름

  1. 시스템화 계획/요구사항 정의
  2. 인프라 설계
  3. 인프라 구축
  4. 운용
  • 폭포형 개발 : 위의 공정을 순서대로 진행

  • 애자일 개발 : 각 단계를 작은 단위로 나눠 반복하면서 개발을 진행

  • 애플리케이션 개발 공정과 비슷하지만 운용단계에서 다름

    • 애플리케이션 : 릴리스 후에는 버그의 수정이나 추가 기능 개발이 메인이 되어 개발인원도 줄어듬
    • 인프라 : 릴리스 감시나 보안 대책을 위한 버전 업그레이드, 시스템에 장애가 발생한 경우의 복구 작업 등 많은 업무가 남음
  • 유지보수 기간을 줄이고 시스템을 안정적으로 가동하기 위해 운용설계가 중요

    • 시스템 운용에서 자동화 할 수 있는 부분을 가능한 자동화하도록 설계
      -> Docker는 시스템 구축이나 시스템 운용에 있어서 지금까지 사람의 손으로 해왔던 많은 작업을 자동화 가능

시스템 구축 계획 및 요구사항 정의 단계

  • 시스템 구축 범위 선정
  • 인프라 요구사항 정의
  • 예산 책정
  • 프로젝트 체계화
  • 기존 시스템과의 연계
  • 시스템 마이그레이션 계획

인프라 설계 단계

  • 인프라 아키텍처 설계
  • 네트워크 토폴로지 설계
  • 장비 선택, 조달
  • OS, 미들웨어 선택, 조달
  • 시스템 운용 설계
  • 시스템 마이그레이션 설계

인프라 구축 단계

  • 네트워크 부설
  • 서버 설치
  • OS 셋업
  • 미들웨어 셋업
  • 애플리케이션 및 라이브러리 설치
  • 네트워크 확인, 부하테스트, 운용 테스트
  • 시스템 릴리스 및 마이그레이션

운용단계

  • 서버 프로세스, 네트워크, 리소스, 배치 job 모니터링
  • 데이터 백업 및 정기 유지보수
  • OS, 미들웨어 버전 업그레이드
  • 애플리케이션 버전 업그레이드
  • 시스템 장애 시 대응
  • 사용자 서포트

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

  • 시스템 기반에서 가장 하위 레이어 부분을 구정하는 요소는 하드웨어와 네트워크
  • Docker를 사용하여 인프라를 구축하기 위해 알아두어야 할 네트워크와 하드웨어 기술 중 중요한 키워드를 아라보쟈

서버장비

  • 온프레미스 시스템 기반은 여러대의 서버 장비로 구성
  • 클라우드 서비스의 경우 온프레미스 서버 장비의 사양에 해당하는 인터페이스의 종류를 요건에 따라 선정할 필요가 있음

CPU
프로그램의 설계나 처리 등을 수행하는 전자회로 부품

  • 코어 수가 많으면 많을수록 연산 능력이 높아짐
  • CPU는 고속으로 움직이므로 메모리와의 처리 속도 차이를 완화할 목적으로 캐시가 사용됨
  • GPU : 화상처리를 여러 개의 코어로 동시 및 병렬 처리 할 수 있는 프로세서
  • CPU, GPU 고성능일수록 비용 증가

메모리
CPU가 직접 액세스할 수 있는 (주)기억장치

  • 데이터 용량이 크거나 데이터의 전송속도가 고속일수록 고성능
  • 서버용으로는 전력소모가 적고 오류처리가 탑재되어있는 것을 선호

스토리지
데이터베이스에 기록하는 데이터 등과 같은 영구적인 데이터를 저장하는 디바이스

  • 보조기억장치

  • 하드디스크나 SSD 등

  • 그 외

    • UPS
    • KVM 스위치

네트워크 주소

MAC 주소 (물리주소/이더넷 주소)
네트워ㅡ 인터페이스 카드나 무선 LAN 칩과 같은 네트워크 부품에 물리적으로 할당되는 48비트 주소

  • 16진수로 표기
  • 앞에서 2바이트씩 구분
  • 데이터 링크 계층에서 사용

IP주소
네트워크에 연결관 컴퓨터나 네트워크 장비에 할당되는 식별 번호

  • IPv4 : 8비트씩 4개로 구분된 32비트 주소
  • IPv6 : 128비트
  • 글로벌 주소의 할당은 전 세계에서 중복되지 않도록 각 나라의 NIC가 수행

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

통신 프로토콜이란?
서로 어떤 약속으로 통신할지 정한 규약

OSI 참조 모델이란?
ISO가 책정한 컴퓨터의 통신 기능을 계층 구조로 나눈 개념 모델

응용계층(7)
웹의 HTTP나 메일 전송을 하는 SMTP 등과 같은 애플리케이션에 특화된 프로토콜을 규정

표현계층(6)
데이터의 저장 형식이나 압축, 문자 인코딩과 같은 데이터의 표현 형식을 규정

세션계층(5)
커넥션 확입 타이밍이나 데이터 전송 타이밍 규정, 세선은 애플리케이션 간에 일어나는 요청과 응답으로 구성

세션계층(4)
데이터 전송을 제어하는 계층
전송 오류의 검출이나 재전송을 규정

  • 대표적인 프로토콜로 TCP와 UDP가 있음
  • 데이터를 통신 상대의 노드로 확실히 보내는 역할

네트워크계층(3)
서로 다른 네트워크 간의 통신을 하기위한 규정

데이터 링크 계층(2)
동일한 네트워크 안에 있는 노드 간의 통신을 규정

물리 계층(1)
통신 장비의 물리적 및 전기적 특성을 규정

방화벽

방화벽이란?
내부 네트워크와 외부와의 통신을 제어하고, 내부 네트워크의 안전을 유지하기 위한 기술

방화벽 종류

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

  • 패킷 필터링 룰을 ACL이라고 함

애플리케이션 게이트웨이형
애플리케이션 프로토콜 레벨에서 외부와의 통신을 대체 제어하는 것

  • 일반적으로 프록시 서버라고 부름

라우터/레이어 3 스위치

2개 이상의 서로 다른 네트워크 간을 중계하기 위한 통신 장비

  • 네트워크 계층에서 작동
  • 라우팅 테이블을 바탕으로 정해지는 정적 경로와
  • 라우팅 프로토콜에서 설정된 동적 경로가 있음

OS(Linux) 기초지식

  • OS 역할 : 하드웨어나 네트워크를 제어

  • 업무 시스템에선 보통 Unix, Linux, Windows Server와 같은 서버 OS 사용

  • Docker는 Linux의 기능을 사용한 기술임

Linux

  • 1991년에 개발된 Unix 호환 서버 OS
  • 보안에 뛰어나며 안정적으로 작동됨
  • 오픈소스임

일반적으로 Linux라는 말은 다음 두 가지를 뜻한다

Linux 커널

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

Linux 배포판

  • Linux는 배포판 형태로 패키지화 되어 배포됨
  • 배포판 = 커널 + 각종 커맨드 + 라이브러리 + 애플리케이션 등
  • 커널 이외의 부분을 사용자공간(userland) 라고 함
  • 사용자 공간에선 직접 디바이스에 접근 불가
    -> 커널을 통해 처리가 이루어짐

Linux 커널

Linux 커널은 하드웨어 제어에 관한 OS 핵심 기능

디바이스 관리
Linux 커널은 하드웨어를 디바이스 소프트웨어를 이용해 제어

프로세스 관리
명령을 실행할 때 해당 프로그램에 쓰여 있는 내용을 읽어 들여 메모리 상에 전개한 후 메모리 상의 프로그램을 실행

  • 실행된 프로그램을 프로세스라고 함
  • 프로세스에 PID라는 식별자를 붙여 관리
  • 커널은 프로세스 실행을 위해 필요한 CPU를 효율적으로 할당하는 역할을 함

메모리 관리
프로세스가 실행되면 메모리상에 프로그램이 전개됨과 동시에 프로그램 안에서 이용하는 데이터도 메모리상에 전개

  • 커널은 프로그램/데이터를 물리 메모리에 효율적으로 할당하는 역할을 함 (해제하는 역할도 함)
  • 메모리의 물리적인 용량을 초과하면 하드디스크같은 보조기억장치에 가상 메모리 영역(swap)을 생성
  • 이용 빈도가 낮은 데이터를 스왑으로 보냄(스왑아웃)
  • 스왑상의 데이터를 메모리로 되돌리기 (스왑인)

Linux 파일 시스템

파일 시스템은 Linux에서 하드디스크나 USB메모리, CD, DVD 등과 같은 데이터에 엑세스하기 위한 장치

  • Linux 커널은 VFS(가상 파일 시스템)라는 장치를 사용해 데이터에 대한 투과 엑세스(데이터의 위치(하드디스크, 플래시 메모리, 네트워크 너머 스토리지 등)에 상관 없이 투과적으로 엑세스 할 수 있는 방법)를 가능하게 함

Linux 디렉토리 구성

  • 커널을 비롯하여 각종 커맨드나 설정 파일이 디렉토리에 배치됨
  • 디렉토리 목록은 FHS(Filesystem Hierarchy Standard)라는 규격에 의해 표준화 되어있음
  • 배포판에 따라 디렉토리 구성 차이가 있음

Linux 보안기능

  • 퍼실리티/하드웨어와 같은 하뤼 레이어부터 애플리케이션 구축 기술에 이르기까지 지원 범위가 상당히 넓어서 시스템 전체를 파악하고 대책을 세워야함

아래부턴 Linux가 갖고 있는 보안 기능 중 대표적인 것들

계정에 대한 권한 설정

  • 권한은 특권 사용자 'root'와 그 외의 일반 사용자가 있음
  • 미들웨어 같은 데몬을 기동시키기 위한 시스템 계정도 작성 가능
  • 권한을 계정 및 그룹별로 세세하게 설정 가능
    -> 이를 permission이라고 한다

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

  • Linux는 원래 네트워크를 경유해 멀티유저가 이용하는 것을 전제로한 OS
    -> 네트워크에 관한 기능 풍부
  • iptables는 Linux에 내장된 패킷 필터링 및 네트워크 주소 변환(NAT) 기능을 설정하는 기능
  • 패킷 필터링으로 방화벽 같은 역할을 해서 부정한 패킷 파기 가능

SELinux(Security-Enhanced Linux)
커널에 강제 엑세스 제어 기능을 추가한 기능

  • 'root'는 permission과 상관없이 모든 엑세스 가능
    -> root 사용자의 비밀번호 도난당하면 시스템에 치명적 영향

  • SELinux는 HTTP/FTP 같은 프로세스 마다 보안대상에 따라 액세스 제한을 거는 Type Enforcement와 root도 포함한 모든 사용자에 관해 제어를 거는 롤베이스 액세스 제어(RBAC) 등으로 Linux제어
    -> root에 권한이 집중되는 것을 막음
    -> 보안성 높은 시스템 구축 가능

미들웨어 기초 지식

미들웨어란
OS와 업무 처리를 수행하는 애플리케이션 사이에 들어가는 소프트웨어

  • 목적과 용도에 따라 폭넓은 종류가 존재
    Docker를 사용할 때 알아두어야 할 미들웨어의 개요 및 대표적인 제품에 대해 아라보쟈

웹 서버/웹 애플리케이션 서버

웹 서버란
클라이언트의 브라우저가 보낸 HTTP요정을 받아, 웹콘텐츠(HTML, CSS 등)를 응답으로 반환하거나 다른 서버사이드 프로그램을 호출하는 기능을 갖고 있는 서버

  • 종류
    • Apache HTTP server
    • Internet Information Services
    • Nginx

데이터베이스 서버

데이터베이스 서버
시스템이 생성하는 다양한 데이터를 관리하기 위한 미들웨어

  • 데이터의 검색, 등록, 변경, 삭제와 같은 기본 기능 외에, 특랜잭션 처리 등도 포함
  • DBMS라고 부르는 경우도 있음
  • 종류
    • MySQL
    • PostgreSQL
    • Oracle Database

NoSQL
RDBMS와는 다른 새로운 방식을 통틀어 일컫는 말

  • 대량의 데이터 축적 및 병렬처리에 뛰어남
  • 종류
    • Redis
    • MongoDB
    • Apache Cassandra

시스템 감시 툴

  • 시스템을 안정적으로 가동시키기 위해 관리자는 시스템이 어떤 상태로 가동되고 있는지를 감시할 필요가 있음
  • 일반적으로 이러한 감시는 시스템 감시 툴로 수행

시스테 감시 툴이란
서버나 장비의 상태를 감시하여 미리 설정한 경계 값을 초과한 경우에 정해진 액션을 실행하는 것

  • 종류
    • Zabbix
    • Datadog
    • Mackerel

인프라 구성 관리 기초 지식

  • 인프라 운용관리는 범위가 넚음
  • 운용 관리 중에서도 안정 가동이나 보안 대책의 관점에서 필요한 업무인 인프라 구성관리는 부하가 큰 작업 중 하나

인프라 구성 관리

인프라를 구성하는 하드웨어, 네트워크, OS, 미들웨어, 애플리케이션의 구성 정보를 관리하고 적절한 상태로 유지하는 작업

  • 온프레미스와 달리 클라우드 등장 이후 한 번 구축한 인프라는 변경을 하지 않고 파기한 수 새로운 것을 구축하면 되므로 부하가 컷던 인프라의 변경 이력을 관리할 필요가 없어짐
    -> 인프라의 변경 이력을 관리하는 것이 아닌 지금 현재 작동하고 있는 인프라의 상태를 관리하면 됨

  • 이러한 인프라를 Immutable Infrastructure라고 함

코드를 사용한 구성관리

  • 최근에는 인프라 구축할 때 인프라 방식 설계서나 파라미터 시트 등을 바탕으로 인프라 셋업하는 것이 아니라 프로그램 코드에 적혀 있는 내용대로 자동으로 설정을 해주는 장치를 도입하여, 그 프로그램을 누가 실행해도 똑같은 상태의 인프라 환경을 구축할 수 있는 환경을 도입하는 것이 일반적

  • 인프라 구성 정보를 코드로 관리하면 애플리케이션 개발에서의 소스코드 관리와 똑같이 Git과 같은 버전 관리 소프트웨어로 변경 이력을 일원화하여 관리 가능

  • 이와 같은 인프라의 구성을 코드로 관리해 가는 것을 Infrastructure as Code라고 함

  • Docker에서는 Dockerfile이라는 파일에 인프라의 구성 정보를 기술 가능

대표적인 인프라 구성 관리 툴

OS 시작을 자동화하는 툴
서버 OS를 설치하거나 가상화 툴을 설치 및 설정하는 작업을 자동화하기 위한 툴

  • KickStart
  • Vagrant

OS나 미들웨어의 설정을 자동화 하는 툴
미들웨어의 설치나 버전관리, 미들웨어의 설정 파일이나 OS의 방화벽 기능의 설정 등 보안과 관련된 설정을 자동화하기 위한 툴

  • Chef
  • Ansible
  • Puppet
  • Itamae

여러 서버의 관리를 자동화하는 툴
분산 환경의 서버들을 관리하기 위한 툴

  • 쿠버네티스 : 여러 컨테이너를 통합관리

지속적 인티그레이션/ 지속적 딜리버리

테스트가 끝난 안전한 애플리케이션을 제품 환경으로 제공하기 위한 툴에대한 기초 지식

지속적 인티그레이션
애플리케이션의 코드를 추가 및 수정할 때마다 테스트를 실행하고 확실하게 작동하는 코드를 유지하는 방법

  • 소프트웨어의 품질 향상을 목적
  • 소프트웨어의 개발이 진행됨에 따라 단위 테스트의 수가 늘어나므로 이러한 테스트를 자동화하기 위해 Jenkins와 같은 인티그레이션 툴을 사용

지속적 딜리버리

  • 애자일형 개발 스타일
    • 모든 기능을 한 번에 다 만드는 것이 아니라
      기능을 추가할 때마다 애플리케이션을 제품환경에 배포하고,
      시스템 이용자의 피드백에 기초하여
      그 다음에 개발할 기능을 결정
      -> 짧은 사이클의 개발과 릴리스를 반복
      -> 이용자가 원하는 애플리케이션을 적시에 제공 가능

0개의 댓글