[oss] 오픈소스 툴 정리

joyful·2022년 6월 14일
0

oss

목록 보기
1/14

1. BOSH

  • 분산 시스템의 배포 및 수명주기 관리를 지원하는 오픈소스 툴
  • IaaS환경에서 Stemcell, Deployment, Release를 이용하여 VM들을 관리
  • Release, Stemcell, Manifest로 구성됨
  • 각각의 VM에 대해 모니터링, 장애 복구 등 라이프 사이클을 관리
  • Yaml 파일 형식으로 소프트웨어를 쉽게 배포
  • Cloud Foundry를 구축하기 위한 주된 수단으로 사용

2. Cloud Foundry

  • 인프라와 독립적으로 어플리케이션과 서비스들의 배포 및 운영을 쉽고 빠르게 수행하기 위한 컨테이너 기반의 어플리케이션 플랫폼

    💡 aPaaS(Application Platform as a Service)
    애플리케이션 서비스를 위한 개발 및 배포 환경을 제공하는 클라우드 서비스

  • BOSH(릴리스 엔지니어링 도구 체인)를 통한 릴리스 엔지니어링 기능을 제공
  • BOSH deployment script 언어를 이용
  • CF는 자동으로 어플리케이션의 실패를 복구

3. CredHub

  • Cloud Foundry 배포 시 자격 증명을 생성하고 보호하는 기능을 수행하는 인증정보 저장소
  • Cloud Foundry에서 중앙 크레덴셜 관리를 위한 컴포넌트
    • 자격 증명 생성, 저장, 수명 주기 관리 및 액세스
  • 저장을 위한 데이터 보안
  • 액세스 및 변경 로깅
  • 자격 증명 라이프 사이클 관리

4. UAA(User Account and Authentication Server)

  • Cloud Foundry에서 사용되는 다중 테넌트 ID 관리 서비스이지만 독립 실행형 OAuth2 서버로도 사용
  • 기본 역할은 클라이언트 앱이 Cloud Foundry 사용자를 대신할 때 사용할 토큰 발급
  • Cloud Foundry 자격 증명으로 사용자를 인증
  • BOSH 사용자 인증인가 처리 담당
  • 다양한 관리 기능을 위한 엔드 포인트 존재
    ex) 사용자 계정 관리, OAuth2 클라이언트 등록 등

5. BOSH Stemcell

  • IaaS 특정 패키징으로 래핑된 버전이 지정된 운영 체제 이미지
    • 배포 시 필요한 패키지나 OS 이미지 가지고 있음
    • 배포에 포함된 기본 운영체제를 다른 application 패키지와 분리
  • BOSH는 이 에이전트를 사용하여 인스턴스의 해당 VM에 소프트웨어를 설치하고 수명주기를 관리
  • BOSH 유저 사이에서 공유 가능

6. Kubernetes

  • 컨테이너화 된 애플리케이션을 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 컨테이너 플랫폼
  • 여러 클러스터의 호스트 간 애플리케이션 컨테이너의 배치, 스케일링, 운영을 자동화하기 위한 플랫폼 제공
  • 클러스터, 상태관리, 배포관리, 서비스 등록 및 조회, 볼륨 스토리지 관리 등의 기능을 지원
  • 도커를 포함하여 일련의 컨테이너 도구들과 함께 동작

7. Kubespray

  • 쿠버네티스 설치에 필요한 복잡한 프로세스를 Ansible playbook, inventory 설정을 통해 자동화해주는 도구
  • 상용 서비스에 적합한 보안성과 고가용성을 지닌 쿠버네티스 클러스터를 배포하기 위한 오픈소스 프로젝트
  • 대부분의 리눅스 배포판 지원
  • 지속적인 통합(CI) 테스트

