카테고리 보관물: Etc

Leopold FC660C Bluetooth (BLE660C) Connection Settings

블루투스 페어링

Bluetooth가 연결되지 않고 검색 가능한 경우 페어링할 수 있습니다. 주로 이 섹션을 참조하세요:

BLE 시리즈

문제가 있는 경우 이 지침을 사용하여 문제 해결을 수행하십시오: BLE 문제 해결

하드웨어 스위치

원래 딥 스위치 위치에는 푸시 스위치가 있습니다. 이것은 컨트롤러의 유일한 스위치입니다.

주목:

  • 이 스위치는 누르면 꺼지고, 올리면 켜집니다.
  • 이 스위치의 기능은 블루투스가 아니라 배터리 전원 공급을 켜거나 끄는 것입니다.
  • 따라서 이 스위치가 꺼져 있을 때에도 USB 케이블을 연결하면 USB가 전원이므로 Bluetooth가 계속 작동할 수 있습니다.

블루투스를 끄고 싶으시다면 블루투스 스위치 및 연결 상태를 참고하세요.

힌트

  • 이 소프트웨어 스위치는 USB만 또는 일시적으로 사용하는 사람들을 위해 **Bluetooth 기능**을 완전히 끄도록 설계되었습니다. 이 스위치가 꺼져 있는 동안 물리적 전원 스위치를 끄는 것이 좋습니다.
  • 이 기능은 에너지를 절약하기 위해 매일 Bluetooth를 끄도록 설계된 것이 아닙니다. BLE660C/BLE980C는 잠금 모드보다 이 기능을 사용하여 대기 모드에서 훨씬 더 많은 전력을 소모합니다.

배터리 충전

충전 포트와 데이터 포트는 모두 컨트롤러의 USB 포트입니다.

충전에는 PC의 USB 포트나 5V 충전기를 사용하는 것이 좋습니다.

  • 부적절한 충전(6V 이상)은 충전 IC를 파손할 수 있습니다. 고전력 충전기를 사용해도 기본 충전 전류가 약 450mA로 제한되어 충전 속도가 빨라지지 않습니다.
  • 충전에는 5V 이하의 충전기를 사용하세요. 전원 공급 장치 또는 다른 충전기가 있는 HUB의 일부 U 포트는 5V보다 높을 수 있습니다.
  • 장시간 플러그를 꽂아 사용할 경우, 배터리를 뽑아두거나 적어도 배터리 스위치를 끄는 것이 좋습니다.

충전 표시등은 전원 버튼 아래에 있는 빨간색(또는 파란색) LED입니다. 아래에서 볼 수 있습니다. 세 가지 상태가 있습니다. v2.3 버전에서는 충전 표시등이 제거되었지만 배터리 수준을 x1%로 표시하여 여전히 충전 중임을 판단할 수 있습니다.

충전 LED 상태 의미
밝기가 낮거나 깜박임 비정상(배터리가 없거나 배터리에 문제가 있음)
높은 밝기 충전 중
꺼짐 또는 매우 낮은 밝기 배터리가 완전히 충전되었습니다

win10 1809 이상에서는 배터리 백분율 표시가 지원됩니다. 정확하지 않으며 참조용일 뿐입니다(특히 충전 중에 표시되는 오류가 더 큽니다). 10%마다 수준이고 가장 높은 것은 90%입니다. 또한, 충전 중에는 백분율이 x1%로 표시되며 다음 그림과 같이 충전하지 않을 때보다 1% 더 높습니다.

완전히 충전되면 충전 표시등이 꺼지거나 밝기가 매우 낮아질 수 있습니다.

Mac은 타사 Bluetooth 장치의 배터리 서비스를 차단했습니다. 따라서 배터리 수준을 알고 싶다면 Output Battery Percetage as Text 기능(BLE660C/BLE980C의 기본 단축키는 Fn+E)을 사용할 수 있습니다. 충전 및 배터리 정보

키맵 편집 및 펌웨어 재플래시

웹사이트 https://ydkb.io를 열고 키보드 BLE660C 또는 BLE980C를 선택한 다음 [대용량 저장 장치 부트로더(U 디스크 모드)](부트로더/msd-부트로더) 페이지에 플래싱 방법이 있습니다. 키 편집기에 대한 설명은 이 문서의 다른 부분을 참조하세요.

케이블을 삽입하여 점멸 모드로 들어가려면 왼쪽 위 키(일반적으로 ESC)를 누르는 것 외에도 LED와 기능을 사용할 수 있습니다 Reset실수 로 누르는 것을 방지하기 위해 <kbd>LCtrl을 누른 상태에서 이 키를 누르면 됩니다. 이렇게 하면 플러그 Reset를 뽑았다가 다시 꽂지 않고도 바로 점멸 모드로 전환할 수 있습니다.

지표 및 전력 절약

표시기의 일반적인 기능은 LEDMAP 으로 정의할 수 있습니다 . 표시기는 키보드가 작동 중일 때만 켜지고 절전 모드는 아닙니다. 표시기를 계속 켜두는 기능으로 설정하지 않는 것이 좋습니다. 그러면 전력 소모가 증가하고 배터리 수명이 크게 줄어들 수 있습니다.

블루투스 모드에서 주의 사항

  • 블루투스 모드에서는 Num, Caps, Scroll Lock 표시등이 블루투스 모드의 OS 상태와 동기화되지 않습니다.
  • 블루투스 모드에서는 누르면 켜지거나 꺼집니다. USB 모드에서는 동기화됩니다.
  • 한 지표가 동기화되지 않은 경우 Shift + Capslock과 같은 Shift + KEY를 사용할 수 있습니다. 이런 식으로 CapsLock은 적용되지만 지표는 변경되지 않습니다.
  • 블루투스 모드에서 이 기능을 적절히 사용하면 표시등을 반대로 바꿀 수 있습니다. 예를 들어, Num Lock이 켜져 있을 때 Num Lock 표시등을 끄고 꺼져 있을 때 표시등을 켜면 전력을 절약할 수 있습니다.

LEDMAP 설정 외에도 몇 가지 특수 기능이 있습니다.

