티스토리 뷰

반응형

이 글은 '완벽한 IT 인프라 구축을 위한 Docker(Asa Shiho 지음, Yamada Yoshihiro 감수, 신은화 옮김)'  책을 바탕으로 요약 및 실습한 내용을 정리한 글입니다.


제1장 알아두어야 할 시스템·인프라 지식

개발한 애플리케이션을 릴리스하여 엔드유저(End-User)가 사용하기 위해서는 시스템 기반을 구축하고 그 위에 애플리케이션 실행 환경을 올려야 합니다.

시스템 기반이란 에플리케이션이 동작하는 데 필요한 하드웨어와 OS 및 미들웨어 등의 인프라를 의미합니다. Docker는 컨테이너 가상화 기술을 사용한 애플리케이션 실행 환경을 생성하고 관리하는 툴을 말합니다.


1-1. 인프라에 대한 기초 지식

클라우드의 등장으로 시스템 개발 흐름에 변화가 생기며 기존의 '애플리케이션 엔지니어', '인프라 엔지니어'의 업무 분담이 모호해지고 있습니다. 이로 인해 애플리케이션 엔지니어에게도 OS와 네트워크 같은 인프라 기초 지식이 필요하게 되었습니다.


인프라의 구성 요소

인프라란 애플리케이션 동작에 필요한 하드웨어와 OS 및 미들웨어 등을 의미하며, 이러한 인프라를 다루는 기술을 인프라 기술이라 부릅니다.

시스템 요구 사항

  • 기능 요건(functional requrement) : 필요한 시스템 기능을 정의한 것
  • 비기능 요건(non-functional requrement) : 시스템 성능과 신뢰성·확장성·운영성·보안 등과 관련된 요건으로, 기능 요건 이외의 모든 요건

인프라의 기본 구성 요소

  • 하드웨어 : 인프라를 구성하는 물리적 요소. 서버 본체와 데이터를 저장하기 위한 스토리지 및 전원 장치 등
  • 네트워크 : 시스템 사용자가 원격지에서 서버로 액세스할 수 있도록 연결하는 요소. ex) 라우터, 스위치, 방화벽, VPN, 스팸 필터, 침입 탐지 시스템(IDS) 등
  • OS(Operating System) : 하드웨어와 네트워크 기기를 제어하기 위한 기본 소프트웨어. 하드웨어 리소스와 프로세스를 관리.
    • 클라이언트 OS : 사용자가 쉽게 사용할 수 있도록 GUI 기능과 멀티미디어 기능 탑재. ex) Windows, Android, Mac OS 등
    • 서버 OS : 장시간 구동에도 문제가 없도록 만들어져 있으므로 시스템을 빠르고 안정적으로 운용하는 데 도움. 대량 처리를 효율적으로 수행할 수 있도록 도움. ex) Windows Server, Unix 서버, Linux 서버 등
  • 미들웨어 : 서버 OS에서 서버가 특정 역할을 수행할 수 있도록 동작하는 소프트웨어. 상용 소프트웨어와 오픈소스로 나뉨. 인프라를 설계할 때 어떤 미들웨어를 어떻게 사용할지 선택하는 것이 중요.

인프라의 종류

온프레미스(on-premises)

  • 지금까지 대부분 기업에서 적용해온 형태
  • 시스템 구축에서부터 운영까지 자사에 데이터센터를 두고 수행하는 형태
  • 하드웨어뿐만 아니라 OS나 미들웨어도 모두 자사에서 구입하여 라이선스 관리와 버전 업그레이드를 실행
  • 초기 시스템 투자 비용 부담이 크며, 시스템 사용량과 관계 없이 시스템 구동 후 운영에 드는 비용이 지속적으로 나감

퍼블릭 클라우드(Public Cloud)

  • 인터넷을 통해 불특정 다수에게 제공하는 클라우드 서비스
  • 인프라 관련 초기 투자가 필요 없음
  • 제공하는 서비스에 따라 *IaaS, *PaaS, *SaaS 등으로 나뉨
  • *IaaS에서는 사용하고자 하는 스펙의 가상 서버와 스토리지를 선택하여 사용한 시간과 데이터 양에 따라 요금을 지불
※ IaaS(Infrastructure as a Service) : 서버, 스토리지, 네트워크를 가상화 환경으로 만들어, 필요에 따라 인프라 자원을 사용할 수 있게 서비스를 제공하는 형태. OS부터 상위의 모든 플랫폼이나 어플리케이션을 사용자가 직접 올릴 수 있음.
※ PaaS(Platform as a Service) : 클라우드 컴퓨팅 서비스의 분류의 하나로서, 일반적으로 앱의 개발 및 시작과 관련된 인프라를 만들고 유지보수하는 복잡함 없이 고객이 애플리케이션을 개발, 실행, 관리할 수 있게 하는 플랫폼을 제공
※ SaaS(Software as a Service) : "on-demand software"로도 불리며, 소프트웨어 및 관련 데이터는 중앙에 호스팅되고 사용자는 웹 브라우저 등의 클라이언트를 통해 접속하는 형태의 소프트웨어 전달 모델