8. KubeEdge

  • 컨테이너화 된 어플리케이션의 오케스트레이션 기능을 엣지에 있는 호스트로 확장하기 위한 Kubernetes 기반 오픈 소스 시스템
  • 클라우드-엣지 간의 네트워크, 애플리케이션 배포 및 메타 데이터 동기화를 위한 기본 인프라 지원을 제공
  • 저전력 장비와의 통신을 위한 MQTT 프로토콜 지원
  • 오프라인 자율성 지원
    → 노드가 오프라인 일 때도 노드의 장치 및 응용 프로그램 관리 기능 유지 가능

9. Apache

  • 월드 와이드 웹 서버용 소프트웨어
  • HTTP 웹 서버. HTTP 아파치 서버라고도 불림
  • 정적타입(HTML, CSS 등)의 데이터를 처리
  • 리퀘스트를 하면 그에 맞는 리스폰스를 반환하여 브라우저에 출력시키게 해주는 역할
  • 가장 인기있는 웹 서버
    • 거의 모든 운영체제에서 사용할 수 있음
    • 쉬운 구축
    • 다양한 추가 기능 존재
      • 자바 서블릿 지원, 실시간 모니터링, 자체 부하테스트 등

10. Docker

  • 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 컨테이너 기반 오픈소스 가상화 플랫폼
  • 도커 컨테이너는 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 내부에 감쌈
    • 실행 중인 환경에 관계 없이 동일한 실행 보장
    • 모든 정보를 가지고 있는 이미지를 이용해 손쉽게 배포 가능
  • 컨테이너 방식의 도커 엔진을 사용해 별도의 OS를 사용하지 않아 오버헤드가 감소
  • 리눅스에서 운영 체제 수준 가상화의 추상화 및 자동화 계층 제공
  • Docker hub를 통해 공개 이미지를 공유

11. Elasticsearch

  • 아파치 루씬(Lucene) 기반의 Java 오픈소스 분산 검색 엔진
  • 모든 데이터를 색인하여 저장 및 검색, 집계 등 수행하여 결과를 클라이언트 또는 다른 프로그램으로 전달
  • 설치와 서버 확장이 매우 편리
  • JSON 문서와 함께 실시간 검색 서비스 지원, 분산 및 병렬처리 멀티 테넌시 기능을 제공
  • 방대한 양의 데이터를 신속하게, 거의 실시간(NRT: Near Real Time)으로 저장, 검색, 분석

12. Hadoop(High-Availability Distributed Object-Orientied Platform)

  • 분산 처리를 위한 오픈소스 자바 소프트웨어 프레임워크
  • 대량의 자료를 처리할 수 있는 큰 컴퓨터 클러스터에서 동작하는 분산 응용 프로그램 지원
  • 빅데이터 저장, 처리, 분석 플랫폼
  • 처리 속도 향상
    • 적당한 성능의 범용 컴퓨터 여러 대를 클러스터화
    • 큰 크기의 데이터를 클러스터에서 병렬로 동시 처리
  • 단일 컴퓨터에서 시작해 수천 대의 클러스터 된 컴퓨터까지 수직 확장 가능
  • 맵리듀스(MapReduce) 프레임워크와 분산형 파일시스템(HDFS)
  • 다양한 에코 시스템 존재

13. InfluxDB

  • Go 언어로 작성된 오픈 소스 시계열 데이터베이스(TSDB)
  • 높은 쓰기 및 쿼리로드를 처리하도록 설계됨
  • 집계된 데이터를 쉽게 쿼리 할 수 있도록 맞춤 설정된 표현형 SQL과 유사한 쿼리 언어
  • 간단하면서도 고성능의 HTTP API 및 쿼리
  • 시계열 데이터의 고속·고가용성 저장 및 검색에 최적화되어 있음
    → DevOps 모니터링, 응용 프로그램 메트릭, IoT 센서 데이터 및 실시간 분석을 포함하여 많은 양의 타임스탬프가 적용된 모든 유스케이스의 백업 저장소로 사용