상태 또는 작업 BLE660C LED 표시 방식
플래시 모드(대기) 두 개의 표시등이 함께 깜박이거나 번갈아 깜박이며 절대 꺼지지 않습니다. 660C의 무소음 버전은 전면에 표시등이 하나뿐입니다.
플래시 모드(데이터 쓰기) 위의 내용을 토대로 Caps 표시등이 빠르게 깜빡입니다.
시작시 블루투스가 연결되지 않음 상태 표시 두 개의 표시등이 깜박이며 연결되지 않은 경우 약 15초 후에 깜박임이 멈춥니다.
시작 시 블루투스가 연결됨. 상태 표시 두 표시등이 동시에 느리게 깜박입니다. 켜지는 시간은 꺼지는 시간보다 훨씬 깁니다.
LShiftRShift+를 누르세요s 위와 같이 Bluetooth 연결 상태를 표시합니다.
수동으로 잠금 모드로 들어가기 두 개의 표시등이 동시에 켜진 후 Scroll 표시등, Caps 표시등 순으로 꺼집니다.
2단계 에너지 절약 또는 잠금 모드에서 깨어나기 두 개의 표시등이 동시에 켜진 후 Bluetooth 연결 상태를 나타내기 시작합니다.
배터리 부족 알림 키보드를 사용할 때는 두 개의 표시등이 동시에 깜박입니다. 에너지를 절약할 때는 깜박이지 않습니다. 2~3일은 여전히 ​​사용할 수 있습니다.
배터리가 매우 부족하다는 메시지 키보드를 사용할 때 두 개의 표시등이 동시에 빠르게 깜박입니다. 에너지를 절약할 때는 깜박이지 않습니다. 가능한 한 빨리 충전하는 것이 좋습니다.

BLE980C의 경우, 설명의 편의를 위해 전면의 3개 표시등을 왼쪽에서 오른쪽으로 LED1 LED2 LED3으로 표시하였습니다.

상태 또는 작업 BLE980C LED 표시 방식
점멸 모드(유휴) 3개의 표시등이 함께 깜박이거나 교대로 깜박이며 항상 켜져 있습니다.
플래시 모드(데이터 쓰기) 위 내용을 기준으로 LED3가 빠르게 깜박입니다.
시작 시 Bluetooth 연결 해제 상태 표시 LED3가 깜박이며, 연결되지 않은 경우 약 15초 후에 깜박임이 멈춥니다.
시작 시 Bluetooth 연결 상태 표시기 LED2와 LED3이 동시에 느리게 깜박입니다. 켜지는 시간은 꺼지는 시간보다 훨씬 깁니다.
LShiftRShift+를 누르세요s 위와 같이 Bluetooth 연결 상태를 표시합니다.
수동으로 잠금 모드로 들어가기 3개의 조명이 동시에 켜지고 LED3 LED2 LED1 순으로 꺼집니다.
2단계 에너지 절약 또는 잠금 모드에서 깨우기 3개의 표시등이 동시에 켜지고 블루투스 연결 상태를 나타내기 시작합니다.
배터리 부족 알림 키보드를 사용할 때는 세 개의 불빛이 동시에 깜빡인다. 에너지를 절약할 때는 깜빡이지 않는다. 2~3일은 쓸 수 있다.
배터리 매우 부족 알림 키보드를 사용할 때 세 개의 표시등이 동시에 빠르게 깜박입니다. 에너지를 절약할 때는 깜박이지 않습니다. 가능한 한 빨리 충전하는 것이 좋습니다.

힌트

  • 배터리 부족 프롬프트는 가장 높은 우선순위를 갖습니다. 배터리가 부족하면 항상 다른 것을 표시하고 덮습니다.
  • FC660C의 무소음 버전에는 스크롤 표시기가 없으므로 Caps 표시기를 보고 판단하세요.

그 다음은 절전 모드에 대해서입니다.

  1. 키보드가 아무 키도 누르지 않고 3초 동안 유휴 상태가 되면 일반 절전 모드로 들어갑니다. 이 모드에서는 30ms마다 매트릭스가 스캔됩니다. 아무 키나 누르면 일반 절전 모드에서 빠져나갑니다.
  2. 키보드의 블루투스가 90초 동안 연결되지 않거나 2.5시간 이상 사용하지 않으면 블루투스가 꺼지고 심층 절전 모드로 전환됩니다. 아무 키나 3~5초 동안 길게 눌러 깨우세요.
  3. 잠금 모드를 사용하면 키보드가 바로 심층 절전 모드로 전환됩니다. 2와의 차이점은 이 방법으로 F와 J만 3~5초 동안 함께 눌러서 깨울 수 있다는 것입니다.

심층 절전 모드의 전력 소모는 매우 낮습니다. 일상적으로 사용하는 경우 전원 스위치를 끌 필요가 없으며 키보드를 그대로 두고 절전 모드로 전환하면 됩니다. 가방에 넣어 가지고 다니려면 잠금 모드로 전환하여 예기치 않게 깨어나는 것을 방지하는 것이 좋습니다.

다음 GIF는 배터리가 부족할 때의 효과를 보여줍니다.

예외 처리

키 누름 오류 트리거 또는 무작위 트리거가 있는 경우. 타오바오 링크에서 제공하는 설치 지침에 따라 배터리가 hhkb 상단 키보드 회로 보드에서 절연되어 있는지 확인하십시오.

작업 중에 문제가 발생하면 가장 빠른 방법은 USB 케이블을 다시 연결하거나 키보드 전원 스위치를 껐다가 다시 켜서 제대로 작동하는지 확인하는 것입니다.

그리고 BLE 문제 해결 을 참조하세요 . 다른 버그가 있으면 이메일로 알려주세요.

하드웨어 버전의 차이점

나중에 다른 사람들이 볼 수 있도록 판매된 하드웨어 버전 간의 차이점을 기록해 두세요.

v2.3:메인 컨트롤 atmega32u4의 패키지를 변경했습니다. 일부 커패시터와 저항의 패키지를 변경했습니다(0805 -> 0603). 컨트롤러의 충전 표시등을 제거했습니다.

v2.2:v2.1 기반으로, LWinLAlt+를 사용하여 RestBluetooth를 재설정할 수 있습니다.

v2.1:v2.0을 기반으로, 블루투스를 재설정하기 위한 단락 회로를 용이하게 하기 위해 두 개의 구멍이 추가되었습니다. 그리고 외부 크리스털 발진기 대신 MCU의 내장 발진기를 사용합니다.

nslookup 명령어 사용법 및 예제 정리

ex 1>

C:>nslookup
Default Server: kns.kornet.net
Address: 168.126.63.1

> woobi.co.kr
Server: kns.kornet.net <- 현재 컴퓨터의 DNS서버
Address: 168.126.63.1 <- 현재 컴퓨터의 DNS서버 IP

Name: woobi.co.kr <- 해당 도메인
Address: 222.234.3.97 <- 해당 도메인 IP

ex 2>

C:>nslookup
Default Server: kns.kornet.net
Address: 168.126.63.1

> set type=all <- 해당 대상의 모든 정보를 출력하도록 설정
> woobi.co.kr
Server: kns.kornet.net
Address: 168.126.63.1

Non-authoritative answer: <- “믿을 수 없는 답변” 하지만, 한번더 실행하면 나타나지 않음. 캐쉬가 안되면 나타나는 메세지
woobi.co.kr nameserver = ns1.woobi.co.kr <- 해당 대상의 네임서버1
woobi.co.kr nameserver = ns2.woobi.co.kr <- 해당 대상의 네임서버2