프라이빗 클라우드(Private Cloud)

  • 특정 기업 그룹에만 제공하는 클라우드 서비스
  • 보안을 확보하기 쉽고 독자적인 기능과 서비스를 추가하기 용이
  • 온프레미스와 퍼블릭 클라우드의 중간 형태
  • *클라우드 벤더가 제공하는 서비스를 시스템 요구 사항에 따라 조합하여 단기간에 인프라 구축 가능
  • 사용하는 만큼만 요금 지불
  • 시스템 사용량이 증가할 때에는 쉽게 인프라 증설(오토스케일)하는 것이 가능
※ 클라우드 벤더 : 클라우드 컴퓨팅의 서비스 솔루션을 만드는 업체&개인

클라우드에 적합한 케이스

  • 트래픽 변화가 많은 시스템 : 시스템을 사이징하기 어려운 경우에는 트래픽 양에 따라 쉽게 증설할 수 있는 클라우드에서 구성하는 것이 좋음
  • 재해에 대비하기 위해 해외에 백업을 구축하고자 하는 시스템
  • 되도록 빨리 동작해야 하는 시스템

온프레미스에 적합한 케이스

  • 높은 가용성이 요구되는 시스템 : 클라우드 벤더가 보장하는 범위 이상의 가용성이 필요한 경우
  • 높은 기밀성이 요구되는 데이터를 다루는 시스템 : 저장 장소를 물리적으로 명확하게 해야 하는 업무 데이터의 경우
  • 특수 요건의 시스템 : 일반적이지 않은 디스크나 특수한 플랫폼에서만 동작하는 시스템을 구축하여 마이그레이션해야 하는 경우
  • 총 비용이 높은 시스템

인프라 구축 및 운영 프로세스

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

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

인프라 설계 단계

  • 인프라 아키텍처 설계
  • 시스템 운영 설계
  • 장비 선택 및 조달(클라우드인 경우 서비스 선택)
  • 네트워크 토폴로지 설계
  • OS · 미들웨어 선택 및 조달(클라우드인 경우 서비스 선택)
  • 시스템 마이그레이션 설계

인프라 구축 단계

  • 네트워크 포설(SaaS나 PaaS에서는 대개 불필요)
  • 서버 설치(SaaS나 PaaS에서는 대개 불필요)
  • OS 셋업(SaaS나 PaaS에서는 대개 불필요)
  • 미들웨어 셋업(SaaS나 PaaS에서는 대개 불필요)
  • 애플리케이션 및 라이브러리 설치
  • 시스템 릴리스 및 마이그레이션
  • 테스트(네트워크 확인, 부하 테스트, 운영 테스트)

운영 단계

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

Docker는 시스템 구축과 운영에 있어서 지금까지 사람이 수행해왔던 업무 중 많은 부분을 자동화하기 위한 플랫폼


1-2. 네트워크 및 하드웨어에 대한 기초 지식

인프라의 최하단 레이어를 구성하는 요소는 네트워크와 하드웨어입니다.


네트워크 Address

네트워크에서는 서버와 클라이언트, 각종 네트워크 장비 등을 식별하기 위해 네트워크 Address를 사용

MAC Address(물리 Address, 이더넷 Address)

  • MAC Address는 네트워크 인터페이스 카드와 무선 LAN 및 등 네트워크 부품에 물리적으로 할당되어 있는 48비트 주소.
  • Layer2의 Data Link Layer에서 사용.

IP Address

  • 네트워크에 접속하는 컴퓨터와 네트워크 장비를 구분하는 식별 번호
  • 현재 가장 보편적으로 사용되고 있는 것은 'IPv4'

OSI 7 Layer와 통신 프로토콜

통신 프로토콜

'서로 어떻게 통신할 것인가'에 대해 정의한 규약을 통신 프로토콜이라고 함.

OSI 7 Layer