14. MongoDB

  • 필요한 쿼리 제공 및 인덱싱을 활용하여 원하는 수준의 확장성과 유연성을 제공하는 문서 데이터베이스

  • C++로 작성된 오픈소스 문서지향적 Cross-platform 데이터베이스

  • 비관계형 데이터베이스(NoSQL)

    • 스키마 존재하지 않음
    • join 사용하지 않아도 됨
  • 관련 개념

    항목설명
    Document• RDMS의 Row(혹은 튜플)와 유사한 개념
    • JSON objects 형태의 key-value의 쌍으로 이루어진 데이터 구조로 구성
    • 각 Document는 _id라는 고유한 값을 가짐
    Collection• RDMS의 table과 유사한 개념
    • Document들의 집합으로 구성
    Database• Collection들의 물리적인 컨테이너이자 가장 상위 개념
    • RDBMS에서의 Database와 동일

15. MySQL

  • 다중 스레드, 다중 사용자를 지원하는 구조, 질의어 형식의 관계형 데이터베이스 관리 시스템(RDBMS: Relational DBMS)
  • 다양한 운영체제에서 사용할 수 있고 여러 가지의 프로그래밍 언어를 지원
  • 표준 SQL 형식을 사용
  • 대용량의 데이터 처리 가능
  • 무료이지만 처리되는 속도가 상당히 빠름
  • 높은 보안성
  • 오픈 소스 라이센스를 따르고 있지만, 상업적 사용 시 상업용 라이센스 구입 필요

16. MariaDB

  • 오픈 소스 기반 관계형 데이터베이스 관리 시스템
  • 다양한 운영체제에서 사용
  • MySQL과 동일한 소스 코드 기반으로 높은 호환성 유지
  • MySQL보다 빠름
  • 무료로 모든 기능 사용 가능
  • 쓰레드풀 기능 내장 및 스토리지 엔진을 활용한 샤딩 기술 제공

17. PostgreSQL

  • 오픈소스 객체-관계형 데이터베이스 시스템(ORDBMS)

  • 다양한 데이터베이스 객체를 사용자가 임의 생성할 수 있는 기능 제공
    ex) 연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 등

  • 새로운 인덱스 메서드, 절차 언어, 함수, 연산자, 데이터 유형 및 집계 함수 추가 가능

  • jsonb, json 형식으로 저장 가능

  • 클라이언트/서버 모델 사용

  • SQL 표준을 따름

  • 장단점

    장점단점
    • MySQL에 비해 더 많은 SQL 표준 지원, 더 강력한 기능 제공,
      쿼리가 복잡해 질수록 성능이 좋음
    • 타 DBMS에 비해 트랜잭션 및 ACID이 월등히 좋음
    • 개발자들의 충성도가 높음
    • 상용 목적도 무료로 사용 가능
    • ORACLE에 버금가는 통계 함수를 제공
    • 기본적인 CRUD 성능이 경쟁 DB에 비해 좋지 않은 편
    • 독창적인 자료형과 문법
       → 다른 DB로 마이그레이션이 쉽지 않음

18. RabbitMQ

  • AMQP(Advanced Message Queing Protocol)을 구현한 오픈 소스 메시지 브로커 소프트웨어
  • Publish/Subscribe 방식의 메시지 전달 브로커
    • producers로부터 메시지들을 받아 consumers에게 전달
  • 장점
    • Cluster 구성이 쉬움
    • ManageUI 제공
    • 뛰어난 성능
    • plugin 제공 → 뛰어난 확장성
  • 과다한 요청 시 해당 요청을 다른 API에게 위임하고 빠르게 응답

