[컴][툴] eidtor 들 몇가지

 

에디터 / 편집기 / notepad / 빠른 / 기본 편집 / 노트패드 /

eidtor 들 몇가지

See Also

  1. Rope science - Introduction : xi text editor 구현에 쓰인 원리중 일부를 이야기해준다.
  2. 쿠…sal: [컴][유틸] 대용량 파일 뷰어 big size file viewer
  3. Text Editor Data Structures - invoke::thought()

[컴][네트워크] AWS 에서 url path 에 대한 routing 설정

라우팅 / 접근제한 / 로드밸런서 / 로드 /

AWS 에서 url path 에 대한 routing 설정

aws load balancer 중 application level 에서 동작하는 녀석을 사용하면 된다.

그리고 listener에서 rule 을 설정해주면 된다.

다음과 같이 여러 요소들을 조건으로 줄 수 있다.

  • path
  • host header
  • http header
  • http request method
  • query string
  • source ip

screenshots

Reference

[컴][보안] AWS 와 ISMS

 

인증 /

AWS 와 ISMS

위의 글에 있는 내용 일부 정리

  • HW방화벽 설치 부분을 AWS 특정 가입정보를 안내에 따라 캡쳐해서 신고한 경우

  • ISMS 는 어느정도 해결됐다?

  • K-ISMS – Amazon Web Services(AWS)

AWS의 K-ISMS 인증은 K-ISMS 인증을 받으려는 고객에게 어떤 이점이 있습니까?

공동 책임 모델에 따라 AWS는 K-ISMS 인증을 통해 클라우드의 보안(Security of Cloud)을 입증하였습니다. 이는 고객이 자체 K-ISMS 인증 절차에서 클라우드에서의 보안(Security in the cloud)과 관련된 영역에 리소스를 집중할 수 있도록 합니다.

이 Quick Start는 ISMS-P 제어 요구 사항을 충족하는 보안 및 관리 서비스를 포함하여 개인 정보 및 정보 보안 관리 시스템(ISMS-P)을 배포합니다. 여러 Amazon Web Services(AWS) 서비스를 결합하여 일반 다중 계층 웹 애플리케이션을 지원하는 방법을 보여줍니다.

See Also

  1. (비공인)네이버 클라우드 ISMS-P 인증심사 통과하기

[컴][툴] dbeaver 사용 tips

tip들 / 팁 들 /

dbeaver 사용 tips

sql 추출할 때 row id 를 넣는법

[컴] reddit 의 ranking system 에 대한 이야기

recommendation system/ 추천 시스템 / 순위 / 랭킹 시스템 / 구조

reddit 의 ranking system 에 대한 이야기

출처: From Service to Platform: A Ranking System in Go : RedditEng

  • Reddit 의 ranking system 에 대한 이야기, unix pipeline 의 컨셉을 빌려왔다는 점이 흥미롭다.

[컴][툴] vscode 에서 dev container 를 이용해서 개발하기

데브 컨테이너 / development container / 개발 컨테이너

vscode 에서 dev container 를 이용해서 개발하기

개인적으로 이것을 이용하면, windows 에서 개발이 유리해진다고 보여진다.(사실 다른 os 는 많이 안쓰기 때문에 뭐라 이야기할 수 없다.^^;;;) linux 환경에서의 개발이 필요할 때 편리하게 사용할 수 있다. 그리고 container 로 아무런 dependency 가 걸려있지 않은 초기의 이미지를 사용할 수 있기 때문에 환경 구성등이 훨씬 용이하다고 생각된다.

Prequisites

  1. vscode 가 설치되어 있어야 한다.
  2. docker deamon 이 돌고 있어야 한다.

전체 절차

  1. Dev Containers extension 을 설치하자.
  2. devcontainer.json 파일 만들고, project 안에 넣는다.(여기서는 <proj>\.devcontainer\devcontainer.json 에 넣었다.)
    • 이 파일이 vscode 에게 어떻게 dev container 에 접근할지를 알려준다. 그리고 connect 한 이후에 뭘 할지도 여기에 적는다.
  3. ‘Dev Container: Reopen in Container’ 를 실행하자.
  4. 그러면 왼쪽 하단에 Dev Container 라는 표시를 확인할 수 있다.
  5. 이렇게 받은 image는 docker desktop 등에서 삭제할 수 있다.

자세한 내용

여기서 사용하는 project 의 path 는 ‘d:’ 이다.

1. devcontainer.json 생성

아래처럼 devcontainer.json 을 생성했다.

- .devcontainer/
    - devcontainer.json

devcontainer.json의 내용:

