Posts

GPG(GnuPG) 사용하기

GPG(GnuPG) 사용하기

이 글에서는 OpenPGP의 GNU 구현인 GPG(GnuPG)와 그 사용법에 대하여 알아보자.

GPG란?

GPG(GNU Privacy Cuard)는 GNU에서 제공하는 OpenPGP(RFC4880)의 오픈소스 구현이다.

개인간, 장비간 또는 개인 - 장비간에 교환되는 메시지나 파일을 암호화여 기밀성을 보장하거나 디지털 서명을 통해 무결성을 식별할 수 있게 해주는 도구다.

기본적으로 RSA와 같은 공개 키 암호화 방식을 사용하여 종단간 파일이나 메시지를 암호화 하거나 서명 하는 기능을 제공한다.

GnuPG에 대한 자세한 내용은 나무위키/GnuPG 또는 위키피디아/GNU 프라이버시 가드를 참고 한다.

PGP에 대한 내용은 나무위키/PGP 또는 위키피디아/PGP를 참고 한다.

이 문서에서는 GPG의 사용법에 대하여 설명 하도록 한다.

공개 키 암호화 방식에 관한 내용은 공개 키 암호화 방식이란?을 참조한다.

오픈 소스 구현을 이용한 NETCONF Hands-On

오픈 소스 구현을 이용한 NETCONF Hands-On

오픈 소스 구현을 이용한 NETCONF Hands-On

오픈소스를 이용하여 NETCONF 의 간단한 동작을 확인 해보자.

사용할 오픈소스 구현은 다음과 같다.

  • libyang: YANG 데이터 모델링 언어의 파서와 툴킷을 제공한다. sysrepo, libnetconf2, netopeer2에서 사용된다.
  • sysrepo: YANG 으로 모델링된 데이터의 데이터 스토어를 제공한다.
  • libnetconf2: NETCONF 서버와 클라이언트에서 사용되는 라이브리를 제공한다.
  • netopeer2: NETCONF 서버와 테스트용 클라이언트를 제공한다.

설치 하기

설치에 시간이 걸리기 때문에 빠른 테스트를 위해 도커 이미지를 만들어 놓았다.

시스템에 도커가 설치되어 있다면 별도의 설치 없이 테스트가 가능하다.

Shell에서의 Exit Status에 관하여

Shell에서의 Exit Status에 관하여

Exit Status에 대하여 알아보자.

개요

지금은 소프트웨어프로그램이라고 하면 사람들은 거의 그래픽 UI를 가지는 프로그램을 생각 할 것이다. 하지만 Linux와 같은 UNIX계열의 운영체제에서는 쉘(SHELL)에서 많은 일을 수행한다

리눅스에서 어떤 프로그램을 설치 하기위해 구글링 하면 거의 대부분은 쉘에서 패키기 관리자(apt, dnf, pacman 등)를 실행하여 프로그램을 설치 할 것이다.

복잡한 여러 명령을 반복적으로 수행해야 할때 쉘 스크립트를 작성하면 이러한 반복적인 작업을 매우 쉽고 빠르게 할 수 있다.

우리는 쉘에서 명령어를 실행 할때 해당 명령의 출력을 통해 프로그램이 정상적으로 실행되었는지를 판단 할 수 있다. 실행 도중 에러가 발생 하였다면 화면에 에러가 출력 될것이다.

전통적으로 UNIX 계열 프로그램은 ls와 같이 명시적으로 정보를 출력을 요구 하는 명령이 아닌 경우 정상적으로 동작 하였을 경우 아무런 출력이 없는 경우가 많다. 이는 침묵은 금이라는 유닉스의 설계 철학에 따르는 것이다.

Speech is silver, but silence is gold.

그렇다면 쉘에서 실행한 명령이 정상적으로 수행되었는지 어떻게 판단 할까?

우리가 일반적으로 사용하는 방법은 명령이 실행되면서 출력되는 출력 값을 경험적으로 알고 있기 때문에 이 출력값을 기반으로 명령이 성공적으로 수행되었는지 확인한다. 하지만 이 방법은 사람에게는 매우 효율적인 방법이지만 쉘스크립트를 짜는 프로그래머 입장에서는 매우 번거로운 방법이다.

더 일반적으로 사용할 수 있는 방법을 찾아 보자.

