minikube 로 기동한 kube cluster 왜 nodeport svc 에 접속되지 않을까? docker desktop kubenetes cluster support 를 쓰자.

Accessing apps | minikube (k8s.io)

minikube 에서 외부 접속 방법으로 정확히 설명 하고 있다.

k get svc -o wide 를 하면 보통 external IP 가 나오기 마련인데 (노드의)

나의 경우는 나오지 않았다. node 의 IP 를 알아야 nodeIP:nodePort 로 접속하는데..

nz@nzYoga7:/mnt/c/src/kubectl/ckad-test$ kubectl get svc
NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP        6d20h
nginx-deployment   ClusterIP   10.97.174.110   <none>        80/TCP         6d19h
nz-deployment      NodePort    10.107.63.94    <none>        80:31438/TCP   12m

minikube 가이드를 보니 명령을 쳐서 특정 서비스를 다시 찾아내야 하는 것 같다.

PS C:\Users\nzin4> minikube service nz-deployment
|-----------|---------------|-------------|---------------------------|
| NAMESPACE |     NAME      | TARGET PORT |            URL            |
|-----------|---------------|-------------|---------------------------|
| default   | nz-deployment |          80 | http://192.168.49.2:31438 |
|-----------|---------------|-------------|---------------------------|
🏃  Starting tunnel for service nz-deployment.
|-----------|---------------|-------------|------------------------|
| NAMESPACE |     NAME      | TARGET PORT |          URL           |
|-----------|---------------|-------------|------------------------|
| default   | nz-deployment |             | http://127.0.0.1:64489 |
|-----------|---------------|-------------|------------------------|
🎉  Opening service default/nz-deployment in default browser...

그럼 일단은 127.0.01: 에 새로 정의된 포트로는 접속이 가능하다.

windows 방화벽에 minikube 가 기동한 포트에 대해서 등록해 보았으나 minikube 는 설치된 docker 에 명령을 줄 뿐 실제로 minikube 가 연 포트에 대한 방화벽 설정은 무의미해 보인다.

docker desktop 에서 kubernetes 활성화

그냥 켜면 된다.

.kube/config 도 변경되는데 기본 context 가 활성화 되지 않는다.

kubectl config use-context docker-desktop

을 입력함으로서 .kube/config 에 이미 정의된 context 를 사용할 수 있게 된다.

minikube 안녕 즐거웠다.

docker desktop 은 nodeport 의 node IP 는 당연 node 그 자체인 localhost.

이제 node port 만 확인해서 오픈하면 된다.

PS C:\src\kubectl\ckad-test> kubectl.exe get svc -o wide
NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE     SELECTOR
kubernetes      ClusterIP   10.96.0.1        <none>        443/TCP        4m49s   <none>
nz-deployment   NodePort    10.105.191.102   <none>        80:32116/TCP   8s      app=pod-nginx
PS C:\src\kubectl\ckad-test>

windows 에서 기동한 minikube cluster 를 wsl 에서 접근하기 위한 자동 설정 ~/.profile 수정

~/.profile 에 아래와 같은 복사 및 경로 구분자 변경하는 명령어를 넣으면 된다.

[USERID] 부분만 자신의 windows user id 로 치환하면 된다.

cp /mnt/c/Users/[USERID]/.kube/config ~/.kube/config #복사
sed -i 's/C:/\/mnt\/c/g' ~/.kube/config # c 드라이브 경로를 mnt로 치환
sed -i 's/\\/\//g' ~/.kube/config # \를 / 로 변환

1. prometheus 로 웹서비스 모니터링 하기 – blackbox_exporter 연계하기

특정 웹서비스를 모니터링 하는 과정을 기록.

pulling metrics

회사에서 운영하는 대외 서비스의 서비스를 모니터링 하기 위해 그 유명하다는 prometheus 를 사용해 보았다. 공식 홈페이지의 기본 예제로 진행해 보았다. 내 식대로 이해해보면 prometheus 는 단순히 metric 이라는 것을 긁어서 저장하는 크롤링 서버다. (pull metrics)

