작고, 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 아키텍처
- 각 서비스별 소스 코드 수정이 쉽고, 수정한 서비스만 배포 가능하다.
- 장애 시 해당 서비스에만 한정되고, 전체 장애로 확장될 가능성이 적다.
- 스케일 아웃이 필요한 경우에는 해당 서비스만 추가하여 리소스의 효율적 사용이 가능하다.
여러 프로젝트나 라이브러리를 하나의 저장소에서 관리하는 단일 레포지토리
- 하나의 저장소에서 전체 코드베이스를 관리함으로써 리팩토링과 대규모 변경 사항을 더욱 효과적으로 처리할 수 있다.
- 개발자들이 일관된 컨벤션과 경험을 가질 수 있다.(브랜치 전략, 코드 컨벤션 등)
- CI/CD 설정 등을 같이 사용할 수 있다.
JavaScript와 TypeScript 코드 베이스의 모노레포를 위한 관리 도구
- 고속 캐싱: 이전에 실행된 작업을 캐시하여 동일한 작업을 다시 실행할 필요없이 빠르게 결과를 얻을 수 있다.
- 파이프라인: 여러 작업을 의존성 기반으로 순차적 혹은 병렬적으로 실행할 수 있게 해준다.
- 병렬 작업 처리: 작업을 병렬로 실행하여 독립적인 작업을 동시에 처리할 수 있다.(특히 빌드시에 시간을 현저히 줄일 수 있다.)
- 손쉬운 사용: 설정 파일이 간단하고 직관적이다. turbo.json 파일을 통해 파이프라인 및 캐싱 전략등을 설정할 수 있다.
빠른 Javascript 번들러 및 트랜스파일러.
- 빠른 속도: Go 언어로 작성되어 있으며, Go는 컴파일된 언어로 동작 속도가 매우 빠르다. 이를 활용하여 JS 및 TS 파일의 번들링과 트랜스파일을 매우 빠르게 처리할 수 있다.
- 번들링: 여러 파일로 이루어진 서비스를 단일 파일로 번들링할 수 있어, 배포 시에 파일 수를 줄일 수 있고 컨테이너 이미지로서 관리가 용이해진다.
- 간단한 설정: esbuild 명령어로 쉽게 빌드를 시작할 수 있고 복잡한 설정이 필요없다.
JMeter는 apache에서 개발한 성능,로드,스트레스,기능 테스트를 위한 오픈 소프트웨어입니다.
주로 웹 애플리케이션 및 다양한 네트워크 서비스의 성능을 측정하고 분석하는데 사용됩니다.
JMeter의 장점
1. 다양한 프로토콜 지원: http,https,ftp,tcp 등과 같은 다양한 프로토콜을 지원합니다.
2. 사용자 정의와 확장성: 사용자가 자신의 필요에 맞게 sampler나 thread, listner 등을 추가하거나 확장 플러그인 등을 추가하여 더 세밀하게 테스트를 제어할 수 있는 유연성을 제공합니다.
3. GUI,CLI 제공: GUI로 직관적인 조작이 가능하여 초보자에게 유리하고 CLI로 정밀한 제어가 가능하여 전문가에게 적합하다.
JMeter의 단점
1. GUI 모드에서 고사양의 하드웨어 요구: GUI 모드는 그래픽을 처리해야 하기 때문에 고성능의 하드웨어가 요구될 수 있다.
2. 분산 테스트 설정이 복잡: 여러 대의 시스템에서 테스트를 수행하는 분산 테스트 환경을 설정하는 과정이 복잡하고 기술적인 난이도가 높을 수 있다.
Elastic search , Log stash , Kibana 로 구성된 로깅 시스템.
- Logstash 는 수집한 로그를 원하는 형태로 가공하여 Elastic search에 저장하고,
- Elastic search 는 저장된 로그를 효율적으로 검색하고 조회한다.
- Kibana 는 Elastic search 를 통해 조회한 데이터를 시각적으로 표현한다.
Prometheus: 프로메테우스는 대상 시스템으로부터 각종 모니터링 지표를 수집하여 저장하고 검색할 수 있는 시스템이다.
프로메테우스의 특징
- 많은 시스템을 모니터링 할 수 있는 다양한 플러그인을 가지고 있다.
- 프로메테우스가 주기적으로 exporter(모니터링 대상 시스템)으로부터 pulling 방식으로 메트릭을 읽어서 수집한다.
- 데이터는 시계열(time series) 형식으로 저장된다.
- 알림 규칙(Alert Rule)을 설정하면 특정 조건에 따라 AlertManager를 통해 이메일,Slack,PagerDuty 등으로 알람을 보낼 수 있다.
Grafana: 그라파나는 여러 데이터들을 시각화 해주는 모니터링 툴이다.
시스템 관점(cpu,메모리,디스크)의 메트릭 지표를 시각화하는데 특화되어 있다.Grafana의 특징
- 그라파나는 프로메테우스뿐만 아니라 mySQL, ElasticSearch, influxDB, Graphite 등의 다양한 데이터 소스를 지원한다.
- 다양한 차트 유형(Line Chart,Bar Chart,HeatMap 등)을 제공하여 데이터를 시각적으로 표현할 수 있다.
- 특정 조건에 기반한 알림 설정이 가능하며, 프로메테우스의 데이터를 활용하여 더욱 정밀한 조건 설정이 가능하다.
컨테이너화 기술을 활용하여 애플리케이션과 그 실행 환경을 패키징하고 배포하는 플랫폼
- 주요 개념
- 이미지 - 컨테이너를 생성하는 데 필요한 청사진.
- 애플리케이션 실행에 필요한 파일, 라이브러리, 설정 등을 포함.
- 읽기 전용.
- 컨테이너
- 이미지를 실행한 상태의 독립적인 환경.
- 애플리케이션 코드, 라이브러리, 설정 파일 등을 포함, 호스트 시스템과 격리된 환경에서 실행.
- 가상 머신보다 성능과 효율성이 높음.
- Dockerfile
- 이미지를 생성하기 위한 설정 파일.
- 명령어 기반으로 이미지에 포함할 내용을 기술.
- 레지스트리
- Docker 이미지를 저장하고 배포하는 중앙 저장소.
- Docker Hub: 기본 퍼블릭 레지스트리.
- 볼륨
- 컨테이너에서 생상한 데이터를 호스트와 공유하거나 영구 저장하기 위한 스토리지.
- 컨테이너를 삭제해도 데이터는 유지.
- 네트워크
- 컨테이너 간 통신을 가능하게 하는 네트워크 설정.
- 기본 네트워크 드라이버: 브리지, 호스트, 오버레이
- 장점
- 환경의 일관성
- 동일한 이미지로 어디서든 실행 가능
- 빠른 배포와 실행
- 기존 가상 머신보다 리소스 효율적. 컨테이너는 가볍고 빠르게 실행.
- 이식성
- 운영 체제에 독립적. 다양한 플랫폼에서 동일하게 실행 가능.
- 격리 및 보안
- 컨테이너는 애플리케이션과 실행 환경을 격리하여 실행.
- 다른 컨테이너나 호스트 시스템에 영향을 주지 않음.
- 개발/운영 효율성
- CI/CD 파이프라인과 통합되어 자동화된 테스트 및 배포 가능.
- 여러 컨테이너를 손쉽게 관리.
여러 컨테이너를 정의하고 실행하기 위한 도구
- 컨테이너 기반의 애플리케이션에서 여러 서비스를 동시에 실행해야 할 때, 각각의 컨테이너 설정을 자동화하고 실행 순서를 조정하는 데 유용.
- docker-compose.yml 파일에 각 서비스의 설정을 정의하고, 해당 파일을 기반으로 모든 서비스를 한꺼번에 실행, 관리.
- 장점
- 개발 속도 향상
- 여러 컨테이너를 한 번에 관리하여 개발 환경 설정을 단순화.
- 일관성
- 동일한 설정으로 개발, 테스트, 배포 가능
- 효율성
- 컨테이너별로 격리된 환경을 제공하면서 자원을 효율적으로 관리.
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 환경에서 실행 가능.
- 무료 사용 가능
- 퍼블릭 저장소에서는 무료. 프라이빗 저장소는 제한된 무료 시간 제공.