최종 프로젝트 기술 스택 정리

김민재·2025년 1월 1일
0

1.MSA(Micro Service Architecture)

작고, 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 아키텍처

  • 각 서비스별 소스 코드 수정이 쉽고, 수정한 서비스만 배포 가능하다.
  • 장애 시 해당 서비스에만 한정되고, 전체 장애로 확장될 가능성이 적다.
  • 스케일 아웃이 필요한 경우에는 해당 서비스만 추가하여 리소스의 효율적 사용이 가능하다.

MSA의 장점

  • 독립적인 개발과 배포
  • 확장성 -> 스케일 아웃을 통한 수평 확장이 용이하고 각 서비스별 독립적 확장 가능
  • 장애 격리 -> 장애가 발생할 서비스만 문제

MSA의 단점

  • 복잡한 서비스 관리
  • 배포 및 테스트의 복잡성 -> CI/CD 파이프라인을 잘 구성하지 않으면 배포와 테스트가 매우 힘들어질 수 있음
  • 데이터 일관성 유지 -> 각 서비스가 독립적으로 데이터를 가지므로 데이터의 일관성을 유지하는 것이 어려울 수 있다.

Monorepo - Turborepo

모노레포

여러 프로젝트나 라이브러리를 하나의 저장소에서 관리하는 단일 레포지토리

  • 하나의 저장소에서 전체 코드베이스를 관리함으로써 리팩토링과 대규모 변경 사항을 더욱 효과적으로 처리할 수 있다.
  • 개발자들이 일관된 컨벤션과 경험을 가질 수 있다.(브랜치 전략, 코드 컨벤션 등)
  • CI/CD 설정 등을 같이 사용할 수 있다.

터보레포

JavaScript와 TypeScript 코드 베이스의 모노레포를 위한 관리 도구

  • 고속 캐싱: 이전에 실행된 작업을 캐시하여 동일한 작업을 다시 실행할 필요없이 빠르게 결과를 얻을 수 있다.
  • 파이프라인: 여러 작업을 의존성 기반으로 순차적 혹은 병렬적으로 실행할 수 있게 해준다.
  • 병렬 작업 처리: 작업을 병렬로 실행하여 독립적인 작업을 동시에 처리할 수 있다.(특히 빌드시에 시간을 현저히 줄일 수 있다.)
  • 손쉬운 사용: 설정 파일이 간단하고 직관적이다. turbo.json 파일을 통해 파이프라인 및 캐싱 전략등을 설정할 수 있다.

EsBuild

빠른 Javascript 번들러 및 트랜스파일러.

  • 빠른 속도: Go 언어로 작성되어 있으며, Go는 컴파일된 언어로 동작 속도가 매우 빠르다. 이를 활용하여 JS 및 TS 파일의 번들링과 트랜스파일을 매우 빠르게 처리할 수 있다.
  • 번들링: 여러 파일로 이루어진 서비스를 단일 파일로 번들링할 수 있어, 배포 시에 파일 수를 줄일 수 있고 컨테이너 이미지로서 관리가 용이해진다.
  • 간단한 설정: esbuild 명령어로 쉽게 빌드를 시작할 수 있고 복잡한 설정이 필요없다.

번들링 설명

JMeter

JMeter는 apache에서 개발한 성능,로드,스트레스,기능 테스트를 위한 오픈 소프트웨어입니다.
주로 웹 애플리케이션 및 다양한 네트워크 서비스의 성능을 측정하고 분석하는데 사용됩니다.

JMeter의 장점
1. 다양한 프로토콜 지원: http,https,ftp,tcp 등과 같은 다양한 프로토콜을 지원합니다.
2. 사용자 정의와 확장성: 사용자가 자신의 필요에 맞게 sampler나 thread, listner 등을 추가하거나 확장 플러그인 등을 추가하여 더 세밀하게 테스트를 제어할 수 있는 유연성을 제공합니다.
3. GUI,CLI 제공: GUI로 직관적인 조작이 가능하여 초보자에게 유리하고 CLI로 정밀한 제어가 가능하여 전문가에게 적합하다.

JMeter의 단점
1. GUI 모드에서 고사양의 하드웨어 요구: GUI 모드는 그래픽을 처리해야 하기 때문에 고성능의 하드웨어가 요구될 수 있다.
2. 분산 테스트 설정이 복잡: 여러 대의 시스템에서 테스트를 수행하는 분산 테스트 환경을 설정하는 과정이 복잡하고 기술적인 난이도가 높을 수 있다.

Log Monitoring - ELK Stack(Elasticsearch + Logstash + Kibana) + FileBeat

ELK 스택이란?

Elastic search , Log stash , Kibana 로 구성된 로깅 시스템.

  • Logstash 는 수집한 로그를 원하는 형태로 가공하여 Elastic search에 저장하고,
  • Elastic search 는 저장된 로그를 효율적으로 검색하고 조회한다.
  • Kibana 는 Elastic search 를 통해 조회한 데이터를 시각적으로 표현한다.

참조

Server Monitoring - Grafana & Prometheus

Prometheus: 프로메테우스는 대상 시스템으로부터 각종 모니터링 지표를 수집하여 저장하고 검색할 수 있는 시스템이다.

프로메테우스의 특징

  • 많은 시스템을 모니터링 할 수 있는 다양한 플러그인을 가지고 있다.
  • 프로메테우스가 주기적으로 exporter(모니터링 대상 시스템)으로부터 pulling 방식으로 메트릭을 읽어서 수집한다.
  • 데이터는 시계열(time series) 형식으로 저장된다.
  • 알림 규칙(Alert Rule)을 설정하면 특정 조건에 따라 AlertManager를 통해 이메일,Slack,PagerDuty 등으로 알람을 보낼 수 있다.