무엇을 크롤링 하는가? 프로메테우스가 이해하기 좋은 형태의 시시각각 새로고침 되는 상태 정보다. 프로메테우스 설정에 등록된 모든 서버들에 프로메테우스가 주기적으로 접속해서 내용을 계속 긁어온다.

exporter

프로메테우스가 데이터를 잘 긁어갈 수 있도록 준비된 서버들이 필요하다. 이것을 보통 exporter 라고 부르며 이것이 준비 되어야 프로메테우스가 긁는 역할을 담당할 수 있다. exporter 는 독립실행형 프로그램이므로 프로메테우스를 설치 하기 전에 실행 할 수 있다. 따라서 잠시 프로메테우스에 대해서 잊도록 하자.

프로메테우스에게 긁힐만한 정보를 가진 서버들은 xx_exporter 라 불리우는 “추출기” 서비스가 기동되어 있어야 한다. 그 서비스의 포트로 프로메테우스가 주기적으로 접속해서 내용들을 주기적으로 가져간다. 물론 xx_exporter 는 계속 내용을 갱신하기 때문에 프로메테우스는 시시각각 변하는 서버의 정보를 끊임없이 모을 수 있게 된다.

공식 아키텍쳐. Retrieval 프로세서가 계속 긁어간다.

아래와 같이 프로메테우스에 등록된 어떤 URL 이 있다고 할 때 그 metric 지표는 아래와 같이 plain_text_key value 쌍으로 구성된 단순 text 여러줄의 모음이다. 중간에 주석이 많은데 그냥 고마운 설명이라 생각하고 넘어가자.

http://somehost.com:9115/metric

# HELP probe_dns_lookup_time_seconds Returns the time taken for probe dns lookup in seconds
# TYPE probe_dns_lookup_time_seconds gauge
# plain_text_key value
probe_dns_lookup_time_seconds 0.199540841
# HELP probe_duration_seconds Returns how long the probe took to complete in seconds
# TYPE probe_duration_seconds gauge
probe_duration_seconds 2.299759862 # 웹서버의 응답시간

이런 정보가 프로메테우스에 수집되면 그 plain_text_key 키값 그대로 검색을 할 수 있고 시시각각 변하는 값이 그래프로 나타나게 된다.

blackbox_exporter

프로메테우스에게 데이터를 모두 주기위해서 많은 서버들이 스스로 exporter 가 작동하는 등의 노력을 할 수도 있겠지만 내가 관리 할 수 없는 특정 API 의 상태를 체크 하고 싶다면 그 API 를 찔러보는 서버를 대상 서버 밖의 다른 곳에 두는 수 밖에 없다. 따라서 blackbox_exporter 를 이용하면 부족하나마 서비스를 모니터링 할 수 있다.

blackbox.yml

modules:
  http_2xx:
    prober: http
    timeout: 5s
    http:
      preferred_ip_protocol: "ip4" # 이 설정이 매우 중요
      method: GET
      valid_status_codes: [200, 302]
      headers:
        User-Agent: "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Mobile Safari/537.36 Edg/96.0.1054.34"
  http_post_2xx:
    prober: http
    http:
      method: POST

여기에는 어떤 서버를 모니터링 할지는 안 나와 있고 blackbox_exporter 자체의 속성만 편집한다. 여기서

  preferred_ip_protocol: "ip4"

가 매우 중요한데, ipv6 를 지원하지 않는 서버의 상태를 조회 할 때 저것을 명시 하지 않으면 조회하지 못한다는 에러가 난다. (보통 다 그럴 것이다)

proxy

blackbox_exporter 는 일종의 proxy 이다. 프로메테우스는 blackbox_exporter 를 경유해서 서버의 상태를 조회하며, blackbox_exporter 는 서버의 상태를 프로메테우스가 이해하기 쉬운 형태로 그 결과를 변환 해 준다.

target 서버를 뭘로 인자를 주느냐에 따라서 그 서버의 http 상태 정보를 추출할 수 있다. prometheus 의 영어 사전을 리턴하는 네이버의 응답 속도를 모니터링 하고 싶다면

