Helm이란?

  • Helm은 쿠버네티스(Kubernetes) 애플리케이션의 패키지 관리 도구
  • 복잡한 쿠버네티스 애플리케이션을 쉽게 설치, 업그레이드, 관리할 수 있도록 도와주며, 쿠버네티스 환경에서의 소프트웨어 배포를 간소화할 수 있게 도와줌

 

Helm 사용 이유

  1. 복잡한 쿠버네티스 애플리케이션 관리 단순화
    - 쿠버네티스 다양한 리소스(Pod, Service, Deployment 등)를 개별적으로 관리하는 것은 매우 복잡 Helm을 통해 리소스들을 차트(Chart)라는 하나의 패키지로 묶어 관리함으로써 배포 및 관리를 단순화
    - 수많은 컴포넌트로 구성된 마이크로서비스 아키텍처의 애플리케이션을 관리할 때 Helm이 매우 효율적
     
  2. 일관된 배포 및 재사용성 확보
    - Helm 차트는 재사용이 가능하므로 동일한 애플리케이션을 여러 환경(개발, 스테이징, 프로덕션)에 일관되게 배포 가능
    - Helm 저장소(Repository)를 통해 다른 사람들과 차트를 공유 → 애플리케이션 배포를 표준화하고 생산성 증가
     
  3.  간편한 애플리케이션 업데이트 및 롤백
    - Helm은 애플리케이션의 버전 관리를 지원하므로 업데이트 및 롤백을 쉽게 수행 가능
    - 애플리케이션 배포 과정에서 발생할 수 있는 오류를 최소화하고 안정성을 높일 수 있음
     
  4.  설정 관리의 효율성 향상
    - Helm은 values.yaml 파일을 통해 애플리케이션의 설정을 분리하여 관리할 수 있도록 지원
    - 환경별로 다른 설정을 적용해야 하는 경우에도 유연하게 대처 가능
     
  5.  자동화된 배포 파이프라인 구축 용이
    - Helm은 CI/CD(Continuous Integration/Continuous Delivery) 파이프라인과 통합하여 자동화된 애플리케이션 배포를 구축하는 데 유용
    - 애플리케이션 배포 과정을 자동화하고 배포 빈도를 높일 수 있음

 

Helm 3가지 주요 개념

1. Chart

  • helm의 리소스 패키지로 k8s cluster에서 애플리케이션을 기동하기 위해 필요한 모든 리소스가 포함
  • Chart 구성 요소
    1. Chart.yaml : 차트의 이름, 버전 등 기본적인 메타 정보를 정의
    2. templates : kubernets에 배포될 리소스들의 manifest 탬플릿들을 포함 → 오브젝트들의 yaml 파일 포함 디렉토리
    3. charts : dependency가 있는 chart 파일들의 저장 디렉토리
    4. values.yaml : 템플릿에 사용될 변수(value) 값들을 정의
.
├── Chart.yaml
├── charts
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── service.yaml
│   ├── serviceaccount.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

 

2. repository

  • 차트를 모아두고 공유하는 장소
  • docker hub와 같은 공간

 

3. release

  • k8s cluster에서 구동되는 Chart 인스턴스
  • 일반적으로 동일한 Chart를 여러 번 설치할 수 있고 이는 새로운 Release로 관리
  • Release될 때 패키지된 차트와 Config가 결합되어 정상 실행

※k8s cluster 내부에 Helm Chart를 원하는 Repository에서 검색 후 설치 → 각 설치에 따른 새로운 Release 생성 순서로 진행

 

 

Helm 다운로드

최신 버전을 설치 방법

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh

 

 

특정 버전 수동 다운로드 후 설치 방법

