사랑스러운 나의 도시 #1-4. 타이페이 넷째 날, 그리고 처음의 그 끝.

타이페이 첫째 날

타이페이 둘째 날

타이페이 셋째 날

역시 글쓰기는 미루면 안된다. 기억이 나질 않는다…..

넷째 날

넷째 날은 국립국부기념관1(25.04078879331904, 121.56202618676458)과 101타워2(25.03554776247256, 121.564297909543)를 방문했다.

첫 포스트에서 이야기 했던 것처럼 무작정 비행기 표 한장과 카메라 하나 들고 비행기를 탔었기에 아무런 정보가 없던 터. 첫 날 숙소에서 마주쳤던 외국인이 이야기 했던 101타워가 생각나 지도를 바라보면 무조건 걷기 시작했다.

운이 좋았다고 해야 할까, 101타워 북서쪽에는 국립국부기념관이 있었기에 101타워를 향하던 중 기념관을 들를 수 있었고 근위병 교대식을 기다렸다 교대식을 한번 더 볼 수 있었다.

장제스 기념관의 근위병 교대식과 크게 다르지 않다.

101타워, One-o-one 타워라고 많이 불리우는 듯 하다. 국부 기념관 동쪽으로는 타이페이 시청이 있다.


멀리(?) 보이는 101타워. 정확한 이름은 타이페이101 (타이페이 금융센터)이다. 두바이에 부르즈칼리파카 세워지기 전까지는 말리이시아의 페트로나스 트윈 타워를 뒤이어 약 7년간 세계 최 고층 마천루로 그 위용을 뽐냈었다.(고 한다)

사람마다 다르겠지만 높고 유명한 건물이라 하여 들렀지 그리 큰 관심사는 아니었다. 하지만 공돌이의 마음을 설레게 하는 중요한 것 하나

전망대 89층을 둘러보고 88층으로 내려가면 볼 수 있는 92층에 메달려있는 저 크고 아름다운 쇳덩어리. 건물의 높이가 워낙 높다보니 외부 영향(바람 등)으로 부터의 건물의 흔들림을 방지하기 위한 구조물이다. 두께 12.5cm 원반 41장을 붙여 만들었다고 하는데 무게가 무려 660t. 건물의 흔들림을 방지 한다고 무작정 흔들리게 둘 수 없으니 댐퍼와 여러 구조물들이 이를 적당히 고정하는 구조로 되어있다. 101층 높이에 660t 짜리 쇠공이라니… 대단하다.

외부 전망대로 올라가면 사진과 같이 타이페이 전경을 한 눈에 볼 수 있다.

 

그리고 처음의 그 끝

계획도, 예산도 없이 시작한 여행이라지만 빈손으로 돌아갈 수야 있나 무언가 기념이 될 것을 찾기 위해 현지인 친구에 물었다. 차(茶)를 사가라 한다.

뜨거운 해 아래 이제 다시 돌아가야 할 시간이다.
돌아오는 과정이야 뭐 출발의 역 순.

여행기랍시고 글을 써보고 싶었는데 쉽지 않다. 여러 번 이야기 했듯, 계획도 없었고, 사전 조사도 없었고, 돈도 넉넉하지 않았다. 입국 시 머물 곳에 대한 정보를 제출해야 한다는 얘기를 출발 당일 알고 부랴부랴 하룻밤 숙박 예약을 했으니 무슨 말을 더 하랴.

남들 다 다녀왔다는 고양이 마을은 물론이거니와 고궁 박물관도 들르지 못했다. 흔히들 말하는 남들 다 보고, 들을 것 듣고, 먹을 것 먹는 여행으로써는 0점인 셈이다.
거기다 6년 전에 다녀왔던 여행의 여행기를 쓰고 앉아있으니…

하지만 6년이 지난 지금도, 그리고 10년이 더 지나도 한 가지는 절대 잊지 못할 것 같다.
첫 날 처음 출국장을 통과할 때의 그 기분, 그리고 처음 타오위안 공항에 발을 디뎠을 때의 그 기분, 처음 타본 낯선 나라의 지하철 풍경들.
마치 놀이공원에 엄마를 잃고 혼자 남겨진 8살 아이가 됐던 듯 한 그 기분 말이다.
형용할 수 없는 그 설레는 기분.
특별한 여행지였기 때문이 아닌 처음이었기에 느낄 수 있었던 그 기분.

