본문 바로가기

개발

Docker를 사용하기 위해 알아야하는 인프라와 네트워크에 관한 기초 지식


인프라의 구성 요소

*기능 요건 : 필요한 시스템의 기능을 정의 한것을 말한다.


*비기능 요건 : 시스템의 성능과 신뢰성, 확장성, 운영성, 보안등과 관련된 요건으로 기능 요건 이외의 요건을 말한다.


*하드웨어 : 인프라를 구성하는 물리적 요소.


*네트워크 및 네트워크 장비 : 시스템 사용자가 원격지에서 서버로 접근 할 수 있도록 연결하는 요소이다. 


*OS(Operation System) : 하드웨어와 네트워크 기기를 제어하기 위한 기본 소프트웨어이다.


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



인프라의 종류

*온프레미스(on-premises) : 시스템 구축에서 부터 운영까지 자사에 데이터 센터(하드웨어 장비를 모아놓은 곳)를 두고 수행하는 형태를 가르켜 on-premises라고 한다.

 - 온프레미스 시스템은 언제 좋을까?

 (1) 높은 가용성이 요구 되는 경우. (가용성은 사용 가능한 성질을 뜻한다.)

 (2) 높은 기밀성이 요구 되는 경우.(클라우드의 경우는 데이터를 저장하는 곳을 명확하게 지정 할 수 없다.)

 (3) 일반적이지 않은 디스크나 특수한 플랫폼에서만 동작하는 시스템인 경우.

 (4) 총 비용이 높은 시스템 : 클라우드의 경우 아주 많은 사람이 사용할 경우 오히려 온프레미스 시스템 보다 비용이 높아질 수 있다.


*퍼블릭 클라우드(public cloud) : 인터넷을 통해 불특정 다수에게 제공하는 클라우드 서비스를 말한다. 사용자는 사용한 만큼만 요금을 지불한다.(EX : 아마존 AWS 서비스)

 - 클라우드 시스템은 언제 좋을까?

 (1) 시스템의 규모와 구성을 미리 예측("사이징" 이라고함) 하는것이 어려울경우 좋다. 경우에 따라 쉽게 규모를 증설 하거나 축소 할 수 있기 때문이다. 이런걸 "오토스케일" 이라고 한다.

 (2) 재해에 대비하기 위해 해외에 백업을 구축하고자 할때.

 (3) 빠르게 구성해야 할때.


*프라이빗 클라우드(private cloud) : 특정 기업 그룹에만 제공하는 클라우드 서비스. 제한된 사용자만 접근 가능하다.



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

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

 - 시스템 구축 범위 선정

 - 인프라 요구 사항 정의

 - 예산 책정

 - 프로젝트 체계화

 - 기존 시스템과의 연계

 - 시스템 마이그레이션 계획


2. 인프라 설계 단계

 - 인프라 아키텍처 설계

 - 시스템 운영 설계

 - 장비 선택 및 조달(클라우드의 경우 서비스 선택)

 - OS&미들웨어 선택 및 조달(클라우드의 경우 서비스 선택)인프라의 구성 요소]

 - 네트워크 토폴로지(네트워크 장비를 물리적으로 연결해 놓은것) 설계

 - 시스템 마이그레이션 설계


3. 인프라 구축 단계

 - 서버 설치

 - OS 설치

 - 미들웨어 설치

 - 어플리케이션 및 라이브러리 설치

 - 시스템 릴리스 및 마이그레이션

 - 테스트(네트워크 확인, 부하 테스트, 운영 테스트)


4. 운영 단계

 - 서버 프로세스, 네트워크, 리소스, 배치 Job 모니터링

 - 어플리케이션 버전 업그레이드

 - 데이터 백업 및 정기 유지 보수

 - 시스템 장애 대응

 - OS&미들웨어 버전 업그레이드

 - 사요자 서포트(헬프데스크)


OSI 7계층

* Application Layer(Layer 7) : 웹의 HTTP와 메일을 전송하는 SMTP 등 어플리케이션에 특화된 프로토콜


* Presentation Layer(Layer 6) : 데이터 저장 방식과 압축, 문자 코드 등 데이터 표현 형식을 정의.


* Session Layer(Layer 5) : 커넥션이 이루어지는 타이밍과 데이터 전송 타이밍을 정의한다. 세션은 어플리케이션 사이에 일어나는 Request와 Response에서 구성된다.


* Transport Layer(Layer 4) : 데이터 전송을 제어하는 계층으로 전송 중 오류를 감지하거나 재전송을 담당한다. (대표적으로 TCP와 UDP가 있다.)


*Network Layer(Layer 3) : 서로 다른 네트워크 사이에서 이루어지는 통신을 위한 계층이다. 대표적인 프로토콜로는 IP Address를 들 수 있다.  "패킷이 어디에서 어디까지 전송하는가?"와 관련된 정보(라우팅 그룹)을 관리한다.


*Data Link Layer(Layer 2) : 네트워크 내(=동일 세그먼트)에 있는 노드 사이의 통신을 위한 계층이다. Data Link Layer에서는 MAC Address(네트워크 장비마다 갖고있는 고유 넘버)에 따라 데이터를 전송한다. 대표적인 통신 장비로는 L2 스위치가 있다.