devcontainer.json 에는 docker image 를 하나 적었다. docker image 는 docker hub 에서 하나 찾았다.(링크 : https://hub.docker.com/r/sandrokeil/typescript)

{
  "image": "sandrokeil/typescript"
}

2. Dev Containers extension 설치

  • vscode 를 열고, project root을 열자.

  • 그리고 Dev Containers extension 을 설치하자.

  • 그러면, ‘Dev Container: Reopen in Container’ 라는 메뉴가 생긴다.

3. Reopen in Container

  • ‘Dev Container: Reopen in Container’ 를 실행하면, container 를 열게 된다.

  • 그러면 docker image 를 받고, 그 안에 vscode server를 설치하는 듯 하다.(아래 log 에서 확인할 수 있다.)

  • 참고로 [38565 ms] 5235c6bb189b60b01b1f49062f4ffa42384f8c91 linux-alpine stable 에서 한 200초정도를 머무른다. 그러니 여유롭게 기다리자.

  • 설치가 끝나고 dev container 를 open 하면 오른쪽 하단에 ‘Dev Container’ 라는 표시를 확인할 수 있다.

  • vscode 는 image 의 /workspaces라는 곳에 현재 project 를 복제하게 된다. 만약 local 에 file 을 추가하면, image 에도 같이 파일이 추가된다.

  • ’terminal’을 열면, docker image 내에서 bash 등을 열어주게 된다.

log:

[131 ms] Dev Containers 0.266.1 in VS Code 1.74.0 (5235c6bb189b60b01b1f49062f4ffa42384f8c91).
[130 ms] Start: Resolving Remote
[139 ms] Setting up container for folder or workspace: d:\a\prog\devcontainer
[141 ms] Start: Check Docker is running
[141 ms] Start: Run: docker version --format {{.Server.APIVersion}}
[268 ms] Server API version: 1.41
[269 ms] Start: Run: docker volume ls -q
[376 ms] Start: Run: docker volume create vscode
[553 ms] Start: Run: docker ps -q -a --filter label=vsch.local.folder=d:\a\prog\devcontainer --filter label=vsch.quality=stable
[653 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=d:\a\prog\devcontainer
[762 ms] Start: Run: D:\a\appss\Microsoft VS Code\Code.exe --ms-enable-electron-run-as-node c:\Users\myuser\.vscode\extensions\ms-vscode-remote.remote-containers-0.266.1\dist\spec-node\devContainersSpecCLI.js up --user-data-folder c:\Users\myuser\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote.remote-containers\data --workspace-folder d:\a\prog\devcontainer --workspace-mount-consistency cached --id-label devcontainer.local_folder=d:\a\prog\devcontainer --log-level debug --log-format json --config d:\a\prog\devcontainer\.devcontainer\devcontainer.json --default-user-env-probe loginInteractiveShell --mount type=volume,source=vscode,target=/vscode,external=true --skip-post-create --update-remote-user-uid-default on --mount-workspace-git-root true
[930 ms] (node:15876) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
[931 ms] (Use `Code --trace-deprecation ...` to show where the warning was created)
[931 ms] @devcontainers/cli 0.25.2. Node.js v16.14.2. win32 10.0.19044 x64.
[931 ms] Start: Run: docker buildx version
[1232 ms] github.com/docker/buildx v0.9.1 ed00243a0ce2a0aee75311b06e32d33b44729689
[1232 ms] 
[1232 ms] Start: Resolving Remote
[1233 ms] Start: Run: git rev-parse --show-cdup
[1267 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=d:\a\prog\devcontainer
[1372 ms] Start: Run: docker inspect --type image sandrokeil/typescript
[3330 ms] local container features stored at: c:\Users\myuser\.vscode\extensions\ms-vscode-remote.remote-containers-0.266.1\dist\node_modules\vscode-dev-containers\container-features
[3331 ms] Start: Run: tar --no-same-owner -x -f -
[3387 ms] Start: Run: docker events --format {{json .}} --filter event=start
[3393 ms] Start: Starting container
[3394 ms] Start: Run: docker run --sig-proxy=false -a STDOUT -a STDERR --mount type=bind,source=d:\a\prog\devcontainer,target=/workspaces/devcontainer,consistency=cached --mount type=volume,src=vscode,dst=/vscode -l devcontainer.local_folder=d:\a\prog\devcontainer --entrypoint /bin/sh -l devcontainer.metadata=[] sandrokeil/typescript -c echo Container started
Unable to find image 'sandrokeil/typescript:latest' locally
latest: Pulling from sandrokeil/typescript
540db60ca938: Pull complete
48a84b549a88: Pull complete
b7b61ff2ef28: Pull complete
7b9525477877: Pull complete
2c832a1119b4: Pull complete
d632fe9858ab: Pull complete
Digest: sha256:b6f70ba4e3753dd7bbdeb69212eabb08887c8cd73ad4f7c701048c6181519301
Status: Downloaded newer image for sandrokeil/typescript:latest
Container started
[37005 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=d:\a\prog\devcontainer
[37108 ms] Start: Run: docker inspect --type container 5473c395ec0b
[37215 ms] Start: Inspecting container
[37215 ms] Start: Run: docker inspect --type container 5473c395ec0bb5949a65a58568932743d41547f7df7b011e76ee3ad8e1cb9a33
[37322 ms] Start: Run in container: /bin/sh
[37329 ms] Start: Run in container: uname -m
[37493 ms] x86_64
[37493 ms] 
[37493 ms] Start: Run in container: (cat /etc/os-release || cat /usr/lib/os-release) 2>/dev/null
[37494 ms] NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.13.5
PRETTY_NAME="Alpine Linux v3.13"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
[37494 ms] 
[37494 ms] Start: Run in container: cat /etc/passwd
[37496 ms] Start: Run in container: test -f '/var/devcontainer/.patchEtcEnvironmentMarker'
[37497 ms] 
[37497 ms] 
[37497 ms] Exit code 1
[37497 ms] Start: Run in container: test ! -f '/var/devcontainer/.patchEtcEnvironmentMarker' && set -o noclobber && mkdir -p '/var/devcontainer' && { > '/var/devcontainer/.patchEtcEnvironmentMarker' ; } 2> /dev/null
[37499 ms] 
[37499 ms] 
[37499 ms] Start: Run in container: cat >> /etc/environment <<'etcEnvrionmentEOF'
[37500 ms] 
[37500 ms] 
[37500 ms] Start: Run in container: test -f '/var/devcontainer/.patchEtcProfileMarker'
[37501 ms] 
[37501 ms] 
[37501 ms] Exit code 1
[37501 ms] Start: Run in container: test ! -f '/var/devcontainer/.patchEtcProfileMarker' && set -o noclobber && mkdir -p '/var/devcontainer' && { > '/var/devcontainer/.patchEtcProfileMarker' ; } 2> /dev/null
[37502 ms] 
[37502 ms] 
[37502 ms] Start: Run in container: sed -i -E 's/((^|\s)PATH=)([^\$]*)$/\1${PATH:-\3}/g' /etc/profile || true
[37503 ms] 
[37503 ms] 
[37514 ms] Start: Run: docker inspect --type container 5473c395ec0bb5949a65a58568932743d41547f7df7b011e76ee3ad8e1cb9a33
[37631 ms] Start: Run: D:\a\appss\Microsoft VS Code\Code.exe --ms-enable-electron-run-as-node c:\Users\myuser\.vscode\extensions\ms-vscode-remote.remote-containers-0.266.1\dist\spec-node\devContainersSpecCLI.js read-configuration --workspace-folder d:\a\prog\devcontainer --id-label devcontainer.local_folder=d:\a\prog\devcontainer --container-id 5473c395ec0bb5949a65a58568932743d41547f7df7b011e76ee3ad8e1cb9a33 --log-level debug --log-format json --config d:\a\prog\devcontainer\.devcontainer\devcontainer.json --mount-workspace-git-root true
[37802 ms] (node:13760) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
[37802 ms] (Use `Code --trace-deprecation ...` to show where the warning was created)
[37803 ms] @devcontainers/cli 0.25.2. Node.js v16.14.2. win32 10.0.19044 x64.
[37803 ms] Start: Run: git rev-parse --show-cdup
[37840 ms] Start: Run: docker inspect --type container 5473c395ec0bb5949a65a58568932743d41547f7df7b011e76ee3ad8e1cb9a33
[37953 ms] Start: Run: D:\a\appss\Microsoft VS Code\Code.exe --ms-enable-electron-run-as-node c:\Users\myuser\.vscode\extensions\ms-vscode-remote.remote-containers-0.266.1\dist\spec-node\devContainersSpecCLI.js read-configuration --workspace-folder d:\a\prog\devcontainer --id-label devcontainer.local_folder=d:\a\prog\devcontainer --container-id 5473c395ec0bb5949a65a58568932743d41547f7df7b011e76ee3ad8e1cb9a33 --log-level debug --log-format json --config d:\a\prog\devcontainer\.devcontainer\devcontainer.json --include-merged-configuration --mount-workspace-git-root true
[38130 ms] (node:28264) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
[38130 ms] (Use `Code --trace-deprecation ...` to show where the warning was created)
[38131 ms] @devcontainers/cli 0.25.2. Node.js v16.14.2. win32 10.0.19044 x64.
[38131 ms] Start: Run: git rev-parse --show-cdup
[38167 ms] Start: Run: docker inspect --type container 5473c395ec0bb5949a65a58568932743d41547f7df7b011e76ee3ad8e1cb9a33
[38282 ms] Start: Inspecting container
[38283 ms] Start: Run: docker inspect --type container 5473c395ec0bb5949a65a58568932743d41547f7df7b011e76ee3ad8e1cb9a33
[38384 ms] Start: Run in container: /bin/sh
[38395 ms] Start: Run in container: uname -m
[38533 ms] x86_64
[38533 ms] 
[38533 ms] Start: Run in container: (cat /etc/os-release || cat /usr/lib/os-release) 2>/dev/null
[38535 ms] NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.13.5
PRETTY_NAME="Alpine Linux v3.13"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
[38535 ms] 
[38535 ms] Start: Run in container: cat /etc/passwd
[38537 ms] Start: Updating configuration state
[38539 ms] Start: Setup shutdown monitor
[38539 ms] Forking shutdown monitor: c:\Users\myuser\.vscode\extensions\ms-vscode-remote.remote-containers-0.266.1\dist\shutdown\shutdownMonitorProcess \\.\pipe\vscode-remote-containers-7f2cb65384d4314f8e72c61025be1f8ed85e54be-sock singleContainer Debug c:\Users\myuser\AppData\Roaming\Code\logs\20221208T100833\window4\exthost\ms-vscode-remote.remote-containers 1670463178550
[38546 ms] Start: Run in container: test -d /root/.vscode-server
[38547 ms] 
[38547 ms] 
[38547 ms] Exit code 1
[38548 ms] Start: Run in container: test -d /root/.vscode-remote
[38549 ms] 
[38549 ms] 
[38549 ms] Exit code 1
[38549 ms] Start: Run in container: test ! -f '/root/.vscode-server/data/Machine/.writeMachineSettingsMarker' && set -o noclobber && mkdir -p '/root/.vscode-server/data/Machine' && { > '/root/.vscode-server/data/Machine/.writeMachineSettingsMarker' ; } 2> /dev/null
[38551 ms] 
[38551 ms] 
[38552 ms] Start: Run in container: cat /root/.vscode-server/data/Machine/settings.json
[38553 ms] 
[38553 ms] cat: /root/.vscode-server/data/Machine/settings.json: No such file or directory
[38553 ms] Exit code 1
[38553 ms] 
Support for Alpine Linux is in preview.

[38553 ms] Start: Run in container: test -d /root/.vscode-server/bin/5235c6bb189b60b01b1f49062f4ffa42384f8c91
[38554 ms] 
[38555 ms] 
[38555 ms] Exit code 1
[38555 ms] Start: Run in container: apk info | grep -e '^libstdc++$' || (apk update && apk add libstdc++)
[38563 ms] libstdc++
[38563 ms] WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/main: No such file or directory
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/community: No such file or directory
[38563 ms] Start: Run in container: test -d /vscode/vscode-server/bin/linux-alpine/5235c6bb189b60b01b1f49062f4ffa42384f8c91
[38564 ms] 
[38564 ms] 
[38564 ms] Exit code 1
[38565 ms] Installing VS Code Server for commit 5235c6bb189b60b01b1f49062f4ffa42384f8c91
[38565 ms] Start: Downloading VS Code Server
[38565 ms] 5235c6bb189b60b01b1f49062f4ffa42384f8c91 linux-alpine stable 
[235003 ms] Start: Installing VS Code Server
[235003 ms] Start: Run in container: mkdir -p /vscode/vscode-server/bin/linux-alpine/5235c6bb189b60b01b1f49062f4ffa42384f8c91_1670463413553
[235005 ms] 
[235005 ms] 
[235046 ms] Start: Run in container: (dd iflag=fullblock bs=8192 count=8235 2>/dev/null; dd iflag=fullblock bs=3813 count=1 2>/dev/null) | tar --no-same-owner -xz -C /vscode/vscode-server/bin/linux-alpine/5235c6bb189b60b01b1f49062f4ffa42384f8c91_1670463413553
[236382 ms] 
[236382 ms] 
[236382 ms] Start: Run in container: mv -n /vscode/vscode-server/bin/linux-alpine/5235c6bb189b60b01b1f49062f4ffa42384f8c91_1670463413553/* /vscode/vscode-server/bin/linux-alpine/5235c6bb189b60b01b1f49062f4ffa42384f8c91 && rmdir /vscode/vscode-server/bin/linux-alpine/5235c6bb189b60b01b1f49062f4ffa42384f8c91_1670463413553
[236384 ms] 
[236384 ms] 
[236385 ms] Start: Run in container: mkdir -p '/root/.vscode-server/bin' && ln -snf '/vscode/vscode-server/bin/linux-alpine/5235c6bb189b60b01b1f49062f4ffa42384f8c91' '/root/.vscode-server/bin/5235c6bb189b60b01b1f49062f4ffa42384f8c91'
[236386 ms] 
[236387 ms] 
[236387 ms] Start: Run in container: touch '/vscode/vscode-server/bin/linux-alpine/5235c6bb189b60b01b1f49062f4ffa42384f8c91' && cd '/vscode/vscode-server/bin/linux-alpine' && ls -td *[^_]????????????? | tail -n +10 | xargs rm -rf
[236387 ms] Start: Launching Dev Containers helper.
[236388 ms] ssh-agent: SSH_AUTH_SOCK in container (/tmp/vscode-ssh-auth-f51b290f7478c67b899c4920b9a5f340e72bc550.sock) forwarded to local host (\\.\pipe\openssh-ssh-agent).
[236388 ms] Start: Run: gpgconf --list-dir agent-extra-socket
[236389 ms] 
[236390 ms] 
[236409 ms] findLocalWindowsExecutable: Exectuable 'gpgconf' not found on PATH 'D:\a\appss\Python39\Scripts\;D:\a\appss\Python39\;D:\a\appss\jdk-11.0.16.101-hotspot\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;D:\a\apps\Pandoc\;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\DockerDesktop\version-bin;d:\a\appss\Bitvise SSH Client;D:\a\appss\TortoiseGit\bin;d:\a\appss\Git\cmd;D:\a\appss\Amazon\AWSCLIV2\;D:\a\appss\nodejs\;C:\ProgramData\chocolatey\bin;C:\Users\myuser\AppData\Local\Microsoft\WindowsApps;C:\Users\myuser\AppData\Roaming\npm;d:\a\appss\Graphviz\bin'.
[236411 ms] Start: Run in container: /bin/sh
[236412 ms] userEnvProbe: loginInteractiveShell (default)
[236412 ms] userEnvProbe shell: /bin/ash
[236416 ms] Start: Run in container: # Test for /root/.ssh/known_hosts and ssh
[236417 ms] ssh not found
[236418 ms] 
[236418 ms] Exit code 1
[236418 ms] Start: Run in container: command -v git >/dev/null 2>&1 && git config --system --replace-all credential.helper '!f() { /root/.vscode-server/bin/5235c6bb189b60b01b1f49062f4ffa42384f8c91/node /tmp/vscode-remote-containers-f51b290f7478c67b899c4920b9a5f340e72bc550.js $*; }; f' || true
[236419 ms] 
[236419 ms] 
[236420 ms] Start: Run in container: for pid in `cd /proc && ls -d [0-9]*`; do { echo $pid ; readlink /proc/$pid/cwd ; readlink /proc/$pid/ns/mnt ; cat /proc/$pid/stat | tr "
[236427 ms] Start: Run in container: echo ~
[236434 ms] Start: Run in container: cat '/root/.vscode-server/data/Machine/.connection-token-5235c6bb189b60b01b1f49062f4ffa42384f8c91' 2>/dev/null || (umask 377 && echo '495bb08e-0532-4ffb-aab8-019176945612' >'/root/.vscode-server/data/Machine/.connection-token-5235c6bb189b60b01b1f49062f4ffa42384f8c91-cbdcec48-4146-4b93-b84e-0b7d60aeb1d8' && mv -n '/root/.vscode-server/data/Machine/.connection-token-5235c6bb189b60b01b1f49062f4ffa42384f8c91-cbdcec48-4146-4b93-b84e-0b7d60aeb1d8' '/root/.vscode-server/data/Machine/.connection-token-5235c6bb189b60b01b1f49062f4ffa42384f8c91' && rm -f '/root/.vscode-server/data/Machine/.connection-token-5235c6bb189b60b01b1f49062f4ffa42384f8c91-cbdcec48-4146-4b93-b84e-0b7d60aeb1d8' && cat '/root/.vscode-server/data/Machine/.connection-token-5235c6bb189b60b01b1f49062f4ffa42384f8c91')
[236437 ms] 495bb08e-0532-4ffb-aab8-019176945612
[236437 ms] 
[236437 ms] Start: Starting VS Code Server
[236437 ms] Start: Preparing Extensions
[236438 ms] Start: Run in container: test ! -f '/root/.vscode-server/data/Machine/.installExtensionsMarker' && set -o noclobber && mkdir -p '/root/.vscode-server/data/Machine' && { > '/root/.vscode-server/data/Machine/.installExtensionsMarker' ; } 2> /dev/null
[236439 ms] 
[236439 ms] 
[236440 ms] Extensions cache, install extensions: None
[236440 ms] Start: Run in container: test -d /root/.vscode-server/extensionsCache && ls /root/.vscode-server/extensionsCache || true
[236441 ms] 
[236441 ms] 
[236442 ms] Start: Run in container: test -d /vscode/vscode-server/extensionsCache && ls /vscode/vscode-server/extensionsCache || true
[236443 ms] 
[236443 ms] 
[236443 ms] Extensions cache, link in container: None
[236444 ms] Start: Run in container: /root/.vscode-server/bin/5235c6bb189b60b01b1f49062f4ffa42384f8c91/bin/code-server --log debug --force-disable-user-env --server-data-dir /root/.vscode-server --use-host-proxy --telemetry-level all --accept-server-license-terms --host 127.0.0.1 --port 0 --connection-token-file /root/.vscode-server/data/Machine/.connection-token-5235c6bb189b60b01b1f49062f4ffa42384f8c91 --extensions-download-dir /root/.vscode-server/extensionsCache --start-server --disable-websocket-compression
[236703 ms] /root
[236703 ms] 
[236704 ms] Start: Run in container: cat <<'EOF-/tmp/vscode-remote-containers-f51b290f7478c67b899c4920b9a5f340e72bc550.js' >/tmp/vscode-remote-containers-f51b290f7478c67b899c4920b9a5f340e72bc550.js
[236705 ms] 
[236705 ms] 
[236705 ms] Start: Run in container: cat <<'EOF-/tmp/vscode-remote-containers-server-f51b290f7478c67b899c4920b9a5f340e72bc550.js' >/tmp/vscode-remote-containers-server-f51b290f7478c67b899c4920b9a5f340e72bc550.js_1670463415255
[236709 ms] 
[236709 ms] 
[236754 ms] userEnvProbe PATHs:
Probe:     '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
Container: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
[236763 ms] *
* Visual Studio Code Server
*
* By using the software, you agree to
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).
*
[236766 ms] Server bound to 127.0.0.1:34861 (IPv4)
Extension host agent listening on 34861

[236766 ms] Start: Run in container: echo 34861 >'/root/.vscode-server/data/Machine/.devport-5235c6bb189b60b01b1f49062f4ffa42384f8c91'
[236767 ms] 
[236767 ms] 
[236768 ms] Port forwarding for container port 34861 starts listening on local port.
[236769 ms] Port forwarding local port 34861 to container port 34861
[236773 ms] Start: Run in container: # Test for /root/.gitconfig and git
[236774 ms] git not found
[236775 ms] 
[236775 ms] Exit code 1
[236775 ms] Start: Run in container: command -v git >/dev/null 2>&1 && git config --global --replace-all credential.helper '!f() { /root/.vscode-server/bin/5235c6bb189b60b01b1f49062f4ffa42384f8c91/node /tmp/vscode-remote-containers-f51b290f7478c67b899c4920b9a5f340e72bc550.js $*; }; f' || true
[236776 ms] Port forwarding connection from 52530 > 34861 > 34861 in the container.
[236777 ms] Start: Run in container: /root/.vscode-server/bin/5235c6bb189b60b01b1f49062f4ffa42384f8c91/node -e 
[236777 ms] 
[236777 ms] 
[236950 ms] [01:36:55] Extension host agent started.
[236983 ms] [01:36:55] ComputeTargetPlatform: alpine-x64
[236984 ms] [01:36:55] Started initializing default profile extensions in extensions installation folder. file:///root/.vscode-server/extensions
[236987 ms] [01:36:55] ComputeTargetPlatform: alpine-x64
[237011 ms] Port forwarding 52530 > 34861 > 34861 stderr: Connection established
[237022 ms] [01:36:55] Completed initializing default profile extensions in extensions installation folder. file:///root/.vscode-server/extensions
[237025 ms] Port forwarding connection from 52534 > 34861 > 34861 in the container.
[237026 ms] Start: Run in container: /root/.vscode-server/bin/5235c6bb189b60b01b1f49062f4ffa42384f8c91/node -e 
[237056 ms] [01:36:55] [127.0.0.1][56f40379][ManagementConnection] New connection established.
[237234 ms] Port forwarding 52534 > 34861 > 34861 stderr: Connection established

References

  1. Create a development container using Visual Studio Code Remote Development
  2. Use a Docker container as a development environment with Visual Studio Code - Training | Microsoft Learn
  3. Remote - Containers 를 사용한 Visual Studio Code 원격 개발 feat.Dockerfile - NHN Cloud

[컴] 2022년 11월 카카오 서비스 장애 내용

카톡 중단 이유 / 화재 사건 / 사고발생 이유 / 중단된 이유 / 이중화 /

카카오 서비스 장애 내용

정부의 디지털서비스 장애 조사결과 발표

ref. 1 의 내용을 발췌

  • 카카오 계열사의 주요서비스(카카오톡, 카카오티 등) 최대 127시간 33분간 장애 발생

  • 카카오는 서비스 기능을 5개의 레이어로 구분*하고 판교 데이터센터(Active 역할)와 기타 센터 간 동작(Active)-대기(Standby) 체계**로 이중화했으나, 이번 사고 시 대기(Standby) 시스템이 제대로 동작하지 못하였다.

* 애플리케이션, 서비스 플랫폼, 운영 및 관리도구, 데이터베이스, 기반시설 설비 레이어
** 동작 서버 작동 불능시 대기중인 대기 서버를 가동하여 서비스 제공하는 방식

  • 대기 서버를 동작 서버로 만들기 위한 권한관리 기능인 ’운영 및 관리도구*’가 판교 데이터센터 내에서만 이중화되어있을 뿐 타 데이터센터에 이중화되어있지 않아, 판교 데이터센터의 동작 서버 작동 불능 시 서비스 장애 복구가 지연되었다.

* 서비스의 가동과 운영 등을 제어하는 기능과 이러한 기능에 대한 접근 및 관리를 수행하는 도구

  • 또한,‘애플리케이션’, ‘서비스 플랫폼’ 레이어에서도 이미지·동영상 송수신 시스템 등 일부 서비스 구성 요소가 데이터센터 간 이중화되어 있지 않아 복구에 상당 시간이 소요된 원인이 되었다.

  • 카카오톡, 다음 등 카카오 서비스 대부분의 핵심기능이 판교 데이터센터에 집중되어 있어 판교 데이터센터 사고 시 카카오 대부분 서비스가 즉각 영향을 받게 되었다.

  • 특히, 여러 서비스의 구동 초기단계부터 필요한 ’카카오인증’과 같은 핵심기능도 판교 센터에 집중되어, 여러 서비스 전반에 광범위한 영향을 미친 원인이 되었다.

  • 카카오는 장애 탐지·전파·복구 전반에 걸쳐 기본 절차를 정의하고 있으나, 각 단계별 체계화 및 자동화가 미흡하였다.

    • ※ (예) 사내 전파 수단 준비 미흡, 이용자 공지채널(트위터, 페이스북)의 낮은 접근성 등
  • 일부 서버, 연결망 등 오류에 대비한 재난 대비 훈련 등 조치는 하였으나, 1개 데이터센터 전체가 일시에 불능이 되는 대형 재난상황에 대해서는 대비가 부족하였다.

  • 한편, 카카오는 10.19. ~ 11.6. 간 10만 5,116건의 피해를 접수하였으며, 이중 유료 서비스에 대한 피해는 14,918건, 금전적 피해를 언급한 무료 서비스는 13,198건이 접수되었다.

‘if kakao’ keynote 에서 밝힌 내용

  • https://youtu.be/mG17fY4RhHw?t=8m14s : 캐시서버, 오브젝트 storage(카카오톡 사진전송) 의 2중화가 완벽하지 않았다.
  • https://youtu.be/mG17fY4RhHw?t=8m35s : 다른 region 으로 자동전환해주는 시스템의 2중화가 안됐다.
  • https://youtu.be/mG17fY4RhHw?t=9m : ‘운영관리도구’(컨테이너 이미지를 저장,관리하는 시스템등), ’모니터링 시스템’의 2중화가 안됐다.
  • https://youtu.be/mG17fY4RhHw?t=9m24s : 뒤늦게 살리면서, 가용자원의 확보가 어려웠다.(me: 카카오톡 같은 거대한 시스템에 대한 자원확보는 쉽지 않은 일이긴 할듯.)
  • https://youtu.be/mG17fY4RhHw?t=10m10s : 장애 복구 인력과 컴퓨터자원 부족
  • https://youtu.be/mG17fY4RhHw?t=10m35s : 장애 대응을 위한 소통채널에 혼선. 사내 커뮤니케이션은 카카오톡, 모니터링 채널은 카카오 워크 사용했는데, 이것을 사용할 수 없는 시점에 사용할 비상 커뮤니케이션 채널이 정해진게 없었다.
  • https://youtu.be/mG17fY4RhHw?t=11m : 재해 초기의 컨트롤 타워가 없었다. ‘전체적인 조율’, ‘협업을 지원’ 하기 힘들었다.
  • https://youtu.be/mG17fY4RhHw?t=15m31s
    • 카카오, 판교 데이터센터에만 3만2천대 서버를 사용
    • 이번에 판교 데이터 센터의 전체 서버가 다운됨.
    • --> 모니터링, 분석 툴을 사용할 수 없게됨.
    • --> 장비 모니터링, ’장애 탐지’가 원활히 이뤄지지 못했다.(정보를 조회하는 것등이 원활하지 못했다.)
  • https://youtu.be/mG17fY4RhHw?t=17m4s
    • 카카오에서 사용중인 data관련 서비스들
      • MySQL, PostgreSQL, Oracle : 2중화 잘되어 있었다.
      • MongoDB : 2중화 잘되어 있었다.
      • HBase, Druid, Hadoop cluster : Druid 는 클러스터 다중화 작업, Hadoop cluster 데이터센터간 노드분산 확대 필요
  • https://youtu.be/mG17fY4RhHw?t=18m9s
    • 2중화가 잘안된 운영관리도구들
      • 사내 계정 인증 서버
      • 소스 관리 도구
      • 앱 배포 도구
      • 위키, 지라
  • https://youtu.be/mG17fY4RhHw?t=18m56s
    • 2중화가 잘 안된 플랫폼
      • 자체 클라우드
      • 엘라스틱서치 플랫폼
      • 레디스, 카프카 클러스터 운영
    • region 이 동작안할 때에 대한 대비가 없었다.
    • 수많은 서비스들이 한꺼번에 다운된 경우 어떤 순서로 restart 를 해야되는지에 대한 가이드가 없었다.
    • 엘라스틱서치, 레디스, 카프카 모두 전체중 약 1/3 가량의 클러스터에서 통신장애가 발생
  • https://youtu.be/mG17fY4RhHw?t=20m20s
    • 카카오 클라우드
      • 이중화 구성이 되어있던 부분
        • 컨테이너 오케스트레이터
        • 컨테이너 이미지 저장소
      • 이중화 구성이 안되어있던 부분
        • 주요 메타정보 저장소 : 이것이 동작하지 않아서 한동안 데이터의 위치를 찾을 수 없었다.
        • 보안키 저장소
        • 오브젝트 스토리지
        • 클러스터 모니터링 도구
  • https://youtu.be/mG17fY4RhHw?t=21m5s
    • 다음(daum) 첫화면
      • DB나 캐시서버등의 기반시스템이 HA 로 구성되어 있다.
      • 컨테이너 오케스트레이터위에서 기동, region 간 2중화는 되어 있다.
      • 각 노드별로 health check 에서 이상있는 노드를 자동으로 제외하도록 되어 있다.
      • HA 구성이 되어 있었지만, 정상작동하지 않았다.
      • 그래서 health check 가 fail 되고, 모든 app 이 disabled 돼서 오류가 발생했다.
      • 운영관리도구가 동작안해서 파악도 안됐다.
      • 다른 region 의 cache server가 동작한 이후에 서비스가 정상화 됐다.
    • 카카오톡 서버, 카카오 로그인 등의 서비스에서의 문제점
      • 서비스 간 의존성 문제
      • 서버의 불완전한 failover 구성
      • 트래픽이 쏠림에 따른 대응 부족
      • 충분치 않았던 장애 시나리오
      • 서버를 기동시켰을 때, 의존성이 있는 서버가 떠 있지 않으면 기동시킬 수 없는 서버가 있었다.
      • failover 가 되어도 이것이 health check 등이 동작하는 것을 전제로 만들어져 있어서, 동작 이상을 감지하는 서버의 문제가 발생해서 failover가 제대로 동작하지 않았다.
      • 한쪽 서버로 traffic 이 몰려서, 응답속도가 느려지고, health check에 실패하는 경우도 생겼다. 이 경우 orchestrator 가 자동으로 중지를 시키게 되어 있다. 이렇게 중지된 서버를 다시 run 하려 할 때는 container image 저장소의 장애로 다시 실행을 할 수 없었다.

Refereces

  1. 디지털서비스 장애 조사결과 발표, 시정 요구, 과학기술정보통신부 - 과학기술정보통신부, 2022-12-07