여행기로써는 부족하고, 별다른 정보가 없는 쓸 데 없는 긴 글이었지만, 만약 이 글을 당신이 여기까지 읽었다면 꼭 이렇게 이야기 하고 싶다.

어디든 좋으니 계획 따위는 머리 속에서 지우고 떠나보라고.
놀이공원에서 엄마의 손을 놓친 아이의 마음과 같은 홀로 됨을 다시 한번 느껴보라고.

HAproxy 를 이용한 로드밸런싱 고가용성 구성

개요

HAProxy는 여러 서버에 대해 요청을 확산시키는 TCP 및 HTTP 기반 애플리케이션들을 위해 고가용성 로드밸런서와 리버스 프록시를 제공하는 자유-오픈 소스 소프트웨어이다. C 프로그래밍 언어로 개발되어 있으며 빠르고 효율적인 것으로 유명하다.
공식 사이트 참조

설정에 따라 Server #A와 #B로 번갈아가며 연결해준다.

haproxy를 통해 부하를 분산하는 등의 용도로 서비스 효율을 높일 수 있다.

설치

여기에서 다운 받아도 되며, yum epel-release에 포함되어 있으므로 epel-release 리포지터리 추가 후 yum 이나 dnf 명령 등을 통해 설치할 수 있다.

sudo dnf install -y haproxy
마지막 메타자료 만료확인 7:58:42 이전인: 2022년 07월 28일 (목) 오전 12시 23분 23 초.
종속성이 해결되었습니다.
================================================================================
 꾸러미          구조           버전                    레포지터리         크기
================================================================================
설치 중:
 haproxy         x86_64         1.8.27-4.el8            appstream         1.4 M

연결 요약
================================================================================
설치  1 꾸러미

총계 내려받기 크기: 1.4 M
설치된 크기 : 4.2 M
...중략...
설치되었습니다:
  haproxy-1.8.27-4.el8.x86_64                                                                                                                   
완료되었습니다!

서비스가 구동 될 모든 서버에 설치해준다.
자동으로 서비스가 구동될 수있도록 서비스를 등록 해준다.

sudo systemctl enable haproxy.service
 또는
sudo service haproxy start

설정

기본적으로 /etc/haproxy/haproxy.cfg 가 존재한다.

global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

#---------------------------------------------------------------------
# status web 설정
# haproxy 서비스 상태, 백엔드 서비스의 상태 등을 웹을 통해 확인할 수 있다.
# 필수는 아니다.
#---------------------------------------------------------------------
listen hastats
    mode http
    bind *:8088
    stats enable
    stats show-legends
    stats uri /hastat
# 서버 주소가 192.168.0.1이라면  http://192.168.0.1/hastat으로 접속한다.
    stats auth admin:admin
#  hastats 웹에 접속 시 인증으로 제한하려면 계정과 패스워드를 지정한다.

#---------------------------------------------------------------------
# 프론트 엔드 설정
# 프론트 엔드에서 설정한 포트로 연결이 들어올 경우 백엔드로 보낸다
#---------------------------------------------------------------------
# 외부에서 haproxy를 통해 연결을 시도할 때 사용하는 포트
frontend  kubeproxy
    bind *:16443
    default_backend kubeproxy
    mode tcp

#---------------------------------------------------------------------
# 백엔드 설정
# 프론트엔드에서  defaultbackend 타겟으로 설정 된 백엔드 정보
#---------------------------------------------------------------------
backend kubeproxy
    balance     roundrobin
