[본투비엔지니어] 나에게 베어본만 주어진다면?? (11)
·
project/본투비엔지니어
지난 편까지 프로토 타입 앱을 배포하고 외부 접속에 성공했습니다. 이제 매번 터미널에서 'kubectl apply -f ...' 를 치는 원시적인 배포 방식과 작별할 시간입니다. 오늘은 쿠버네티스 배포 GitOps를 ArgoCD로 구현하겠습니다. Foundry 프로젝트를 진행하면서 코드를 수정할 때마다 이런 과정을 반복했습니다.코드 수정 & 커밋도커 이미지 빌드 & 푸시foundry.yaml 의 이미지 태그 수정kubectl apply -f ... 실행매번 이 과정이 반복되기도 하고, 태그 수정을 까먹기도 합니다. 그래서 Git 에 있는 내용이 곧 서버의 상태가 되도록 하는 GitOps 를 구현하겠습니다. 1. ArgoCD 설치kubectl create namespace cicd-systemkubect..
백준 17144번 - 미세먼지 안녕! (Go)
·
algorithm
https://www.acmicpc.net/problem/17144분석이 문제는 미세먼지가 확산되고, 공기청정기가 바람을 일으켜 청소하는 과정을 시뮬레이션 하는 문제입니다. 알고리즘 과정을 생각해보면미세먼지 확산 (spread 함수) 은 모든 칸이 동시에 확산되므로, 원본 배열을 수정하는 것 보단 새로운 배열을 만들어 원본 배열에 반영합니다.청소 (clean 함수) 는 바람이 불어오는 역순으로 탐색해야 합니다.최종 결과를 합산합니다.시간 복잡도는 모든 칸을 순회하고, t 만큼 반복하므로 O(t * r * c) 입니다.6 공간 복잡도는 2차원 배열 2개를 사용하므로 O(r * c) 입니다.풀이 코드package mainimport ( "bufio" "fmt" "os")var ( r, c, t int gr..
백준 1700번 - 멀티탭 스케줄링 (Go)
·
algorithm
https://www.acmicpc.net/problem/1700분석이 문제는 멀티탭 구멍의 개수 n 과 전기 용품의 사용 순서 k 가 주어집니다. 멀티탭에 꽂혀 있는 플러그를 최소한으로 뽑으면서k 개의 용품을 순서대로 사용해야 합니다. 미래의 사용 순서를 미리 알고 있기 때문에 가장 나중에 다시 사용되거나, 앞으로 사용되지 않을 용품을 먼저 뽑는 것이최적의 해를 보장합니다. 알고리즘 실행 과정을 생각해보면,이미 꽂혀 있는 경우, 플러그를 뽑을 필요가 없으므로 continue빈 자리가 있는 경우, 그냥 꽂으면 됩니다.빈 자리가 없는 경우,현재 멀티탭에 꽂힌 용품들 중, 가장 늦게 나타나는 용품을 찾습니다.만약 이후에 다시 사용하지 않는 용품이 있다면 최우선 제거 대상 입니다. (풀이 코드의 인덱스를 최대..
백준 3273번 - 두 수의 합 (Go)
·
algorithm
https://www.acmicpc.net/problem/3273분석이 문제는 수열이 주어지고 수열 내에서 서로 다른 자연수 2개를 더했을 때, x 가 되는 쌍을 구해야 합니다.수열의 크기가 1 시간 초과입니다. 그래서 활용한 알고리즘은 투 포인터 입니다.이 알고리즘을 사용하기 위해선 수열이 우선 정렬되어 있어야 합니다. 두 수의 쌍을 찾으면 되기 때문에 수열의 첫 번째와 끝부터 시작하여 서로 더해가면서 포인터를 조절하며 찾으면 됩니다. 그리고 1 시간복잡도는 배열 탐색 O(N), 수열 정렬 O(NlogN) 이므로 O(NlogN) 입니다.공간복잡도는 최대 int 형 10만개이므로 8byte * 10만 = 80만 byte 로 0.8 MB 입니다.풀이 코드package mainimport ( "bufio"..
[본투비엔지니어] 나에게 베어본만 주어진다면?? (10)
·
project/본투비엔지니어
이번에는 HTTPS 를 적용해 보겠습니다. 기존에 도메인을 Cloudflare 에서 관리하고 있어서 같이 활용해서 적용하겠습니다. 1. Cloudflare 토큰 Cloudflare 대시보드 → My Profile → API TokensCreate Token → Edit zone DNS 템플릿 선택Zone Resources → Include - Specific zone - heejunp.com 선택 이렇게 토큰이 준비 됐습니다.2. Cert-Manager 설치쿠버네티스에서 HTTPS를 적용하는 방법은 크게 세 가지가 있습니다.수동 관리 : openssl로 직접 인증서를 만들고, 쿠버네티스 Secret에 파일로 업로드하고, 3개월마다 알람 맞춰놓고 갱신합니다. 클라우드 관리형 인증서 : AWS ACM이나 ..
[본투비엔지니어] 나에게 베어본만 주어진다면?? (9)
·
project/본투비엔지니어
지난 글에서 많은 버그들이 있었지만 네트워크 연결에 성공 했습니다. 그리고 이번에는 만들고있는 서비스를 배포해 보겠습니다. 1. FoundryFoundry는 "내 코드를 올리면 알아서 배포해 주는 플랫폼"을 목표로 하는 개인 프로젝트 입니다. Vercel이나 Heroku 같은 PaaS(Platform as a Service)를 아주 작게 축소해서 내 클러스터 위에서 돌리는 것이 목표입니다.Frontend: React + Vite (사용자 대시보드)Backend: Go (배포 로직 및 컨테이너 관리)Infrastructure: Kubernetes (On-premise Home Lab)Docker Hub 에 이미지는 미리 빌드해서 푸시해 놨습니다. 2. 배포 명세서 작성Ingress 라우팅 전략우리는 도메인..
[본투비엔지니어] 나에게 베어본만 주어진다면?? (8)
·
project/본투비엔지니어
지난 시간, 앤서블(Ansible)의 힘을 빌려 5대의 서버를 하나의 쿠버네티스 클러스터로 묶는 데 성공했습니다. 외부 트래픽을 통신하기 위해서는 'MetalLB' 와 'Ingress Nginx'가 필요합니다. MetalLB 란?외부 접속 IP(LoadBalancer IP)를 할당받을 수 있게 해주는 필수 도구입니다.MetalLB는 크게 두 가지 방식으로 작동하지만, 홈랩에서는 Layer 2 (ARP/NDP) 모드를 주로 사용합니다. 다른 하나는 BGP 모드입니다. 쓰려면, BGP 프로토콜을 지원하는 고가의 L3 스위치나 라우터가 필요합니다. IP Pool 설정: 사용자님이 MetalLB에게 192.168.219.200 ~ 210 대역을 쓸 수 있다고 알려줍니다.IP 할당 (Controller): 사용..
[본투비엔지니어] 나에게 베어본만 주어진다면?? (7)
·
project/본투비엔지니어
지난 시간까지 Terraform(BPG Provider) 을 이용해 단 1분 만에 5대의 Rocky Linux 서버(Master 1대, Worker 4대)를 찍어내는 데 성공했습니다. SSH 키까지 자동으로 심겨 있어 비밀번호 없이 접속되는 쾌적한 환경입니다. 쿠버네티스를 설치하려면 Swap을 끄고, 방화벽을 열고, 컨테이너 런타임을 설치하는 등 복잡한 OS 설정이 필요합니다. 서버가 1대라면 직접 들어가서 하겠지만, 우리는 5대입니다. 그래서 등장하는 도구가 바로 앤서블(Ansible)입니다. Ansible 이란?인프라를 코드로 관리(IaC)하여, 여러 대의 서버 설정을 자동화하는 도구입니다. 앤서블의 핵심 원리: Agentless그저 SSH(Secure Shell)만 뚫려 있으면 됩니다.내 맥북(Co..
[본투비엔지니어] 나에게 베어본만 주어진다면?? (6)
·
project/본투비엔지니어
지난 글에서 Proxmox 서버 내부에 Rocky Linux 10 클라우드 이미지를 다운로드하고, 이를 템플릿(Template)으로 변환하는 작업을 완료했습니다. 이로써 서버 측면에서의 물리적, 논리적 준비는 모두 끝났습니다. 우리의 목표는 매번 Proxmox 웹 콘솔에 접속해 마우스를 클릭하는 것이 아니라, 로컬 컴퓨터에서 코드를 작성하고 실행하는 것만으로 서버를 생성하는 것입니다. 이를 위해 인프라 자동화 도구인 테라폼(Terraform)을 로컬 환경에 설치하고, Proxmox와 통신할 수 있도록 연동하는 과정을 진행하겠습니다. 1. Terraform 설치# 1. HashiCorp 공식 탭(저장소) 추가brew tap hashicorp/tap# 2. Terraform 패키지 설치brew install..
[본투비엔지니어] 나에게 베어본만 주어진다면?? (5)
·
project/본투비엔지니어
지난 글에서 Proxmox VE 환경 구축을 완료했습니다. 이제 이 위에 가상머신(VM)을 생성할 차례입니다.일반적으로 VM을 생성한다고 하면 Ubuntu ISO 파일을 다운로드하여 가상 CD-ROM에 넣고, 설치 화면(GUI)을 보며 언어, 시간대, 파티션을 일일이 클릭하는 과정을 떠올립니다. 하지만 이 방식은 IaC(Infrastructure as Code) 철학과 맞지 않습니다. Terraform 코드를 실행할 때마다 사람이 개입하여 설치 과정을 진행할 수는 없기 때문입니다. 자동화를 위해서는 이미 OS 설치가 완료된 상태에서, 부팅 시점에 IP와 SSH 키만 주입받아 즉시 구동되는 이미지(Image) 방식이 필요합니다. 1. Cloud-initCloud-Init은 클라우드 인스턴스의 초기 설정을 ..