헬름 다양한 OS들을 위한 바이너리 릴리스를 제공 : https://github.com/helm/helm/releases

  1. https://github.com/helm/helm/releases에서 원하는 헬름 버전 다운로드
  2. 압축해제 (tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
  3. 압축해제된 디렉토리에서 helm 파일을 찾아서, 원하는 목적지로 이동 (mv linux-amd64/helm /usr/local/bin/helm)

 

다운로드 후 헬름 버전 확인

$ helm version
version.BuildInfo{Version:"v3.19.0", GitCommit:"3d8990f0836691f0229297773f3524598f46bda6",
GitTreeState:"clean", GoVersion:"go1.24.7"}

 

 

Helm 다운로드 가이드 : https://helm.sh/ko/docs/intro/install/

 

헬름 설치하기

헬름 설치하고 작동하는 방법 배우기.

helm.sh

 

 

  • Kong API Gateway는 대규모 분산 시스템에서 API 관리와 보안을 제공하는 오픈 소스 솔루션 → Kong gateway는 OSS gateway로 가장 많이 사용되고 있는 솔루션
  • Kong API Gateway는 플러그인을 통해 고성능과 확장성이 뛰어나며, 클라우드 네이티브 및 플랫폼에 구애받지 않고 확장 가능
  • 프록시(Proxy), 라우팅(Routing), 로드 밸린싱(Load Balancing), 인증(Auth) 등을 위한 기능을 제공
  • Kong API Gateway는 마이크로서비스(Microservice) 또는 기존 API 트래픽을 쉽게 오케스트레이션(Orchestration)하기 위한 중앙 레이저 역할을 함
  • Kong API Gateway 공식 Kubernetes Ingress Controller에 의해 Kubernetes에서 기본적으로 실행 가능Kong API Gateway는 대규모 분산 시스템에서 API 관리와 보안을 제공하는 오픈 소스 솔루션 → Kong gateway는 OSS gateway로 가장 많이 사용되고 있는 솔루션
  • Kong API Gateway는 플러그인을 통해 고성능과 확장성이 뛰어나며, 클라우드 네이티브 및 플랫폼에 구애받지 않고 확장 가능
  • 프록시(Proxy), 라우팅(Routing), 로드 밸린싱(Load Balancing), 인증(Auth) 등을 위한 기능을 제공
  • Kong API Gateway는 마이크로서비스(Microservice) 또는 기존 API 트래픽을 쉽게 오케스트레이션(Orchestration)하기 위한 중앙 레이저 역할을 함
  • Kong API Gateway 공식 Kubernetes Ingress Controller에 의해 Kubernetes에서 기본적으로 실행 가능
  • 다양한 plugin을 제공하고 있고, plugin을 개발할 수 있는 여러 언어(python, go, javascript)의 PDK(plugin development kit)가 있어 원하는 plugin을 개발하여 적용 가능
  • Admin API를 통해 Service, Route, Plugin을 설정할 수 있는데, Konga를 이용하면 UI를 통해 쉽게 설정 가능

 

[목차]

1. Kong API Gateway 구성 컨셉

2. Kong API Gateway 특징

3. Kong API Gateway 구성 요소

4. Kong API Gateway 기능 소개 → 서비스 라우팅 적용

    4.1. Service 기능 소개

    4.2. Route 기능 소개

5. DB-less 설정 소개

 

 

공식 문서 : https://developer.konghq.com/gateway/

 

Kong Gateway | Kong Docs

This page is an introduction to Kong Gateway.

developer.konghq.com

 

 

1. Kong API Gateway 구성 컨셉

  • Kong API Gateway는 새로운 서비스를 구축하면서, 클라이언트를 기존 업스트림 서비스로 라우팅하는 추상화 계층으로 활용하여 접근 방식을 단순화
  • 대상 서비스가 어디에 있든 각 요청 및 응답에 대해 공통 정책을 적용해 클라이언트에 영향을 미치지 않도록 할 수 있음

 

 

2. Kong API Gateway 특징

  • 고급 라우팅, 로드 밸런싱, 상태 확인 등을 관리 API 또는 선언적 구성을 통해 설정
  • JWT, 기본 인증, ACL 등과 같은 방법을 사용하여 API에 대한 인증 및 권한 부여
  • L4 또는 L7 트래픽에 대한 프록시, SSL/TLS 종료 및 연결 지원
  • 트래픽 제어, Request/Response 변환, 로깅, 모니터링을 시행하고 플러그인 개발자 허브를 포함하는 플러그인 제공
  • 데이터베이스가 없는 선언적 방식 배포 및 하이브리드 배포(제어 플레인/데이터 플레인 분리)와 같은 정교한 배포 모델 제공
  • Kubernetes 제공을 위한 기본 Kong Ingress Controller 지원
  • 벤더 종속이 없음

 

 

3. Kong API Gateway 구성 요소

  • API 클라이언트에서 Gateway로 요청 흐름은 Gateway 구성을 기반으로 Proxy에 의해 수정 및 관리되며, Upstream 서비스로 전달

 

  • Kong API Gateway 구성 요소 특징
특징 상세 내용
Admin API • 서비스, 경로, 플러그인 및 소비자의 관리 및 구성을 위한 RESTful 인터페이스를 제공
• Kong Gateway에 대해 수행할 수 있는 모든 작업은 Kong Admin API를 사용하여 자동화
Manager • Kong Gateway용 그래픽 사용자 인터페이스(GUI) 제공
• 내부에서 Kong Admin API를 사용하여 Kong Gateway를 관리하고 제어
Dev Portal • API 문서를 생성하고, 사용자 정의 페이지를 만들고, API 버전을 관리하고, 개발자 액세스를 보호하는 데 사용
Vitals • Kong Gateway 노드의 상태 및 성능에 대한 유용한 메트릭 및 프록시된 API 사용에 대한 메트릭을 제공
• 시각적으로 모니터링하고 실시간으로 이상 징후를 정확히 찾아낼 수 있음
• 시각적 API 분석을 사용하여 API 및 게이트웨이가 어떻게 수행되고 있는지 정확히 확인하고 주요 통계에 액세스
Gateway Plugin • 사용 사례를 충족하는 턴키 기능을 통해 Kong Gateway 플러그인에 최대한의 제어를 보장하고 불필요한 오버 헤드를 최소화
• Kong Manager 또는 Admin API를 통해 Kong Gateway 플러그인을 활성화하여 인증, 속도 제한 및 변환과 같은 기능을 활성화

 

 

4. Kong API Gateway 기능 소개 → 서비스 라우팅 적용

  • Service 및 Route 기능을 사용하면 Kong API Gateway를 사용하여 클라이언트에 서비스를 노출
  • Service 및 Route를 구성한 후 Kong API Gateway를 통해 요청을 시작
  • Service를 통해 백엔드 API로 라우팅 되는 요청 및 응답 흐름을 구현

 

4.1. Service 기능 소개

  • API에 대한 액세스를 구성할 때 먼저 Service를 지정
  • Kong API Gateway에서 Service는 외부 업스트림 API 또는 마이크로 서비스를 나타내는 Entity로 사용
  • Service의 주요 속성으로 Service가 요청을 수신하는 URL를 적용
  • 단일 문자열을 사용하거나 해당 프로토콜, 호스트, 포트 및 경로를 개별적으로 지정

 

4.2. Route 기능 소개

  • Service에 대한 요청을 시작하기 전에 Route를 추가해야함
  • Route는 요청이 Kong API Gateway에 도달한 후 Service로 전송되는 방법(및 여부)을 결정
  • 단일 Service에는 여러 경로가 있을 수 있음

 

5. DB-less 설정 소개

  • Kong Gateway는 데이터베이스 없이 Entity용 인메모리(In-Memory) 스토리지만 사용하여 실행할 수 있으며, 이것을 DB-less 모드라고 함
  • Kong Gateway DB-less를 실행할 때 Entity 구성은 선언적 구성을 사용
  • 사용 사례에 대한 전체 설정이 메모리에서의 처리가 알맞는 경우, 데이터베이스 설치 및 관리가 불필요하여 종속성을 감소시킴
  • Entity에 대한 구성은 Git 저장소를 통해 관리되는 단일 정보 소스에 보관할 수 있기 때문에 CI/CD 시나리오의 자동화에 적합함

 

 

  • Pacemaker와 Corosync을 사용하여 HA (고가용성) 클러스터를 구성하는 것은 복잡함
  • Pacemaker를 사용하여 VIP(가상 IP)와 노드 간 HA 클러스터를 설정

 

[목차]

  1. Pacemaker 설치 서버
  2. Pacemaker와 Corosync 설치
  3. Coresync 설정
  4. Pacemaker 클러스터 구성 → pcs를 사용하여 클러스터를 설정
  5. 클러스터 기본 설정 > STONITH(Fencing) 설정
  6. 클러스터 기본 설정 > VIP 리소스 생성

 

1. Pacemaker 설치 서버

호스트 이름 서버 IP 운영체제  네트워크
VIP 192.168.100.10    
server1 192.168.100.4 Ubuntu 22.04.4 LTS bond0
server2 192.168.100.5 Ubuntu 22.04.4 LTS bond0
server3 192.168.100.6 Ubuntu 22.04.4 LTS bond0

 

 

2. Pacemaker와 Corosync 설치

모든 서버에서 다음 명령어를 실행하여 Pacemaker와 Corosync를 설치

## apt 업데이트 및 pacemaker, corosync 패키지 설치
$ sudo apt update
$ sudo apt install -y pacemaker corosync pcs


## pacemaker 버전 확인
$ pacemakerd --version
Pacemaker 2.1.2
Written by Andrew Beekhof


## corosync 버전 확인
$ corosync -v
Corosync Cluster Engine, version '3.1.6'
Copyright (c) 2006-2021 Red Hat, Inc.

Built-in features: dbus monitoring watchdog augeas systemd xmlconf vqsim nozzle snmp pie relro bindnow
Available crypto models: nss openssl
Available compression models: zlib lz4 lz4hc lzo2 lzma bzip2 zstd

 

 

3. Coresync 설정

3.1. authkey 파일 생성 및 권한 변경 → Corosync가 클러스터 노드 간의 통신을 인증하는 데 사용

### authkey 생성
$ sudo corosync-keygen
Corosync Cluster Engine Authentication key generator.
Gathering 2048 bits for key from /dev/urandom.
Writing corosync key to /etc/corosync/authkey.


### 파일 권한 변경
$ sudo chown root:root /etc/corosync/authkey
$ sudo chmod 400 /etc/corosync/authkey


### authkey 파일 권한 변경 확인
$ ls -l /etc/corosync/authkey
-r-------- 1 root root 256 Oct 29 11:21 /etc/corosync/authkey

 

3.2. 인증키 복사 → 클러스터의 모든 노드에 authkey 파일을 복사 (생성 서버는 192.168.100.4, 복사 서버는 192.168.100.5, 192.168.100.6)

### 192.168.100.4 > 192.168.100.5으로 authkey 파일 복사
$ scp /etc/corosync/authkey root@192.168.100.5:/etc/corosync/authkey


### 192.168.100.4 > 192.168.100.6으로 authkey 파일 복사
$ scp /etc/corosync/authkey root@192.168.100.6:/etc/corosync/authkey

 

3.3. Corosync 설정 config 파일 수정 → Corosync의 설정 config 파일을 수정하여 클러스터 노드를 정의 (3개 Node에서 동시 실행)

$ cat <<EOF | sudo tee /etc/corosync/corosync.conf
totem {
    version: 2
    cluster_name: pcs_cluster
    transport: knet
    crypto_cipher: aes256
    crypto_hash: sha256
}

nodelist {
    node {
        ring0_addr: 192.168.100.4
        name: 192.168.100.4
        nodeid: 1
    }

    node {
        ring0_addr: 192.168.100.5
        name: 192.168.100.5
        nodeid: 2
    }

    node {
        ring0_addr: 192.168.100.6
        name: 192.168.100.6
        nodeid: 3
    }
}

quorum {
    provider: corosync_votequorum
}

logging {
    to_logfile: yes
    logfile: /var/log/corosync/corosync.log
    to_syslog: yes
    timestamp: on
}
EOF

 

3.4. Corosync 서비스 재시작 및 영구 실행

$ sudo systemctl restart corosync
$ sudo systemctl enable corosync

 

3.5. 클러스터 상태 확인

$ sudo crm status
Cluster Summary:
  * Stack: corosync
  * Current DC: 192.168.100.4 (version 2.1.2-ada5c3b36e2) - partition with quorum
  * Last updated: Fri Aug 15 13:19:02 2025
  * Last change:  Thu Aug 14 15:01:54 2025 by root via cibadmin on 192.168.100.4
  * 3 nodes configured
  * 1 resource instance configured
 
Node List:
  * Online: [ 192.168.100.4 192.168.100.5 192.168.100.6 ]
 
Full List of Resources:
  * vip (ocf:heartbeat:IPaddr2):         Stopped (disabled)

 

 

4. Pacemaker 클러스터 구성 → pcs를 사용하여 클러스터를 설정 (3개 Node에서 동시 실행)

4.1. pcs 서비스 및 pacemaker 서비스 활성화

$ sudo systemctl --now enable pcsd
$ sudo systemctl --now enable pacemaker

 

4.2. hacluster 사용자 비밀번호 설정

### pacemaker ID와 PW : hacluster:haasdf!@09
$ echo -e 'hacluster:haasdf!@09' | sudo chpasswd

 

4.3. 노드 인증

$ sudo pcs host auth -u hacluster -p 'haasdf!@09' 192.168.100.4 192.168.100.5 192.168.100.6
192.168.100.4: Authorized
192.168.100.5: Authorized
192.168.100.6: Authorized

 

4.4. 클러스터 생성

$ sudo pcs cluster setup pcs_cluster 192.168.100.4 192.168.100.5 192.168.100.6 --force
### 실행 결과 ###

No addresses specified for host '192.168.100.4', using '192.168.100.4'
No addresses specified for host '192.168.100.5', using '192.168.100.5'
No addresses specified for host '192.168.100.6', using '192.168.100.6'
Warning: 192.168.100.4: The host seems to be in a cluster already as the following service is found to be running: 'corosync'. If the host is not part of a cluster, stop the service and retry
Warning: 192.168.100.4: The host seems to be in a cluster already as cluster configuration files have been found on the host. If the host is not part of a cluster, run 'pcs cluster destroy' on host '192.168.100.4' to remove those configuration files
Warning: 192.168.100.6: The host seems to be in a cluster already as the following service is found to be running: 'corosync'. If the host is not part of a cluster, stop the service and retry
Warning: 192.168.100.6: The host seems to be in a cluster already as cluster configuration files have been found on the host. If the host is not part of a cluster, run 'pcs cluster destroy' on host '192.168.100.6' to remove those configuration files
Warning: 192.168.100.5: The host seems to be in a cluster already as the following service is found to be running: 'corosync'. If the host is not part of a cluster, stop the service and retry
Warning: 192.168.100.5: The host seems to be in a cluster already as cluster configuration files have been found on the host. If the host is not part of a cluster, run 'pcs cluster destroy' on host '192.168.100.5' to remove those configuration files
Destroying cluster on hosts: '192.168.100.4', '192.168.100.5', '192.168.100.6'...
192.168.100.6: Successfully destroyed cluster
192.168.100.5: Successfully destroyed cluster
192.168.100.4: Successfully destroyed cluster
Requesting remove 'pcsd settings' from '192.168.100.4', '192.168.100.5', '192.168.100.6'
192.168.100.6: successful removal of the file 'pcsd settings'
192.168.100.4: successful removal of the file 'pcsd settings'
192.168.100.5: successful removal of the file 'pcsd settings'
Sending 'corosync authkey', 'pacemaker authkey' to '192.168.100.4', '192.168.100.5', '192.168.100.6'
192.168.100.6: successful distribution of the file 'corosync authkey'
192.168.100.6: successful distribution of the file 'pacemaker authkey'
192.168.100.4: successful distribution of the file 'corosync authkey'
192.168.100.4: successful distribution of the file 'pacemaker authkey'
192.168.100.5: successful distribution of the file 'corosync authkey'
192.168.100.5: successful distribution of the file 'pacemaker authkey'
Sending 'corosync.conf' to '192.168.100.4', '192.168.100.5', '192.168.100.6'
192.168.100.6: successful distribution of the file 'corosync.conf'
192.168.100.4: successful distribution of the file 'corosync.conf'
192.168.100.5: successful distribution of the file 'corosync.conf'
Cluster has been successfully set up.

 

4.5. 클러스터 시작

$ pcs cluster start --all
192.168.100.4: Starting Cluster...
192.168.100.5: Starting Cluster...
192.168.100.6: Starting Cluster...


4.6. 클러스터 상태 확인

$ pcs status
Cluster name: pcs_cluster
Cluster Summary:
  * Stack: corosync
  * Current DC: 192.168.100.5 (version 2.1.2-ada5c3b36e2) - partition with quorum
  * Last updated: Fri Aug 15 13:29:57 2025
  * Last change:  Thu Aug 14 15:01:54 2025 by root via cibadmin on 192.168.100.4
  * 3 nodes configured
  * 1 resource instance configured

Node List:
  * Online: [ 192.168.100.4 192.168.100.5 192.168.100.6 ]

Full List of Resources:
  * No resources

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

 

 

5. 클러스터 기본 설정 > STONITH(Fencing) 설정

5.1. STONITH(Fencing) 비활성화 (추천 방법은 아님)

### Fencing 비활성화 > Pacemaker의 Node가 이슈가 있을 때 완전 배제를 위해 Fencing 설정 필요, 우선 Fencing 비활성화
$ sudo pcs property set stonith-enabled=false
 
 
### Fencing 활성화 > Fencing 방법도 학습 필요
### sudo pcs property set stonith-enabled=true

 

5.2. 클러스터 설정 확인

$ sudo pcs property config
Cluster Properties:
 cluster-infrastructure: corosync
 cluster-name: pcs_cluster
 dc-version: 2.1.2-ada5c3b36e2
 have-watchdog: false
 stonith-enabled: false

 

 

6. 클러스터 기본 설정 → VIP 리소스 생성 (3개 노드 중 1개 노드에서만 VIP 실행)

6.1. VIP 리소스를 추가하여 클러스터가 해당 IP를 관리하도록 설정 → VIP는 192.168.100.10

$ sudo crm configure primitive vip IPaddr2 \
    params ip=192.168.100.10 cidr_netmask=28 nic=bond0 \
    op monitor interval=30s \
    meta target-role=Started

 

6.2. 클러스터 상태 확인

$ sudo pcs status
 
Cluster name: pcs_cluster
Cluster Summary:
  * Stack: corosync
  * Current DC: 192.168.100.5 (version 2.1.2-ada5c3b36e2) - partition with quorum
  * Last updated: Fri Aug 15 13:43:13 2025
  * Last change:  Thu Aug 14 15:01:54 2025 by root via cibadmin on 192.168.100.4
  * 3 nodes configured
  * 1 resource instance configured
 
Node List:
  * Online: [ 192.168.100.4 192.168.100.5 192.168.100.6 ]
 
Full List of Resources:
  * vip (ocf:heartbeat:IPaddr2):         Started 192.168.100.4
 
Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

 

6.3. 리소스 상태 확인

$ sudo pcs resource status
  * vip (ocf:heartbeat:IPaddr2):         Started 192.168.100.4

 

6.4. 리소스 구성 검토

$ sudo pcs resource config
 Resource: vip (class=ocf provider=heartbeat type=IPaddr2)
  Attributes: cidr_netmask=28 ip=192.168.100.10 nic=bond0
  Meta Attrs: target-role=Started
  Operations: monitor interval=30s (vip-monitor-30s)

 

6.5. 인터페이스에서 확인

$ ip address show bond0
12: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether e2:9d:8c:ae:16:73 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.4/28 brd 192.168.100.15 scope global bond0
       valid_lft forever preferred_lft forever
    inet 192.168.100.10/28 brd 192.168.100.15 scope global secondary bond0
       valid_lft forever preferred_lft forever
    inet6 fe80::e09d:8cff:feae:1673/64 scope link
       valid_lft forever preferred_lft forever

 

 

※ 참고 자료 : https://www.scbyun.com/1498

 

우분투에서 Pacemaker와 Corosync를 사용해 고가용성 클러스터를 구성하는 방법

우분투에서 Pacemaker와 Corosync을 사용하여 HA(고가용성) 클러스터를 구성하는 방법Pacemaker와 Corosync을 사용하여 HA (고가용성) 클러스터를 구성하는 것은 복잡한 프로세스일 수 있습니다. Pacemaker를

www.scbyun.com

 

해당 내용은 OBS 공식 문서 내용을 참고하여서 작성하였습니다.

https://obsproject.com/kb/stream-connection-troubleshooting

 

Stream Connection Troubleshooting | OBS

Stream Connection Troubleshooting 2024-09-30 If you experience dropped frames or intermittent disconnections while streaming, there is a network issue between your computer and the remote stream ingest server. Such issues can arise for a variety of reasons

obsproject.com

 

  • 스트리밍 중 프레임 드롭(dropped frames)이나 간헐적인 연결 끊김 현상이 발생한다면, 사용자의 컴퓨터와 원격 스트리밍 인제스트 서버 간 네트워크 문제에 발생
  • 프레임 드롭(dropped frames)이나 간헐적인 연결 끊김 현상 문제는 다양한 원인으로 발생 → OBS Studio의 통제 범위를 벗어남

 

드롭된 프레임(dropped frames)

  • 드롭된 프레임(dropped frames)은 원격 서버와의 연결이 불안정하거나 설정된 비트레이트를 유지하지 못함을 의미
  • 프로그램은 보상을 위해 일부 비디오 프레임을 강제로 삭제
  • 너무 많은 프레임을 드롭하면 스트리밍 서버에서 연결이 끊길 수 있음
     
  • OBS Studio가 프레임 드롭(dropped frames)을 유발할 가능성은 극히 희박
  • 기술 설명을 참조 > https://gist.github.com/jp9000/5793a3f4ae15913c858913d6a00824b7

 

1. 다른 서버로 스트리밍하기(Stream to a Different Server)

  • Settings > Stream으로 이동하여 다른 서버로 스트리밍을 시도
  • Twitch로 스트리밍 중이며 Windows를 사용하는 경우, TwitchTest를 사용하여 품질 점수가 가장 높은 서버를 검색
  • 향상된 방송(Enhanced Broadcasting) 기능을 비활성화하거나 TwitchTest 결과에서 확인된 대역폭보다 낮은 최대 스트리밍 대역폭을 설정하여 테스트 진행 가능

 

2. 비디오 비트레이트(Video Bitrate) 낮추기

  • Settings > Output으로 이동하여 비디오 비트레이트(Video Bitrate)를 낮추기 
  • 비트레이트(Bitrate)는 안정적인 업로드 속도(upload speed)와 스트리밍 서비스의 비트레이트 제한(bitrate limitations)에 따라 달라짐 
  • 총 업로드 속도(total upload speed)의 75%로 설정하는 것이 좋은 시작점(starting point)

 

3. 다른 서비스로 스트리밍(stream)하기

  • Settings > stream으로 이동하여 다른 서비스로 스트리밍(stream) 변경
  • 예시) Twitch로 스트리밍 중이라면 YouTube로 스트리밍하여 연결 상태를 테스트
  • 참고 : 특정 서비스의 연결 문제는 해결되지 않지만, 서비스 관련 문제인지 확인하는 데 도움됨

 