# Balance Option
# Roundrobin : 순차적으로 분배
# static-rr : 서버에 부여된 가중치에 따라서 분배
# leastconn : 접속수가 가장 적은 서버로 분배
# source : 운영중인 서버의 가중치를 나눠서 접속자 IP 해싱(hashing)해서 분배
# uri : 접속하는 URI를 해싱해서 운영중인 서버의 가중치를 나눠서 분배 (URI의 길이 또는 depth로 해싱)
# url_param : HTTP GET 요청에 대해서 특정 패턴이 있는지 여부 확인 후 조건에 맞는 서버로 분배 (조건 없는 경우 round_robin으로 처리)
# hdr : HTTP 헤더에서 hdr(<name>)으로 지정된 조건이 있는 경우에 대해서만 분배 (조건없는 경우 round robin 으로 처리)
# rdp-cookie : TCP 요청에 대한 RDP 쿠키에 따른 분배
    mode tcp
    option tcp-check
    option tcplog
# 외부에서 16443 포트로 연결을 시도하면 아래의 서버에 순차적으로 연결해준다.
    server  storage01 192.168.0.1:6443 check
    server  storage02 192.168.0.2:6443 check
    server  storage03 192.168.0.3:6443 check

frontend web-console
        bind *:18080
        default_backend web-console
        mode tcp
backend web-console
        balance roundrobin
        mode    tcp
        option  tcp-check
        option  tcplog
        server  storage01       192.168.1.1:8080       check
        server  storage02       192.168.1.2:8080       check
        server  storage03       192.168.1.3:8080       check

백엔드로 동작할 모든 서버에 동일한 설정 파일을 넣어준다.

확인

haproxy 웹 서비스를 통해 정보 확인이 가능한다.

백엔드 서비스에 문제가있다면 붉은색으로 표시된다.

Keepalive를 이용한 linux 로드밸런싱 고가용성 구현

개요

keepalive 참조
keepalive는 Linux 시스템 혹은 Linux 기반 인프라에서의 로드밸런싱 및 고가용성을 위한 기능을 제공한다.
단순하게 설명하면, 두 개 이상의 Linux 시스템이 존재할 경우, virtual IP 를 생성하고 시스템의 상태에 따라 해당 virtual IP를 할당해주는 기능을 한다.

설치

# CentOS (Redhat 계열)
$ sudo isntall -y keepalived

# Ubuntu (Devian 계열)
$ sudo apt-get install -y keepalived

설정

/etc/keepalived/keepalived.conf 를 환경에 맞도록 수정한다.

Master server

! Configuration File for keepalived Master

global_defs {
   router_id rtr_0           # Master와 Backup 구분
}

vrrp_instance VI_0 {          # Master와 Backup과 구분
    state MASTER              # 또는 BACKUP
    interface eth0            # 노드에서 실제 사용할 인터페이스 지정
    virtual_router_id 10      # Master와 Backup 모두 같은 값으로 설정.
    priority 200              # 우선순위, 값이 높은 쪽인 Master가 된다.
    advert_int 1
    authentication {
        auth_type PASS        # Master와 Backup 모두 같은 값으로 설정.
        auth_pass P@ssW0rd    # Master와 Backup 모두 같은 값으로 설정.
    }

    virtual_ipaddress {
        192.168.0.100      # Master와 Backup 동일하게 설정한 VIP
    }
}
# #으로 시작하는 내용은 모두 삭제한다.

Backuo(slave)

! Configuration File for keepalived

global_defs {
   router_id rtr_1           
}

vrrp_instance VI_1 { 
    state BACKUP                    # MASTER가 아니므로 수정              
    interface eth0            
    virtual_router_id 10      
    priority 100                    # 낮은 우선순위를 위해 수정
    advert_int 1
    authentication {
        auth_type PASS        
        auth_pass P@ssW0rd        
    }

    virtual_ipaddress {
        192.168.0.100      
    }
}

구동

각각의 서버에서 서비스를 구동한다.

 sudo systemctl enable keepalived --now
# BACKUP 서버들에서도 동일하게 서비스를 구동해준다. 

확인

ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 4e:be:1a:32:52:04 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.41/24 brd 192.168.1.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.40/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::4cbe:1aff:fe32:5204/64 scope link
       valid_lft forever preferred_lft forever

192.168.1.40/32가 virtual IP. backup 노드로 설정된 서버에는 해당 ip가 보이지 않는다.

