✔️ Docker(도커) 설치 ✔️ Ubuntu Virtual Machine 구축 Vagrant를 이용해 Ubuntu VM을 구축하고 그 위에 Docker를 설치할 것이다. Vagrant.configure("2") do |config| # Define VM config.vm.define "docker" do |centos| centos.vm.box = "ubuntu/focal64" centos.vm.hostname = "docker" centos.vm.network "private_network", ip: "192.168.100.100" centos.vm.provider "virtualbox" do |vb| vb.name = "docker" vb.cpus = 2 vb.memory = 4096 end en..
✔️ Monolithic Architecture Monolithic은 하나의 의미를 가진다. 어플리케이션의 구조에서 UI 서비스, 계정 서비스, 장바구니, 배송 등의 서비스가 하나로 만들어져 있다는 것이다. 어떤 프로그래밍 언어든 상관없이 모든 기능들을 하나의 구조로 만든 것을 모놀리틱 구조라고 한다. 모놀리스를 보통 구시대적인 방법으로 치부하기 쉬우나 이 방식은 지금도 상당히 많이 쓰는 일반적인 방식이다. 그림 상에 주황색 박스가 뒤로 겹쳐진 부분이 스케일링과 관련된 부분인데, 만약 서비스 중에 특히 사용자 트래픽이 몰리는 부분이 Shipping Service라고 해보자 서버의 다운을 막기 위해서는 스케일링이 필요할 것이다. 이럴 때는 다른 서비스의 스케일링은 필요없고 Shipping Service의 ..
✔️ Hypervisor와 Docker Hypervisor(가상화)의 목적은 무엇인가 ? 가장 핵심이 되는 목적은 isolation(분리)이다. 그렇다면 무엇을 분리 시키기 위해 사용하는가 ? 리소스를 분리 시키기 위해서 사용한다. 하나의 HW에 하나의 OS가 올라가면 그 위에 여러개의 app이 배치된다. app의 동작, 즉 프로세스들이 여러개 존재하게 되는데 이때 프로세스들 간의 격리가 되지 않는다. 이렇게 되면 프로세스가 다른 프로세스에게 영향을 미칠 수 있고 운영체제에도 영향을 미칠 수 있다. → 한마디로 어플리케이션 간에 분리가 되지 않으면 서로의 동작에 영향을 미칠 수 있다. 그래서 우리는 하나의 큰 하드웨어에 Hypervisor를 통해 가상화를 하고 VM이라는 개념을 만들어 논리적으로 app을..
해당 이미지는 마켓컬리 DevOps 팀의 Terraform 배포 환경이다. dev, qa, stg 환경으로 분리하여 코드를 관리하고 있다. 보통 개발을 할 때 하나의 환경에서 진행하지 않고 여러 환경을 세팅한 뒤 test를 거친 후 실제 서비스로 배포한다. Terraform에서도 같은 모듈을 참조하면서 목적에 따라 다른 환경을 세팅할 수 있다. module-test/module/vpc/main.tf variable "cidr" { type = string } resource "asw_vpc" "my_vpc" { cidr_bloc = var.cidr tags = { Name = "My_VPC" } } 모든 환경에서 사용할 공통 vpc 모듈이다. [vagrant@controller module-test]$ ..
✔️ 백엔드(Backend) 백엔드 Terraform의 상태 스냅샷이 저장되는 위치를 결정한다. 주어진 Terraform 구성은 백엔드를 지정하거나 Terraform Cloud와 통합하거나 둘 다 수행하지 않고 기본적으로 로컬로 상태를 저장할 수 있다. Terraform은 이 영구 상태 데이터를 사용하여 관리하는 리소스를 추적하므로 어떤 실제 인프라 개체가 구성의 리소스에 해당하는지 알기 위해서는 상태가 필요하다. 따라서 주어진 인프라 리소스 모음으로 작업하는 모든 사람은 동일한 상태 데이터에 액세스할 수 있어야 한다. 기본적으로 Terraform은 로컬이라는 백엔드를 암시적으로 사용하여 디스크에 로컬 파일(.tfstate)로 상태를 저장한다. 다른 모든 백엔드는 여러 사람이 액세스할 수 있도록 하는 일..
✔️ 데이터 소스 (Data Source) Terraform Registry registry.terraform.io 이미지의 버전 변경으로 인해 사용할 이미지를 교체하고 싶을 때는 이미지의 id를 변경해야 한다. 개발 환경 중 특히 test 환경에서는 최신 버전의 이미지로 자주 변경하기 때문에 매번 id를 바꾸는 것은 번거로운 일이다. 이때 데이터 소스를 사용하는데, 데이터 소스는 해당되는 프로바이더에서 정보를 가져오는 역할을 한다. data "aws_ami" "example" { executable_users = ["self"] most_recent = true name_regex = "^myami-\\d{3}" owners = ["self"] filter { name = "name" values = ..