woobi.co.kr nameserver = ns1.woobi.co.kr <- 해당 대상의 네임서버3
woobi.co.kr nameserver = ns2.woobi.co.kr <- 해당 대상의 네임서버4
ns1.woobi.co.kr internet address = 222.234.3.105 <- 해당 대상의 네임서버 1 IP
ns2.woobi.co.kr internet address = 222.234.3.106 <- 해당 대상의 네임서버 2 IP

> set debug //TTL 을 알고 싶을 경우

> woobi.co.kr
서버: cns3.bora.net
Address: 203.248.252.2

————
Got answer:
HEADER:
opcode = QUERY, id = 2, rcode = NOERROR
header flags: response, want recursion, recursion avail.
questions = 1, answers = 1, authority records = 0, additional = 0

QUESTIONS:
woobi.co.kr, type = A, class = IN

ANSWERS:
-> woobi.co.kr
internet address = 182.162.94.60
ttl = 600 (10 mins)

————

권한 없는 응답:

————

Got answer:
HEADER:
opcode = QUERY, id = 3, rcode = NOERROR
header flags: response, want recursion, recursion avail.
questions = 1, answers = 0, authority records = 1, additional = 0

QUESTIONS:
woobi.co.kr, type = AAAA, class = IN
AUTHORITY RECORDS:
-> woobi.co.kr
ttl = 600 (10 mins)
primary name server = ns1.nsmycgi.com
responsible mail addr = hosting.mycgi.co.kr
serial = 2018041201
refresh = 10800 (3 hours)
retry = 3600 (1 hour)
expire = 604800 (7 days)
default TTL = 3600 (1 hour)

————
이름: woobi.co.kr
Address: 182.162.94.60

 

MySQL Workbench의 VISUAL EXPLAIN으로 인덱스 동작 확인하기

인덱스의 기초

인덱스의 구조

인덱스는 MySQL 5.6Reference ManualThe Physical Structure of an InnoDB Index에 나와 있듯이, B-tree 구조로 되어 있습니다. 이번 포스팅에서는 B-tree 구조에 대해서 자세히 다루지 않고, 아주 간략한 이미지만 아래에 첨부했습니다.

리프(leaf) 노드는 인덱스로 지정한 컬럼의 오름차순으로 정렬되어 있으며, 실제 행이 어디에 저장되어 있는지에 대한 데이터를 가지고 있습니다. WHERE col1 = 3과 같은 등호 연산이나 WHERE col1 < 2와 같은 범위 검색을 빠른 속도로 처리할 수 있습니다.

복합 인덱스는 아래 그림처럼 지정한 컬럼 순(여기에서는 col1 col2 순)으로 정렬됩니다. 이렇게 만든 복합인덱스는 WHERE col1 <= 2 조건에는 사용할 수 있지만, WHERE col2 > 1 조건에는 사용할 수 없습니다. col2는 col1 내에서는 정렬되어 있지만, 전체적으로 보았을 때는 정렬되지 않은 상태(그림에서 col2는 왼쪽부터 1 2 3 1 2 1)이기 때문입니다. 따라서, 이 인덱스로는 col2에서 1보다 큰 값이 어디에 있는지 알 수가 없습니다. 마찬가지로, WHERE col1 <= 2 AND col2 >= 2의 경우에도 col1 조건은 트리를 순회하면 탐색할 수 있지만, col2는 트리를 사용해서 찾을 수 없습니다. col1이 정해지면 col2는 정렬된 상태이니, WHERE col1 = 1 AND col2 >= 2에는 사용할 수 있습니다. 이 부분에 대해서는 MySQL with InnoDB 인덱스의 기초 지식과 자주 하는 실수(일본어)도 같이 읽어 보시기 바랍니다.

인덱스 사용법

MySQL 5.6 Reference Manual / 8.3.1 How MySQL Uses Indexes를 꼼꼼히 읽어 보면 주로 사용되는 경우와 추가로 사용 가능한 경우를 알 수 있습니다.

  • WHERE와 ORDER BY, GROUP BY를 신속하게 수행하기 위해 사용됨
  • 원칙적으로 테이블 하나당 1개의 인덱스가 사용됨
  • 테이블의 행 개수는 많고, 검색 결과의 행 개수는 적을 때 사용됨
  • 쿼리가 테이블에 적재된 대부분의 행에 접근할 경우에는, 디스크 탐색이 최소화되는 Full Table Scan이 인덱스 사용하는 것보다 속도가 더 빠름
    • 따라서, 행 개수가 적은 테이블에서는 Full Table Scan을 사용하는게 좋음
    • MySQL5.6 문서에 따르면 테이블 사이즈, 행 개수, I/O 블록 사이즈 등에 따라 인덱스 사용 여부가 결정됨
  • 복합 인덱스는 단일 컬럼 인덱스 대용으로도 사용 가능함
  • (col1, col2, col3)의 3가지 컬럼 인덱스가 있다면, (col1), (col1, col2), (col1, col2, col3)에 대해 인덱스를 사용할 수 있음
  • 데이터 행 참조없이 값을 취득할 수 있는 인덱스(커버링(covering) 인덱스) 사용 시 처리 속도가 향상됨
  • 쿼리에 필요한 모든 컬럼을 인덱스가 포함하고 있는 경우가 해당됨
  • 예시: column1과 column2가 인덱스에 포함되어 있는 상황일 경우
    • 아래 쿼리는 인덱스에서 모든 값을 취득할 수 있기 때문에 데이터 행 확인이 불필요함
        1. SELECT column1 FROM tbl_name WHERE column2 = 1;
    • 아래 쿼리는 데이터 행 확인이 필요함
        1. SELECT * FROM tbl_name WHERE column2 = 1;
  • 인덱스가 설정된 컬럼에 대해 MAX()나 MIN() 값을 검색하기 위해 사용됨
  • 여러 인덱스 중에서 선택할 땐, 행 개수가 가장 적은 것을 검색하는 인덱스 사용함
  • 다른 테이블과 JOIN하여 사용할 땐, 컬럼 타입과 사이즈가 동일하면 인덱스를 효율적으로 사용할 수 있음

MySQL Workbench와 VISUAL EXPLAIN 소개

MySQL Workbench는 MySQL의 GUI 클라이언트입니다. GUI에서 인덱스를 추가 및 삭제하거나 ERD(Entity Relationship Diagram)를 그리는 것도 가능하기 때문에, 시행착오를 겪으며 인덱스를 설정할 때 꽤 도움이 됩니다. 그리고 무엇보다 VISUAL EXPLAIN이 가능하다는 사실! 여기에서 ‘Download Now’ 버튼을 클릭하면 다운로드할 수 있습니다.

VISUAL EXPLAIN 실행 방법

VISUAL EXPLAIN을 실행하려면 쿼리 입력란에 SQL문을 작성하고 왼쪽 상단에 위치한 돋보기 마크나 메뉴의 Query > Explain Current Statement, 또는 단축 키 Cmd + Option + x(macOS의 경우)를 누르면 됩니다.