4. 네트워크 최적화 및 TCP 페이싱 활성화

  • Settings > Advanced → Network로 이동하여 '네트워크 최적화 활성화(Enable network optimizations)'와 'TCP 페이싱 활성화(Enable TCP pacing)'를 선택 
  • 일부 사용자는  '네트워크 최적화 활성화(Enable network optimizations)'와 'TCP 페이싱 활성화(Enable TCP pacing)' 설정으로 프레임 드롭(dropped frames)이나 연결 끊김 문제(disconnection issues)가 개선되었다고 보고 
  • 문제 해결을 위한 로그(log)에 추가 세부 정보(further details)가 기록
    ※ 참고: 해당 Settings은 Windows에서만 사용 가능

 

5. “Bind to IP”가 기본값으로 설정되어 있는지 확인 필요

  • Settings > Advanced → Network 로 이동하여 Bind to IP가 기본값으로 설정되어 있는지 확인

 

6. IP 패밀리를 IPv4 전용으로 설정

  • Settings > Advanced → Network로 이동하여 IP Family를 IPv4 전용으로 설정 필요
    ※ 참고: 연결 문제가 해결되지 않으면, 기본 설정인 IPv4 및 IPv6을 유지하는 것이 좋음

 

7. 동적 비트레이트 조정 활성화

  • Settings > Advanced → Network로 이동하여 ‘Dynamically change bitrate to manage congestion(혼잡 관리 위해 비트레이트 동적 변경)’ 항목을 선택
  • 연결 상태가 불안정할 때 프레임 드롭(dropped frames) 대신 비트레이트(bitrates)를 낮춰 전송

    ※ 참고
    • 프레임 드롭(dropped frames)의 근본 원인을 해결하지 않으며, 연결 문제를 해결할 수 없는 경우에만 사용
    • 비트레이트(bitrates) 감소는 영상 품질 저하를 동반

 

 