다른 시스템에서 가상아이피를 이용하여 ssh 접속, 혹은 ping 명령등을 수행해서 확인하면 된다.

그레이카드를 이용한 사진 촬영 #1. 측광

개요

그레이 카드 (Gray card) 란 빛 반사율 18%인 회색의 평면 개체를 말한다. 좁은 의미로는 반사율 18%의 10*13cm, 20*25cm의 두 개의 회색 카드로 구성된 Kodak 그레이 카드 / R-27을 의미한다.

원래의 기본 용도는 ‘정확한 측광(빛의 양 측정)’ 이다.
대다수의 카메라는 보통 측광을 위한 센서가 있고 이 센서가 감지하는 빛의 양에 따라 적절한 노출 값을 가이드한다. 

측광

사진의 예시는 중앙부 스팟 측광 으로 설정이 되어있다. 즉 중앙의 원에 해당하는 영역이1각 모드에 따른 측광 영역은 카메라 제조사 및 설정에 따라 달라질 수 있다. 얼마나 밝은가 를 계산하고 이에 따라 어느 정도로 조리개 값, 셔터 속도, 감도 등을 설정 해야 하는지 가이드를 해준다는 이야기이다. 2당연히 자동 모드로 찍을 경우는 측광 결과에 따라 자동으로 이 값들을 정해서 촬영을 하게 된다.
좋은 사진을 위해서는 정확한 측광이 매우 중요하다. 잘못된 측광으로 인해 여자친구의 얼굴이 새까맣게 찍힐 수도 있고, 하얗게 뜬 얼굴에 눈만 덩그러니 찍힐 수가 있으니까. 이런 문제를 줄이고 정확한 측광을 위해 필요한 것이 바로 ‘그레이 카드’ 이다.

원리

여기서 왜 많고 많은 색 중에 회색이며, 0%부터 100%까지의 숫자 중 왜 18%인가를 이해할 필요가 있다. 카메라는 다양한 피사체를 촬영하고, 이 피사체들은 각기 다른 색상과 반사율을 가지고 있다. 여기서의 측광이란 광원에서 나온 빛이 피사체에 부딛히고 반사되어 나오는 빛을 측정하는 것인데, 같은 광원에서 반사율이 달라진다면? 그리고 검정색과 흰색의 경우는? 카메라가 인식하는 빛의 양은 당연히 달라질 수 밖에 없다.
카메라가 이 반사율과 색상의의 차이를 정확히 인식하고 측광을 하면 좋겠지만 안타깝게도 그렇지 못하다. 카메라는 센서가 인식하는 모든 대상을 흑백으로 보고 빛을 18% 반사한다고 가정하고 노출을 정하게 된다.

카메라가 인식하는 사물과 색상은 위 표와 같다고 보면 된다.
즉, 어떤 사물 어떤 색이건 대상을 흑백으로 변환한 다음 측광 영역에 해당하는 곳의 색이 중앙의 회색과 일치하지 않는다면 현재 인식한 색과 비교하여 노출의 정도를 표시해주게 되는 것이다.
예를 들면 카메라가 인식한 색이 좌측의 검정색이라면 노출이 부족하므로 현재 설정이 2스톱 부족하다고 표시해주고 우측의 흰색이라면 노출이 과하다고 인식하여 노출이 2스톱 높다고 표시하게 되는 것이다.

여기서 그레이 카드의 역할은 매우 쉽고 단순하다. 피사체에 따라 반사된 빛의 양은 천차만별이므로 정확한 측정을 위해 피사체 근처에 그레이카드를 두고 카메라가 그레이카드의 광량을 측정 했을 때 18%반사율의 회색과 일치하는 값을 찾게 하는 것이다.

사용법

위 원리를 이해 했다면 사용법은 매우 단순하다.
멀리 있는 피사체라면 불가능하겠지만 사람이나 정물을 촬영할 경우라면 다음의 절차를 따르면 된다.

  1. 적정한 광원 아래 피사체를 위치한다.
  2. 그레이 카드로 피사체를 가리거나 근처에 둔다.
  3. 카메라로 피사체 근처 그레이 카드의 광량을 측정한다.
  4. 측정 된 값에 맞는 노출값을 설정한다.
  5. 그레이카드를 치운다.
  6. 실제 피사체를 촬영한다.