EXPLAIN 결과가 보고 싶을 때는 위 그림에서 중앙 왼쪽 셀렉트 박스를 변경하면 됩니다. 화면 중앙 오른쪽에 보이는 View Source 버튼을 누르면, VISUAL EXPLAIN의 원래 정보를 JSON 형식으로 확인할 수 있습니다. 사용해보면 참 편리한 기능입니다.

VISUAL EXPLAIN의 색상과 테이블 도형의 텍스트에 대한 간단한 설명

컬러풀한 사각형 오브젝트는 테이블에 어떻게 액세스하는지를 나타냅니다. 파란색에 가까울수록 비용이 낮고, 빨간색에 가까울 수록 비용이 높은 액세스입니다. 아래쪽 빨간색 두 가지, index와 ALL은 인덱스를 활용한 튜닝 대상으로 자주 거론됩니다.

색상 오브젝트 내 텍스트 EXPLAIN TYPE
Single row: constant const
Unique Key Lookup eq_ref
Non-Unique Key Lookup ref
Fulltext Index Search fulltext
Index Range Scan range
Full Index Scan index
Full Table Scan ALL

(위 표에서 Lookup은 where col = 1과 같은 동등 비교입니다.)

VISUAL EXPLAIN으로 인덱스 동작 확인하기

이제 본론으로 들어가겠습니다. 파란색에서 빨간색으로 갈수록 비용이 커진다는 점만 알고 있으면, 보는 법을 자세하게 기억해 두지 않아도 사용할 수 있습니다.

이번 테스트에 사용할 두 테이블은 어느 사용자가 컨버전했는지 저장해 두는 cv 테이블과 이와 매칭되는 광고의 ad 테이블입니다. 테스트를 위해 만든 데이터의 대략적인 특성은 다음과 같습니다.

  • 인덱스가 간단하니, 이 시점에선 PRIMARY KEY만 사용
  • 각 테이블에 적재시킨 데이터의 양은 cv가 약 100만 건, ad는 약 4000건
  • cv의 status와 ad의 type은 각각 균등하게 10종류씩 설정
  • 시간을 저장하는 컬럼은 UNIX TIME, 최근 한 달간의 데이터를 베이스로 저장

ERD는 일부러 MySQL Workbench에서 출력했습니다. Workbench는 외부 키를 지정해 두면 자동으로 relation이 도식화되는데요(참고). 이번에는 설명을 간략화하기 위해 PRIMARY KEY만 지정했기 때문에 아래 그림과 같이 표시되었습니다.

설정된 인덱스 없음

먼저, 설정된 인덱스가 없는 상태를 보시겠습니다.

  1. SELECT * FROM cv WHERE status = 2 ORDER BY created_at LIMIT 100;

이 쿼리에 대해 VISUAL EXPLAIN을 실행하면 아래 이미지가 나옵니다.

아래는 위 VISUAL EXPLAIN을 EXPLAIN으로 보았을 때 나타나는 표입니다.

화살표 방향대로 읽으면, cv 테이블 전체를 스캔해서 얻은 100만 개의 행을 ORDER BY로 정렬해서 결과를 얻었다는 것을 알 수 있습니다. 새빨간색이네요. 100만 개나 되는 행을 스캔해서 WHERE 조건에 부합하는 행을 찾고, 전체를 정렬해서 100건을 반환하기 때문에 처리 부하가 큽니다. 인덱스가 필요합니다.

WHERE 조건에 인덱스 설정

위 SQL이 보다 빠르게 처리될 수 있도록 인덱스를 추가하겠습니다.

먼저 WHERE 조건인 status에 인덱스를 지정합니다. 인덱스 덕분에 status = 2인 레코드만 가져오는 것이 쉬워집니다.

  1. ALTER TABLE cv ADD INDEX idx_status (status);

아래는 위 VISUAL EXPLAIN을 EXPLAIN으로 보았을 때 나타나는 표입니다.

cv 테이블이 초록색으로 변했습니다. 약 21만 건을 가져와서 정렬하기 때문에 앞서 나왔던 100만 건의 경우보다 처리 속도가 상당히 빨라질 듯 합니다. 여기서 21만 건이라는 수치는 MySQL의 예측치이고, 실제로 status = 2인 레코드는 10만 건 정도입니다. 적재된 데이터의 status 컬럼값이 편중되어 있어서 대부분이 status = 2인 상황이라면, 인덱스를 사용하지 않아야 속도가 더 빠르다고 판단되어 Full Table Scan이 수행될 것 같습니다(인덱스 사용법 섹션 참고). 그런 경우라면 ORDER BY에 인덱스를 설정하도록 합시다.

보충 설명: WHERE 조건에 인덱스 설정

적재된 데이터의 status 컬럼값이 편중되어 있어서 대부분이 status = 2인 상황이라면, 인덱스를 사용하지 않아야 속도가 더 빠르다고 판단되어 Full Table Scan이 수행될 것 같습니다.

위 내용을 확인하기 위해 테스트를 했습니다. 테스트는 ANALYZE TABLE cv; 를 실행한 후에 SELECT * FROM cv WHERE status = 2;를 실행하는 방식으로 진행했습니다. 그런데 cv 테이블의 레코드 수가 100만 건일 때는 대부분이 아니라 모든 레코드를 status = 2로 맞춰놓아도 Full Table Scan이 수행되지 않고 status에 지정된 인덱스가 사용되었습니다. 반면에 레코드 수를 약 1만 건으로 줄이니 동일한 쿼리에서 Full Table Scan이 수행되었습니다. 인덱스 사용법 섹션에서 언급했던 것처럼 행 개수에 따라서도 달라지는 것 같습니다.

어쨌든, 여기에서 나오는 status = 2처럼 컬럼 값이 한쪽으로 매우 편중되어 있어서 대부분의 행이 조건에 해당될 때는 인덱스를 달지 않는 것이 좋겠습니다.

ORDER BY 조건에 인덱스 설정

(앞에서 설정한 인덱스는 DROP)

  1. ALTER TABLE cv ADD INDEX idx_created_at (created_at);

아래는 위 VISUAL EXPLAIN을 EXPLAIN으로 보았을 때 나타나는 표입니다.

이번에는 ORDER가 연두색이 되었습니다. 테이블은 Full Index Scan입니다. 처리 과정을 설명드리겠습니다.