OSI 7 Layer는 국제표준화기구(ISO)에서 정한 것으로 컴퓨터 통신을 계층 구조로 나눈 것.

  • Application Layer(Layer 7) : 애플리케이션에 특화된 프로토콜. ex) HTTP, DNS, SMTP, SSH
  • Presentation Layer(Layer 6) : 데이터 저장 방식과 압축, 문자 코드 등 데이터 표현 형식을 정의.
  • Session Layer(Layer 5) : 커넥션이 이루어지는 타이밍과 데이터 전송 타이밍을 정의. 세션은 애플리케이션 사이에 일어나는 request와 response에서 구성.
  • Transport Layer(Layer 4) : 데이터 전송을 제어하는 계층. 전송 중 오류를 감지하거나 재전송을 담당. ex) TCP, UDP
  • Network Layer(Layer 3) : 서로 다른 네트워크 사이에서 이루어지는 통신을 위한 계층. 다른 네트워크에 데이터 패킷을 전송하는 것을 라우팅이라고 함. ex) IP, ICMP
  • Data Link Layer(Layer 2) : 같은 네트워크 내(동일 세그먼트)에 있는 노드 사이의 통신을 위한 계층. MAC Address에 따라 데이터를 전송. ex) Ethernet
  • Physical Layer(Layer 1) : 통신 장비의 물리적, 전기적인 특성에 대한 계층.

방화벽

내부 네트워크와 외부와의 통신을 제어하고 내부 네트워크를 안전하게 지키기 위한 기술.

패킷 필터링 방식

  • 통신하는 패킷을 포트 번호와 IP Address 기반으로 필터링하는 방법
  • Network Layer(Layer 3)와 Transport Layer(Layer 4)에서 동작
  • 패킷 필터 룰을 'ACL(Access Control List)'라고 함

애플리케이션 게이트웨이 방식

  • 패킷 대신 애플리케이션 프로토콜 레벨에서 외부와 통신하며 제어하는 방법
  • 일반적으로 프록시 서버라고 부름

라우터와 L3 스위치

라우터

  • 서로 다른 네트워크를 연결하기 위한 통신 장비
  • OSI 7 Layer의 Layer 3인 Network Layer에서 동작
  • 경로 선택 기능 보유
  • 라우터에 설정된 라우팅 테이블 기반으로 결정하는 정적 경로(Static Route) 방식
  • 라우팅 프로토콜에서 설정한 동적 경로(Dynamic Route) 방식

L3 스위치

  • 라우터와 거의 같은 기능
  • 라우팅을 하드웨어에서 처리
  • 빠르게 동작
  • 접속할 수 있는 이더넷 포트 수가 많아 업무 시스템 등에 넓게 사용

서버

CPU

  • 프로그램 연산과 처리 등을 수행하는 전자 회로 부품
  • Core 수가 크면 클수록 동시에 처리할 수 있는 연산 처리 수가 증가
  • 메모리와의 처리 속도 차를 줄이기 위한 동적 캐시 사용

메모리

  • CPU가 직접 액세스할 수 있는 기억장치
  • 서버용으로는 저전력에 에러 처리 기능을 가진 모델이 선택

스토리지

  • 데이터베이스의 데이터를 저장하는 디바이스로 보조기억장치라고 불림 ex) 하드디스크, SSD
  • 하드디스크에 장애가 발생한 경우 업무 시스템에서 다루는 중요한 데이터가 분실될 수 있으므로 대부분 RAID 구성을 해야함
  • 서버 장비를 설치하는데 사용하는 랙은 유지 보수가 용이한 것으로 선택

1-3. OS에 대한 기초 지식

하드웨어와 네트워크를 제어하는 것이 OS의 역할


Linux 커널

OS가 하드웨어와 애플리케이션 소프트웨어를 제어하기 위한 기본적인 기능을 가진 소프트웨어

Android도 Linux 커널로 만들어짐

Linux 커널의 주요한 기능

  • 디바이스 관리 : 하드웨어(CPU, 메모리, 디스크, 입출력 디바이스 등)를 디바이스 드라이버 소프트웨어로 제어
  • 프로세스 관리 : 프로세스에 *PID(프로세스ID)라는 식별자를 붙여 관리. 프로세스 실행에 필요한 CPU를 적절하게 할당
  • 메모리 관리 : 메모리의 물리적인 용량을 넘어선 프로그램이나 데이터가 진행되면 하드디스크와 같은 보조기억장치의 가상 메모리 영역이 사용됨.
※ PID : Linux에서 각 프로세스에 할당된 고유한 ID

쉘(Shell)

이러한 Linux 커널을 조작하기 위하여 쉘(Shell)을 사용. 쉘은 사용자 명령을 커맨드에 입력하고 이를 Linux 커널에 전달. 쉘이 실행 가능한 범위는 다음과 같다.

  • 애플리케이션 실행 · 정지 · 재실행
  • 환경변수 관리
  • 커맨드 이력 관리(커맨드 히스토리)
  • 커맨드 실행 결과 표시 및 파일 출력

쉘에서 실행하고자 하는 명령을 텍스트 파일로 저장한 것을 '쉘 스크립트'라고 함.