모든 명령은 종료될 때 waitpid 시스템 콜(이나 이와 동등항 함수)에서 Exit Status를 반환하는데 (명시적으로 지정하지 않을 경우 기본값(0)을 반환한다.) 프로그래머는 이 Exit Status를 가지고 자신의 실행한 명령이 정상적으로 실행 되었는지 판단 할 수 있다.

Exit Status

Exit Status는 O 에서 255 사이의 값을 가지고 쉘의 경우 125 이상의 값을 사용한다.

YANG - Data Modeling Language

YANG - Data Modeling Language

YANG: Data Modeling Language

개요

IETF NETCONF Working Group 에서 네트워크 관리 프로토콜인 NECONF의 데이터 모델링을 위해 개발한 데이터 모델링 언어다. NETCONF 프로토콜(RFC 6241은 표준에서 정의한 4 계층 중 Operation, Message, Transport 계층에 대해 정의 하였지만 최상위 계층인 Content 계층의 내용에 대해서는 정의하지 않았다.

SNMP에서 MIB를 정의 하기 위해 SMI를 정의 하였듯이 NETCONF에서 관리 데이터를 정의 하기 위해 데이터 모델링을 위한 언어인 YANG을 정의 하였다.

YANG은 매우 확장성 있는 데이터 모델링 언어로 당초 목적인 네트워크의 설정 데이터와 운용 데이터의 모델링 뿐 아니라 다른 분야 에서도 사용되고 있다.

NETCONF - Network Configuration Protocol

NETCONF - Network Configuration Protocol

개요

IETF NETCONF Working Group에서 발표한 네트워크 관리 프로토콜이다.

기존에 사용되던 SNMP를 대체 하기 위해 개발 되었으며 네트워크 오퍼레이터의 요구 사항을 반영하여 개발되었다. 최신 개정판은 RFC 6241 이다.

출연 배경

이전에 정의된 SNMP가 있었다. SNMP는 버전 3 까지 정의 되었다. SNMPv1 은 SNMP의 첫 번째 표준이다. 사실 IETF에서는 체계적인 관리 체계를 개발 하기 원했고 SNMPv1 은 더 나은 관리 프로토콜을 개발할기 까지 과도적으로 사용되는 임시 프로토콜로서 개발 되었다. 하지만 SNMPv1은 구현의 간편함으로 인해 널리 사용되었고 IETF에서는 새로운 프로토콜을 구현하는 대신 대신 SNMP를 발전 시키려고 하였다. 버전 1 에서 문제가 되었던 인증 관련 기능등의 추가 기능이 정의된 SNMPv2를 발표 하였으나 SNMPv1이 널리 사용되게 되었던 원인인 구현의 간편함이 없어졌기 때문에 사용자의 외면을 받았다. 이에 IETF에서는 SNMPv2에서 문제가 되었던 복잡한 인증 관련 기능을 제거한 SNMPV2c 를 발표 하였다. 이후 구현된 SNMPv3에서는 이전 버전에서 문제가 되었던 보안성이 강화되어 데이터의 기밀성, 무결성, 인증관련 기능들이 추가 되었다.

맥스웰 방정식으로 부터 전자기파의 유도 과정

맥스웰 방정식으로 부터 전자기파의 유도 과정

맥스웰 방정식의 4개의 연립 미분 방정식을 통해 전자기파를 예언 하였던 유도 과정을 알아 보자.

멕스웰 방정식

  • 전기장에 대한 가우스법칙(전기장 발산) $$ \boldsymbol{\nabla} \boldsymbol{\cdot} \mathbf{E} = \frac{\rho}{\varepsilon_0} \tag{1} $$

  • 자기장에 대한 가우스 법칙(자기장 발산) $$ \boldsymbol{\nabla} \boldsymbol{\cdot} \mathbf{B} = 0 \tag{2} $$

  • 페러데이 전자 유도(전기장의 회전) $$ \boldsymbol{\nabla} \boldsymbol{\times} \mathbf{E} = -\frac{\partial \mathbf{B}}{\partial t} \tag{3} $$

  • 앙페르-맥스웰법칙(자기장의 회전) $$ \boldsymbol{\nabla} \boldsymbol{\times} \mathbf{B} = \mu_0\mathbf{J} + \varepsilon_0\mu_0 \frac{\partial\mathbf{E}}{\partial t} \tag{4} $$

전자기파 유도

자유 공간에서 전하 밀도 $\rho$ 와 전도 전류 밀도 $\mathbf{J}$ 가 $0$ 이므로 멕스웰의 방정식 $(1)$ 과 $(4)$는 다음과 같이 쓸 수 있다.

구글 도메인에서 DDNS 사용하기

구글 도메인에서 DDNS 사용하기

Google Domains

Google Domains에의 도메인 등록 과 고객 정보를 Squarespace, Inc. 로 이전 하기로 하였다. 자세한 내용은 여기를 참고 하자. 아직 구글 도메인즈를 통해 도메인에 대한 관리는 가능하지만 이전에 완료 되는 대로 Google Domains 서비는 종료 할 것으로 보인다. 즉, 이전에 완료된 후에는 Squarespace에서 도메인을 관리 해야 한다.

시간을 내어 관리 하고 있는 도메인의 네임서버를 Cloudflare로 이전하는 작업을 하였다.

DDNS with Google Domains

잠시 짬을 내어 창고에서 잠자고 있던 구형 PC로 개발 서버로 쓰기 위해 리눅스도 설치 하고 몇가지 개발 환경을 구축 했다. 유동 IP를 쓰다 보니 할당받은 IP가 변경 되었을 때 외부에서 접속할 방법이 마땅치 않아 내가 사용하는 도메인 네임 서비스인 구글 도메인즈에 을 통해 DDNS 설정을 하기로 하였다.

2 전력계법 - 3상 전력을 측정하는 방법

2 전력계법 - 3상 전력을 측정하는 방법

2 전력계법

이전 글에서 단상부하의 경우 유효전력을 측정하기 위한 3 전압계법3 전류계법에 대하여 알아보았다. 이번에는 평형 삼상회로 부하에서 2개의 유효전력계를 이용하여 3상 유효 전력을 측정하는 방법에 대해 알아본다.

유효전력계는 전압계, 전류계, 역률계로 구성되어 있으므로 전압계, 전류계, 역률계가 각각 2개씩 있으면 유효전력을 측정할 수 있다.

세상의 전압과 전류의 크기가 같고 그 위상이 서로 $120^\circ$ 차이날 때 평형삼상 이라고 한다. 평형 삼상회로에서 3상의 전압과 전류의 합은 $0$이다.

유효전력

3상에서 유효전력을 구하기 위해서는 선간전압과 선전류의 곱에$\sqrt{3}$배를 해주고 역률을 곱해 주어야 한다.

3 전류계법 - 단상 전력을 측정하는 방법

3 전류계법 - 단상 전력을 측정하는 방법

개요

이전 글인 3전압계법을 다룬 글에서 이미 설명 했듯이 교류(AC) 회로에서 부하전압과 부하전류간 위상차가 존재하기 때문에 전원측에서 공급하는 전력과 실제 부하에서 소비되는 전력과 크기가 다르다. 교류 회로에서는 전원측에서 공급되는 전력을 피상전력($P_a$)이라고 하고 실제 부하에서 소비되는 전력을 유효전력($P$)이라고 한다. 피상전력으로부터 유효전력을 계산하기위해 역률($\cos{\theta}$)을 곱해주어야 한다. 자세한 내용은 3전압계법 의 개요를 참고하자.

본문에서는 전류계 3개를 이용하여 유효전력을 측정하는 방법을 알아본다.

들어가기 앞서

3전류계법을 시작하기 앞서 결론을 먼저 설명 하자면 역률을 유도하는 과정이 전압 $V$를 전류 $I$ 로 치환하면 될 정도로 3 전압계법과 거의 같다.

3 전압계법 - 단상 전력을 측정하는 방법

3 전압계법 - 단상 전력을 측정하는 방법

개요

직류(DC) 회로에서 전력을 구하려면 부하전압(부하에 인가되는 전압)과 부하전류(부하에 흐르는 전류)의 곱으로 계산할 수 있지만 교류(AC) 회로에서 부하전압과 부하전류간 위상차가 존재하기 때문에 전원측에서 공급하는 전력과 실제 부하에서 소비되는 전력과 크기가 다르다. 교류 회로에서는 전원측에서 공급되는 전력을 피상전력($P_a$)이라고 하고 실제 부하에서 소비되는 전력을 유효전력($P$)이라고 한다. 피상전력으로부터 유효전력을 계산하기위해 역률($\cos{\theta}$)을 곱해주어야 한다.

$$ P = VI\cos{\theta} $$

역률은 부하전압과 부하전류의 위상차를 코사인 값으로 나타낸 것이다. 역률은 피상전력에 대한 유효전력의 비로 나타낼 수 있다.