created_at 인덱스에서 순서대로 레코드를 추출하여 status = 2인지 여부를 확인합니다. 그리고 status = 2인 레코드가 LIMIT 수만큼 발견되었을 때 탐색이 종료될 수 있습니다(created_at에 대해 정렬이 완료되었기 때문). 그래서 예상 취득 레코드 개수도 100개입니다. status = 2인 레코드가 빨리 발견되면 좋겠지만, 마지막까지 발견되지 않으면 인덱스를 전부 읽어야 합니다. status = 2가 드물게 존재하는 경우엔 이런 상황이 벌어지게 되니, status에 인덱스를 설정해서 WHERE로 취득되는 레코드 수를 줄이는 것이 좋을 듯 합니다(개수가 적으면 정렬에 소요되는 비용도 적음). 이 부분은 대충 하는 MySQL 퍼포먼스 튜닝(일본어)에 알기 쉽게 정리되어 있습니다. 참고하시면 좋을 것 같습니다.

WHERE 조건과 ORDER BY 조건 중 어느 쪽에 인덱스를 지정하는 것이 좋을지는 status가 편중되어 있는 정도를 보고 판단하는 것이 좋겠습니다. 아니면 idx_status와 idx_created_at 양쪽 모두에 달아 보고 어느 쪽에서 사용되는지를 확인하는 것도 괜찮습니다. 이번 경우에는 양쪽에 지정하니 idx_created_at가 선택되었습니다. 단, ORDER BY 조건에 인덱스를 지정할 경우, LIMIT 수가 커지면 WHERE 조건에 맞는 레코드를 찾기 위해 많은 행을 읽어야 하는 상황이 벌어집니다. 반면에, WHERE 조건에 지정한 인덱스를 사용하는 경우에는 LIMIT 수가 탐색에 드는 비용에 영향을 미치지 않기 때문에 LIMIT 수가 클 때는 idx_status가 더 좋습니다. 이번 데이터를 쭉 확인해 보니, 대략 LIMIT 2100보다 커지면 idx_status가 사용되었습니다.

GROUP BY 조건에 인덱스 설정

(앞에서 설정한 인덱스는 DROP)

  1. SELECT ad_id, COUNT(*) FROM cv WHERE status = 2 GROUP BY ad_id;

ad_id별로 cv의 수를 확인하는 쿼리입니다. 인덱스가 없는 경우에는 아래 그림처럼 빨간색이 됩니다.

아래는 위 VISUAL EXPLAIN을 EXPLAIN으로 보았을 때 나타나는 표입니다.

GROUP BY 조건인 ad_id에 인덱스를 지정하면 아래 그림처럼 GROUP BY가 연두색이 됩니다.

아래는 위 VISUAL EXPLAIN을 EXPLAIN으로 보았을 때 나타나는 표입니다.

위 그림과 아래 그림을 비교하면 GROUP 밑에 있었던 tmp table, filesort가 사라졌습니다.

GROUP BY 때 왜 인덱스를 사용하는지 설명드리겠습니다. 인덱스를 지정하지 않으면 테이블 전체를 스캔한 후, 각 그룹의 모든 행이 연속적인 상태인 임시 테이블(tmp table)을 생성하여(이때 정렬(filesort)이 필요함), 이 테이블에서 그룹을 찾아내는 처리가 진행됩니다(MySQL 5.6 Reference Manual / GROUP BY Optimization). 위 그림을 보시면 인덱스가 임시 테이블의 역할을 해주어서 이와 같은 처리가 불필요해졌다는 점을 알 수 있습니다.

다만, GROUP BY 처리는 빨라지는 반면에 테이블 접근은 Full Index Scan이어서 처리 부하가 커지니, WHERE 조건에 인덱스를 지정하는 방법을 검토하는 게 좋겠습니다.

복합 인덱스 설정

(앞에서 설정한 인덱스는 DROP)

ALTER TABLE cv ADD INDEX idx_status_created_at (status, created_at);

인덱스를 설정하여 다시 아래의 SQL을 VISUAL EXPLAIN합니다.

  1. SELECT * FROM cv WHERE status = 2 ORDER BY created_at LIMIT 100;

아래는 위 VISUAL EXPLAIN을 EXPLAIN으로 보았을 때 나타나는 표입니다.

테이블 접근과 ORDER 모두 초록색으로 되어 있는 바람직한 상태입니다(표 형식의 EXPLAIN과 비교해 봤을 때, VISUAL EXPLAIN은 어떤 부분을 개선했는지 한눈에 볼 수 있다는 점이 좋습니다).

연습: 더 복잡한 예

(앞에서 설정한 인덱스는 DROP)

컨버전 수를 일주일 전부터 카운트하여, 카운트 수가 많은 순서대로 ad 테이블의 레코드를 정렬하는 쿼리를 살펴 보겠습니다. 추출하려는 데이터의 상세 조건은 cv의 status는 1, ad의 type은 2입니다.

  1. SELECT
  2. ad.id,
  3. COUNT(DISTINCT cv.user_id) as cv_count
  4. FROM
  5. ad
  6. INNER JOIN cv
  7. ON cv.ad_id = ad.id
  8. AND cv.status = 1
  9. AND cv.created_at >= UNIX_TIMESTAMP(CURDATE() – INTERVAL 7 DAY)
  10. WHERE
  11. ad.type = 2
  12. AND ad.end_at >= UNIX_TIMESTAMP(CURDATE() – INTERVAL 7 DAY)
  13. GROUP BY
  14. ad.id
  15. ORDER BY
  16. cv_count DESC
  17. LIMIT 100
  18. ;

위 쿼리를 VISUAL EXPLAIN하니 아래와 같은 이미지가 나왔습니다.

아래는 위 VISUAL EXPLAIN을 EXPLAIN으로 보았을 때 나타나는 표입니다.

조금 복잡해졌는데요. VISUAL EXPLAIN 결과는 왼쪽 아래에서 오른쪽 위 방향으로 처리가 진행되도록 그림이 그려져 있습니다. 따라서, 왼쪽 아래부터 보시면 됩니다. 이 그림을 보고 알 수 있는 점은 다음과 같습니다.

  • JOIN이 nested loop로 처리됨
  • nested loop에 대해서는 아래 참고
  • driving table 행 하나당 inner table 1행씩 스캔해서 결합 조건에 부합하는 것을 추출함
  • cv 테이블에서 읽은 행과 대응되는 ad 테이블의 행을 PRIMARY KEY를 사용해서 읽음
  • cv 테이블이 바깥쪽 루프(driving table, outer table)
  • ad 테이블이 안쪽 루프(inner table)
  • buffer_result라는 임시 테이블이 생성됨
  • 임시 테이블을 사용해서 GROUP BY 처리
  • 마지막으로 ORDER BY 처리

(아래 내용은 인덱스를 어떻게 지정할 지 고민하면서 시행착오를 겪었던 것을 적은 것인데요. 제 경험을 적은 것일 뿐이고 꼭 이렇게 해야 한다는 의미는 아닙니다. 하나의 예로 봐 주시면 좋겠습니다.)

