최근 나오는 IT 서적의 상당수는 챗GPT에 대한 것들이다.

순위권들을 전부 씹어먹고 있다는...

 

처음에는 LLM에 대한 역사부터 설명하는 그런 책들이 트렌드였다가

최근에는 프롬프트에 대한 것들로 채워진 책들이 트렌드를 이끌고 있다.

 

이런 책 시장에 또 하나의 챗GPT 서적이 등장했다,

표지

 

다른 챗GPT 책들과의 차별점이 보인다.

 

"개발자"

 

개발자를 위한 챗GPT 가이드인 것이다!!!

지은이

 

글로벌한 인재라는 느낌이 팍!팍! 드는 소개가 보인다.

 

그리고,

"마이크로소프트 본사의 Copilot Applied AI팀에서 Senior Data Scientist"

 

Copilot 활용에 대해서는 전문가일 것이라는 느낌이 팍! 팍!

일러두기

 

바로 이 부분이 다른 챗GPT 서적들과의 차별점이다.

개발자에게 어떤 도움이 되는지에 대해서 설명해주는 책인 것이다.

개발자를 위한

 

이 책의 정체성이기에 계속 강조해본다!

초판

 

7월의 마지막날에 등장한 따끈따끈한 책이다.

 

그런데, 펴낸곳은 "한빛미디어"인데, 책 표지를 보면 "디코딩"이라는 명칭만 보인다.

 