19. Redis(Remote Dictionary Server)

  • 키-값 구조의 비정형 데이터를 저장 및 관리하기 위한 오픈 소스 기반 비관계형 데이터베이스 관리 시스템
  • 디스크가 아닌 메모리 기반의 데이터 저장소
    • 인 메모리 데이터 구조 집합 제공
    • 쿼리를 따로 할 필요 없이 결과를 바로 가져올 수 있음 → 빠른 속도
    • 데이터베이스로 사용될 수 있으며 Cache로도 사용 가능함
  • String, Set, Sorted Set, Hash, List 의 데이터 형식을 지원
    • 다양한 방식으로 데이터 활용 가능
  • 리스트, 배열과 같은 데이터를 처리하는데 유용함
    • 리스트형 데이터 입력과 삭제가 MySQL에 비해서 10배정도 빠름
  • 메모리를 활용하면서 영속적인 데이터 보존
  • Redis Server는 1개의 싱글 쓰레드로 수행되며, 따라서 서버 하나에 여러 개의 서버를 띄우는 것이 가능

20. Tomcat

  • 동적인 데이터를 처리하는 Java 기반 웹 애플리케이션 서버(WAS: Web Application Server)
  • 서블릿 컨테이너만 존재
  • 웹 서버와 연동하여 실행 가능한 자바 환경 제공
    → JSP와 Servlet이 실행할 수 있는 환경 제공

21. NGINX

  • 동시접속 처리에 특화된 경량 웹 서버 소프트웨어
    • Apache보다 동작이 단순함
    • 전달자 역할만 수행
  • 이벤트 지향 아키텍처(Event-driven Architecture) 방식
    • 트래픽이 많은 웹사이트의 확장성을 위해 설계한 비동기 이벤트 기반 구조

22. Pinpoint

  • 대규모 분산 서비스 및 시스템의 성능 분석/진단/추적 Java 플랫폼 서비스
  • 코드 없이 Agent를 설치하여 자동으로 트랜잭션 추적 가능(모니터링)
    • 시스템 내의 구성 요소가 상호 연결되는 방식을 분석하는 데 도움이 되는 솔루션을 제공
  • 효율적인 대용량 데이터 전송 및 처리

23. Spring Framework

  • Java 플랫폼을 위한 자바 언어 기반의 오픈 소스 경량급 애플리케이션 프레임 워크
  • 동적인 웹 사이트를 개발하기 위한 여러가지 서비스 제공
  • 관점지향 프로그래밍(AOP : Aspect-Oriented Programming) 지원
  • 제어 역행(IoC)를 통한 어플리케이션의 느슨한 결합
  • 의존성 주입(DI : Dependency Injection) 지원
  • 어플리케이션 객체의 생명주기와 설정을 포함하고 관리
  • iBatis나 Hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공

24. Spring Boot

  • 스프링 프레임워크 기반 프로젝트를 최소한의 설정으로 쉽고 빠르게 만들어주는 스프링 프레임워크의 서브 프로젝트
  • 내장 웹 서버 사용 → 별도의 웹 서버 설치 x
  • starter를 통한 dependency 자동화 → 편리한 버전 호환 및 관리

25. Java

  • 썬 마이크로시스템즈에서 개발한 객체 지향 프로그래밍 언어(OOP)
  • 자바 가상 머신(JVM) 사용 → 운영체제와 독립적으로 동작 가능
  • 높은 이식성
  • 자동 메모리 관리(garbage collection) → 높은 안정성
  • 멀티쓰레드 프로그래밍 가능
  • 객체가 필요한 시점에 클래스를 동적 로딩하여 생성
  • 자바는 컴파일 언어인 동시에 인터프린터 언어

26. Gradle

  • JVM에서 동작하는 스크립트 언어 Groovy기반의 DSL(Domain Specific Language)를 이용한 오픈소스 기반 빌드 자동화 시스템
  • 코드로 설정 정보를 구성
  • 스크립트 규모가 작고 읽기 쉬움
  • 멀티 프로젝트의 빌드 지원
  • 프로젝트를 설정 주입 방식으로 정의하므로 maven의 상속 구조보다 재사용에 용이
  • Ant와 Maven이 가진 장점을 모아 만들어짐

