
Gitlab을 설치해보자. gitlab 설치 링크는 https://about.gitlab.com/install/#ubuntu Download and install GitLab Download, install and maintain your own GitLab instance with various installation packages and downloads for Linux, Kubernetes, Docker, Google Cloud and more. about.gitlab.com 1. 필요한 종속성 설치 및 구성 sudo apt-get update sudo apt-get install -y curl openssh-server ca-certificates tzdata perl 다음으로 Postfix(..
이번 포스팅을 하기 위해서 정말 많은 VM을 만들고 부셔봤고, VM도 여러가지 이미지를 사용했다. 그 과정에서 알게 된 것도 있고, 여러가지 개념도 혼재 되는 것 같아 이쯤에서 한 번쯤 정리하고 넘어가고자 한다. 물론 AWS나 GCP, Azure에서 제공하는 Kubernetes를 사용할 수도 있지만, 기본적으로 구축할 줄알아야 나중에 그 걸 쓸 수 있다고 생각한다. 따라서 일단 아주 간단하게 on-premise 환경으로 VM을 구성해본다. 최대한 GUI는 배제하도록 할 것이고, 되도록이면 스크립트로 해결하려고 한다. kubespray를 사용하는 이유는 Ansible과도 최대한 친해지기 위해서다. 그럼 시작해보자. VM을 만들기 위해 Vagrant를 설치해야 한다. Vagrant가 뭔지는 구글링 하면 바로..
Kubespray를 이용하여 쿠버네티스를 설치하는 가이드 Ansible의 playbook과 inventory 설정으로 Kubernetes 클러스터 설치 Kubernetes는 3개의 노드로 구성하기로함(control-pannel, kube-node(2)) OS : Linux ubuntu 22.04 ansible을 이용하므로 모든 vm끼리는 ssh 통신이 되어야 함. 1. ssh key 생성 및 복사 ssh-keygen 명령어를 터미널에서 날리게 되면 prompt에 물어보는게 너무 많은데 이런거 매번 엔터치기 귀찮으니까 한방에 키 생성 ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa &1 shell script에 IP 정보를 미리 입력해 놓는다. 이렇게 해놓으면 굳이 계속해서 IP를..
resource "local_file" "hello_world" { count = 5 content = "hello_world" filename = "${path.module}/hello_world_${count.index}.txt" } 일반적이랑 반복문이랑 다르게 count의 반복할 횟수를 입력함 그리고 그 때 반복변수는 count.index에 0부터 1씩 증가하면서 저장됨 리스트에 저장된 파일을 반복 variable "names" { type = list(string) default = [ "a", "b", "c" ] } resource "local_file" "hello" { count = length(var.names) content = "hello_${count.index}" filename =..
입력 변수는 필요한 속성 값을 정의해 자주 사용되는 것들이나 일괄적으로 관리하기 위해 사용함 기본 형식은 다음과 같음 variable "image_id" { type = string } variable은 코드내에서 var. 으로 참조됨. variable "password" { default = "p@ssw0rd" sensitive = true } resource "local_file" "hello_world" { content = var.password filename = "${path.module}/hello_world.txt" } sensitive를 true로 설정하게 되면 출력에서 변수값이 감춰짐. 비밀번호나 key값에 유용할듯 그러나 terraform.state는 그대로 저장되니까 주의하도록!!
테라폼으로 정의되지 않은 외부 리소스 또는 저장된 정보를 테라폼 내에서 참조할 때 사용 사용 가능한 메타인수는 다음과 같음 depends_on: 종속성 선언 count: 여러 데이터 소스 for_each: map, set 타입의 데이터 배열의 값을 기준으로 여러 리소스 생성 provider: 동일한 provider가 다수 정의 되어있을 때 사용 lifecycle: 수명주기관리 data "local_file" "hello" { filename = "${path.module}/hello.txt" } resion 내에서 사용 가능한 가용영역 목록 가져오는 방법은 다음과 같다. # Declare the resource data "aws_availability_zones" "available" { state = ..
테라폼의 기본적인 수정주기를 개발자가 의도적으로 변경하는 메타인수다. 해당 메타 인수 내에는 다음의 선언이 가능함 crate_before_destroy: 리소스 수정 시 신규리소스를 우선 생성하고 기존거 삭제 prevent_destroy: 이 리소스는 삭제 안되게 함 ignore_changes: 리소스 요소에 선언된 인수의 변경사항을 무시 precondition: 리소스 요소에 선언된 인수의 조건은 검증 postcondition: Plan과 Apply 이후의 결과를 속성 값으로 검증 create_before_destroy 클라우드의 이미지가 변경되는 경우 사용 리소스의 구분이 사용자가 지정한 특정 이름이나 ID인 경우 기존 리소스에 할당되어 있기 때문에 이는 실패함 삭제 후 생성될때 리소스에 대한 삭제 ..

이미지 분류가 뭔지 알았으니 이번엔 아주 간단한 이미지 분류기를 만들어보겠습니다. 이 알고리즘은 너무 단순해서 실제 "학습"을 전혀 하지 않지만, 여전히 검토해야 할 중요한 알고리즘이기 때문에 향후 신경망이 데이터로부터 어떻게 학습하는지 알 수 있습니다. 마지막으로 다양한 종의 동물을 이미지로 인식하기 위해 k-NN 알고리즘을 적용할 것입니다. 이미지 데이터 세트 작업 이미지 데이터 세트를 작업할 때는 먼저 바이트 단위로 데이터 세트의 전체 크기를 고려해야 합니다. 우리의 데이터 세트는 사용 가능한 RAM에 들어갈 만큼 충분히 큰가요? 큰 matrix나 array를 로드하는 것처럼 데이터 세트를 로드할 수 있나요? 또는 데이터셋이 너무 커서 시스템의 메모리를 초과하여 데이터셋을 부분적으로 로드해야 합니까..

A picture is worth a thousand words. — English idiom 우리는 살면서 이런 말을 수 없이 들어왔습니다. 한 장의 이미지로 복잡한 아이디어를 전달할 수 있다는 뜻입니다. 주식 포트폴리오 투자의 라인 차트를 살펴보든, 단순히 유튜브를 보든 우리는 시각적인 내용을 끊임없이 수집하고 그 의미를 해석하고 나중에 사용할 수 있도록 저장하고 있습니다. 하지만, 컴퓨터에게 있어서 이미지의 내용물을 해석하는 것은 인간과는 다릅니다 – 컴퓨터가 보는 모든 것은 숫자들의 큰 행렬입니다. 따라서 이미지가 전달하려는 의도, 노력, 의미에 대해서 컴퓨터는 알지 못합니다. 이미지의 내용을 이해하기 위해서는 이미지에서 의미를 추출하기 위해 컴퓨터 비전과 기계 학습 알고리즘을 사용하는 작업인 이..
package main import "fmt" func reduce[T, M any](s []T, f func(M, T) M, initValue M) M { acc := initValue for _, v := range s { acc = f(acc, v) } return acc } func main() { numbers := []int{1, 2, 3, 4, 5} sum := reduce(numbers, func(acc, current int) int { return acc + current }, 0) fmt.Println(sum) } https://gosamples.dev/tags/generics-intro/ 참고