blackbox_exporter 의 probe API 에 target 인자로 그 URL 을 주면 된다. 이렇게 target 인자를 프로메테우스가 필요에 따라 설정할 수 있도록 하면 된다.

Prometheus 에서 조회 대상 target 설정

  1. prometheus 에서 조회 대상 설정
  2. blackbox_exporter 서버가 대신 조회
  3. 응답을 prometheus 용으로 생성
  4. prometheus 가 시시각각 변하는 metric 지표를 저장

prometheus

드디어 prometheus 를 시작해보다. 기본 설정에서 blackbox_exporter 관련 설정만 추가 한다.

scrape_configs:
  - job_name: "blackbox_exporter"
    metrics_path: /probe
    params:
       module: [ http_2xx ]  # Look for a HTTP 200 response.
    static_configs:
      - targets:
         - https://nz.pe.kr

         - https://curious.com/api/someapi?hello=world
    relabel_configs:
           - source_labels: [__address__] # 1
             target_label: __param_target
           - source_labels: [__param_target] # 2
             target_label: instance
           - target_label: __address__ # 3
             replacement: localhost:9115 # The blackbox exporter.

localhost:9115 에 떠 있는 blackbox_exporter 에게 targets 에 명시된 서버들을 조회하라는 설정이다. relabel 을 prometheus 의 유연성 중 하나로 언급되기도 한다.

이 설정은 blackbox_exporter 와 연계하여 호환 설정하는 내용이 아님을 명심하자. 사실 prometheus 는 blackbox_exporter 가 주는 값만 중요할 뿐이지 blackbox_exporter 인지는 중요하지 않다.

이 설정은 단지 job_name (배치 job?) 에 대한 시시각각 변경되는 값을 가져오기 위해서 URL 을 어떻게 조합해 갈 것인가에 대한 트릭이 담겨있는 설정이다. 위와 같이 설정하고 나면 prometheus 는 아래와 같이 target 에 명시된 URL 을 크롤링 하기 위한 blackbox_exporter 용 URL 을 생성하여 그것을 pulling 한다.


* localhost:9115/probe?module=http_2xx&target=https://nz.pe.kr # target 뒤의 값은 URL encoding 된다.
* localhost:9115/probe?module=http_2xx&target=https://curious.com/api/someapi?hello=world

#1 여기서 __address__ 는 target 내의 서비스들을 말하는데 [] 로 감싸져있어 배열이다. (그래서 labels 도 복수형) 이것이 __param_ 이 된다. 즉 blackbox_exporter 의 target 파라미터로 대체되어 들어간다.

#2 또한 그 target 들은 prometheus 의 instance label 이 된다. 표시되는 그래프에서 구별해 볼 수 있는 구분자 라벨이다. 즉 #1의 target_label 은 __param_ 이 prefix 이므로 파라미터로 전환되는 것이고 #2는 prefix 가 없으므로 그대로 label이 된다.

#3 마지막으로 마지막으로 __address__ 즉 조회할 서버 (target_label) 의 주소는 localhost:9115 로 대체된다.

targets 정제하기

static_configs:
  - targets:
     - https://nz.pe.kr/too/too/too/too/so/so/long/user?hello=world#GET_USER
     - https://nz.pe.kr/too/too/too/too/so/so/long/and/again/long/point?hello=world#GET_POINT