*Physical Layer(Layer 1) : 통신 장비의 물리적, 전기적인 특성에 대한 계층으로서 데이터에 어느 정도의 전압과 전류를 줄것인가와 케이블과 커텍터 형태(RJ)등을 정한다.



방화벽

 "방화벽은 보안을 위해 내부 네트워크와 외부와의 통신을 제어하여 내부 네트워크를 안전하게 지키기 위한 기술이며 다음과 같은 몇가지 종류로 나뉜다."


* 패킷 필터링 방식 : 통신하는 패킷을 포트 번호와 IP Address 기반으로 필터링하는 방법이다.


* 어플리케이션 게이트웨이 방식 : 패킷 대신 어플리케이션 프로토콜 레벨에서 외부와 통신하며 제어하는 방법으로 일반적으로 프록시 서버(클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터나 응용 프로그램)라고 부른다.



라우터와 L3 스위치

 "네트워크 패킷이 어떤 루트로 전송될지 결정하는 역할을 한다. L3 스위치는 하드웨어단에서 경로를 찾기 때문에 라우터 보다 비싸다."



Linux 디렉터리 구성

/bin : ls나 cp 커맨드 등 기본적인 커맨드를 담고 있는 디렉토리.

/boot : OS 구동에 필요한 파일을 담고 있는 디렉토리.

/dev : 하드 디스크, 키보드, 디바이스 파일을 저장한 디렉토리.

/etc : OS와 어플리케이션이 동작하는데 필요한 설정 파일을 저장하는 디렉토리.

/home : 일반 사용자의 홈 디렉토리. 시스템 사용자가 자유롭게 사용하는 디렉토리.

/proc : 커널, 프로세스와 관련된 정보를 저장하는 디렉토리. /proc의 숫자 폴더는 프로세스 ID를 의미.

/sbin : 시스템 관리용 커맨드가 저장되어 있는 디렉토리. (ex : mount, reboot...)

/usr : 각종 프로그램과 커널 소스가 저장되는 디렉토리. /usr/local은 시스템 관리자가 어플리케이션을 인스톨하는 곳으로 사용된다.

/var : 시스템이 가동함에 따라 변하는 파일을 저장하는 디렉토리.(로그 및 lock 파일 등..)



미들웨어(Middleware)

 "미들웨어는 OS와 업무 처리를 수행하는 어플리케이션 사이에 있는 소프트웨어를 의미한다. 미들웨어는 OS가 가진 기능을 확장한 것으로 어플리케이션에서 사용하는 공통 기능 및 서버 기능을 제공한다. 대표적인 미들웨어는 아래와 같다."

* 웹 서버 및 웹 어플리케이션 서버 : 웹 서버는 클라이언트 브라우저에서 HTTP request를 받아 웹 콘텐츠(HTML, CSS 등)을 response하거나 다른 서버 프로그램을 호출하는 등의 기능을 가진 서버이다.(Apache, IIS(Internet Information Service), Ngnix 등이 있다.)


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


* 시스템 통합 운영 모니터링 툴 : 시스템 모니터링 대상인 서버와 장비 상태를 모니터링하고 미리 성정한 임계치를 넘었을 때 정해진 액션을 수행하는 툴이다.(Zabbix, Hinemos등이 있다.)




인프라 구성관리에 대한 기초 지식

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

 - 하나하나 수동으로 인프라를 구성하면 구성 관리가 어렵다.

 - 때문에 소스코드를 이용하여 이작업을 자동화 시키고 구성 관리를 편하게 할 수 있다. 그게 Docker의 장점!


* 대표적인 인프라 구성관리 툴 : 인프라 구성관리를 자동으로 하는 툴은 네트워크와 OS를 포함한 서버 구성을 자동으로 구축하여 관리하는 것이 있으며 자동으로 OS와 미들웨어의 정의 파일을 작성하는 것, 여러 대의 서버에 어플리케이션을 일괄적으로 배포하거나 통합 관리하는 툴까지 매우 다양하다.


* OS를 자동으로 부팅하는 툴(Bootstrapping) : 서버 OS를 설치하거나 가상화 툴을 설치하고 설정하는 등의 작업을 자동화하는 툴이다.(KickStart와 Vagrant등이 있다.)


* OS와 미들웨어를 자동으로 설정하는 툴(Configuration) : 데이터베이스 서버, 웹 서버, 모니터링 Agent등 미들웨어 설치와 버전 관리, UNIX계 OS의 /etc 내의 OS와 미들웨어 설정 파일, OS 방화벽 기능 설정 등 보안과 관련된 설정을 자동화하는 툴이다.(Chef, Ansible, Puppet등이 있다.)


* 여러 서버를 자동으로 관리할 수 있는 툴(Orchestration) : 대규모 시스템은 여러 대의 서버로 구성되어 있다. 이를 자동으로 관리하는 툴은 여러모로 유용하다.(Serf, Capistrano, Kubernetes 등이 있다.)


-> Docker는 위의 Bootstrapping ~ Configuration ~ Orchestration까지 아우르는 무지막지하게 좋은 플랫폼이다.



"완벽한 IT 인프라 구축을 위한 Docker 1판"을 정리한 내용 입니다.