마무리

사실 필름 한 컷 한 컷이 돈이고, 촬영 직후 바로 결과물을 확인할 수 없던 과거에나 쓰던 물건이긴 하다. 카메라 자체의 측광을 위한 센서나 알고리즘도 좋아졌고, 정확하게 노출을 측정해주는 노출계를 사용하는 것도 좋은 방법이다.
아니 이런 기술적인 부분을 차치하더라도 요즘은 대부분 디지털 카메라로써 촬영 후 즉시 결과물의 확인이 가능하니 노출이 맞지 않다 싶으면 바로 다시 촬영하면 된다. 현장에서 미처 추가 촬영을 하지 못했다면 포토샵 등의 다양한 소프트웨어의 힘을 빌어 얼마든지 사후에도 처리가 가능하다.
하지만 적어도 카메라의 측광이란 어떤 원리로 이루어지는지 이해하고, 상황에 따라 적절히 그레이 카드를 활용한다면 더 좋은 결과물을 얻을 수 있을 것이다.

MS 파워포인트 한/영 자동전환 기능 끄기

마이크로소프트 파워포인트(Microsoft Power Point)를 사용하다 보면 자동으로 한글이 영어로 영어에서 한글로 바뀌는 경우를 볼 수 있다.
아주 아주 편리한 기능으로 ‘database’라는 단어를 입력하고 싶을 때 한글이 선택된 상태로 ‘ㅇㅁㅅ뮴ㄴㄷ’를 입력하면 자동으로 제대로 된 영문으로 고쳐주는 기능이다.

정상적인 동작. 아주 편하다

 

하지만 종종 내가 원하지 않는 경우에도 변환이 되는 경우가 있는데 이런 경우라면 [파일][옵션] [언어교정][자동 고침 옵션(A)…] 메뉴에서 [한/영 자동 고침(K)] 항목을 비활성화 해주면 된다

 

 

하.지.만

사실 위 기능은 구글에 ‘파워포인트 한영전환’ 9자만 검색하면 어떻게 바꾸는지 엄청 많이 나오므로 굳이 이렇게 포스팅할 필요가 없지만…

이런 어처구니 없는 동작을 하는 경우엔?

분명히 [한/영 자동 고침(K)] 항목을 비활성화 했음에도 제 멋대로 변경되는 것을 확인할 수 있다. “spark”의 경우는 아무런 문제가 없는 영단어인데 제 멋대로 자꾸 ‘rk ‘만 ‘가’로 치환하는데다 “repository”의 경우는 ‘sitory’ㅇ를 ‘냐새교’로 있지도 않은 단어로 자꾸 치환 해대니 미쳐버릴 노릇.

사실 이 문제는 파워포인트의 한영 전환 기능이 아니라 윈도우즈에 설치된 한글 입력기가 개입 하는 것으로 비단 파워포인트 뿐 아니라 다른 모든 어플리케이션에서 제 멋대로 문자를 치환해버리는 경우이다. 그러니까 파워포인트 문서를 작성하다가 문자가 변경된다고 옵션을 백번 바꿔봐야 소용이 없고, 엑셀에서도 제 멋대로 문자를 치환하고, 크롬의 경우는 제 멋대로 주소표시줄에서 자동완성을 시전하는 아주 전방위에서 사용자를 괴롭히는 그런 문제가 되겠다.

원인은 ‘한글과 컴퓨터 아래아한글’. 정확히 말하면 한컴 오피스를 설치 할 때 함께 설치되는 “한컴입력기”.

두 번째 동영상과 같은 증상이 나타나면 “한컴 입력기”를 제거함으로써 증상을 고칠 수 있다.
방법은 다음과 같다

  1. 윈도우즈 [설정] [시간 및 언어][언어] 메뉴 진입
  2. 기본 설정 언어“의 “한국어” 메뉴 선택
  3. 한국얼 아래 나타나는 [옵션]에서 “키보드” 항목 선택
  4. [한컴 입력기] 선택
  5. [제거] 버튼 클릭