OBS Studio 외부의 소프트웨어

원인 해결책
보안 소프트웨어 간섭
보안 소프트웨어(방화벽/바이러스 백신)가 OBS Studio와 스트리밍 서버 간의 연결을 방해 가능
보안 소프트웨어를 일시적으로 비활성화하여 원인이 되는지 확인 필요
문제가 해결되면 OBS Studio에 대한 예외를 추가하고 보안 소프트웨어를 다시 활성화
VPN 소프트웨어 간섭
VPN 소프트웨어로 인해 스트리밍 서버와의 연결이 불안정 
VPN을 비활성화하여 네트워크 불안정성의 원인인지 확인 필요 
Bundled(번들) 네트워크 소프트웨어
- 일부 네트워크 소프트웨어는 OBS Studio의 우선순위를 낮춰 필요한 비트레이트를 유지하지 못하게 할 수 있음
- 네트워크 연결을 최적화(optimize)하거나 조정(tweak)한다고 표방하는 모든 소프트웨어를 반드시 확인 필요
1. Lenovo Vantage → Lenovo Vantage 소프트웨어 내에서 네트워크 부스트 옵션을 비활성화
2. Killer NIC → Killer NIC 소프트웨어 제품군을 제거한 후 설치 프로그램을 다시 실행하고, 하드웨어 드라이버만 설치하도록 선택
3. 기타 소프트웨어 → 소프트웨어를 완전히 제거하거나 비활성화한 후 연결 상태를 다시 테스트
구형 네트워크 드라이버
구형 네트워크 드라이버는 연결 상태가 나빠질 수 있음
컴퓨터 또는 메인보드 제조업체 웹사이트에서 최신 드라이버를 다운로드하여 설치하십시오.

 

 

