Docker 공부를 본격적으로 시작하기 전 알아야하는 기초 지식
폭포형 모델을 사용한 시스템 개발
클라우드의 등장
클라우드를 구성하는 대부분의 기술은 한 대의 물리 호스트 상이 아닌 분산환경에서 가동
시스템 기반이란?
애플리케이션을 가동시키기 위해 필요한 하드웨어나 OS, 미들웨어 등과 같은 인프라를 말함
기능 요구사항
시스템의 기능으로서 요구되는 사항
비기능 요구사항
시스템의 성능, 신회성, 확장성, 운용성, 보안 등과 같은 요구사항
아래부터 시스템 기반의 구성 요소
하드웨어
시스템 기반을 구성하는 물리적인 요소로서 서버 장비 본체나 데이터를 저장하기 위한 스토리지, 전원장치 등
네트워크
시스템 이용자가 원격지에서 엑세스 할 수 있도록 서버들을 연결하기 위한 요구사항
운영체제
하드웨어나 네트워크 장비를 제어하기 위한 기본 소프트웨어, 하드웨어의 리소스나 프로세스 관리
미들웨어
서버 OS상에서 서버가 특정 역할을 다하기 위한 기능을 갖고 있는 소프트웨어
온프레미스(on-premises)
자사에서 데이터센터를 보유하고 시스템 구축부터 운용까지 모두 수행하는 형태
퍼블릭 클라우드(Public cloud)
불특정 다수에게 제공되는 클라우드 서비스
자사 데이터 센터 보유하지 않음
-> 인프라 초기 투자 필요없음
IaaS/Paas/SaaS 등이 있음
시스템 기반 부분을 이용하는 서비스는 IaaS
시스템 이용량이 증가 했을 때 인프라 기반을 쉽게 증설시킬 수 있음
아마존, 구글 등
프라이빗 클라우드
특정 기업 그룹에게만 제공되는 클라우드 서비스
폭포형 개발 : 위의 공정을 순서대로 진행
애자일 개발 : 각 단계를 작은 단위로 나눠 반복하면서 개발을 진행
애플리케이션 개발 공정과 비슷하지만 운용단계에서 다름
유지보수 기간을 줄이고 시스템을 안정적으로 가동하기 위해 운용설계가 중요
CPU
프로그램의 설계나 처리 등을 수행하는 전자회로 부품
메모리
CPU가 직접 액세스할 수 있는 (주)기억장치
스토리지
데이터베이스에 기록하는 데이터 등과 같은 영구적인 데이터를 저장하는 디바이스
보조기억장치
하드디스크나 SSD 등
그 외
MAC 주소 (물리주소/이더넷 주소)
네트워ㅡ 인터페이스 카드나 무선 LAN 칩과 같은 네트워크 부품에 물리적으로 할당되는 48비트 주소
IP주소
네트워크에 연결관 컴퓨터나 네트워크 장비에 할당되는 식별 번호
통신 프로토콜이란?
서로 어떤 약속으로 통신할지 정한 규약
OSI 참조 모델이란?
ISO가 책정한 컴퓨터의 통신 기능을 계층 구조로 나눈 개념 모델
응용계층(7)
웹의 HTTP나 메일 전송을 하는 SMTP 등과 같은 애플리케이션에 특화된 프로토콜을 규정
표현계층(6)
데이터의 저장 형식이나 압축, 문자 인코딩과 같은 데이터의 표현 형식을 규정
세션계층(5)
커넥션 확입 타이밍이나 데이터 전송 타이밍 규정, 세선은 애플리케이션 간에 일어나는 요청과 응답으로 구성
세션계층(4)
데이터 전송을 제어하는 계층
전송 오류의 검출이나 재전송을 규정
네트워크계층(3)
서로 다른 네트워크 간의 통신을 하기위한 규정
데이터 링크 계층(2)
동일한 네트워크 안에 있는 노드 간의 통신을 규정
물리 계층(1)
통신 장비의 물리적 및 전기적 특성을 규정
방화벽이란?
내부 네트워크와 외부와의 통신을 제어하고, 내부 네트워크의 안전을 유지하기 위한 기술
패킷 필터형
통과하는 패킷을 포트번호나 IP주소를 바탕으로 필터링 하는 방법
애플리케이션 게이트웨이형
애플리케이션 프로토콜 레벨에서 외부와의 통신을 대체 제어하는 것
2개 이상의 서로 다른 네트워크 간을 중계하기 위한 통신 장비
OS 역할 : 하드웨어나 네트워크를 제어
업무 시스템에선 보통 Unix, Linux, Windows Server와 같은 서버 OS 사용
Docker는 Linux의 기능을 사용한 기술임
일반적으로 Linux라는 말은 다음 두 가지를 뜻한다
Linux 커널
Linux 배포판
Linux 커널은 하드웨어 제어에 관한 OS 핵심 기능
디바이스 관리
Linux 커널은 하드웨어를 디바이스 소프트웨어를 이용해 제어
프로세스 관리
명령을 실행할 때 해당 프로그램에 쓰여 있는 내용을 읽어 들여 메모리 상에 전개한 후 메모리 상의 프로그램을 실행
메모리 관리
프로세스가 실행되면 메모리상에 프로그램이 전개됨과 동시에 프로그램 안에서 이용하는 데이터도 메모리상에 전개
파일 시스템은 Linux에서 하드디스크나 USB메모리, CD, DVD 등과 같은 데이터에 엑세스하기 위한 장치
아래부턴 Linux가 갖고 있는 보안 기능 중 대표적인 것들
계정에 대한 권한 설정
네트워크 필터링을 사용한 보안기능
SELinux(Security-Enhanced Linux)
커널에 강제 엑세스 제어 기능을 추가한 기능
'root'는 permission과 상관없이 모든 엑세스 가능
-> root 사용자의 비밀번호 도난당하면 시스템에 치명적 영향
SELinux는 HTTP/FTP 같은 프로세스 마다 보안대상에 따라 액세스 제한을 거는 Type Enforcement와 root도 포함한 모든 사용자에 관해 제어를 거는 롤베이스 액세스 제어(RBAC) 등으로 Linux제어
-> root에 권한이 집중되는 것을 막음
-> 보안성 높은 시스템 구축 가능
미들웨어란
OS와 업무 처리를 수행하는 애플리케이션 사이에 들어가는 소프트웨어
웹 서버란
클라이언트의 브라우저가 보낸 HTTP요정을 받아, 웹콘텐츠(HTML, CSS 등)를 응답으로 반환하거나 다른 서버사이드 프로그램을 호출하는 기능을 갖고 있는 서버
데이터베이스 서버
시스템이 생성하는 다양한 데이터를 관리하기 위한 미들웨어
NoSQL
RDBMS와는 다른 새로운 방식을 통틀어 일컫는 말
시스테 감시 툴이란
서버나 장비의 상태를 감시하여 미리 설정한 경계 값을 초과한 경우에 정해진 액션을 실행하는 것
인프라를 구성하는 하드웨어, 네트워크, OS, 미들웨어, 애플리케이션의 구성 정보를 관리하고 적절한 상태로 유지하는 작업
온프레미스와 달리 클라우드 등장 이후 한 번 구축한 인프라는 변경을 하지 않고 파기한 수 새로운 것을 구축하면 되므로 부하가 컷던 인프라의 변경 이력을 관리할 필요가 없어짐
-> 인프라의 변경 이력을 관리하는 것이 아닌 지금 현재 작동하고 있는 인프라의 상태를 관리하면 됨
이러한 인프라를 Immutable Infrastructure라고 함
최근에는 인프라 구축할 때 인프라 방식 설계서나 파라미터 시트 등을 바탕으로 인프라 셋업하는 것이 아니라 프로그램 코드에 적혀 있는 내용대로 자동으로 설정을 해주는 장치를 도입하여, 그 프로그램을 누가 실행해도 똑같은 상태의 인프라 환경을 구축할 수 있는 환경을 도입하는 것이 일반적
인프라 구성 정보를 코드로 관리하면 애플리케이션 개발에서의 소스코드 관리와 똑같이 Git과 같은 버전 관리 소프트웨어로 변경 이력을 일원화하여 관리 가능
이와 같은 인프라의 구성을 코드로 관리해 가는 것을 Infrastructure as Code라고 함
Docker에서는 Dockerfile이라는 파일에 인프라의 구성 정보를 기술 가능
OS 시작을 자동화하는 툴
서버 OS를 설치하거나 가상화 툴을 설치 및 설정하는 작업을 자동화하기 위한 툴
OS나 미들웨어의 설정을 자동화 하는 툴
미들웨어의 설치나 버전관리, 미들웨어의 설정 파일이나 OS의 방화벽 기능의 설정 등 보안과 관련된 설정을 자동화하기 위한 툴
여러 서버의 관리를 자동화하는 툴
분산 환경의 서버들을 관리하기 위한 툴
테스트가 끝난 안전한 애플리케이션을 제품 환경으로 제공하기 위한 툴에대한 기초 지식
지속적 인티그레이션
애플리케이션의 코드를 추가 및 수정할 때마다 테스트를 실행하고 확실하게 작동하는 코드를 유지하는 방법
지속적 딜리버리