본문 바로가기

👨‍💻 프로그래밍/⚙️ DevOps 16

AWS에서 무중단 배포 구현하기 AWS에서 무중단 배포 구현하기 목표Cloud의 편리함은 최대한 누리면서 AWS에는 종속되지 않게무중단 배포를 구현한다 사실 무중단 배포를 구현하는 거 자체는 간단합니다. 새로운 버전의 서버를 미리 띄워 두고, Health Check를 해서 괜찮으면 트래픽을 전환한다... 하지만 이걸 구현하기 위해 내려야 할 여러 기술적인 결정은 단순하지 않습니다.오늘은 진작에 접었어야 했지만 접지 못 해 계속 하고 있는 제 포트폴리오 사이트 책잇아웃의 무중단 배포를 AWS와 Github Actions로 구현하는 과정에서 했던 여러 기술적인 결정들과 배운 것들을 기록해 보겠습니다.현재상황 (시작점)🐜 AWS 구조현재 상황은 ELB (Elastic Load Balancing)가 가장 앞단에 있어 트래픽을 받는 구조입니다. ELB에는 Public IP .. 2024. 11. 22.
다양한 배포 전략 비교 (카나리, 블루그린, 롤링, 그림자) 다양한 배포 전략 비교 (카나리, 블루그린, 롤링, 그림자) 배포에서 중요한 것유저에게 배포가 나갔는지도 모르게 하는 것 규모가 작거나 복잡하지 않은 환경에서는 배포에 대해 크게 신경 쓸 필요가 없습니다. 오히려 그 시간에 MAU를 늘릴 생각을 하는게 더 이득일 지도 모릅니다. 하지만 시스템의 구성요소가 많고 (카프카, 배치 등) 잠깐의 중단도 비즈니스에 악영향을 주는 환경에서는 배포 자체에 많은 리소스를 쓰게 됩니다. 🐜 무중단불과 몇 년 전만 해도 새벽 시간에 점검을 한다고 하고 배포하는 일도 흔했습니다. 하지만 최근에는 어떤 서비스를 쓰든 배포를 한다고 점검을 걸고 서비스를 중단하는 일이 매우 적어졌습니다. 배포의 중요한 소양이 무중단이기 때문입니다. 말 그대로 서비스를 1초도 중단하지 않고 새로운 버전을 내야 합니다.🐜 쉬운 롤백이상적으로는 모든 배포는.. 2024. 8. 24.
ES, Kibana, Grafana, Prometheus, Thanos, Logstash 사이의 관계 이해하기 ES, Kibana, Grafana, Prometheus, Thanos, Logstash 사이의 관계 이해하기 모니터링 (Monitoring)과 로깅 (Logging)개인 프로젝트를 할 때와 실제 회사에서 제품을 운영할 때의 가장 큰 차이점은 모니터링과 로깅입니다. 회사에 가서 처음 들어보는 여러 모니터링과 로깅 기술들을 보며 굉장히 당황했는데요. 키바나, ES, 타노스 (마블의 타노스...?), 프로메테우스... 이런 용어들이 섞인 대화를 이해하는 데는 시간이 걸렸습니다.이 로깅과 모니터링 도구들의 관계를 간단히 설명해 드리겠습니다!🐜 로깅(Logging)이 뭐야?내 프로그램이 문제가 생기면 어떻게 해야 할까요? 당연히 원인을 찾아서 고쳐야 합니다. 근데 이 원인을 찾기 위해서는 단서가 있어야겠죠? 보통 이런 단서는 이 에러가 발생하기 전에 어떤 동작들이 있었는지, 이 에러가 발생한 당시의 여러 상태나 값들은.. 2024. 2. 27.
Logback 간단하게 알아보기 Logback 간단하게 알아보기 Logback이 뭐 하는 걸까?Logback은 Java에서 가장 많이 사용되는 Logging 라이브러리입니다. Logback HomeLogback Project Logback is intended as a successor to the popular log4j project, picking up where log4j 1.x leaves off. Logback's architecture is quite generic so as to apply under different circumstances. At present time, logback is divided into three modlogback.qos.chLogback의 간단한 구조Logback은 크게 3가지로 구성되어 있습니다. Logger, A.. 2023. 10. 1.
git reset 제대로 알고쓰기 git reset 제대로 알고쓰기 git reset의 용도보통 Git을 사용하면 아래 사진과 같이 바꾼 내용을 모두 기록하게 됩니다.이때, 만약 특정 기능이 문제를 일으켜 되돌려야 할 때는 보통 revert를 사용합니다. 특정 commit을 revert 하면 그 commit의 변화를 모두 없애 주는 새로운 commit을 만들 수 있습니다.이렇게 하면 과거의 commit history를 바꾸지 않기 때문에 여러 명이서 협업을 할 때도 문제없이 진행할 수 있습니다.반면 git reset은 과거의 commit history를 바꾸는 용도입니다. 그렇게 때문에 특히 여러명이 협업할 때는 함부로 쓰면 안 되고, 올라가면 안 되는 민감한 정보가 올라갔다던지 하는 commit history를 꼭 바꿔야 하는 이유가 있는 경우에만 사용해야 합니다. (.. 2023. 6. 30.
Git 파일의 Life Cycle 이해하기 Git 파일의 Life Cycle 이해하기 Git을 사용한지는 오래됐지만, Git을 엄밀히 공부하고 사용한 것은 아니였습니다. 그러던 와중 Git에 대한 이해 부족으로 협업 과정에서 문제를 몇 번 겪게 된 뒤로 Git을 이해하고 사용해야 겠다고 결심해 첫 단계로 Git으로 관리되는 파일들의 Life Cycle를 공부했습니다. Untracked -> TrackedGit으로 한 번도 관리되지 않은 상태의 파일은 Untracked 상태에 놓여 있습니다. 1번이라도 add, commit을 하면 Tracked 상태가 됩니다.git add를 하면 생기는 일.git 내부에는 2가지의 영역이 있습니다. Staging Area와 Repository 입니다.git add를 하면 파일이 Staging Area로 이동됩니다. 여러개의 파일 혹은 파일의 일부분을 Sta.. 2023. 6. 29.
Terraform이 뭘까? Terraform이 뭘까? Terraform이란?Terraform은 HashiCorp라는 회사에서 개발한, 여러 인프라를 코드로 관리할 수 있게 해 주는 도구입니다. Terraform | HashiCorp DeveloperExplore Terraform product documentation, tutorials, and examples.developer.hashicorp.com AWS를 시작으로 Cloud를 사용하면서 소프트웨어를 배포하고 관리하는 게 굉장히 쉬워졌습니다. Cloud가 있기 전에는 배포를 하기 위해서는 물리적인 서버를 주문해 구성하고, 네트워크를 설정하고, 혹시나 트래픽이 몰려 서버에 한계가 오면 서버를 다시 직접 주문해서 증설해야 했습니다. 하지만 Cloud가 나오면서 이 모든 걸 "딸깍"으로 가능하게 됐습니다... 2023. 6. 22.
Bash Commands 이상형 월드컵 Top 10 Bash Commands 이상형 월드컵 Top 10 Shell Commands가 필요할 때보통 우리가 컴퓨터를 사용한다고 하면 화려한 GUI에 익숙해져 있습니다. 파일과 프로그램은 아이콘으로 나타내고, 파일을 이동하기 위해서는 마우스로 드레그를 하고, 지우고 싶으면 휴지통에 넣고...이런 GUI 덕분에 컴퓨터는 대중화될 수 있었지만, GUI는 굉장히 자원이 많이 필요한 일입니다. 그래서 서버 같이 프로그래머가 다루는 컴퓨터의 경우는 GUI가 없고 CLI를 통해서만 접근해야 하는 경우가 많습니다.CLI를 쓰는 것의 또 다른 장점은 프로그래밍 적인 요소를 적용할 수 있다는 겁니다. 특정 조건에서는 이걸 하고, 이걸 반복하고 등... 이런 여러 문법들 중 가장 자주 쓰는 10개를 뽑아 봤습니다. 10위 - []if의 역할을 합니다 [ "test" = "test.. 2023. 6. 21.
AWS VPC 구조 알아보기 AWS VPC 구조 알아보기 VPC가 뭐야?VPC는 AWS에서 제공하는 외부의 다른 네트워크와 격리돼 있는 나만의 네트워크입니다. 실제 물리적으로 분리 돼 있는 건 아니고, 논리적인 단위입니다.꼭 인터넷이 안 되더라도 컴퓨터와 컴퓨터를 연결하면 이걸 네트워크라고 합니다. 우리가 일상적으로 사용하는 컴퓨터는 다른 주변 컴퓨터에 연결할 이유가 크게 없습니다. 컴퓨터를 사용하는 대부분의 이유가 인터넷을 사용하기 위해서입니다. 하지만 AWS에 있는 여러 컴퓨터는 (EC2, RDS, SES 등) 인터넷에 접속할 필요가 전혀 없고, 다른 AWS 컴퓨터끼리만 통신하면 됩니다. 오히려 인터넷에 연결하게 되면 보안에 취약해 질 수 있어서 꼭 필요한 경우에만 인터넷에 연결하는 게 좋습니다.그렇기 때문에 AWS의 대부분의 자원은 VPC를 만들어서 그 .. 2023. 6. 16.
AWS S3, 안전하게 사용하기 AWS S3, 안전하게 사용하기 S3란?S3는 AWS에서 제공하는 파일을 업로드하고 접근할 수 있는 서비스입니다.용도에 따라 Bucket이라는 단위로 구분할 수 있고, 각 Bucket에 업로드한 파일은 Object가 되고, 고유의 Key가 생기게 됩니다.전체적인 그림모든 보안이 그렇지만, S3를 안전하게 사용하는 방법도 큰 그림에서 보면 비슷합니다. 🐜 필요한 권한만 최소한으로우선 필요한 권한만 최소한으로 줘야 합니다. Bucket을 용도에 따라 분리하고 그 용도에 맞는 사용자만 접근할 수 있도록 하는 게 좋습니다. 예를 들어 어떤 서비스의 프로필 사진을 저장해야 하는 용도의 Bucket은 불특정 다수가 접근해야 하기 때문에 Public으로 열어 놓아야 하지만 유저 개인의 파일을 보관하는 서비스는 그러면 안 됩니다. 🐜 이해하기 .. 2023. 6. 11.
AWS IAM에 대해서 알아보기 AWS IAM에 대해서 알아보기 IAM == 보안을 위한 기능IAM (Identity and Access Management)는 보안을 위해 접근 권한을 관리할 수 있는 여러 기능을 모아 둔 겁니다.보안의 기본 원칙은 필요한 사람에게 필요한 것들만 할 수 있게 해 주는 겁니다. AWS를 기준으로 한다면 특정 EC2에 접근할 수 있는 권한이 데이터 분석가에게 있을 필요는 없겠죠. Redshift 같은 데이터 분석 권한만 있으면 충분합니다.문제는 이걸 아무 기능도 없이 직접 1개 1개 설정하려면 새로운 데이터 분석가가 올 때마다 직접 설정해야 해서 굉장히 번거롭고, 결국은 귀찮아서 모든 권한을 주게 될지도 모릅니다. 이럴 때 IAM Roles을 사용하면 특정 직군이나 직책에게 필요한 권한을 미리 정의해 놓고, 이 Roles를 Users에 .. 2023. 6. 3.
쿠버네티스 (K8S)의 역할은 Spring Cloud의 역할과 겹칠까? 쿠버네티스 (K8S)의 역할은 Spring Cloud의 역할과 겹칠까? K8S란?K8S (쿠버네티스)는 MSA (마이크로서비스) 환경에서 여러 인프라 요소나 Container를 관리해 주는 기술입니다. Google에서 오픈소스로 공개했고, 마이크로서비스를 사용 중인 회사에서 사실상의 표준으로 자리 잡았습니다. 쿠버네티스가 뭘까? 작동원리, 아키텍처 정리!쿠버네티스 (Kubernetes, K8S)가 뭘까? 컨테이너(Container)를 관리해 주는 소프트웨어 IT 업계가 하나의 큰 서버를 여러개의 마이크로서비스로 나누면서, 각각의 마이크로서비스가 독립적으로 작동할jinkpark.tistory.comSpring Cloud란?Spring Cloud는 Spring 환경에서 분산 시스템, MSA (마이크로서비스)를 구현하기 위해 필요한 여러 기술들을 모아 놓은 겁니다. 처음에 Ne.. 2023. 5. 8.
Spring Cloud Sleuth와 Zipkin으로 로그 수집하고 Latency 분석하기 Spring Cloud Sleuth와 Zipkin으로 로그 수집하고 Latency 분석하기 🚨 주의 사항: Deprecation 🚨Spring Cloud Sleuth는 Spring Cloud 2022 버전부터 Deprecated 됐습니다. 이제 Spring Cloud Sleuth의 역할은 Micrometer가 하도록 통합 됐습니다.MSA 환경에서 logging의 어려움MSA 환경에서는 1개의 요청이 여러 서버를 거쳐서 일어납니다. 당연히 문제가 생기면 여러 서버를 봐야 할 수 있습니다. 이런 상황에서 이 모든 요청을 묶을 수 있는 값이 없으면 Log를 열심히 남기더라도 추적하기가 굉장히 어려워집니다. 그래서 이 요청들을 1개로 묶어 Log를 남기고, 남겨진 Log를 예쁘게 보여줄 수 있으면 굉장히 유용합니다.Spring Cloud Sleuth와 Zipkin의 역할Spring Cloud Sl.. 2023. 5. 3.
쿠버네티스(K8S)가 뭘까? 작동원리, 아키텍처 정리! 쿠버네티스(K8S)가 뭘까? 작동원리, 아키텍처 정리! 쿠버네티스 (Kubernetes, K8S)가 뭘까?컨테이너(Container)를 관리해 주는 소프트웨어 IT 업계가 하나의 큰 서버를 여러개의 마이크로서비스로 나누면서, 각각의 마이크로서비스가 독립적으로 작동할 필요가 생겨, VM보다 가벼운 컨테이너를 사용하게 됐습니다. 처음에는 수동으로 관리하거나, Docker Compose 같이 간단하게 관리하는 것으로 충분했지만, 점점 컨테이너들의 복잡도가 증가하면서 쿠버네티스를 사용해 컨테이너를 관리하게 됐습니다. 컨테이너는 보통 Docker를 떠올리지만, 쿠버네티스는 Docker를 포함해서 Containerd, CRI-O, rkt도 지원합니다. 쿠버네티스에 관한 흥미로운 사실들구글에서 처음 개발했습니다.Golang이라는 프로그래밍 언어로 개발 됐습니다.전체 이름.. 2023. 4. 2.
로드 밸런서(Load Balancer)에 쓰이는 알고리즘 로드 밸런서(Load Balancer)에 쓰이는 알고리즘 Load Balancer란?서버의 트래픽(요청)을 분산시키는 장치우리가 컴퓨터에 너무 많은 프로그램을 켜 놓으면 느려지고, 최악의 경우 블루스크린이 뜨며 작동을 중지하듯, 서버 또한 너무 많은 요청을 받으면 부담이 됩니다. Load Balancer는 부하(Load)를 밸런싱(Balance)해 주는 장치를 말합니다.네이버 홈페이지를 생각해 보면, 하루에 네이버를 찾는 사람이 1000만명은 될 겁니다. 이 모든 요청은 1개의 서버가 받는다면 네이버 홈페이지는 터지는게 일상일테지만, 로드 밸런서가 한 요청은 춘전의 데이터센터에 보내고, 한 요청을 서울로 보내는 식으로 분산시킨다면 터지지 않을 것입니다.그렇다면 로드 밸런서는 어떤 식으로 트래픽을 분산시킬까요?흔히 쓰이는 알고리즘Round Robin라운드 로빈돌.. 2023. 4. 1.
도커(Docker)가 뭐고 어디에 쓰는걸까? 도커(Docker)가 뭐고 어디에 쓰는걸까? 요즘 도커(Docker)라고 불리는 기술이 굉장히 인기가 많습니다. 개발자로서 아래의 이미지의 파란색 고래를 한 번쯤은 보신 적이 있으실텐데요. 이 도커! 도대체 뭐고 어디에 쓰는 걸까요? 간단하게 알려드리겠습니다. 도커가 뭐야?도커(Docker)는 쉽게 말해 가상머신(VM) 같은거라고 생각하면 됩니다. 근데 가상머신의 단점을 빼고 장점만 모은겁니다. 가상머신이 뭘까요? 저는 몇 년째 맥북을 쓰고 있는데, 가끔 어렸을 때 하던 메이플스토리가 하고 싶을 때가 있어요. 하지만 맥북에서는 메이플스토리가 돌아가지 않습니다...! 그래서 맥북에 원도우를 깔아서 메이플스토리를 하곤 했습니다. 이때 MacOS가 돌아가고 있는 상태에서, 또 다른 OS인 Windows를 가상머신의 형태로 설치한 겁니다.이런 가상머신의.. 2022. 8. 16.