Potential Hardware Issues (잠재적인 하드웨어 문제)

원인 해결책
WiFi를 통한 스트리밍
스트리밍에 WiFi가 불안정
스트리밍 시에는 유선 연결을 사용하는 것이 좋음
모뎀/라우터 연결 문제
모뎀/라우터에 일반적인 연결 문제가 있있을 수 있음
잠재적인 연결 문제를 해결하려면 모뎀과 라우터를 모두 재시작
하드웨어 결함
연결 경로 상의 하드웨어에 결함이 있을 수 있음
모뎀, 라우터, 네트워크 케이블, 네트워크 카드 또는 스위치나 익스텐더와 같은 기타 네트워크 장치가 포함
하드웨어에 문제가 없는지 확인하려면 각 하드웨어를 하나씩 교체 필요

※ 참고
하드웨어에 결함이 있는지 확실하지 않은 경우, 직접 장비를 교체하기 전에 반드시 인터넷 서비스 제공업체(ISP)에 문의 필요

 

 

인터넷 서비스 제공업체에 문의 필요

  • 가이드의 문제 해결 단계를 모두 수행했음에도 연결 문제가 지속된다면, ISP(인터넷 서비스 제공업체)에 문의 필요 
  • OBS Studio는 사용자의 네트워크에 의존하며, 네트워크의 상당 부분은 사용자의 직접적인 통제 범위를 벗어남 
  • ISP는 종종 자체적으로 변경 사항을 적용하거나, 연결 경로에 예상치 못한 혼잡(congestion)이 발생할수 있음

 