임프린트가 뭔가 해서 위키를 찾아봤다. (https://ko.wikipedia.org/wiki/임프린트)

임프린트(imprint)는 출판 회사에서 유능한 편집자 등에게 별도의 하위 브랜드를 내어주고 기획, 제작, 판매 등 독자적인 운영을 맡기는 방식이다. 단일 출판 회사 아래에 여러 개의 임프린트가 있을 수 있다.

임프린트 브랜드를 사용하면 출판사 등은 각각의 특정 소비자 계층에게 집중적인 마케팅이 가능하다. 출판사 뿐 아니라 게임 회사에서도 독자적인 임프린트 브랜드를 운용할 수 있다.

 

호오.... 유능한 편집자 분의 닉네임이 "디코딩"이신가 보다. 고지연님?

설명서

 

실습을 위한 자료를 받을 수 있는 정확한 경로는 다음과 같다.

- https://github.com/decodingbook/ChatGPTforDev

실습 자료

 

뭔가 여러 파일들이 있을 것 같았는데, PDF 파일 하나만 덩그러니 있다.

그래도 이렇게 GitHub.com을 이용한 실습 자료 제공은 개인적으로 참 좋다!

목차

 

목차를 보다가, 랭체인까지 설명해주는 것을 보고는 깜짝 놀랐다.

 

사실 책 제목만 보고는 챗GPT를 이용한 프롬프트 수준의 내용들일 것이라고 기대했는데,

Copilot을 이용하는 부분과 Colab을 활용하는 부분들, 그리고 랭체인까지 설명해주는 것을 보고는 정말 깜짝 놀랐다.

랭체인

 

지은이가 마이크로스프트 소속이다 보니

Azure 환경을 이용한다던지, 아니면 GitHub의 codespaces를 이용한다던지 할 줄 알았는데

Colab에서 이렇게 예제들을 설명하는 것을 보고 감동 받았다.

duckduckgo

 

거기에다가

Bing 검색이 아니라 구글 검색을 언급하고, 예제는 duckduckgo를 이용하다니...

우와~ 정말 개발자 친화적이다!!!

 

 

그리고, 개인적으로 정말 좋아하는.... 풀컬러 책이다!!!

 

 

결론적으로,

SW개발자들이라면 한 번쯤 구매해서 읽어보면

책 값 이상으로 개발 효율성을 높일 수 있을만한 내용들을 담고있다고 생각한다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

반응형

kubeflow를 급히 써봐야 할 일이 있어서 minikube 환경에서 설치를 해보려고 했는데...

 

주위에 계신 어떤 한 분이 손쉽게 성공하셨다고 하셔서 나도 그렇게 될거라 믿고 해봤는데,

뭔가의 이유로 잘 진행이 되지 않아서 짜증이 솓구쳐서 결국은 Kubernetes 환경에서 진행했다.

 

 

이하 포스팅은 설치 가이드라기 보다는

Kubeflow 설치 성공한 과정에 대한 기록이다.

 

 

0. Kubernetes

- 다음 링크의 포스트와 동일한 방법으로 설치된 환경이다.

  . https://www.whatwant.com/entry/Kubernetes-Install-1

 

단, 이 때 Kubernetes를 설치한 3대 VM의 Spec은 좀 높여야 한다.

Memory가 부족하면 Kubeflow 설치가 안된다.

memory

 

Processor도 좀 더 잡아주는 것이 좋다.

CPU

 

처음에 4GB memory, 2 core 환경에서 Kubeflow 설치를 진행했을 때 제대로 진행이 안되었다.

 

일부 Pod가 pending 상태에 있길래 살펴봤었는데

자기가 실행될 여유 memory가 있는 worker node가 없어서 였다.

 

테스트가 쉽지 않아서 세부 Spec 조정까지는 못해봤고

8GB memory, 4 core 환경으로 했을 때 성공을 했다.

 

 

1. Kubeflow & Kubernetes version

 

현재 설치되어있는 Kubernetes version은 다음과 같다.

- Kubernetes v1.25.6

kubectl get nodes

 

현재 Kubeflow 최신 Version은 v1.7이다.

https://www.kubeflow.org/docs/releases/kubeflow-1.7/

Kubeflow v1.7

 

다행히 Kubernetes v1.25와 궁합이 잘 맞는다 !!!

 

 

2. How to install Kubeflow

뒤늦게 Kubeflow를 살펴본다 ^^

- https://www.kubeflow.org/

https://www.kubeflow.org/

 

공식 가이드에서 알려주는 설치법에는 어떤 것이 있을까?

How to install

 

① Use a packaged distribution

주로 Cloud 업체에서 maintain 하면서 제공되는 배포판들이다. 즉, 나에겐 쓸모없는....^^

Active Distributions

 

② Use the raw manifests

advanced user를 위한 설치 방법이란다 ^^

Raw Kubeflow Manifests

 

manifests는 GitHub를 통해 배포되고 있다.

- https://github.com/kubeflow/manifests#installation

https://github.com/kubeflow/manifests#installation

 

우리는 이제 manifests를 이용한 Kubeflow 설치를 진행할 것이다.

 

 

3. Prerequisites

앞에서 살펴봤듯이 3개의 사전 준비 항목이 있다.

 

① Kubernetes (up to 1.26) with a default StorageClass

- Kubernetes v1.25에서도 잘 된다 ^^

- 여기서 무심히 넘기면 안되는 항목이 default StorageClass 이다. 뒤에서 깊게 살펴보겠다!

 

② kustomize 5.0.3

Kubernetes native configuration management

최근에는 kubectl 내부에 포함되어 있다고 하는데, manifests를 사용하기 위해서는 별도로 설치를 해줘야 한다.

- https://kubectl.docs.kubernetes.io/installation/kustomize/binaries/

https://kubectl.docs.kubernetes.io/installation/kustomize/binaries/

 

❯ curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"  | bash

❯ sudo install -o root -g root -m 0755 kustomize /usr/local/bin/kustomize

 

가이드에서 요구한 버전은 v5.0.3 이지만, 설치된 버전은 v5.1.1이다.

잘된다 ^^

 

③ kubectl

kubernetes 버전과 동일한 버전의 kubectl을 사용하는 것이 좋다.

Kubernetes node가 아닌 다른 workspace에서 kubectl을 사용하기 위해서는 직접 설치를 해줘야 한다.

 

❯ curl -LO "https://dl.k8s.io/release/v1.25.6/bin/linux/amd64/kubectl"

❯ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

 

kubectl을 새로 설치했다면, 자동완성 설정을 해주는 것이 편리하다.

zsh을 사용하는 경우 아래와 같은 명령어를 사용하거나, ~/zshrc에 넣어주면 좋다.

 

 source <(kubectl completion zsh)

 

~/.zshrc 파일에서 plugin에도 추가로 넣어주면 더 좋다.

 

plugins=(kubectl kube-ps1 git zsh-syntax-highlighting zsh-autosuggestions)

 

접근 권한을 얻기 위한 인증 정보(config) 파일을 얻어오는 부분은 여기에서는 생략하겠다.

 

 

4. StorageClass

Kubeflow 설치 관련한 많은 포스팅에서 잘 언급해주지 않는 부분이 바로 이 부분이다.

 

Kubeflow 설치 과정에서 약 4개의 PV(PersistentVolume) 생성을 하게 된다.

- 10Gi 용량의 PV 2개

- 20Gi 용량의 PV 2개

 

60Gi 이상의 PV를 생성할 수 있는 환경이어야 하는 것이다.

 

처음에 간단히 설치한다고 낮은 Spec의 환경에서 설치 진행하면, 이런 부분 때문에 어려움을 겪게 된다.

나도 마찬가지였다. Worer Node의 Disk 용량을 충분히 잡아놓지 않았기 때문이다.

 

그래서, NFS를 이용해서 StorageClass 설정을 진행하기로 했다.

 

① NFS Server 설치

NFS Server를 만드는 방법은 다음 포스팅을 참고하기 바란다.

- https://www.whatwant.com/entry/NFS-Server-Ubuntu-1804

 

② NFS Provisioner

Kubernetes에서 NFS를 사용하기 위한 Provisioner를 설치하자.

- https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

 

Helm을 이용하려고 하는데, 혹시 Helm이 설치 안되어 있다면 다음과 같이 진행하면 된다.

- https://github.com/helm/helm/releases

 

❯ wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz

tar zxvf helm-v3.12.3-linux-amd64.tar.gz

sudo install -o root -g root -m 0755 helm /usr/local/bin/helm

 

NFS Provisioner 설치는 다음과 같이 하면 된다.

 

❯ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

❯ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \                 
    --set nfs.server=192.168.100.153 \
    --set nfs.path=/srv/nfs

❯ kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

 

잘 되는지 테스트를 해보면 다음과 같다.

 

 kubectl create -f https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/test-claim.yaml -f https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/test-pod.yaml

❯ kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/test-claim.yaml -f https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/test-pod.yaml

 

NFS 서버에 생성된 디렉토리와 SUCCESS 파일이 확인되면 된다.

필요 없어진 디렉토리/파일 삭제는, 직접 수작업으로 NFS Server에서 진행하면 된다.

 

 

5. kubeflow install

이제 준비는 끝났다. manifest를 이용한 설치를 진행해보자.

- https://github.com/kubeflow/manifests#install-with-a-single-command

https://github.com/kubeflow/manifests#installation

 

Kubeflow 실제 설치는 정말 쉽다.

kubeflow install

 

❯ git clone https://github.com/kubeflow/manifests.git 

❯ cd manifests   

❯ while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done

 

끝!

 

이제 기다리면 된다. 시간이 좀 걸린다.

k9s

 

모든 Pod가 Running이면 된 것이다.

 

 

6. Service

웹 접근을 위해서는 현재 ClusterIP로 설정되어 있는 서비스를 NodePort 또는 LoadBalancer로 변경해주는 것이 좋다.

ClusterIP

 

설정을 변경해보자.

 

> kubectl edit service istio-ingressgateway -n istio-system

 

type 부분을 수정하고 저장하면 된다.

NodePort

 

다시 확인해보자.

NodePort

 

이제 웹브라우저로 접근하면 된다. (IP는 각자 상황에 맞게, 포트는 위와 같이 확인되는대로)

- http://192.168.100.150:31537/

login

 

기본 계정 정보는 다음과 같다.

- Email: user@example.com

- Password: 1234123 

 

kubeflow

 

수고 많으셨습니다!!!

반응형

https://minikube.sigs.k8s.io/

 

Kubernetes를 공부할 때 실습 환경으로 종종 minikube가 언급되지만

개인적으로 Kubernetes 공부 용도로는 minikube를 절대 추천하지 않는다.

 

사실 여러 부분에서 K8s를 제대로 구성한 것과의 차이가 꽤 크기 때문이다.

 

그리고 제대로 K8s 공부하기 위해서는 3대 이상의 머신 구성이 필요하지만

minikube로는 그런 상황에 대해서 실습을 할 수 없다.

 

그리고, 결정적으로 실제 업무 용도로 minikube를 사용하지 않기에

굳이 minikube에 시간 투자할 필요가 없다고 생각했었다.

 

하지만, 세상 모든 것은 나름의 쓸모가 있다!

 

그렇다. minikube가 필요해서 설치 과정을 정리해보고자 한다 ^^

 

 

0. What you’ll need

- 2 CPUs or more

- 2GB of free memory

- 20GB of free disk space

- Internet connection

- Container or virtual machine manager

  . such as: Docker, QEMU, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMware Fusion/Workstation

 

1. 실습 환경

나는 VirtualBox를 이용하기로 했다.

VirtualBox

 

- 2 CPUs or more

- 4GB of free memory

- 50GB of free disk space

- Internet connection

 

VBox

 

- OS: Ubuntu 20.04 LTS

- Container or virtual machine manager : Docker

  . Docker 설치 방법: https://www.whatwant.com/entry/docker-buildx

docker

 

2. minikube 설치

- 공식 홈페이지에서는 각 환경 別 설치 방법을 상당히 편리한 UX로 제공해주고 있다.

  . https://minikube.sigs.k8s.io/docs/start/

 

https://minikube.sigs.k8s.io/docs/start/

 

> curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

> sudo install minikube-linux-amd64 /usr/local/bin/minikube

 

그대로 실행하면 끝이다.

minikube install

 

3. minikube start

minikube를 구동시키면 귀여운 이모지들과 함께 다운로드 및 설치 등이 진행된다.

minikube start

 

4. kubectl 설치

Kubernetes(minikube)에 명령어를 전달하기 위해서는 'kubectl'가 필요하다.

  . https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/

https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/

 

가이드 문서에 있는 내용을 참조해서 설치 진행하면 된다.

kubectl install

 

❯ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

❯ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

❯ kubectl version --client

 

잘 동작하는지 살펴보자.

kubectl

 

5. Dashboard

대시보드도 손쉽게 볼 수 있다.

dashboard

 

❯ minikube addons enable metrics-server

❯ minikube dashboard 

 

 

간단하게 Kubernetes를 맛보기 하는 용도로 정말 간단하게 설치할 수 있는 좋은 도구이다!!!

 

반응형

Python Excel Deep Learning

딥러닝의 알고리즘 원리부터 파악하기

파이썬과 엑셀로 시작하는 딥러닝

표지

 

딥러닝과 파이썬은 쿵짝이 잘맞는 짝꿍같은 느낌인데, 왠지 엑셀은 어울리지 않는 느낌이 든다.

 

하지만, 딥러닝을 잘 생각해보면 테이블 형식의 데이터들과 수학이 바탕이 되어야 하고

그렇게 생각해보면 엑셀은 딥러닝에 잘 어울리는 도구일 수도 있겠다라는 생각이 든다.

 

어!? 이거 가스라이팅인가!? ^^

 

지은이

 

지은이 3명의 소개글을 읽고 공통점을 찾으셨다면~ 센스쟁이 !!!

그렇다!!! 인공지능 대학원 동문 3명이 모여서 책을 썼다!!!

 

초판

 

출간한지 얼마 안되는 따끈따끈한 New 책이다 !!!

 

서문

 

AI를 공부하는 모두가 Model Researcher일 필요는 없다.

하지만, 그렇다고 해서 딥러닝의 기본기를 배울 필요가 없는 것은 아니다.

 

인공지능을 공부했다라고 말하기 위해서는

Scikit-Learn, Tensorflow, Pytorch 등에서 제공하는 것을 그냥 가져다가 쓰기만 하는 것이 아니라

그 기본이 되는 원리에 대해서 한 번쯤은 파고들어본 경험은 있어야 한다고 생각한다.

 

일단, 책의 전체 내용을 간략히 살펴보자.

 

목차

 

크게 보면 "분류 문제 → CNN → RNN" 정도에 대해서 진행을 하게 되고

데이터 정규화 및 분할, 소프트맥스에 대해서도 설명을 해주고 있다.

 

차례

 

왠지 귀여운 느낌의 차례가 등장했다 ^^

 

조금 아쉬운 점은 ...

개인적인 취향일 수도 있지만 자고로 개발환경이라고 하면 리눅스(Linux)가 표준이지 않을까 한다!

특히 시장지배적 위치에 있는 우분투(Ununtu) 기준으로 개발환경 설명을 해줘야 하는데.... 없다!!!

 

어디까지나 개인적인 취향으로... Ubuntu 운영체제에서의 환경 구축은 다음과 같이 하면 된다.

 

1. Python 설치 및 가상 환경

  - 원하는 버전의 Python을 편하게 사용하기 위해서는 다음 링크를 참조해서 pyenv를 설치하자

    . 다양한 버전의 파이썬을 사용하려면 (pyenv)

  - 실습을 진행할 디렉토리로 이동 후 기본 환경을 맞춰보자

 

❯ cd /srv/workspace/excel-dl

pyenv local 3.8.10

❯ python -m venv .venv

❯ source .venv/bin/activate

 

python

 

2. Jupyter 설치

  - Jupyter Notebook 사용을 위해 jupyter 패키지를 설치하자

 

❯ pip install jupyter

 

  - 설치가 잘 되었는지 실행해보자

 

❯ jupyter notebook

 

jupyter notebook

 

  - 새로운 파일 생성은 책과 조금 다르기에 캡쳐한 화면으로 보여주겠다.

 

New - Notebook

 

ipykernel

 

이하 과정은 책을 보면서 따라가면 된다.

사실 위의 내용도 책의 내용과 별 차이 없다 ^^ 괜한 투정~!!!

 

책의 뒷부분에는 재미있는 것들이 부록으로 제공된다.

 

부록

 

Microsoft Excel 뿐만 아니라 `구글 스프레드시트`를 애정하는 분들을 위한 내용도 설명을 해주고 있다.

 

요즘 Pytorch에 비해 인기가 조금 시들해졌지만,

그래도 아직 그 명성을 떨치고 있는 Tensorflow를 사용하는 다양한 예제도 있다.

 

 

이 책의 가장 특징인 엑셀(Excel)을 사용하기 위한 패키지로 여기에서는 `xlwings`를 사용하고 있다.

 

xlwings

 

Jupyter Notebook에서 설치해서 사용하면 된다.

 

 

책을 보다가 깜짝 놀란 이미지가 있어서 잠시 공유 !!! ^^

 

영상 엑셀 출력

 

 

딥러닝을 공부하면서 정말 괴로운 부분이 바로 수학이다.

특히 미분 ... 어렸을 때 잘 공부해뒀어야 했는데 ... 뒤늦게 공부하려면 ... 정말 ... 짜증이 ... ^^

 

그런데, 컴퓨터를 사용하고 있으면서 그것도 프로그래밍을 하고 있으면서

미분을 컴퓨터에게 시키면 되지 왜 그것을 공부를 하고 있을까!?

 

기본적으로 컴퓨터는 ... 프로그래밍적으로 미분을 직접 푸는 것은 안된다.

(물론 불가능은 아니겠지만, 어렵다. 그리고 내가 원하는대로 나오는 것은 더더욱 어렵다)

 

그러면, 기울기를 구하기 위해 미분을 하려면 어떻게 될까!?

미분한 결과를 프로그래밍으로 구현해주면 된다.

 

미분

 

위에서 보이는 함수 중에서 `def f_prime(x):` 부분을 보면 알겠지만,

미분이 된 수식을 구현하고 있다.

 

뭐 그렇다.

 

 

이 책을 훑어보다보면 `응? 왜 굳이 Excel이 필요한거지?`라는 생각을 할 수도 있을 것이다.

사실 많은 강의와 서적에서는 Pandas/Numpy/Matplotlib 등으로 잘 설명해주고 있기 때문이다.

 

하지만, 직접 이 책을 따라하다보면 왜 엑셀을 사용하고 있는지 느낄 수 있을 것이다.

 

특히, Pandas/Numpy/Matplotlib 등을 이용해서 공부를 해보신 분이라면

엑셀을 통해서 중간에 어떻게 값들이 변해가는지 등을 눈으로 보면서 막혔던 것이 뚫리는 기분을 느낄 수도 있을 것이다.

 

 

예제 파일도 제공을 해주고 있으니 편하게 사용해보자.

  - http://infopub.co.kr/new/include/detail.asp?sku=06000248

 

http://infopub.co.kr/new/include/detail.asp?sku=06000248

 

GitHub로 샘플을 제공해주면 좀 더 좋았을 것 같은데

아쉽지만 공식 홈페이지를 통해 압축 파일을 내려받아야 한다.

용량은 2.7MB 정도이다.

 

 

책 제목에서도 나와있지만

딥러닝의 알고리즘 원리를 직접 손으로 하나씩 확인하고픈 사람들에게는 정말 가뭄의 단비같은 책이 될 수도 있다.

 

하지만, 응용 위주로 딥러닝을 공부했거나 하려고 하는 분들에게는 별 도움이 되지 않는 책이 될 것이다.

 

그리고, 나름 친절하게 설명하려고 노력은 했지만

딥러닝에 대해 비기너(Beginner)... 아직 한 번도 공부하지 않으신 분들은 따라하기에도 쉽지 않을 수 있다.

 

많은 공식이 나오는 것은 아니지만,

중간 중간 나오는 공식들이 어떤 의미인지 친절할 정도로 설명은 하지 않고 있기 때문이다.

(설명이 충분치 않은 것이 당연하다! 그걸 다 설명하려면 그것만으로도 책이 나올 것이다 ^^)

 

 

즉, 이 책을 추천하고픈 분들은 다음과 같다.

- 딥러닝 공부를 하고 있지만, 대체 GD는 뭐고 Softmax가 뭔지 원리가 궁금한 사람

- 중간 중간 단계에서 값들이 어떻게 변하는지 눈으로 확인하고 싶은 사람

- Tensorflow나 Pytorch에서 제공해주는 것만 사용하다가, 어떻게 구현된건지 궁금한 사람

 

 

(눈치 채셨겠지만 ... 같은 대학원 공부를 하고 있는 분들이 저자라서 ... 리뷰를 해봅니다만 ... 나름 솔직한 리뷰입니다 ^^)

 

이 포스팅은 제공 받은 서적으로 작성한 리뷰입니다.

 

반응형

요즘 어떤 서비스의 아키텍처를 설계한다고 하면

당연히 "마이크로서비스 아키텍처(MSA)"를 떠올리게 될 정도로 MSA는 이제 거의 표준처럼 되어 버렸다.

 

그렇기에 당연히 우리는 "마이크로서비스 아키텍처(MSA)"를 공부해야 하고,

아마존에서 설계/아키텍처 부분 베스트셀러인 이 책을 살펴보는 것은 자연스러운 수순일 것이다 ^^

 

표지

 

2017년도에 초판으로 출간된 책인데,

빠른 변화와 신기술의 등장에 발맞춰서 얼마전에 전면 개정판으로 새로운 책으로 거듭났다!

 

전면 개정판

 

이 책의 저자는 특정 회사에 속하지 않고 프리랜서로 활동하시는 것 같고,

옮긴이는 포동 서비스를 언급하신 것으로 봐서 LG유플러스에서 근무하시는 것이 아닌가 싶다 ^^

 

지은이/옮긴이

 

책 제목에 "아키텍처"가 들어가있다보니

이 책의 대상독자로 제일 먼저 떠오르는 것이 "어?! 이 책은 Architect를 위한 책인가?"였다.

 

하지만, 뒤에 설명할 목차 등을 보면 알겠지만

이 책은 개발자부터 PL 및 C-level에게도 도움이 될 수 있는

"마이크로서비스 아키텍처(MSA)"에 대한 모든 것을 담고 있는 책이다.

 

대상 독자

 

이 책은 크게 "기초/구현/사람"이라는 3개의 부로 나뉘어져 있다.

 

응?

 

사람?

 

1부 기초

 

개인적으로는 2부 구현 부분에 가장 관심이 많이 간다.

 

2부 구현

 

정말 의외인 "3부 사람" ...

 

뭐 세상 모든 일은 다 사람하기 나름이니.... 가장 중요한 것이 사람인 것 맞지만.... 호오....!

 

3부 사람

 

회사를 다니고 있다면

처음부터 아무 것도 없는 상태에서 새롭게 설계하는 일 보다는

이미 모놀리스 아키텍처로 구성되어 있는 기존의 서비스를

마이크로 서비스 아키텍처로 마이그레이션하는 일이 더 많을 것이다.

 

그래서 "Chapter3. 모놀리스 분해" 부분에 관심이 많이 갔다.

 

CH3 - 모놀리스 분해

 

아마존에서 괜히 베스트셀러가 된 것은 아니기에

책 구성과 내용은 정말 훌륭한 것 같다.

 

다만, 개인적인 취향으로 아쉬운 것은...... 풀컬러가 아니라는 점!?

ㅋㅋ 사실 책 주제 자체가 굳이 풀컬러일 필요가 전혀 없기에 이마저도 단점이 아닌 것 같다 ^^

 

CH1

 

책 내용이 훌륭하다는 예시를 들어보자면,

모놀리스의 유형 중 하나인 "모듈식 모놀리스"에 대한 설명을 한 번 살펴보자.

 

모듈식 모놀리스

 

당연하게 보일 수도 있겠지만

개인적으로는 저렇게 모듈로 나눠서 구성하면

그것을 가지고 마치 마이크로 서비스인 것처럼 착각하는 경우가 종종 있다.

그런 부분에 대한 설명이 차분하게 잘 서술되어 있는 것을 보면 이 책의 내공이 정말 탄탄한 것 같다.

 

그리고 또, 개인적으로 애정하는 쿠버네티스...

 

K8s

 

마이크로서비스 아키텍처(MSA)하면 빼놓을 수 없는 짝꿍 쿠버네티스(Kubernetes) !!!

 

 

전반적으로 이 책은 정말 "마이크로서비스 아키텍처(MSA)"의 교과서라고 불리워도 무방할만큼

탄탄한 내공이 가득차 있는 정말 좋은 책이다.

 

쿠버네티스(Kubernetes)를 공부하는 분들도 필수 도서로 같이 공부하면 정말 많은 도움이 될 것이다!!!

 

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

반응형

ChatGPT가 정말 범지구적인 인기를 얻고있다.

최근에 그 성장세가 주춤해졌다고 뉴스에서 떠들지만, 그래도 여전히 대단한 인기이다.

 

인기를 얻으면 뭐가 따라올까!?

당연히 Anti가 따라온다.

 

그리고, 일종의 sacarsm(빈정댐, 비꼼)도 등장한다.

https://bratgpt.com/

 

뭔가 깔끔하게 잘 만들어진 인터페이스가 먼저 눈에 들어온다.

그리고, 귀찮게 로그인하지 않아도 사용할 수 있다.

오른쪽 위의 X를 누르자.

https://bratgpt.com/

 

"ChatGPT를 따라했네!?"라며 그냥 넘어가지 말고

그 안의 내용물을 좀 살펴보면... 저절로 웃음이 나올 것이다.

 

AI apocalypse ?????? ㅋㅋㅋ

https://bratgpt.com/

 

한글 질문에 한글 대답도 할 줄 안다.

근데, 말투가 상당히 건방지지 않은가 ?! ㅋㅋㅋ

https://bratgpt.com/

 

저런 X가지 없는 말만 하는 것은 아니다.

가끔 말을 듣기도 하고, 실제로 코드를 생성해주기도 한다.

다만, 그다지 긴 대답을 하지는 못해서 큰 기대를 하면 안된다.

 

 

 

BratGPT는 BratAI에서 만들었다고 한다.

https://newsletter.bratai.com/p/bratgpt-unleashing-comical-sassy-powers-ai

 

그런데, 별 내용은 없다.

https://newsletter.bratai.com/

 

애초에 뭘 얻고자 이런 사이트를 운영하고자 하는 것인지는 모르겠지만,

AI 윤리를 생각해보면.... 음... 뭔가 생각해볼 꺼리가 있을 것 같다.

 

ChatGPT를 생각해보면 많은 이슈거리들이 뉴스를 장식하고 있다.

차별적인 발언을 해도 문제고, 가치 판단을 해도 문제고 ... 도덕적으로 완전무결.... 거의 순결해야 한다고 강요하고 있다.

 

과연 이것이 맞는 것일까?!

 

뭐 그냥 그렇다고.... ^^

반응형

전자제품을 구매하고 언박싱을 하면 매번 튀어나오는 매뉴얼...

하지만, 우리는 보통 그 매뉴얼을 거들떠 보지도 않는다. 어!? 나만 그런가!? ^^

 

리눅스 서버를 구성하고 종종 확인하는 리소스...

솔직히... 그 의미가 어떤 것인지 경험으로만 파악했지, 정확한 의미는 잘 모른다. 어?! 나만 그런가?! ^^

 

[ Environment ]

- VM : VirtualBox v7.0.6 r155176

- OS : Ubuntu 20.04 LTS

 

VirtualBox

 

 

[ top ]

내 서버가 왠지 힘들어하는 것 같으면 가장 먼저 확인하는 것이 'top' 명령어이다.

> top

 

여기에서 주로 보는 것은 다음의 'load average' 영역일 것이다.

load average

 

'load average'는 시스템의 부하정도를 알려주는 지표인데,

실행중인 프로세스 또는 Disk I/O 등을 위해 대기하고 있는 프로세스의 정도를 알려주는 정보로써

CPU core 1개당 1 이상의 값을 갖는다면 대기해야하는 task가 있다는 의미로 이해하면 된다.

 

그런데, 왜 3개의 값이 보일까?!

1분 / 5분 / 15분 순서로 값을 보여주는데, 이를 통해 부하가 심해지고 있는지 해소되고 있는지 경향을 볼 수 있다.

 

개인 PC라면 가성비로 사용해야하기에 1에 맞춰서 Spec을 확보해도 괜찮겠지만

서비스를 위한 서버라면 아무리 돈이 없어도 평균 0.5 이하로 맞춰야 그나마 성능 저하 없이 사용할 수 있다.

 

일단 여기까지만 알아도 충분하지 않을까!? ^^

 

 

[ core ]

우리가 요즘 사용하는 CPU는 거의 multi-core일 것이다.

어!? 그런데, 생각해보니 Kubernetes에서 POD의 core를 소숫점으로도 줄 수 있는데... 일단 지금은 무시!!! ^^

core

 

실습을 하고 있는 환경은 일단 VirtualBox에서 2 core를 할당했다.

정말 잘 되어있는지 확인해보자.

> cat /proc/cpuinfo

 

스크린샷을 다 찍기에는 너무 길어져서 잘랐는데.... 그냥 심플하게 확인하려면 다음과 같이 하면 된다.

> grep -c processor /proc/cpuinfo

 

2 core가 잘 할당되어 있는 것을 볼 수 있다.

 

다른 명령어로도 확인할 수 있다.

> lscpu

 

 

[ full-load CPU ]

CPU 관련한 부하가 한계치까지 가면 어떻게 되는지 시뮬레이션을 해보자.

 

> nano cpu.py
#!/usr/bin/python

test = 0
while True:
    test = test + 1

 

Terminal 탭을 2개를 열고 진행을 해보자.

> python ./cpu.py

 

> top

 

응?! 그런데, 2 core 인데...

CPU 100%라고 하면, load 값이 2가 되어야 할 것 같은데 ... 1 값으로 수렴하고 있는 것 처럼 보인다.

 

그 이유는!

지금 실행되고 있는 python은 core 1개에서 실행되고 있기 때문이다!

 

그러면... python을 하나 더 실행해보자.

> python ./cpu.py

 

그리고나서 top을 다시 한 번 확인해보면,

> top

 

2 core이기 때문에, 각각 100% 실행이 되고 있으니... 2 값으로 나온다.

 

어!? 그러면 하나 더 실행하면!?

> top

 

밑에 보이는 리스트 형식의 내역을 보면 CPU는 총 200%를 3으로 나눠서 사용하고 있는 것이 보일 것이다.

'load average' 값은 3값으로 수렴하고 있다.

 

 

[ uptime]

'top' 명령어 말고 다른 명령어도 알아보자.

> uptime

 

지속적으로 값을 보여주는 것이 아니라 1회성으로 뿌려주고 끝난다.

 

 

[ /proc/loadavg ]

또 다른 방법으로도 확인해볼 수 있다.

> cat /proc/loadavg

 

 

[ w ]

top 명령어와 uptime 명령어의 중간쯤에 위치하고 있는 것 같은 'w' 명령어도 있다.

> w

 

 

그런데, 'load average'를 발생시키는 요인이 CPU 사용만 있을까!?

답은.... 당연히... 아니다 !!!

 

 

[ full-load Disk I/O ]

디스크에 읽고 쓰는 것도 부하를 야기한다.

 

> nano io.py
#!/usr/bin/python

while True:
    f = open("./test.txt", 'w')
    f.write("TEST")
    f.close()

 

> python ./io.py

 

> top

 

CPU 사용량은 9%를 찍고 있지만 'load average'를 보면 1에 수렴하고 있다.

 

CPU 100%를 찍으면 어떻게 될까?

 

> python ./cpu.py

 

> top

 

'load average'를 보면 2에 수렴하고 있지만 CPU 사용량을 보면 차이가 있다.

 

 

그렇다.

'load average'는 단순하게 Running 중인 프로세스 뿐만 아니라 Disk I/O로 인해 대기타는 것도 같이 바라보고 있다.

 

그러면, 이렇게 부하가 잡히고 있을 때 분석은 어떻게 하면 될까!?

일단은 뭐, top으로 확인 가능한 아래 리스트 목록으로 추적이 가능하다.

 

하지만, CPU 부하가 문제인지 Disk I/O 대기가 문제인지 어떻게 알 수 있을까?

 

 

[ vmstat ]

어떤 상태인지 'vmstat' 명령어를 사용해보자.

> vmstat

 

'vmstat' 명령어는 일단 Virtual Memory Statistics의 약자로써 현재 CPU 및 Memory 사용량을 알 수 있다.

 

지금 여기에서 살펴볼 것은 앞 부분에 있는 "r"과 "b" 부분이다.

 

"r"은 현재 실행하려고 하거나 실행 중인 프로세스의 개수를 알려주는 것이고

"b"는 uninterruptible sleep 상태의 프로세스 개수, 즉 I/O 대기를 하고 있는 프로세스의 개수를 알려준다.

 

중간에 io.py의 실행을 종료하면 어떻게 나오는지를 살펴보자.

> vmstat 1

 

중간에 보면 "b" 부분이 0으로 바뀌는 것을 확인할 수 있다.

 

 

우리 서버가 지금 힘들어하지는 않는지

머리(CPU)가 아픈지 손(I/O)이 바쁜지 파악해서 해결해주도록 하자.

반응형

받아보는 메일링 리스트를 통해 알게된 재미있는 Framework가 있어서 한 번 다뤄보려 한다.

https://oneoneone.kr/content/d9b579e3

 

나온지 꽤 된 것임에도 잘 몰랐는데,

'노마드 코더'의 극찬 영상으로 인해 호기심을 확 끌었다.

https://www.youtube.com/watch?v=DlyoFFOcPCg

 

 

이 framework의 분류를 정확히 뭐라해야할지 애매한데, 구글링을 통해 확인한 여러 별칭은 다음과 같다.

  - CMS

  - App Framework

  - App Backend

  - Backend Framework

  - Admin Panel

  - Library

 

음... 아직 명확한 naming은 안되어있는 분류인 것이다.

하지만, 뭘 말하고자 하는 것인지는 왠지 알 수 있을 것만 같은 느낌적인 느낌!?

 

 

일단, 이번에 다뤄보고자 하는 것은 "Keystone JS"라는 아이이다.

https://keystonejs.com/

 

재빨리 설치하고 웹을 띄워보자!!!

 

 

[ Environment ]

일단 개발 환경은 다음과 같다.

- 운영 체제: Ubuntu 20.04 LTS

 

❯ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal

 

 

[ Node ]

이 아이도 Node.JS 기반이고 npm을 이용하기 때문에 node부터 설치를 해야 한다.

 

버전 호환성으로 인한 어려움이 종종 발생하기 때문에

우리는 node의 다양한 버전을 다룰 수 있는 방법이 필요하다!

 

그래서, 나의 선택은 nvm !!!

아래 링크를 통해 nvm, node, npm 설치를 하자 !!!

- https://www.whatwant.com/entry/npm

 

❯ git clone https://github.com/nvm-sh/nvm.git ~/.nvm
'/home/chani22/.nvm'에 복제합니다...
remote: Enumerating objects: 9051, done.
remote: Counting objects: 100% (1830/1830), done.
remote: Compressing objects: 100% (111/111), done.
remote: Total 9051 (delta 1764), reused 1730 (delta 1719), pack-reused 7221
오브젝트를 받는 중: 100% (9051/9051), 3.28 MiB | 10.09 MiB/s, 완료.
델타를 알아내는 중: 100% (5790/5790), 완료.


❯ cd ~/.nvm


❯ git tag


❯ git switch -c v0.39.3 tags/v0.39.3
새로 만든 'v0.39.3' 브랜치로 전환합니다
 3.8.16  chani22@chani22-VBox  ~/.nvm   v0.39.3


❯ nano ~/.zshrc

 

...
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

 

- shell 재접속 후

 

❯ nvm --version
0.39.3


❯ nvm install node
Downloading and installing node v20.4.0...
Downloading https://nodejs.org/dist/v20.4.0/node-v20.4.0-linux-x64.tar.xz...
######################################################################################################################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v20.4.0 (npm v9.7.2)
Creating default alias: default -> node (-> v20.4.0)


❯ node --version  
v20.4.0


❯ npm --version 
9.7.2

 

 

[ Keystone JS ]

npm을 이용해서 keystone-app을 생성할 수 있다.

나의 app 이름을 지어주면 기본적인 boilerplate를 생성해준다.

 

❯ mkdir keystone


❯ cd keystone


❯ npm init keystone-app@latest
Need to install the following packages:
  create-keystone-app@9.0.1
Ok to proceed? (y) 

✨ You're about to generate a project using Keystone 6 packages.

✔ What directory should create-keystone-app generate your app into? · my-app

⠋ Installing dependencies with yarn. This may take a few minutes.
⚠ Failed to install with yarn.
✔ Installed dependencies with npm.


🎉  Keystone created a starter project in: my-app

  To launch your app, run:

  - cd my-app
  - npm run dev

  Next steps:

  - Read my-app/README.md for additional getting started details.
  - Edit my-app/keystone.ts to customize your app.
  - Open the Admin UI
  - Open the Graphql API
  - Read the docs
  - Star Keystone on GitHub


❯ cd my-app/


❯ ls -al
합계 484
drwxrwxr-x   4 chani22 chani22   4096  7월 12 16:28 .
drwxrwxr-x   3 chani22 chani22   4096  7월 12 16:26 ..
-rw-rw-r--   1 chani22 chani22     46  7월 12 16:26 .gitignore
drwxr-xr-x   2 chani22 chani22   4096  7월 12 16:28 .keystone
-rw-rw-r--   1 chani22 chani22   2874  7월 12 16:26 README.md
-rw-rw-r--   1 chani22 chani22   2710  7월 12 16:26 auth.ts
-rw-rw-r--   1 chani22 chani22   1014  7월 12 16:26 keystone.ts
drwxrwxr-x 570 chani22 chani22  20480  7월 12 16:28 node_modules
-rw-rw-r--   1 chani22 chani22 410056  7월 12 16:28 package-lock.json
-rw-rw-r--   1 chani22 chani22    397  7월 12 16:26 package.json
-rw-rw-r--   1 chani22 chani22   9506  7월 12 16:26 schema.graphql
-rw-rw-r--   1 chani22 chani22   1056  7월 12 16:26 schema.prisma
-rw-rw-r--   1 chani22 chani22   5178  7월 12 16:26 schema.ts
-rw-rw-r--   1 chani22 chani22    195  7월 12 16:26 tsconfig.json
 3.8.16  chani22@chani22-VBox  /srv/workspace/ks/my-app


❯ nano keystone.ts


❯ npm run dev

> keystone-app@1.0.2 dev
> keystone dev

✨ Starting Keystone
⭐️ Server listening on :3000 (http://localhost:3000/)
⭐️ GraphQL API available at /api/graphql
✨ Generating GraphQL and Prisma schemas
✨ sqlite database "keystone.db" created at file:./keystone.db
✨ Your database is now in sync with your schema
✨ Connecting to the database
✨ Creating server
✅ GraphQL API ready
✨ Generating Admin UI code
✨ Preparing Admin UI app
- warn You have enabled experimental feature (appDir) in next.config.js.
- warn Experimental features are not covered by semver, and may cause unexpected or broken application behavior. Use at your own risk.

- event compiled client and server successfully in 195 ms (18 modules)
✅ Admin UI ready
- wait compiling /_error (client and server)...
- event compiled client and server successfully in 6.5s (1706 modules)

 

'npm run dev'를 하면 웹앱을 띄워준다.

크롬으로 접속하면 된다.

http://localhost:3000/

 

첫 사용자를 생성해야 한다.

귀찮지만 8자 이상의 패스워드를 넣어줘야 한다.

Create user

 

예쁜 화면을 볼 수 있다.

Dashboard

 

User List를 확인해보면 다음과 같은 화면을 볼 수 있다.

Users

 

상세 정보도 확인할 수 있다.

User detail

 

Posts 화면을 살펴보자.

Posts

 

Create Post 버튼을 누르면 멋진 화면이 나온다.

Create Post

 

입력 인터페이스가 정말 산뜻하다. (직접 구현하려면 엄청 귀찮았을....)

Edit

 

 

[ GraphQL ]

API를 확인하기 위해서는 주소가 다르다.

 

http://localhost:3000/api/graphql

 

멋지지 않은가?!

 

 

하지만, 주의 사항은 있다.

관련된 공부를 하지 않고서는 이 편리함을 누릴 수 없다.

 

귀차니즘의 해결이지, No Study & Easy Use는 아니다 !!!

 

 

반응형

'Programming > Web' 카테고리의 다른 글

npm, node 그리고 nvm  (0) 2023.01.04

+ Recent posts