Grafana: 그라파나는 여러 데이터들을 시각화 해주는 모니터링 툴이다.
시스템 관점(cpu,메모리,디스크)의 메트릭 지표를 시각화하는데 특화되어 있다.

Grafana의 특징

  • 그라파나는 프로메테우스뿐만 아니라 mySQL, ElasticSearch, influxDB, Graphite 등의 다양한 데이터 소스를 지원한다.
  • 다양한 차트 유형(Line Chart,Bar Chart,HeatMap 등)을 제공하여 데이터를 시각적으로 표현할 수 있다.
  • 특정 조건에 기반한 알림 설정이 가능하며, 프로메테우스의 데이터를 활용하여 더욱 정밀한 조건 설정이 가능하다.

CI/CD - Docker & Docker Compose + Github Actions

Docker:

컨테이너화 기술을 활용하여 애플리케이션과 그 실행 환경을 패키징하고 배포하는 플랫폼

  • 주요 개념
    • 이미지 - 컨테이너를 생성하는 데 필요한 청사진.
      • 애플리케이션 실행에 필요한 파일, 라이브러리, 설정 등을 포함.
      • 읽기 전용.
    • 컨테이너
      • 이미지를 실행한 상태의 독립적인 환경.
      • 애플리케이션 코드, 라이브러리, 설정 파일 등을 포함, 호스트 시스템과 격리된 환경에서 실행.
      • 가상 머신보다 성능과 효율성이 높음.
    • Dockerfile
      • 이미지를 생성하기 위한 설정 파일.
      • 명령어 기반으로 이미지에 포함할 내용을 기술.
    • 레지스트리
      • Docker 이미지를 저장하고 배포하는 중앙 저장소.
      • Docker Hub: 기본 퍼블릭 레지스트리.
    • 볼륨
      • 컨테이너에서 생상한 데이터를 호스트와 공유하거나 영구 저장하기 위한 스토리지.
      • 컨테이너를 삭제해도 데이터는 유지.
    • 네트워크
      • 컨테이너 간 통신을 가능하게 하는 네트워크 설정.
      • 기본 네트워크 드라이버: 브리지, 호스트, 오버레이
  • 장점
    • 환경의 일관성
      • 동일한 이미지로 어디서든 실행 가능
    • 빠른 배포와 실행
      • 기존 가상 머신보다 리소스 효율적. 컨테이너는 가볍고 빠르게 실행.
    • 이식성
      • 운영 체제에 독립적. 다양한 플랫폼에서 동일하게 실행 가능.
    • 격리 및 보안
      • 컨테이너는 애플리케이션과 실행 환경을 격리하여 실행.
      • 다른 컨테이너나 호스트 시스템에 영향을 주지 않음.
    • 개발/운영 효율성
      • CI/CD 파이프라인과 통합되어 자동화된 테스트 및 배포 가능.
      • 여러 컨테이너를 손쉽게 관리.

Docker Compose

여러 컨테이너를 정의하고 실행하기 위한 도구

  • 컨테이너 기반의 애플리케이션에서 여러 서비스를 동시에 실행해야 할 때, 각각의 컨테이너 설정을 자동화하고 실행 순서를 조정하는 데 유용.
  • docker-compose.yml 파일에 각 서비스의 설정을 정의하고, 해당 파일을 기반으로 모든 서비스를 한꺼번에 실행, 관리.
  • 장점
    • 개발 속도 향상
      • 여러 컨테이너를 한 번에 관리하여 개발 환경 설정을 단순화.
    • 일관성
      • 동일한 설정으로 개발, 테스트, 배포 가능
    • 효율성
      • 컨테이너별로 격리된 환경을 제공하면서 자원을 효율적으로 관리.

Github Actions

GitHub에서 제공하는 CI/CD(Continuous Integration/Continuous Deployment) 플랫폼

  • 주요 개념
    • 워크플로우
      • 자동화 작업의 정의.
      • yaml 파일로 저장.
    • 이벤트
      • 워크플로우를 트리거하는 Github 이벤트
      • push, pull_request, schedule, release, issue 등
      • 워크플로우 내에서 실행되는 개별 작업 단위.
      • 여러 작업(job)을 병렬 혹은 순차적으로 실행 가능.
    • 스텝
      • 각 작업(job) 내에서 실행되는 명령 또는 액션.
    • 액션
      • 재사용 가능한 작업 단위.
      • Github Marketplace에서 제공하거나 직접 작성 가능.
  • 주요 기능
    • 자동화된 테스트와 빌드
      • 코드 푸시 또는 PR 생성 시 자동으로 테스트 및 빌드 수행.
    • 지속적 배포
      • 성공적인 빌드 후 프로덕션 환경에서 자동 배포.
    • 일정 기반 실행
      • 크론 표현식을 사용해 일정에 따라 워크플로우 실행.
    • 조건부 실행
      • 특정 조건을 만족할 때만 작업 실행.
  • 장점
    • Github와 통합
      • Github 저장소와 긴밀히 통합되어 작업 설정 및 관리가 간편함.
    • 확장성
      • Github Marketplace에서 다양한 액션 제공.
    • 다양한 환경 지원
      • Linux, Windows, macOS 환경에서 실행 가능.
    • 무료 사용 가능
      • 퍼블릭 저장소에서는 무료. 프라이빗 저장소는 제한된 무료 시간 제공.
profile
ㅇㅇ

0개의 댓글