27. Maven

  • 자바 프로젝트의 빌드를 자동화해주는 빌드 툴
  • Apache Ant의 대안으로 만들어짐
  • xml을 기반으로 dependency 관리
  • 필요한 라이브러리를 pom.xml에 정의
    → 사용할 라이브러리와 작동에 필요한 하위 라이브러리를 네트워크를 통해 자동으로 다운로드
  • 프로젝트의 전체적인 라이프 사이클을 관리
  • 정해진 빌드 방법을 사용하므로 협업에서 유리하게 작용

28. JUnit

  • Java와 JVM 계열의 언어(예 : 코틀린)에서 사용하는 유닛(단위) 테스트 프레임워크
  • 테스트 결과를 Test 클래스로 남김 → 테스트 방법 및 클래스의 History 파악 가능
  • 단정(assert) 메서드로 테스트 케이스의 수행 결과를 판별
  • 테스트를 지원하는 어노테이션을 제공

29. Jenkins

  • 소프트웨어 개발 시 지속적 통합(CI: continuous integration) 서비스를 제공하는 툴
    • 다수의 개발자들이 하나의 프로그램 개발 시 각자 작업한 내용을 공유 영역의 저장소(git 등)에 업로드
      → 버전 충돌 방지
  • Subversion이나 Git과 같은 버전관리시스템과 연동하여 코드 변경을 감지하고 자동화 테스트를 수행
  • 코드 표준 준수 여부의 검사나 정적 분석을 통한 코드 품질 검사를 빌드 내부에서 수행
  • 빌드 자동화
    • 대시보드를 통하여 여러가지 배포 작업 상황 모니터링 가능
    • 배포 스크립트 실행

30. SonarQube

  • 정적 코드 분석으로 자동 리뷰를 수행하기 위한 지속적인 코드 품질 검사용 오픈 소스 플랫폼
  • 여러 분석 툴을 통합하여 여러 항목들을 한 번에 검사 가능
  • 점검결과가 빌드 단계에서 자동으로 분석되어 DB에 저장 및 웹페이지에 출력
  • 단독으로 사용되기 보다는 Jenkins 같은 CI 서버와 연동되어 사용

31. ELK stack

  • 데이터 수집 및 분석에 쓰이는 오픈소스 프로젝트
  • Elasticsearch, Logstash, Kibana, Beats를 포함

32. Logstash

  • 다양한 데이터 저장소로부터 데이터를 수집
  • 데이터를 확장, 변경, 필터링 및 삭제 등의 처리를 통해 가공
  • Elasticsearch 외에도 다양한 경로로 데이터 전송

33. kibana

  • 로그 및 이벤트 검토에 사용하는 데이터 시각화 및 탐색 도구(ELK stack의 UI제공)
  • Elasticsearch에 색인된 소스 데이터들을 검색
  • 집계 기능을 통해 조회된 데이터의 통계를 다양한 차트로 표현할 수 있는 패널 및 대시보드 제공

34. beats

  • logstash의 오버헤드를 줄이기 위해 도입됨
  • 데이터 수집만을 담당하는 경량화 된 모델 (Go 언어로 개발)

35. haproxy

  • 설치가 쉽고 빠르기에 서비스 이중화(HA- High Availability)를 구성하는데 주로 사용
  • 부하를 여러 서버에게 분산하는 경우 사용(Scale-out)
  • Reverse Proxy 형태로 동작(쿠키 기능 지원)

36. Apache Kafka

  • 스칼라 기반의 오픈 소스 메시지 브로커 프로젝트
  • Pub - Sub 모델의 메시지 큐
  • 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산 데이터 스트리밍 플랫폼
  • 서버 클러스터 내에서 데이터 스트림을 레코드로 유지하는 방식으로 작동하는 브로커 기반 솔루션
profile
기쁘게 코딩하고 싶은 백엔드 개발자

0개의 댓글