위 책을 읽고 느낀점을 정리함.
1. MSA가 뭘까?
더 빠른 개발을 위해서는 수정사항이 빨리빨리 반영되어야 한다. 그런데 기존의 monolithic한 개발 방식으로는 배포하는 데도 시간이 걸리고, 빌드하는 데도, 심지어 한 어플리케이션들의 열려있는 message들과 그 형식을 모두 맞춰야 하기 때문에 agile하지 못하다. 그래서 MS와 MSA가 나타나게 되었다.
MicroService란 큰 App을 작은 service 단위로 나눈 것이다. 예를 들어 쇼핑몰에서는 '회원가입', '상품 주문', '상품 입고' 등의 작은 서비스들이 있을 것이다. 객체지향적으로 개발한다면 이 각 기능들을 수행하는 모듈이 있을 것이고, 이 모듈들끼리 상호작용하는 message 또한 있을 것이다. 이를 각각의 container나 다른 server에서 수행시켜서, 모듈들 간의 message를 container나 server 간의 protocol로 조금 크게 바꾼 것이다.
한편 MS와 MSA의 차이는, microservice는 monolithic을 쪼갠 서비스이고 microservice architecture는 해당 서비스들이 잘 연계될 수 있게 도와주는 것이다.
이렇게 개발하면 각 서비스의 인터페이스는 기존에 명세한 대로 바뀌지 않고 내부구조를 바꿀 때 해당 서비스의 내부구조만 바꾸면 될 것이다. 기존에 프론트와 백엔드가 통신하는 방법처럼 각 서비스들이 통신한다, 라고 나는 이해했다. 굳이 이렇게까지 하는 이유는 잘 모르겠지만...
->
monolithic하게 개발한다면 앱 전체가 개발/배포/관리의 대상이다. 작은 수정이 있더라도 전체를 다시 배포해야 한다. 그러나 microservice 단위로 한다면 작은 수정이 있으면 해당 모듈만 개발/배포/관리하면 된다. 서버를 내렸다 올릴 필요가 없어지는 것이다. 쿠버네티스kubernetes는 각 기능을 container로 관리하고 여러 container를 service라는 객체로 관리해 주고 CI/CD를 해 준다고 한다.
*** Docker vs Kubernetes
docker는 컨테이너 1개정도만 사용할 떄, kubernetes는 컨테이너 여러 개 만들 때 사용한다고 한다. 다시, docker는 image를 container에 띄우고 실행하는 기술, kubernetes는 container를 관리하는 서비스이다.
kubernetes는 container 생성/소멸, 시작/중단 시점 제어, 스케줄링, 로드 밸런싱 등을 할 수 있다. 즉, 사용자가 몰릴 경우 더 많은 container를 만들 수 있다.
*** VM vs Container
VM은 OS(Guest OS)가 설치된 머신, 모든 자원을 이용함, HW 수준에서 가상화 일어남. Container는 프로그램 1개만 실행시킨다고 보면 된다.(OS가 필요없음. 프로세스의 일종이라 보면 됨) 유사하다면 유사한데, Container는 프로그램 1개만 실행시킬 수 있다는 점이 다른 것 같다.
2. jenkins
이 MS들을 관리하는 방법(MSA) 중 하나가 jenkins이다. jenkins는 CI/CD를 위한 툴 중 하나이다. 작동하는 단계는
1) 개발자가 git에 push
2) git에서 hook을 발생시키고
3) jenkins는 해당 hook을 감지해서 build함
4) 그것을 deploy해 줌.(docker를 이용하는 경우, image 생성/등록/배포)
위와 같다. jenkins pipeline을 이용하는 경우는
개발 - build - integration - test - service
라고 한다.
'DevOps > Kubernetes' 카테고리의 다른 글
Kubernetes - 개념 (0) | 2022.10.04 |
---|