메트릭 모니터링 환경 구축하기
·
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..
Jenkins로 ci/cd 파이프라인 구축하기(2)
·
Ops
Introduce지난번에 gitlab과 jenkins를 연동하는 것까지 했으니 이제 script를 작성해서 gitlab에 코드가 push 됐을 때 spring 서버 이미지를 빌드할 수 있도록 해보겠습니다. sonarqube를 이용해 소스코드 취약점을 분석하고 harbor로 private한 이미지 저장소를 구축해 보았습니다.Harbor 저장소 띄우기이미지를 빌드해서 올릴 저장소를 먼저 띄워보겠습니다.먼저 harbor 인증서를 생성해줍니다.# Root CA의 비밀키 생성$ mkdir -p ~/certs$ cd ~/certs$ openssl genrsa -out ca.key 4096#Root CA의 비밀키와 짝을 이룰 공개키 생성$ openssl req -x509 -new -nodes -sha512 -days..
Jenkins로 ci/cd 파이프라인 구축하기(1)
·
Ops
Introducejenkins를 이용해서 이미지를 빌드해서 argocd를 이용해 k8s 환경에 자동 배포 되도록 ci/cd 파이프라인을 만들어 보고자 합니다.sonarqube는 소스코드 취약점 분석 오픈소스이고 harbor는 private image reagistry이고 trivy를 통해 이미지 취약점 분석을 할 수 있습니다.Jenkins 띄우기컨테이너를 만들면서 플러그인도 함께 설치 해줬습니다.//gcp 무료 크레딧을 이용해 서버를 띄웠습니다.//DockerfileFROM jenkins/jenkins:ltsCOPY plugins.txt /usr/share/jenkins/ref/plugins/plugins.txtUSER rootRUN jenkins-plugin-cli -f /usr/share/jenkin..
k8s 환경에 내 서비스 띄워보기
·
Ops
Introduce클라우드 웨이브 활동을 할 때는 eks 클러스터에 내 서비스를 띄워서 테스트 했지만 비용 이슈로 인해 kind 클러스터로 돌아와서 복습과 그 때는 해결하지 못했던 문제들을 해결해보고자 합니다. kind 클러스터는 예전에 구축했으니 클러스터에 바로 서비스를 띄워서 잘 작동하는지 확인해보겠습니다1. ConfigMap, Secret 띄우기쿠버네티스에서 사용하는 파라미터와 환경변수를 관리하기 위해 ConfigMap과 Secret을 사용했습니다.Secret은 패스워드 및 인증서 와 같은 중요정보 보관용으로 사용(BASE 64 인코딩)configMap에 immutable:true를 해주면 성능 향상(감시하지 않는다.)//data 부분에 configMap으로 관리할 변수 추가apiVersion: v1..
EKS 클러스터 구축
·
Infra
들어가며CJ 클라우드 웨이브에서 프로젝트 기간동안 AWS 비용을 지원을 받아서 AWS 서비스를 돈 걱정 없이 사용할 수 있는 좋은 기회를 얻게 되었습니다. 프로젝트에서 사용할 EKS 클러스터를 AWS 콘솔을 이용해서 구축해 보았습니다.VPC 생성1. VPC 생성private subnet과 public subnet을 가용성을 위해 2개씩 생성nat gateway와 ingress를 두기 위해 public subnet 생성한다.2. 서브넷 4개 생성후 2개는 자동할당 활성화 (public subnet으로 사용하기 위해서) 3. 2개의 public subnet에 nat-gateway를 둡니다  4. routing 테이블에서 라우팅 편집을 통해서 생성한 nat-gateway를 private 서브넷과 연결해줍니다...
일단 단위 테스트부터 테스트 코드 작성해보기
·
Dev
테스트 코드 작성하는 이유지금까지 테스트를 Swagger로 했는데 리팩토링 작업을 하면서 테스트 작업을 해야하는데 Swagger로 다시 테스트를 하기에는 너무 번거로운 작업이었고 테스트 코드를 작성하면서 기존에 발견하지 못했던 버그가 있으면 찾고자 작성하였습니다.단위테스트 vs 통합테스트단위 테스트는 개별 구성 요소의 기능을 개별적으로 확인하고 통합 테스트는 여러 구성 요소가 올바르게 함께 작동하는지 확인합니다.단위 테스트는 개발하면서 같이 작성해야 했는데 업보라고 생각하고 단위테스트부터 작성하였습니다.JUnit5와 MockitoJUnit 5와 Mockito는 Java 개발자가 단위 테스트를 작성하고 모의 객체(Mock Objects)를 사용하여 테스트하는 데에 널리 사용되는 라이브러리입니다.각각 JUn..
상품 주문하기 동시성 문제 해결하기
·
Dev
시나리오사용자 5명이 상품의 재고가 2개가 남았을 때 동시에 주문을 했을 때 정상적으로 동작하려면 3명의 사용자는 예외 처리(품절)가 되어야 합니다. 코드의 일부분을 보면 재고가 주문한 수량보다 많으면 예외 처리가 되어야 합니다. request.getOrderItemDTOList().forEach(orderItemDto -> { Item item = itemRepository.findById(orderItemDto.getItemId()).get(); orderItemDto.getOrderDetailDTOList().forEach(orderDetailDTO -> { if (orderDetailDTO.getItemOptionId() != null) { // 옵션이 있는 상품..
kind 이용해서 k8s 다뤄보기
·
Ops
Intro쿠버네티스 실습을 해보기 위해서 kind를 이용해서 간단하게 쿠버네티스 환경을 구축한 뒤 실습을 진행했습니다.kind 설치하기kind를 이용하면 간단하게 쿠버네티스 cluster를 설치할 수 있습니다.설치 가이드: https://kind.sigs.k8s.io/docs/user/quick-start/#installation  클러스터 yaml파일 작성kind: ClusterapiVersion: kind.x-k8s.io/v1alpha4name: kind-clusternodes:- role: control-plane kubeadmConfigPatches: - | kind: InitConfiguration nodeRegistration: kubeletExtraArgs: ..
컨테이너 환경 로그 수집해보기
·
Ops
Introdocker compose에 대해서 배우면서 도커 볼륨을 이용해서 서버로 이용하는 컨테이너와 로그수집기, 메트릭 수집기간에 볼륨을 공유하여 볼륨 안에 데이터를 저장할 수 있다는 방법을 듣고 구현해보았습니다.docker compose를 사용한 이유여러 컨테이너를 한개의 yaml 파일로 관리할 수 있고 버전 관리가 용이합니다. 도커 네트워크와 볼륨을 관리하기 용이합니다.Tooldocker-composeELK stackdocker compose yaml 파일 작성해서 ELK 파이프라인 구축하기elasticsearch, logstash, kibana를 docker compose를 이용해서 구축했습니다. 로그를 표준출력으로 logstash로 내보내서 elasticsearch에 저장되도록 구현했습니다.EL..