해당 내용은 OBS 공식 문서 내용을 참고하여서 작성하였습니다.

https://obsproject.com/kb/plugins-guide

 

Plugins Guide | OBS

Plugins Guide 2022-09-01 Table of Contents Compatibility Install or remove plugins Plugins OBS Studio supports a variety of plugins that provide new kinds of sources, filters, and features. Some plugins also allow OBS Studio to communicate with certain kin

obsproject.com

 

  • OBS Studio는 새로운 종류의 소스, 필터 및 기능을 제공하는 다양한 플러그인을 지원
  • 일부 플러그인은 Elgato Stream Deck과 같은 특정 하드웨어와 OBS Studio가 통신할 수 있도록 지원
  • OBS 프로젝트는 포럼에서 커뮤니티 제작 플러그인 목록을 관리 → https://obsproject.com/forum/plugins/
  • 일부 플러그인은 Flathub를 통해 Linux 사용자도 이용 가능

 


Compatibility (호환성)

  • 대부분의 플러그인은 OBS Studio가 지원되는 모든 플랫폼에서 사용 가능하도록 개발
  • 다음과 같은 경우 플러그인이 사용 중인 OBS Studio 버전과 호환되지 않을 수 있음
    1. 플러그인이 특정 플랫폼에서만 제공되는 경우 (예: Windows에서는 가능, macOS에서는 불가능)
    2. 플러그인이 동일한 아키텍처용으로 제공되지 않는 경우 (예: x86_64 가능, ARM64 불가능)
    3. 사용 중인 OBS Studio 버전에 맞게 플러그인이 업데이트되지 않은 경우

 