위 그림을 보면, 우선 cv 테이블의 Full Table Scan을 중단시키고 싶습니다. 그리고 ad 테이블도 결과가 초록색이고 PRIMARY KEY를 사용하고 있긴 하지만, type이나 end_at으로 ad 테이블 자체에 조건을 걸때는 인덱스로 사용할 수 없어서 속도가 느려질 수밖에 없습니다. 따라서, ad쪽에도 인덱스를 생성하여 결과를 살펴보겠습니다.

아래와 같은 인덱스를 설정하고 과연 어떤 것이 사용되는지 확인해 보았습니다.

  • cv 테이블
  • idx_status_created_at: (status, created_at)
    • cv 테이블의 작업 범위 결정 조건으로 사용
  • idx_ad_id_status_created_at: (ad_id, status, created_at)
    • cv에 관한 조건 순으로 지정
  • ad 테이블
  • idx_type_end_at: (type, end_at)
    • ad 테이블의 작업 범위 결정 조건으로 사용

이 상태로 VISUAL EXPLAIN을 실행하면 아래와 같이 나옵니다.

아래는 위 VISUAL EXPLAIN을 EXPLAIN으로 보았을 때 나타나는 표입니다.

ad와 cv의 위치가 바뀌는 등 여러 군데가 변경되면서 개선되었습니다. 이 그림을 보고 알 수 있는 점은 다음과 같습니다.

  • ad 테이블이 driving table이 되고 type이나 end_at의 조건을 지정하기 위해 idx_type_end_at 인덱스가 사용됨
  • cv 테이블의 idx_ad_id_status_created_at을 사용하여 ad 테이블에 대응되는 행을 읽음
  • cv에 관한 status나 created_at의 조건이 이 인덱스로 지정되었는지는 알 수 없음
  • 임시 테이블 buffer_result가 삭제되고 GROUP BY의 tmp table도 삭제됨(GROUP BY는 색상도 오렌지로 바뀜)

임시 테이블인 buffer_result가 삭제된 이유는 GROUP BY 조건이 driving table(이중 루프의 바깥쪽)의 ad.id라서, 미리 정렬한 다음 루프를 실행하면 GROUP BY 조건에 인덱스 절에서 설명한 임시 테이블이 불필요해지기 때문인 것으로 생각됩니다(참고: 실제 사례로 배우는 JOIN(NLJ)이 지연되는 이유와 대처법 / 속도 향상이 어려운 JOIN SQL(일본어)).
Inner table에서 GROUP BY를 하려면 임시 테이블이 필수로 있어야 합니다. 실제로 인덱스를 설정하기 전 상태(cv가 driving table인 상태)에서 GROUP BY를 inner table의 ad.id가 아닌 cv.ad_id로 하면 임시 테이블이 생성되지 않습니다.

복합 인덱스를 사용했을 때, 복합 인덱스의 일부만 사용된다면 단일 인덱스를 지정하는 것이 더 좋습니다(예를 들어, cv 테이블에 설정한 인덱스가 ad 테이블과 대응하는 용도로만 사용되는 경우, 즉 ad_id만 사용되는 경우라면 ad_id에 인덱스를 달면 됨). 따라서, JSON 형식으로 바꿔 used_key_parts를 확인합니다. VISUAL EXPLAIN 실행 방법 섹션의 개요도에 나와 있는 대로 View Source를 클릭해서 확인할 수 있습니다.

