개발자의 기록장 블로그

만나서 반가워 !
이거 좋아해?

MSA 서비스 분리
·
원론/MSA
Q. 서비스를 어떻게 나누었나?기획 단계에서 유저 스토리를 작성했습니다.사용자가 무엇을 원하는지에 대한 요구사항서를 작성한 것인데 이에 따라 스토리 보드를 그려가며 모놀리딕한 형식으로 서비스 플로우를 구성했습니다.이슈 넘버로 기능을 명시했고 플로우가 끊기는 부분으로 덩치를 나누었습니다. 이 과정을 통해 저희 팀은 후보 서비스 도출을 진행했습니다. 해당 플로우를 바탕으로 와이어프레임을 제작했습니다. 와이어 프레임을 제작해나가면서 사용자 관점에서 어플리케이션을 사용할 때 서비스 레벨로 분리되는 부분들이 보였습니다. 분리 기준은 한 서비스의 장애에 있어서 독립적으로 운용이 가능한가? 서비스 간 분산 트렌젝션을 진행할 때 데이터간 일관성/정합성에 큰 무리가 가지 않는가? 로 정했습니다.도메인 친화적으로 서비스 ..
MSA 모델링
·
원론/MSA
Top - Down Approach설계의 목적과 분석부터 시작한다.Discover 단계MSA 설계와 프로토타이핑을 진행한다.Delivery 단계API 설계어플리케이션 분산 설계마이크로 서비스 개발CI/CD 테스트마이크로 서비스 테스트CI/CD를 제외한 4가지를 반복적으로 진행한다.Bottom-Up Approach일반적인 회사에서는 이 방식을 사용한다.현행 시스템에 대한 분석부터 시작한다.Delivery 단계API 설계어플리케이션 분산 설계마이크로 서비스 개발 -> 기존 서비스 리팩토링 단계CI/CD 테스트마이크로 서비스 테스트DevOps 단계 추가서비스 모델링분석후보 서비스 도출비지니스 도메인 분석을 통한 후보 서비스 식별후보 서비스 평가 항목신속하고 독립적인 배포가 가능한가?트랜잭션의 폭증에 스케일 아..
MSA 개요
·
원론/MSA
MSA의 정의MSA를 정의하는 방법은 여러가지 관점이 존재한다.서비스 크기별로 정의할 수도 있고 운영 방식으로도 정의할 수 있고 데이터 참조 관계로도 정의할 수 있다.서비스 크기별로는 하나의 프로젝트로 관리되는 기존 모놀리딕 방식의 서비스를 독립적으로 확장/배포가 가능한 마이크로 서비스로 분해해 운영하는 것이 MSA다 라고 할 수 있다.운영 방식으로는 각 회사의 부서별로 서비스를 담당하며 여러 서비스들과 통신과 데이터 관리를 진행하는데 각 서비스는 독립적으로 진행된다. 예로 결제 서비스가 다운됐다 하더라도 회원가입 서비스는 진행 가능한 것처럼. 이런 식으로 운영을 서비스별로 잘게 나눠서 아키텍처를 구성하는 것이 MSA라고 할 수 있다.데이터 참조 관계로는 복잡한 하나의 큰 데이터 베이스에서 각 테이블별로..
Kubernetes v1.30 in Ubuntu 22.04 LTS
·
DevOps/Kubernetes
Kubernetes v1.30 in Ubuntu 22.04 LTS이전에 실습을 진행하던 환경은 kubernetes v1.23.x 버전이였다.당시에도 depreciated였던 버전을 사용한 이유는, v1.24 이후부터 Docker를 기본 CRI에서 제거했기 때문이다. Docker를 쓸 수 없다는 것이 아닌, Docker를 kubernetes의 Container Runtime Interface로 사용하기 위해서는, 수동 작업이 필요하다는 의미이다.Why Ubuntu?Kubernetes는 기본적으로 RHEL과 Debian Linux를 공식 배포 환경으로 채택하고 있다.A compatible Linux host. The Kubernetes project provides generic instructions fo..
쿠버네티스 클러스터 rejoin
·
DevOps/Kubernetes
비용적 이유 때문에 클러스터를 종료할 때 클러스터를 초기화시키거나, 데이터 플레인만을 종료해서 다시 클러스터에 join시키는 방법이 있다. 즉 컨트롤 플레인은 24/7 운영해야 한다.쿠버네티스 클러스터 토큰K8S 클러스터에 join하기 위한 토큰은 아래와 같은 형식이다.kubeadm join :6443 --token \ --discovery-token-ca-cert-hash sha256:token 다시 읽기kubeadm token listTOKEN TTL EXPIRES USAGES DESCRIPTION ..
EC2 쿠버네티스 클러스터 초기화
·
DevOps/Kubernetes
쿠버네티스 클러스터 초기화EC2 인스턴스를 비용 관리를 위해서 중지 할 일이 자주 있는데 클러스터를 초기화해서 다시 연결해야 하는 필요성이 생겼다.본 개시글은 kubeadm init 을 통해 구축한 클러스터에 한 해 작동한다.Control-Plane[root@ip-*********** ~] kubeadm reset#########[reset] Reading configuration from the cluster...[reset] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'W0620 15:22:07.272492 20394 preflight.go:56] [reset] WARN..
[온프레미스-K8S] Argo-CD를 사용한 GitOps 구축
·
DevOps/Kubernetes
GitOps & SSOT프로그램 소스, Kubernetes 리소스 그리고 심지어 인프라까지 코드로 구현될 수 있다. 여러 환경에 흩어져 있는 코드들을 Git을 사용해 한 곳에 보관하고, 현재 운영중인 상태 (Ops) 와 동일하게 맞추는 것이 깃옵스의 의미이다.운영 중의 서비스는 반드시 하나의 버전만을 바라보아야 하며, 이를 단일 진실 원칙 ( SSTO ) 라고 한다. 깃옵스에서 Git Repository가 시스템의 구성과 상태에 대한 단일 진실 원천의 역할을 한다.현재의 운영 상태를 개별 사용자가 임의로 명령어로 변경하거나, 커밋하지 않은 코드로 바꾸는 것을 허용하지 않고 오직 Git Repository의 내용을 운영 환경에 반영하는 것을 목표로 한다. 깃옵스로 시스템의 일관성이 유지돼 모든 시스템과 사..
EC2 Cluster 쿠버네티스 구성
·
DevOps/Kubernetes
EC2 Cluster K8S 구성AWS Admin 권한을 얻을 수 없는 상황에서 EKS에 대한 충분한 iam role을 부여받을 수 없는 상황 아래, 프로젝트를 진행함에 있어서 Managed K8S 를 사용할 수 없었고 이에 Centos 3대의 EC2로 K8S Cluster를 구성하였다.문제점 - 서비스 노출기존에 사용하던 코드가 EKS 환경에 맞추어져있어서 Ingress와 Ingress controller를 사용해 클러스터의 단일 진입점을 로드밸런서를 통해 만들었다. 기존에는 자동으로 ELB 프로비저닝이 이루어졌고 외부 서비스 노출이 어렵지 않았다. 하지만 단순 온프레미스 EC2를 사용해 클러스터를 구성하다보니 Ingress에 외부 IP가 Attatch가 되지 않았고 NodePort로 꺼내도 접속이 되..