Install or remove plugins (플러그인 설치 또는 제거)

  • OBS Studio의 인기 플러그인 대부분은 설치 프로그램이 함께 제공 → 일반적으로 플러그인은 아래에 나열된 위치에 설치
  • 플러그인을 수동으로 설치해야 하는 경우, 관련 파일은 다음 폴더 중 하나에 위치해야 할 가능성이 높음

 

  • 플러그인 설명서를 확인
    운영체제 경로 및 설명
    Windows (all users) C:\Program Files\obs-studio\obs-plugins\64bit or C:\ProgramData\obs-studio\plugins

    ※ 참고
    - ProgramData 폴더에 설치된 플러그인은 특정 디렉터리 구조를 요구
    - 플러그인 이름으로 명명된 폴더에는 bin 폴더와 data 폴더가 포함 필요 
    - bin 폴더 내에는 플러그인은 .dll 파일을 포함하는 64bit 폴더가 필요 
    - data 폴더 내에는 로케일(locale)은 .ini 파일을 포함하는 locale 폴더가 필요 
    - 수동 설치 시 권장되는 위치
    Windows
    (legacy 32-bit plugins;
    OBS Studio 27.2.4 and prior only)
    C:\Program Files\obs-studio\obs-plugins\32bit
    macOS ~/Library/Application Support/obs-studio/plugins

    ※ 참고
    - 이 폴더 안에는 각 플러그인마다 .plugin으로 끝나는 별도의 번들이 있어야 함
    - 파인더(finder)에서 이들을 보면 하얀색 플라스틱 장난감 블록처럼 보임
    Linux ~/.config/obs-studio/plugins
    Linux
    (Flatpak)
    Install plugins using Flatpak

 

  • OBS Studio를 사용자 지정 위치에 설치하거나 휴대용 모드를 사용하는 경우, 설치 프로그램의 대상 폴더를 사용자 지정 위치의 data/plugins 폴더로 변경 필요
  • 사용자 지정 플러그인 디렉터리를 사용하려면 환경 변수 OBS_PLUGINS_PATH 및 OBS_PLUGINS_DATA_PATH를 원하는 디렉터리로 설정 필요

 

해당 내용은 OBS 공식 문서 내용을 참고하여서 작성하였습니다.

https://obsproject.com/kb/virtual-camera-guide

 

Virtual Camera Guide | OBS

