융무의 기술블로그
article thumbnail
Published 2023. 3. 25. 00:07
인프라 기초 Back-End Development

실무에 사용한 데이터 엔지니어링 스킬에 대한 정리내용입니다.

개인적인 기록을 위해 작성하였습니다.

https://github.com/mjs1995/muse-data-engineer/blob/main/doc/Back-End%20Development/infra_based.md

 

GitHub - mjs1995/muse-data-engineer: 데이터 엔지니어로 성장하기

데이터 엔지니어로 성장하기. Contribute to mjs1995/muse-data-engineer development by creating an account on GitHub.

github.com


시스템 기반의 기초 지식

  • 시스템 기반(애플리케이션을 가동하기 위해 필요한 하드웨어나 OS/미들웨어 등과 같은 인프라)의 구성 요소
    • 기능 요구사항(fuctional requirement)
      • 시스템의 기능으로서 요구되는 사항
      • 시스템이나 소프트웨어에서 무엇을 할 수 있는지를 모아놓은 것
    • 비기능 요구사항(non-functional requirement)
      • 시스템의 성능이나 신뢰성, 확장성, 운용성, 보안 등과 같은 요구사항
    • 하드웨어
      • 시스템 기반을 구성하는 물리적인 요소로서 서버 장비 본체나 데이터를 저장하기 위한 스토리지, 전원장치
    • 네트워크
      • 시스템 이용자가 원격지에서 액세스 할 수 있도록 서버들을 연결하기 위한 요구사항
    • OS(운영체제)
      • 하드웨어나 네트워크 장비를 제어하기 위한 기본 소프트웨어로, 하드웨어의 리소스나 프로세스를 관리합니다.
    • 미들웨어
      • 서버 OS 상에서 서버가 특정 역할을 다하기 위한 기능을 갖고 있는 소프트웨어
  • Server(Backend)
    • 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템으로 컴퓨터 프로그램(sever program) 또는 장치(device)를 의미함
    • Home server : 집에서 직접 간단한 홈서버를 구축할 수 있음
    • Internet Data Center(IDC) : IDC에 공간을 임대해서 서버를 구축할 수 있음
    • 온프레미스(On-Premise) : 온프레미스 환경은 자체적인 서버를 구축해서 직접 서버를 운영하는 방식을 의미함
    • 클라우드(Cloud) : 클라우드 서비스는 AWS와 같은 클라우드 프로바이더에 제공되는 서비스를 이용해 직접 서버를 구축하지 않고 서버를 임대해서 사용하는 방식을 의미함
  • 가상화
    • 하나의 컴퓨터에서 여러 개의 운영체제를 가동할 수 있게 도와주는 소프트웨어 기술
    • 한 개의 컴퓨터에 있는 자원을 여러 개로 쪼개거나 여러 컴퓨터의 자원을 하나로 합치는 데에 기본적인 기술
    • 여러 컴퓨터를 묶어서 하나처럼 활용하며 여러 개의 가상화된 서버로 나누는 기술
    • 장점
      • 시스템의 확장성 및 유연성 향상(필요할 때 서버를 새로 구매하는 것이 아니라 기존에 쪼개 놓은 서버를 바로 사용할 수 있는 것)
      • 시스템 확장에 빠르게 대응 가능함
      • 물리적인 비용 절감
    • 단점
      • 성능면에서 다소 손해를 볼 수 있음(가상의 자원으로 쪼개는 만큼의 병목현상이 발생)
  • 가상화 기술의 종류
    • https://itwiki.kr/w/%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88_%EA%B0%80%EC%83%81%ED%99%94
    • 호스트 가상화
      • 장점 : 운영체제 선택에 제약이 없음
    • 하이퍼바이저 가상화 (기존의 가상화 소프트웨어와 OS의 영역을 하드웨어와 맞물려서 적용)
      • 장점 : 하드웨어 직접 제어로 효율적인 리소스 사용
      • 단점 : 자체적인 머신 관리 기능이 없어 관리를 위한 별도 프로그램 필요
    • 컨테이너 가상화 (더 가볍고 경량화된 애플리케이션들을 다양하게 운용하기 위해 연구, 운영체제 위에 바로 실행할 수 있는 애플리케이션을 띄움)
      • 장점 : 다른 가상화 방식보다 성능 저하가 적고 빠른 운영이 가능, 라이브러리, 패키지 등 애플리케이션 운영에 필요한 기술을 바로 가져다 쓸 수 있음
      • 단점 : 컨테이너별로 설정할 수 있는 부분에 많은 제약이 있음
  • 클라우드 컴퓨팅
    • 인터넷이라는 통신 서비스를 활용한 컴퓨팅 서비스 종류의 하나로 개인용 컴퓨터가 아닌, 인터넷을 통해 연결된 원격 컴퓨터를 활용하는 기술
    • 개인용 컴퓨터보다 성능이 뛰어난 컴퓨터나 저장장치 등의 컴퓨터 자원을 다른 곳에서 빌려 사용할 수 있도록 처리해 주는 IT 기술
  • 클라우드 컴퓨팅 서비스 이용 방식
    • https://www.redhat.com/en/topics/cloud-computing/iaas-vs-paas-vs-saas
    • IaaS(Infrastructure-as-a-Services)
      • 물리적 서버(CPU, Memory 및 OS), 네트워크, 스토리지를 가상화하여 다수의 고객을 대상으로 유연하게 제공하는 인프라 서비스
      • Infrastrucutre 레벨을 제공하는 서비스로, 하드웨어 부분을 제공받는 방식
      • 사용자가 원하는 S/W를 별도 구매해 언제든 설치, OS 설치부터 사용자가 원하는 설정이 가능함, OS위의 계층에 대해서는 관리를 해야 함
    • PaaS(Platform-as-a-Services)
      • 사용자가 응용 프로그램을 작성할 수 있도록 플랫폼 및 환경을 제공하는 방식
      • Web 기반의 서비스 또는 애플리케이션 등의 개발 및 실행을 위한 표준 플랫폼 환경을 서비스 형태로 제공하는 서비스
      • 관리 및 운영은 클라우드 업체가 해주기 때문에 사용자는 애플리케이션 활용 자체에만 집중
      • 개발된 애플리케이션은 다른 플랫폼으로 옮기기 어려울 수 있음
    • SaaS(Software-as-a-Services)
      • 사용자의 별도 설치 없이 클라우드를 통해 애플리케이션이 제공됨, 추가적인 설치 및 개발 없이 해당 서비스에서 제공하는 기능들을 웹 브라우저를 이용하여 사용이 가능함
      • 사용자는 애플리케이션을 웹 브라우저로 불러와 언제 어디서나 사용할 수 있음
      • 구글의 Gmail이나 MS Office 365 등과 같이 응용프로그램(Application)을 인터넷 및 웹 브라우저를 통해 제공하는 서비스
      • 인터넷으로 접속해야 하기 때문에 데이터 보안에 문제가 될 수도 있음
    • 클라우드 컴퓨팅 스택(Cloud Computing Stack) : 클라우드 컴퓨팅 서비스는 중첩되어 제공하는 것을 뜻함
  • 도커 Docker
    • 애플리케이션 실행 환경을 작성 및 관리하기 위한 플랫폼
    • 도커는 애플리케이션 실행에 필요한 환경을 이미지로 만들고 해당 이미지를 활용해 다양한 환경에서 실행 환경을 구축하기 위한 오픈소스 플랫폼입니다. 도커는 내부에서 컨테이너를 사용
    • 개발자가 커밋을 할 때마다 CI를 통해 도커 이미지로 빌드를 하고 해당 이미지를 관리, 개발 환경이든 테스트 환경이든, 실제 운영 환경이든 해당 이미지를 배포하면 컨테이너에서 독립적으로 배포된 환경에서 동작하기 때문에 오류 없이 동작
  • 쿠버네티스 Kubernetes
    • 실제 애플리케이션은 여러 컨테이너에 걸쳐 있고 이러한 컨테이너는 여러 서버에 배포되어 있음, 이렇게 여러 대의 서버나 하드웨어를 모아서 한 대처럼 보이게 하는 기술을 클러스터링(clustering), 가용성과 확장성을 향상할 수 있음
    • 멀티호스트 환경에서 컨테이너를 클러스터링 하기 위한 툴을 컨테이너 오케스트레이션 툴(컨테이너들을 클러스터링 하기 위해 컨테이너 시작 및 정지와 같은 조작, 호스트 간 네트워크 연결, 스토리지 관리, 컨테이너를 어떤 호스트에서 가동할지와 같은 스케줄링 기능을 제공)

Reference

'Back-End Development' 카테고리의 다른 글

IaC와 Terraform  (0) 2023.10.14
모놀리틱 아키텍처와 마이크로서비스 아키텍처  (0) 2023.03.27
클라우드와 온프레미스  (0) 2023.03.26
profile

융무의 기술블로그

@융무

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!