아래는 View Source로 확인한 JSON입니다. ad 테이블의 인덱스는 전부 다 사용되고 있으며, cv 테이블의 인덱스의 경우 created_at은 사용되지 않고 ad_id와 status가 사용된다는 점을 알 수 있습니다.
즉, cv의 인덱스는 ad_id와 status만 있으면 되기 때문에, 나중에 created_at을 포함하지 않는 인덱스를 만들었습니다.

  1. {
  2. “nested_loop”: [
  3. {
  4. “table”: {
  5. “table_name”: “ad”,
  6. “key”: “idx_type_end_at”,
  7. “used_key_parts”: [
  8. “type”,
  9. “end_at”
  10. ],
  11. },
  12. {
  13. “table”: {
  14. “table_name”: “cv”,
  15. “key”: “idx_ad_id_status_created_at”,
  16. “used_key_parts”: [
  17. “ad_id”,
  18. “status”
  19. ],
  20. }
  21. }
  22. ]
  23. }

cv 테이블의 인덱스에서 created_at이 사용되지 않는 이유는, 이번 블로그 포스팅용으로 만든 데이터의 대부분이 created_at 조건을 충족하고 있어서 MySQL이 인덱스 순회보다는 직접 데이터를 보고 판정하는 것이 좋겠다고 판단했기 때문인 것 같습니다.

MySQL 5.6 Reference Manual / 8.3.1 How MySQL Uses Indexes

쿼리로 대부분의 행에 접근해야 하는 경우에는 순차적으로 읽어들이는 것이 인덱스를 이용하는 것보다 빠릅니다.

그 외에도 여러 인덱스를 설정해 봤는데요. 위의 복합 인덱스 조합(ad 테이블에 type과 end_at, cv 테이블에 ad_id와 status)이 가장 속도가 빨랐습니다.
인덱스를 지정한 후 SQL의 duration은 약 0.007sec가 되었으며, 인덱스 설정 전과 비교하면 약 40분의 1로 단축되었습니다.

참고로 같은 결과를 얻기 위해 서브 쿼리를 사용한 SQL도 테스트해 봤는데요. VISUAL EXPLAIN으로 보면 그림이 복잡하고 실행 시간도 오래 걸렸습니다.

마치며

MySQL Workbench의 VISUAL EXPLAIN을 사용해서 인덱스의 동작을 확인해 보았습니다.

VISUAL EXPLAIN은 직관적으로 이해하기 쉬워서 인덱스를 어떻게 지정해야 할지 고민될 때 사용하면 편리한 것 같습니다. 또한, 인덱스 뿐 아니라 복잡한 쿼리를 어떻게 작성해야 할지 고민될 때도, 쿼리를 작성한 뒤 VISUAL EXPLAIN 결과를 확인하여 임시 테이블이 지나치게 많이 생성되지는 않는지 등을 체크하는 용도로 활용할 수 있을 것 같습니다.

tvHeadend + Synology + KT iptv 성공기

 

tvheadend 사용 목적

외부에서 iptv를 볼 수 없을까, 시간 맞추어 보지 못하는 tv를 개인적 용도로 녹화해 놓고 볼 수 없을까 하는 의문점에서 출발했던 도전기이다. 고로 tvheadend를 사용하면 외부에서 iptv를 볼 수 있고, 시간에 맞추어 녹화를 해서 볼 수 있다.

사용했던 장비 및 환경

  • iptv 회선 : KT
  • NAS :  Synology 215j (DSM 6.0.2-8451 Update 2)
  • HTS Tvheadend 4.1.2309
  • Python 2.7.12 (시놀로지 기본설치 버전)

인터넷 선 연결 재배치

  1. 벽에서 나온 인터넷 선을 공유기 WAN 에 연결한다.
  2. 공유기 1번 포트와 KT iptv 셋톱박스의 WAN 부분과 연결한다.
  3. 공유기 2번 포트와 NAS를 연결한다.
  4. 공유기 3번 포트와 PC를 연결한다.

아래는 본인이 직접 연결한 구성도 이다.

tvheadend_000

공유기 설정 변경 및 연결 확인

  1. 공유기의 관리 화면으로 들어가서 IPTV 설정하는 부분에 1번 포트를 선택한다.
  2. IGMP를 사용함으로 변경한다.
  3. 무선 2.4GHz/5GHz 의 IGMP도 사용함으로 변경한다.
  4. KT 셋톱박스를 재부팅한다.
  5. KT iptv가 정상적으로 보이는지 확인한다.
  6. VOD가 정상적으로 보이는 확인한다.
  7. PC에서 인터넷이 정상적으로 사용됨을 확인한다.

tvheadend_016

tvheadend_017

Tvheadend 설치

NAS로 접속해서 패키지 센터를 실행하여 아려와 같이 패키지 소스를 추가한다.

tvheadend_001

커뮤니티 카테고리를 선택하면 아래와 같이 Tvheadend-test 패키지가 보인다. 설치버튼을 클릭하여 설치한다.

tvheadend_002

브라우져로 가서 http://nas_ip:9981 으로 접속해서 정상적으로 화면이 보이는지 확인한다.

 

공유기 포트포워딩

외부에서 접속할 수 있도록 공유기의 설정에서 9981 포트와 9982 포트를 오픈해 준다. http://ddns:9981 로 접속해서 정상적으로 접속되는지 확인한다.

tvheadend_019

녹화폴더 지정

녹화를 하려면 아래와 같이 녹화 경로를 지정한다. 물론 사전에 녹화폴더는 만들어져 있어야 하며, 권한 또한 확인해 봐야한다.

tvheadend_020

tvheadend_018

 

KT iptv IP 추출

다음 url 에서 아래 파일을 다운로드 받아 windows에서 압축을 푼다

http://ohhara.sarang.net/omvp/bin/

tvheadend_005

압축파일에 포함된 WinPcap_4_1_3.exe 파일을 설치한다.

tvheadend_006

cmd 를 관리자 권한으로 실행 후에 압축을 푼 폴더로 이동하여 setup.bat 파일을 우선 실행한다.

omvs -l 로 이더넷 번호를 확인한다. (보통은 일반적으로 0번, 아래는 노트북에서 했을 때 보인 형태 이다)

kt의 대역대를 확인하여 아래와 같이 실행하면 omvs_out 하위 폴더에 추출된 ip의 그림파일이 보일 것이다. 이미지를 확인하면 어떤 채널인지 육안으로 확인이 가능하다.

Network 등록

tvheadend 로 접속해서 아래와 같이 네트워크를 추가해 준다

tvheadend_003

tvheadend_004

EPG 등록

xml 형태의 채널을 등록하기 위해서는 아래와 같이 설정해 준다.

tvheadend_007

Externrnal: XMLTV를 제외하고 모두 비활성화 시켜준다. Path부분의 경로는 나중에 사용함으로 메모해 준다. 잘려서 보이지 않으나 기본값은 아래와 같을 것이다.

시놀로지는 이미 python 이 설치되어 있으므로 생성한 두개의 파일을 root 권한을 획득하여 python  모듈만 추가하도록한다.

적당한 위치에 아래와 같은 2개의 파일을 같은 위치에 생성한다.

epg2xml.py

Channel.json

 

이제 생성한 두개을 아래와 같이 실행한다.

이제 다시 tvheadend를 웹으로 접속해서 아래와 같이 EPG가 추가되었는지 확인한다.

tvheadend_008

채널추가

이제 아래와 같이 채널을 추가한다.

tvheadend_009

tvheadend_010

이제 모든 채널을 추가시킨 후에 아래와 같이 보게 되면 모든 모든 설정을 완료한 것이다.

tvheadend_011

편성표 자동 업데이트

EPG 편성표를 자동으로 업데이트 하려면 시놀로지에서 작업스케줄을 아래와 같이 생성한다.

tvheadend_012

tvheadend_013

tvheadend_014

사용자 정의 스크립트

tvheadend_015

활용방법

이제 tvheadend 를 지원하는 각종 프로그램을 찾아서 설정하면 활용하는 방법은 다음과 같다.

  1. kodi의 tvheadend addon
  2. android or ios 의 tvheadend client
  3. windows 10의  TVHPlayer

[출처 : http://sky-world.org/wp/2016/11/23/tvheadend-synology-215j-kt-iptv/]

XPEnology exFAT 파티션 디스크 설정

1. Enabled root user via ssh:
sudo su –
synouser –setpw root your_new_root_password

2. Login as root user via ssh:
ssh root@nas_ip_address

3. Download and install the exfat-fuse package as the following code:

It seems DSM 5.0 is 32bit linux, and DSM 6.0 is 64bit version, please download different packages.

DSM 6.0
wget -P /tmp/ http://mirrors.kernel.org/ubuntu/pool/universe/f/fuse-exfat/exfat-fuse_1.2.3-1_amd64.deb
dpkg -x /tmp/exfat-fuse_1.2.3-1_amd64.deb /tmp/exfat-fuse/
cp /tmp/exfat-fuse/sbin/mount.exfat-fuse /usr/bin/

4. Create a Shared Folder in Control Panal, e.g. usbexfat in Volume1

5. Plug the usb device with exFAT format, and in ssh:
fdisk -l

find out the exFAT device like this:

DSM 6.0
Device     Boot Start     End Sectors  Size Id Type
/dev/sdu1         256 7823654 7823399  3.7G  7 HPFS/NTFS/exFAT

6. Mount the exFAT partition:
mount.exfat-fuse /dev/sdu1 /volume1/usbexfat -o nonempty

7. Then can read & write the exFAT partition in Shared Folder usbexfat.

8. Unmount the exFAT partition:
umount /volume1/usbexfat

9. Eject the usb device in Control Panel or ssh:
eject -F /dev/sdu1

[MS-SQL] SQL Server TCP/IP 설정

● SQL Server TCP/IP 설정

1. 키보드에서 [윈도우Key + R] 키를 눌러서 실행 창을 활성화시킵니다. 

2. 실행창에 “SQLServerManager12.msc”을 입력하고 [확인] 버튼을 클릭합니다.

 

※ 명령어는 버전에 따라 다름.

SQL Server 2008 –> SQLServerManager10.msc
SQL Server 2012 –> SQLServerManager11.msc
SQL Server 2014 –> SQLServerManager12.msc
SQL Server 2016 –> SQLServerManager13.msc

SQL Server 2017 –> SQLServerManager14.msc

3. SQL 서버 구성 관리자 화면에서 [SQL Server 네트워크 구성] 항목을 선택합니다. 그리고 [SQLEXPRESS에 대한 프로토콜]을 선택합니다. [TCP/IP] 항목을 마우스 우클릭해서 [사용]을 선택합니다.

 

4. 다시 [TCP/IP] 항목을 더블클릭하면 아래와 같이 팝업창이 활성화됩니다. 해당 팝업에서 [IP주소]TCP포트 를 1433으로 변경해주고 IPv4 영역의 1433 v포트를 사용으로 변경 후  [확인] 버튼을 클릭합니다.

5. MS SQL Server Management Studio를 실행합니다. 그리고 데이터베이스를 마우스 우클릭 후 [속성]으로 들어갑니다.

 

6. [보안] 항목을 클릭하여 [SQL Server 및 Windows 인증 모드]를 선택해줍니다.

 

7. [연결] 항목을 클릭하여 [이 서버에 대한 원격 연결 허용]를 선택해줍니다.

 

8. 만약 위과정을 모두 설정한 후에도 외부에서 DB접속이 안된다면, Windows 방화벽에서 인바운드 새규칙을 생성하여 1433번 포트를 허용해줍니다.

 

 

ORA-01033: ORACLE의 초기화 또는 정지 처리가 진행중입니다

C:\Users\Administrator>sqlplus sys/password as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 월 7월 29 20:59:04 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

다음에 접속됨:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> recover database

매체 복구가 완료되었습니다.

SQL> alter database open

데이타베이스가 변경되었습니다.

SQL> shutdown immediate

데이터베이스가 닫혔습니다.

데이터베이스가 마운트 해제되었습니다.

ORACLE 인스턴스가 종료되었습니다.

SQL> startup

ORACLE 인스턴스가 시작되었습니다.

Total System Global Area  535662592 bytes

Fixed Size                  1375792 bytes

Variable Size             239075792 bytes

Database Buffers          289406976 bytes

Redo Buffers                5804032 bytes

데이터베이스가 마운트되었습니다.

데이터베이스가 열렸습니다.

ORACLE sqlplus Database 선택하며 로그인.

방법은 두가지가 있지요.

하나는 tnsnames.ora의 alias를 이용하는 방법이구요. 나머지는 SID를 변경하는 방법이지요.

 

tnsnames.ora화일에 SID를 A와 B로 따로 접속할수 있는 alias를 만들어서 접속시에

c:\> sqlplus scott/tiger@alias_A

또는

c:\> sqlplus scott/tiger@alias_B

로 하면되지요.

 

아니면 도스상태에서

c:\> set ORACLE_SID=A

c:\> sqlplus scott/tiger — A에 접속

 

c:\> set ORACLE_SID=B

c:\> sqlplus scott/tiger — B에 접속

 

어떤 DB에 접속하는냐는 현재의 환경에서 설정된 SID가 무어냐에 따라결정되지요.

그러니 현재 설정 SID만 원하는대로 변경하면 되지요.

DistributedCOM 오류 해결 방법

  1. Windows 로고키 + R키를 누른 후 실행창이 나타나면 regedit 입력 후 확인을 클릭합니다.
  2. 레지스트리 편집기가 실행되면 아래의 CLSID경로를 찾아 이동하여 마우스 오른쪽 버튼으로 클릭한 다음 사용권한을 클릭합니다.
    HKEY_Classes_Root\CLSID\{C2F03A33-21F5-47FA-B4BB-156362A2F239}
    이미지
  3. 사용권한 창이 나타나면 우측 하단의 고급 버튼을 클릭합니다.
    이미지
  4. 고급 보안 설정 창이 나타나면 소유자 항목의 변경 버튼을 클릭합니다.
    이미지
  5. 사용자 또는 그룹 선택창이 나타나면, [선택할 개체 이름을 입력하십시오]란에 administrators 를 입력하고 이름 확인 버튼을 누른 후 확인을 클릭합니다.
    이미지
    (또는, 고급 버튼을 클릭한 후 지금 찾기 버튼을 통해서 administrators 항목을 찾아서 선택하실 수도 있습니다.)
  6. 이 후 소유자가 변경된 것을 확인하고 적용 – 확인을 클릭합니다.
    이미지
  7. 사용 권한 창에서 Administrator 의 모든 권한을 체크 후 적용 – 확인을 클릭합니다.
    이미지
  8. 레지스트리 편집기에서 APPID 경로를 찾아 마우스 오른쪽 버튼 클릭 후 사용권한을 클릭하여 앞서 진행한 3~7번의 방법을 진행합니다.
    HKEY_LocalMachine\Software\Classes\AppID\{316CDED5-E4AE-4B15-9113-7055D84DCC97}
    이미지
  9. 이 후 Windows 로고키 + R키를 누른 후 실행창이 열리면 dcomcnfg 입력 후 확인을 클릭합니다.
  10. 구성 요소 서비스 창이 열리면 [구성 요소 서비스 – 컴퓨터 – 내 컴퓨터 – DCOM 구성]을 클릭하고 우측에서 Immersive Shell 을 찾아서 마우스 오른쪽 버튼 클릭 후 속성을 클릭합니다.
    이미지
  11. 속성 창이 나타나면 보안 탭에서 [시작 및 활성화 권한] 항목을 사용자 지정으로 체크하고 편집 버튼을 클릭합니다.
    이미지
  12. 시작 및 활성화 권한 창이 나타나면, 추가 버튼을 클릭합니다.
    이미지
  13. 사용자 또는 그룹 선택 창이 나타나면 [선택할 개체 이름을 입력하십시오]란에 Local Service 를 입력하고 이름 확인 버튼을 누른 후 확인을 클릭합니다.
    이미지
  14. Local Service 가 추가되면 로컬 활성화 항목 허용에 체크를 한 후 확인을 클릭합니다.
    이미지
  15. 이 후 증상을 확인합니다.

utorrent 3. or highter 광고 제거 방법

옵션메뉴에서 설정으로 들어가서 고급설정에서 아래 항복의 값을 모두 false로 바꿔주시줌

bt.enable_pulse
distributed_share.enable
gui.show_notorrents_node
offers.left_rail_offer_enabled
gui.show_plus_upsell
offers.content_offer_autoexec
offers.sponsored_torrent_offer_enabled
offers.featured_content.badge.enabled
offers.featured_content_notifications_enabled
offers.featured_content_rss_enabled

옵션 메뉴열어놓고 쉬프트키와 F2키를 누른채로 설정 메뉴로 진입하시면 아래 메뉴들이 고급설정에 나타남
아래 값도 모두 false로 바꿔주시면 업그레이드, 플러스 업글 유도 광고도 사라지고 깔끔한 torrent사용하실수 있음

gui.show_gate_notify
gui.show_plus_av_upsell
gui.show_plus_conv_upsell
gui.show_plus_upsell_nodes