Linux 파일 시스템

파일 시스템은 Linux에서 하드디스크와 USB 메모리, CD, DVD 등 데이터에 액세스하기 위한 시스템.

Linux 커널은 VFS(Virtual File System: 가상 파일 시스템)이라는 시스템을 사용하여 데이터에 편리하게 액세스할 수 있다. 각 디바이스를 '파일'로 취급하는 것이 특징.


Linux 보안 기능

  • 계정을 이용한 권한 설정 : root는 시스템 셧다운과 파일 시스템 마운트 및 언마운트, 애플리케이션 인스톨 등과 관련된 실행 권한을 가지며 서버 전체를 관리. 시스템 계정은 특정 프로세스 동작을 위해 존재하는 계정.
  • 네트워크 필터링 : 다양한 네트워크 관련 기능을 탑재. ex) iptables
  • SELinux(Security-Enhanced Linux) : 미국국가안전보장국이 제공하는 Linux 커널에 강제 액세스 제어 기능을 추가한 것

1-4. 미들웨어에 대한 기초 지식

미들웨어는 OS와 업무 처리를 수행하는 애플리케이션의 사이에 있는 소프트웨어를 말한다.


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

웹 서버는 클라이언트 브라우저에서 HTTP request를 받아 웹 콘텐츠(HTML, CSS 등)을 response하거나 다른 서버 프로그램을 호출하는 등의 기능을 가진 서버이다.

  • 대표적인 웹 서버 : Apache HTTP Server, Internet Information Services(IIS), nginx
  • 대표적인 웹 애플리케이션 서버 : GlassFish, Apache Tomcat, IBM WebSphere Application Server

데이터베이스 서버

데이터베이스는 시스템이 생성하는 여러 가지 데이터를 관리하기 위한 미들웨어이다.

  • 대표적인 데이터베이스 서버 : MySQL, PostgreSQL, OracleDatabase, DB2, MongoDB

[참고]

  • Relation Database : 데이터를 2차원 표 형식으로 관리하는 데이터베이스. 언어로는 SQL을 사용
  • NoSQL : RDBMS 이외의 데이터베이스 관리 시스템. 고정된 스키마에 얽매이지 않고 'Key'와 'Value'만 가진 Key-Value형 데이터베이스 등.

시스템 통합 운영 모니터링 툴

시스템 모니터링 대상인 서버와 장비 상태를 모니터링하고 미리 설정한 임계치를 넘었을 때 정해진 액션을 수행하는 툴.

  • 대표적인 통합 운영 모니터링 툴 : Zabbix, Hinemos, JP1, Senju, Mackerel, Datadog

1-5. 인프라 구성관리에 대한 기초 지식

인프라 구성관리

인프라 구성관리란 인프라를 구성하는 하드웨어, 네트워크, OS, 미들웨어, 애플리케이션 구성 정보를 관리하고 최적의 상태를 유지하는 것을 의미한다.

인프라 구축 규모가 크면 클수록 인프라 구성관리에 대한 부담도 늘어나게 된다.

클라우드 시스템과 여러 가지 가상화 기술의 등장으로 인프라 구축 방법이 크게 바뀌었다. 구축된 인프라를 변경하지 않고 파기한 뒤 새로 구축하는 것이 가능하므로 지금까지 큰 부담으로 느껴졌던 인프라 변경 이력 관리도 필요 없어졌으며 현재 가동 중인 인프라 상태만 관리하면 되는 환경으로 변하고 있다.

이러한 인프라를 'immutable Infrastructure(불변 인프라)'라고 부른다.


Infrastructure as Code

일반적인 인프라 구축에서는 인프라 방식 설계서를 토대로 서버와 네트워크 장비의 매개변수 시트를 만들고 이를 기반으로 인프라 장비를 셋업한다.

기존의 온프레미스 환경처럼 절차서에 따라 사람이 수작업으로 구축하는 대신 프로그램 코드에 입력된 내용을 자동으로 설정하는 방법을 이용하는 편이 실행자와 상관없이 같은 상태의 인프라 환경을 구축해내는 것에 유리하다.

인프라 구성 정보를 코드로 관리해두면 애플리케이션 개발 시 Git 등 버전 관리 SW로 소스 코드를 관리하는 것처럼 변경 이력을 일원화하여 관리할 수 있다.

소스 코드를 통해 구성을 시각화할 수 있으므로 사람에 따른 의존성을 배제할 수 있다.

이처럼 인프라 구성을 코드로 관리하는 것을 Infrastructure as Code라고 부른다.

Docker에서는 Dockerfile이라는 소스 코드로 인프라 구성 정보를 기록할 수 있다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함