[Docker] 시스템과 인프라 기초

신현식·2023년 1월 30일
0

구름_Docker

목록 보기
1/6
post-thumbnail

개발을 위한 준비

개발한 애플리케이션을 릴리스하여 최종 사용자가 이용할 수 있게 하려면 시스템 기반을 구축하고 그 위에 애플리케이션의 실행환경을 마련해야한다.
docker : 애플리케이션 실행 환경을 작성 및 관리하기 위한 플랫폼

시스템 기반의 구성요소

시스템 기반이란 애플리케이션을 가동시키기 위해 필요한 OS/미들웨어 등과 같은 인프라를 말한다.

  • 기능 요구사항: 시스템의 기능으로서 요구되는 사항을 말한다. 시스템이나 소프트웨어에서 무엇을 할 수 있는지를 모아둔 것
  • 비기능 요구사항: 시스템의 성능이나 신뢰성, 확장성, 운용성, 보안 등과 같은 요구사항

하드웨어

시스템 기반을 구성하는 물리적인 요소로서 서버 장비 본체나 데이터를 저장하기 위한 스토리지, 전원 장치 등이 들어간다. 넓은 의미에서는 이러한 하드웨어들을 설치하는 데이터 센터의 설비도 포함

네트워크

시스템 이용자가 원격지에서 액세스할 수 있도록 서버들을 연결하기 위한 요구사항이다. 라우터, 스위치, 방화벽 등과 같은 네트워크 장비나 그것들을 연결하기 위한 케이블 배선 등도 관리한다.

OS(운영체제)

하드웨어나 네트워크 장비를 제어하기 위한 기본 소프트웨어로 하드웨어의 리소스나 프로세스를 관리한다.
클라이언트 OS : windows/macOS
서버 OS : linux, unix, windows server

미들웨어

서버 OS 상에서 서버가 특정 역할을 다하가 위해 기능을 갖고있는 소프트웨어를 말한다. 오픈소스 미들웨어는 누구든지 개발에 참여할 수 있다.

시스템의 이용형태

온프레미스(on-premises)

기업 시스템에서 지금까지 상당히 많은 채택되어 온 것으로 자사에서 데이터 센터를 보유하고 시스템 구축부터 운용까지 모두 수행하는 형태를 말한다.

퍼블릭 클라우드(Public Cloud)

인터넷을 경유하여 불특정 다수에게 제공되는 클라우드 서비스이다. 자사에서 데이터 센터를 보유하지 않으므로 서버나 네트워크 등 인프라와 관련된 초기 투자가 필요없다. 시스템 기반 부분을 이용하는 서비스는 IaaS라고 하며 여기서는 이용하고 싶은 사양으로 된 가상머신이나 스토리지를 선택하고 이용한 시간이나 데이터 양에 따라 요금을 지불하는 형태이다.

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

특정 기업 그룹에게만 제공되는 클라우드 서비스이다. 퍼블릭 클라우드가 불특정 다수에 대해 제공되는 데 반해 프라이빗 클라우드는 이용자를 한정할 수 있으므로 보안을 확보하기 쉬우면 독자적인 기능이나 서비스를 추가하기 쉽다.

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

시스템화 계획, 요구사항 정의 -> 인프라 설계 -> 인프라 구축 -> 운용!

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

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

  • 인프라 구축
    네트워크 부설, 서버 설치, OS 셋업, 미들웨어 셋업, 애플리케이션 및 라이브러리 설치, 테스트(네트워크 확인, 부하 테스트, 운용 테스트), 시스템 릴리스 및 마이그레이션
    ※ 퍼블릭 클라우드에서는 필요없는 경우가 많다.

  • 운용!
    서버 프로세스/네트워크/리소스/배치 Job 모니터링, 데이터 백업 및 정기 유지보수, 버전 업그레이드, 스스템 장애 시 대응
    ※ 인프라의 경우 운용에 걸리는 유지보수 기간을 가능한 줄이고 시스템을 안정저긍로 가동시키기 위해서 운용설계가 매우 중요하다.

데이터베이스 선택(SQL vs NoSQL)

  • SQL 데이터베이스는 관계형, NoSQL 데이터베이스는 비관계형

  • SQL 데이터베이스의 경우 구조화된 쿼리 언어를 사용하고 사전 정의된 스키마가 존재
    NoSQL 데이터베이스의 경우 비정형 데이터에 대한 동적 스키마가 존재

  • SQL 데이터베이스는 수직 확장, NoSQL 데이터베이스는 수평 확장

  • SQL 데이터베이스는 테이블 기반, NoSQL 데이터베이스는 문서, 키-값, 그래프 또는 와이드 열 저장소(wide-column store)

  • SQL 데이터베이스는 다중 행 트랜잭션에 더 효과적이고, NoSQL은 문서나 JSON과 같은 비정형 데이터에 더 효과적

대표적인 SQL 데이터베이스 서버: MySQL, PostgreSQL, Oracle Database
대표적인 NoSQL 데이터베이스 서버: MogoDB, Redis, Apache Cassandra

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

  • OS의 시작을 자동화하는 툴
    vagrant: 로컬 PC에서 가상환경 만들기

  • OS나 미들웨어의 설정을 자동화하는 툴
    ansible: DB 서버, 웹 서버 등과 같은 미들웨어 설치나 버전관리, 보안과 관련된 설정을 자동화하는 python을 구축된 툴

  • 여러 서버의 관리를 자동화하는 툴
    kubenetes: 분산환경의 서버들을 관리하기 위한 툴, 컨테이너 가상환경에 있어서 여러 컨테이너를 통합관리하는 툴

profile
전공 소개

0개의 댓글