LVM 다뤄보기
·
Infra
개요Azure에서 가상 머신에 추가적인 스토리지를 연결하고 LVM을 이용하여 관리하는 방법을 정리해 보았습니다. LVM이란?리눅스에서 논리적인 볼륨을 관리하는 시스템으로, 물리적인 디스크 파티션을 유연하게 관리할 수 있도록 도와줍니다.  Physical Volume(PV) - 실제 물리 디스크 또는 파티션을 의미합니다. (/dev/sdb1 등)Volume Group(VG) - 여러 개의 PV를 하나의 그룹으로 묶어 관리하는 단위입니다.Logical Volume(LV) - VG에서 원하는 크기의 논리 볼륨을 생성하여 파일 시스템을 올릴 수 있는 단위입니다.1.  Azure에서 VM 생성하기 2.  추가 디스크 생성하기VM을 선택하고 설정에서 디스크를 선택합니다.  디스크를 생성하고 VM에서 디스크를 확인할..
CircleCI를 이용한 배포 자동화
·
Ops
개요CircleCI를 활용하여 Docker 기반 Spring Boot app을 자동으로 빌드하고, Azure VM에 배포하는 CI/CD 파이프라인을 구축해보았습니다. CircleCI의 장점빠른 빌드 속도설정이 간편함자체 서버 없이 클라우드에서 CI/CD를 수행Docker 및 Kubernetes 친화적사용기술CI/CD 툴: CircleCI소스 코드 저장소: GitHub배포 환경: Azure VM + Docker프로세스GitHub에 코드 푸시 → 자동 빌드 → Docker 이미지 생성 → 서버에 자동 배포  CircleCI 계정 생성 및 GitHub 연동회원가입 후 organization 생성후 프로젝트를 생성합니다. github repo와 연동해줍니다. 선택한 repo가 추가되었습니다.  yml 파일을 ..
Index를 생성해서 약 10배 성능 개선
·
Dev
자주 조회되는 컬럼에 인덱스를 생성해두면 빠른 검색이 가능해지기 때문에 프로젝트에서 인덱스를 생성해서 성능을 높일 수 있는 부분이 있는지 찾아 보았습니다. 인덱스가 단점으로는 데이터 변경 시 인덱스도 업데이트 해야 되기 때문에 데이터를 추가하거나 변경, 삭제시에 느려지게 됩니다.재료를 이용해 레시피를 검색하는 쿼리가 있어서 재료에 대해 인덱스를 생성해보았습니다.jpa를 이용해 index를 생성했습니다.@Table( name = "recipe", indexes = @Index(name = "idx_ingredient", columnList = "ingredient")) index를 생성하고 explain을 이용해서 인덱스가 잘 사용되는지 확인 했더니 인덱스가 사용되지 않고 있었습니..
terraform으로 aws 인프라 구축하기 (3) (상태 관리)
·
Infra
Terraform이 인프라 상태를 추적하는 방법과 Terraform 프로젝트의 파일 레이아웃, 격리 및 잠금에 미치는 영향을 살펴보겠습니다.Terraform의 상태 추적Terraform은 인프라의 현재 상태를 파일(일반적으로 terraform.tfstate 파일)에 저장합니다.이 파일에는 프로비저닝한 리소스 정보가 담겨 있으며, Terraform이 인프라의 변경 사항을 추적하고 관리하는 데 사용됩니다.terraform을 팀에서 사용한다면 상태 파일을 관리할 수 있는 공유 저장소가 필요합니다.가장 좋은 방법은 Terraform의 기본 기능인 원격 백엔드 지원을 사용하는 것입니다.  Terraform의 상태 파일을 공유 저장소에 저장할 때, 버전 제어 시스템(Git 등)을 사용하는 것은 다음과 같은 문제를 ..
terraform으로 aws 인프라 구축하기 (2) (Auto Scaling)
·
Infra
시리즈 1에서는 ec2와 보안 그룹까지 생성했습니다. 이제 변수 설정과 오토 스케일링이 가능한 웹 서버 클러스터를 구축해 보겠습니다.변수 설정하는 방법변수를 선언할 때는 variable 블록을 사용합니다.//숫자인 변수variable "number_example" { description = "An example of a number variable in Terraform" type = number default = 42}//list인 변수variable "list_example" { description = "An example of a list in Terraform" type = list default = ["a", "b", "c"]}변수 적용하기변수를 설정한 후에는 var.변수명 형식으로 변..
terraform으로 aws 인프라 구축하기 (1)
·
Infra
Terraform이란재사용 및 공유가 가능한 사람이 읽을 수 있는 구성 파일로 클라우드 및 온프레미스 리소스를 모두 정의할 수 있는 코드 도구로서의 인프라입니다.일관된 워크플로우를 사용하여 수명주기 전반에 걸쳐 모든 인프라를 프로비저닝하고 관리할 수 있습니다 프로비저닝은 서버 자체를 생성해서 제공하는 것을 말합니다. 코드를 이용해서 웹 서버를 배포할 수 있습니다.Terraform을 사용하는 이유Terraform을 사용해서 인프라를 구축하면 개발을 하던 환경을 그대로 배포 환경을 만들어 내서 재사용성이 높아집니다.배포 프로세스가 안정화 되면 일관되게 반복이 가능하고 사람이 하지 않기 때문에 안정성이 높아지고 빠릅니다.제가 사용하면서 느낀점은 코드로 작성하면서 기능을 좀 더 자세하게 알 수 있게 된 것 같습..
stream 만들어낸 이유가 있지 않을까?
·
Dev
글을 작성하는 이유Java로 개발을 하다 보면 컬렉션이나 배열의 요소를 처리할 때 for문 대신 Stream을 사용하는 코드를 자주 마주하게 됩니다. 더 빠르다는 말에 이끌려 저 또한 Stream을 사용했습니다. 하지만 최근 들어 단순히 빠르다는 이유만으로 기술을 선택하는 것은 안일하다는 생각이 들었습니다. '왜 Stream을 사용해야 할까?'라는 근본적인 질문에 대한 답을 찾고 싶어졌습니다. 그리고 좋은건 더 공부해서 적극적으로 사용해야 한다고 생각했습니다.for문과 Stream, 어떤 차이가 있을까?특징for문Stream개념명시적인 반복함수형 스타일의 데이터 처리구조순차적인 실행파이프라인 구성장점직관적, 간단한 로직가독성, 유지보수성, 병렬 처리 가능단점복잡한 로직에서 가독성 저하, 병렬 처리 어려움..
N+1 문제 해결해서 성능 개선하기
·
Dev
문제상황조회 할 때 쿼리가 조회된 데이터 갯수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하는 n+1 문제가 발생하였습니다. 쿼리가 추가로 발생해서 성능 저하로 이어지기 때문에 문제를 해결해야 하는 상황입니다.추가로 발생되는 쿼리 확인Post가 10개씩 조회되는데 아래의 쿼리가 10개씩 추가로 발생하고 있습니다.2024-10-23 04:00:12.166 DEBUG 71806 --- [nio-8080-exec-1] org.hibernate.SQL : select postimgs0_.post_id as post_id4_10_0_, postimgs0_.post_img_id as post_img1_10_0_, postimgs..
메트릭 모니터링 환경 구축하기
·
Ops
Introduce서비스를 운영하면서 중요한 메트릭을 수집해서 모니터링 할 수 있는 환경을 구축해보았습니다.Prometheus 설치$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts$ helm install prometheus prometheus-community/prometheusGrafana 설치nginx ingress를 사용하기 위해서 values.yaml을 수정했습니다.nginx ingress는 설치되어 있어야 합니다. 저는 ci/cd할때 설치가 되어 있어서 바로 진행하겠습니다.$ helm repo add grafana https://grafana.github.io/helm-charts$ hel..
Jenkins로 ci/cd 파이프라인 구축하기(3)
·
Ops
ArgoCD 설치//가용성 없는 버전$ kubectl create namespace argocd$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.12.0/manifests/install.yaml//가용성 있는 버전 kubectl create namespace argocdkubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.12.0/manifests/ha/install.yaml argocd를 local kind 클러스터에서 사용할 것이기 때문에 nginx ingress를 이용해서 접근하겠습니다.//nginx-ingres..