Virtual Camera Guide 2022-08-31 What is the virtual camera? The Virtual Camera is a feature of OBS Studio that allows you to share your OBS Studio scene with any applications that can make use of a webcam, such as Zoom, Skype, Discord, etc. This feature is

obsproject.com

 

가상 카메라란 무엇인가요?

  • 가상 카메라는 OBS Studio의 기능으로, OBS Studio 장면을 Zoom, Skype, Discord 등과 같이 웹캠을 활용할 수 있는 모든 애플리케이션과 공유할 수 있게 해줌
  • 가상 카메라 기능은 화면을 직접 캡처할 수 없는 애플리케이션에 특히 유용

 

 

가상 카메라(virtual camera) 사용하기

  • 가상 카메라를 시작하려면 컨트롤 도크에서 'Start Virtual Camera(가상 카메라 시작)'을 클릭 
  • 가상 카메라를 중지하려면 동일한 버튼을 다시 클릭(이때 버튼에는 '가상 카메라 중지'라고 표시).

 

  • 가상 카메라 설정을 조정하려면 컨트롤 도크의 ⚙ 기어 아이콘을 클릭

 

 

  • 가상 카메라 설정 창에서 다음 설정을 조정 가능
    1. Program (프로그램) → 가상 카메라는 OBS Studio가 일반적으로 출력하는 내용을 표시
    2. Preview (미리보기)  → 스튜디오 모드를 사용하는 경우 가상 카메라는 미리보기를 표시, 비디오 피드를 시청하는 모든 사람이 장면 변경, 편집 작업 등을 볼 수 있음을 의미
    3. Scene(장면)  → 가상 카메라는 출력에 현재 표시되는 내용과 관계없이 하나의 장면만 표시
    4. Source(소스)  → 가상 카메라는 항상 하나의 소스만 표시

 

해당 내용은 OBS 공식 문서 내용을 참고하여서 작성하였습니다.

https://obsproject.com/kb/scene-collections

 

Scene Collections | OBS

Scene Collections 2022-01-14 Scene Collections save all Scenes and Sources that have been added to it. Similar to Profiles for output settings, you can store multiple different collections of saved Scenes and Sources. Then, you can swap between different c

obsproject.com

 

OBS Studio Scene(장면) 컬렉션 기능

  • Scene Collections(장면 컬렉션)은 추가된 모든 Scene(장면)과 Source(소스)를 저장
  • Output settings(출력 설정) 용 프로필과 유사하게, 저장된 장면과 소스의 여러 다른 컬렉션을 저장 가능
  • 다음 다양한 상황에 맞게 서로 다른 collections(컬렉션) 간에 전환 가능

 

예시:

  • Scenes(장면) 목록의 Scenes(장면) 수 줄이기
  • 서로 다른 streams(스트림)을 위한 다른 collections(컬렉션) → 예시: 팟캐스트 vs 개인 게임 스트림
  • 녹화 전용으로 streaming overlays(스트리밍 오버레이)가 없는 collection(컬렉션)

 

참고: Scene Collections(장면 컬렉션)에는 설정 → 오디오의 전역 오디오 소스도 포함

 

  • Scene Collections(장면 컬렉션)의 "Import" 옵션은 OBS Studio 컬렉션 뿐만 아니라 OBS Classic, XSplit Broadcaster 또는 Streamlabs Desktop 장면의 마이그레이션도 지원
  • 다른 운영 체제에서 생성된 OBS Studio 장면 컬렉션을 현재 실행 중인 운영 체제에 맞게 자동으로 조정

 

해당 내용은 OBS 공식 문서 내용을 참고하여서 작성하였습니다.

  • Profile(프로필)은 주로 출력과 관련된 OBS Studio 설정의 상당 부분을 저장 
  • Profile(프로필)을 사용하면 사용자가 작업 중인 스트림이나 녹화에 따라 저장된 다양한 설정 간에 빠르게 전환 가능
  • Profile(프로필)을 Scene Collections(장면 컬렉션)과 함께 조합하여 settings(설정)과 scenes(장면)을 유연하게 관리, 백업하고 최대한 활용 가능


Profile(프로필) 예시

  • 트위치 스트리밍용 프로필과 유튜브 스트리밍용 프로필
  • 1080p 출력용 프로필과 4K 출력용 프로필
  • 집에서 사용하는 고비트레이트·고해상도 프로필과 모바일 스트리밍용 낮은 설정 프로필

 

프로필 사용법

  • window/screen 상단의 Profile(프로필) 메뉴를 클릭

 

  • Profile(프로필) 메뉴 항목설명
메뉴 항목 설명
New 기본 설정으 빈 Profile(프로필) 생성
Duplicate 현재 Profile(프로필)의 Copy(복사본) 생성
Rename 현재 Profile(프로필)의 이름 변경
Remove 현재 Profile(프로필)의 삭제
Import/Export 현재 Profile(프로필) 설정을 JSON 파일로 내보내 백업용으로 사용 혹은 다른 OBS 설치 환경에서 사용
받은 JSON 파일을 가져와 Profile(프로필) 설정에 추가

 

 

Profile(프로필)에 저장되는 설정

  1. Stream (스트림) → 연결된 계정 포함
  2. Video (비디오) → 기본 (캔버스) 해상도 포함
  3. Output (출력) → 모든 유형

 

+ Recent posts