relabel_configs:
       - source_labels: [__address__]
         target_label: __param_target
       - source_labels: [__param_target]
         regex: .*(#.*)
         replacement: $1
         target_label: instance
       - target_label: __address__
         replacement: localhost:9115 # The blackbox exporter.

너무 target 이 길면 나중에 prometheus 에서 조회한 URL 이 너무 길고 나중나중에 grafana 로 연계 할 때도 안 좋기 때문에 (#.*) # 뒤에 오는 것을 $1번 변수에 담아서 instance 라는 라벨에 할당할 수 있다. 나중에 화면 볼때 쓸데 없이 긴 라벨이 없어 깔끔하다.

서비스별 응답시간

여기까지 prometheus 에 웹서버의 상태를 표시하기 위한 여정을 마친다. metric 을 쭑 훑어보면 웹서버의 응답 시간을 나타내는 probe_duration_seconds 를 찾을 수 있고 최종적으로는 등록된 API 들에 대한 측정치를 확인 할 수 있다.

다음은 응답시간을 받아올 수 없을 때, 즉, blackbox_exporter 의 조회 API 인 probe API 의 조회 실패 케이스 probe_success 0 일 때 slack 으로 알림을 받는 방법을 알아본다.

좀 오래된 go 책을 사서 따라 하다가 안될 때는 GO111MODULE 부터 봐야 할 듯.

몇년된 go 책을 보면 거의 뭔가 안되는데

GO111MODULE 때문인것 같다.

C:\src\learninggo\src\anydir>go run anyfile.go
anyfile.go:3:8: package greet is not in GOROOT (C:\Program Files\Go\src\greet)

C:\src\learninggo\src\anydir>set GO111MODULE=off
or
go env -w GO111MODULE=auto

C:\src\learninggo\src\anydir>go run anyfile.go
Hello greeting pack

책의 go version 과 요즘음의 go version 의 차이로 module 의 기본 사용이 강제 되는 듯.

회사 코드도 컴파일이 안되는게 이것 때문인듯. 오히려 예전 버전의 go를 설치 하고 있는 것도 문제.

windows 에서 docker 로 띄운 container 에 옆/외부 컴퓨터에서 접속할 수 없는 경우 개인 네트워크 공용 네트워크 그리고 윈도우 방화벽

예를 들어서 nginx를 9999 포트로 띄운다고 가정해보자.

docker run -p 9999:80 nginx

localhost:9999 로 붙으면 당연히 잘 될 것이다.

이 컴퓨터의 ip 가 192.168.0.2 라고 가정해 보자.

옆 컴퓨터에서 붙어 보자.

192.168.0.2:9999

이 때 안되는 경우에 대한 이야기를 시작한다.

일단 결론적으로 나의 경우 안되었던 이유는 docker container 를 띄운 windows 컴퓨터가 붙은 공유기를 “공용 네트워크” 로 선택했기 때문이었다.

컴퓨터를 세팅한 첫날부터 잘못된 선택이었다. 처음에는 outbound 로 인터넷만 하는 컴퓨터라 신경을 안 썼는데 “서버” 로 돌릴 host 컴퓨터라면 당연 “개인 네트워크”로 선택하는 것이 좋겠다. 왜냐하면 host 컴퓨터의 입장에서는 내 공유기가 “공용 네트워크” 로 “선언” 했다는 것은 마치 커피숖 wi-fi 붙은거랑 같게 보안을 강화해 달라는 설정을 한 것이나 다름 없기 때문이다.

그러니 옆에 컴퓨터에서 host 컴퓨터에 붙으려고 해도 대부분 기본 차단된다. 이는 커피숖의 다른 누군가가 내 컴퓨터에 접속 시도하는 것을 죄다 막는 “공용 네트워크” 설정 때문이다.

host 컴퓨터가 붙은 wi-fi 가 “개인 네트워크” 설정을 했다면 기본적으로 외부 컴퓨터에서 host 컴퓨터가 열어 놓은 port 에 접속이 잘 되기 마련인데 이는 docker for desktop 등을 설치 했을 때, 처음 서버를 기동 했을 때 windows 가 분명히 물어봤을 것이다.

시작>실행> wf.msc 에서 나오는 인바운드 규칙을 보면 나의 경우는 docker 프로그램이 여는 모든 포트가 허용되되 개인 프로필 즉, 개인 네트워크에 붙어 있을 때에만 허용하고 “공용 프로필” 은 명시적으로 거절하도록 되어 있다.

이것이 무슨 포트인지는 중요하지 않다. docker 로 실행된 모든 포트는 허용을 하게 된다.

windows 에서 리스닝 중인 포트에 대해서 어떠한 프로그램이 그 포트를 열고 있는가를 거꾸로 찾아 들어가는 방법이 있다.

netstat -aon 과 linux 의 grep 격인 findstr 를 조합하면 된다. 9998 을 열고 있는 프로그램의 ID 를 찾는다.

netstat -aon 과 findstr

프로그램 ID 를 찾았다면 이제 프로그램이 무엇인지 단번에 알아낼 수 있다.

linux 의 ps -ef 격인 tasklist 이다. 여기서도 findstr 를 조합한다.

com.docker.backend.exe 가 결국 9998 포트를 열고 있는 프로그램인 것을 알 수 있다.

com.docker.backend.exe 프로그램의 fullpath 를 아는 방법은 아래의 명령으로 가능하나 외우기가 어렵다. 따라서 작업관리자 > 세부정보 탭에서 파일 위치 열기를 하는 것이 낫겠다.

C:\Users\nzin4>wmic process where “name=’com.docker.backend.exe'” get executablepath
ExecutablePath
C:\Program Files\Docker\Docker\resources\com.docker.backend.exe

이제 옆 컴퓨터에서의 테스트가 끝났다면 공유기 외부에서의 접속을 시도해볼 차례다. 공유기는 각 공유기 제조사마다 “포트 포워딩” 가이드를 제공하고 있다. port forwarding 설정을 잘만 한다면 host 즉, windows 컴퓨터의 외부에서의 접속 테스트는 완료된 상태이므로 무리없이 진행될 것이다.

개인 라이센스로 구매한 소프트웨어 (SecureCRT) 회사에서 업무용으로 쓸 수 있는가? :: YES

회사에서 몇가지 s/w 를 구매해야 하는데 그냥 법카로 사서 청구하라고 해서 개인용으로 구매하라는 뜻인지.. 결론적으로 s/w 회사에서 license 를 개인용 / 업무용을 명확하게 나누지 않고서야 개인용으로 구매해도 문제가 없다는 생각이 든다. 즉, 개인용으로 귀속시키면 내 전용 s/w 가 되고 어딜 가서 사용해도 괜찮다는 의미가 되겠다.

SecureCrt 에 문의 메일을 보내서 가능하다는 답변을 받았다.

구매 라이센스는 computer 에 귀속된다.

제목: Re: Can I use personal license S/W at my company? [T02035873:002]

Hello,

Thank you for your e-mail.

Providing you stay in compliance with our End-user License
Agreement and are authorized by your company to install a
personal License on your work computer there should not be
an issue.

That being said SecureCRT is licensed per “computer” as
defined in section 3 of the SecureCRT EULA which can be
found at the following location:

https://www.vandyke.com/pricing/licensing.html

As defined in the SecureCRT EULA, a “computer” can be one of
the following:

  1. A client machine running a client operating system like
    Windows 10, macOS or Linux.
  2. A “seat” which is defined as a software or hardware
    client that has access to use SecureCRT on a terminal
    or RDS server.

You will need 1 SecureCRT License for each “computer” that
has access to use SecureCRT locally or remotely.

A single SecureCRT License can be used by a single
individual to register SecureCRT on one additional
“computer” as defined in the SecureCRT EULA as long as the
individual has SecureCRT running on a single “computer” at a
time.

Please let me know if there is anything else I can do for you.

Misty Buck
VanDyke Software, Inc.
505-332-5710
505-332-5701 (fax)
sales@vandyke.com
www.vandyke.com

outlook 에서 보낸 메일 중 응답 오지 않은 메일 확인하기

gmail 을 주력으로 쓸 때도 관심 있는 주제였는데 회사를 바꾸고 outlook 을 주력으로 쓰다보니 찾아보게 된다.

인터넷 검색하면 아래와 같은 filter 를 SQL 란에 넣으라는 글이 많이 보이는데 당췌 되지 않는다.

NOT (“http://schemas.microsoft.com/mapi/proptag/0x10810003” = 102 OR “http://schemas.microsoft.com/mapi/proptag/0x10810003”

(?) 포기 하고 좀 지내다 보다가 괜찮은 방법을 발견했다. 참조에 항상 나를 넣고 보낸 편지함에 도착하게 된 내 편지 중 보낸 사람이 나인 경우에 내가 보낸 편지함으로 이동 시킨다. (이것이 보낸 편지와는 좀 성격이 르다.)

이제 받은 편지함에서 내가 보낸 편지함으로 규칙 이동 된 내 편지에 flag 를 걸어두고, 주기적으로 flag를 확인하면 된다.

초등학교 원격 수업 노트북 대비 패드의 단점 vs

코로나 4차 대유행 / 4단계 거리두기가 시작 되었다. 2학년인 둘째는 원격수업을 안 하다가 이번에는 시작하게 되었다. 컴퓨터 방에 컴퓨터가 옹기종기 모여 있지만 수업을 같이 하기에는 안 좋을 것 같아서 거실에서 수업을 들을 계획인데 노트북으로 수업을 하는 첫째에게 패드로 수업 듣는 친구가 있냐 물었더니 많다고 한다.

그래서 그냥 패드로 수업을 듣게 하려다가.. 첫째에게 패드로 수업 듣는 친구가 혹시 수업 듣기 어려운 점이 있는지 물었더니 의외로 많이 있길래 적어 본다.

  • 수업시간에 손들기를 시키면 실제로 드는 경우도 있으나 이모지로 표현하는 경우가 있는데 패드의 경우 접근성이 떨어져서 순발력/순서에서는 느리다고 한다.
  • PC에서는 멀티보기로 선생님을 항상 고정하고 여러 친구의 모습을 볼 수 있는데 타블렛은 그참여자 한눈에 보는 슬롯이 적어 선생님을 항상 보면서 수업을 듣기 어려운 모양이다.
  • 학교에서 학습지를 받아오지 못한 경우 출력을 위한 파일을 전달 받게 되었는데 패드에서 프린터 설정을 해 놓지 않았다면 인쇄를 못하는 친구가 있다고 한다.
  • 타 사이트 오픈
    • 선생님이 수업에 참고되는 사이트 링크를 주는 경우가 있는데 아이패드 사용자의 경우 카메라 연결이 끊기는 모양.
    • 참고 사이트는 마우스 대응으로 되어 있고 터치 되응이 안되는 사이트가 적은 모양
    • 영어는 퀴즐렛 과학은 가상 용수철 중력 실험 사이트
  • 미술시간에 그림판으로 그리기를 하는데 패드는 할 수 없다.
  • 카메라 위치 변경
    • 노트북이나 패드는 카메라 방향 조정이 번거로운데 가끔 과제를 손으로 쓰고 있는 모습의 촬영이나 체육 시간에는 서서 율동하는 모습을 보여주려면 카메라 위치 조정이 수월해야 할 것 같다.
  • 성능
    • 타블렛 성능에 따라 원격수업 중에 화면이 끊기거나 급기야 선생님 목소리가 끊겨 들리는 듯 보인다고 한다.

꼰대는 왜 변하지 않는가? 직장생활에서 꼰대가 되지 않는 방법 – 첫 마음가짐대로 될 것이다.

Table Of Contents

나이가 만 41살이 되었다. 직장에서 꽤 높은 위치에 있는 것 같다. 나 스스로는 아직 젊다고 생각하고 사원 대리급과 농담 따먹기도 잘 한다고 생각하는데 그들은 나를 어떻게 생각할까? 마침 아내가 공직에서 30~40명을 거느린(?) 팀장이 되어서 처음 팀원들을 만날 때의 인상에 대한 얘기를 하다가 급 깨닫는 것이 있어 정리해 본다.

친한 친구와의 거침없음

나에게는 좋아하는 동생 둘이 있는데 나를 포함해서 3명이 있는 카톡방에서 그렇게들 서로 거침 없이 말을 뱉는다. 지금이야 익숙해 졌지만 사이가 안 좋거나 싸우는 줄 알았다. 시간이 지난 후 그들이 불알친구고 그럴 수 밖에 없다는 것을 알았다.

그런데 그 느낌이 뭔지 알 것 같다. 나도 학창시절 친구들을 만나면 그 때의 나이로 돌아가 말투가 그 때로 돌아간다. 그야말로 욕도 하면서 서로 까고 논다. 그러면서도 우리는 기분이 나쁘지 않고 즐겁다. 그 모습 또한 누가 보면 싸우는 것 같이 보이기도 할 것 같다.

가끔 만나는 친구들. 그 친구를 처음 만났을 때 그 느낌으로 대화 분위기가 바뀐다. 내가 몇 살이 되든 상관이 없다. 이렇듯 회사에서 만나는 사람과도 그 대화 방식이 고정이 되는 것을 느낀다. 물론 처음 어색할 때와 조금 친해지고 나서 조금은 바뀔 수는 있다.

첫 만남 그대로

처음부터 말을 놓는 사람은 나중에 더 가까워지면 꼰대가 되는 것 같고 처음에는 존대를 하다가 가까워져서 말을 놓는 하는 사람은 그래도 말투만 친해졌지 여전히 마음가짐과 태도에는 변화가 없는 것을 느낄 수 있다.

그래서 첫 인상이 중요하다고 하는가? 일종의 목표를 갖고 처음부터 확 휘어잡고 싶은 사람은 처음부터 말을 놓는 경우가 많다. 그것이 결국 그가 만나는 사람들과의 관계의 출발선이다. 처음부터 지위의 격차를 강조하고자 하는 사람이 만나는 사람은 아무리 친해지고 싶어도 이미 첫 인상이 그렇기에 반감이 생기고 굳어지게 마련이다. 그래서 그 이후에는 잘 하고 싶어도 결코 가까워질 수 없는 벽이 생기는 것 같다.

가족도 마찬가지

이 원리는 아버지와 나와의 관계에서도 나타나는데 아빠는 항상 나를 어린아이로 보는 것 같다. 아빠가 나를 이제는 어른으로 대해주길 바라지만 이미 성인이 된지 20년이 흘렀는데도 여전히 나는 아버지에게 어린아이다. 바꿀 수 없다.

나는 개발자니까 웬만하면 편하게 입는 편이지만 면접을 보거나 첫 만남을 가질 때는 거의 비즈니스룩을 하는 편이다. 그러면 꼭 편하게 입어도 되는데~ 라고 거드는 사람이 있다. 그렇지만 나는 첫 인상을 중요하게 여기므로 바뀌지 않는 편이다.

사람간의 관계에서 처음 굳어진 그 관계를 깨기란 어려운 것 같다. 그렇다면 나는 직장 생활에서 만나는 사람과의 관계를 어떻게 정리해야 할 것인가? 첫인상 첫 마음가짐 그것이 관계를 만드는 것이다.

windows findstr 주변 검색 (select-string context)

grep 은 -C 로 내가 찾고 싶은 단어 위아래로 검색 하게 해주는데 windows 에서도 찾아봤는데 findstr 로는 안되고 powershell 명령어인 Select-String 으로 되는 것을 확인

Yaml 형태의 문법인 경우 유용하게 사용 가능하다.

PS C:\Users\nzin4> kubectl describe po flask3 | Select-String -Pattern 'Label' -Context 2,3

  Node:         minikube/192.168.49.2
  Start Time:   Wed, 07 Jul 2021 15:41:04 +0900
> Labels:       app=test
                run=flask3
  Annotations:  <none>
  Status:       Running

긴 결과에 대해서 Select-String 으로 pipe 로 넘긴 후 -Pattern 인자로 검색 -context 로 검색 되었다면 그 위의 2줄, 아래로는 3줄을 보여라 라는 명령을 호출하면 된다.

PS C:\Users\nzin4> kubectl describe po flask3 |Select-String -Pattern 'Label' -Context 2,3

  Node:         minikube/192.168.49.2
  Start Time:   Wed, 07 Jul 2021 15:41:04 +0900
> Labels:       app=test
                run=flask3
  Annotations:  <none>
  Status:       Running

뭔가 내가 지정한 것보다 하나 더 많이 검색 하는 것 같다.