Dev 84

[Kubernetes] 쿠버네티스 Intro. 필요성, 구성, 동작 방식

대세는 쿠버네티스 강의와 Kubernetes와 Docker로 한 번에 끝내는 컨테이너 기반 MSA를 참고하여 공부한 바를 정리하였습니다. 1. 쿠버네티스 공부를 시작하는 이유 내가 해온 일 들 중 서비스 운영에 대해 고민했던 시기들을 그려본 것이다. Docker를 이용한 서비스 배포 과정에 CI/CD와 service alert 기능을 추가한 이후에도, 여러 서버에 container를 효과적으로 모니터링하고 관리하는데 어려움이 있었다. 예를 들면, 서버 health check는 정상이지만 그 안에 container가 지속적으로 down되는 문제가 발생했을 때 이를 알아차리기란 쉽지 않다. 그리고 많은 연산에 리소스가 들어가는 서비스의 경우 리소스를 효율적으로 관리하고 분배하도록 인프라를 직접 관리하는 것도..

Dev/DevOps, Infra 2022.03.04

[Docker, AWS] Docker log를 AWS Cloudwatch에서 보기

EC2에서 docker를 실행시키는 경우 container의 log가 EC2 자체에 저장된다. 즉, container의 로그는 /var/lib/docker/containers/[contianer ID]/container-cached.log 에 모이게 되는데, 이렇게 되면 instance에 직접 들어가서 docker logs [container ID] 로 확인하거나 저 파일에 들어가서 로그를 하나하나 확인해야 한다. 그래서 효율적인 로그 관리를 위해서는 container의 log를 cloudwatch로 실시간 export 하는 과정이 필요하다. 그리고 추가적으로 Cloudwatch에는 Log groups이 있고 그 안에 Log Streams이 있고 각 stream안에 log들이 모이게 되는데 이 때 Log..

Dev/DevOps, Infra 2021.10.22

[Github, CI/CD] Github Actions self hosted runner with own GPUs

Github Actions self hosted runner with own GPUs Github Actions는 Gtihub을 기반으로 하는 CI/CD, 여러 개발 Workflow 자동화 툴이다. 그런데 사용하다 보면 Github Actions workflow를 Github-hosted runner에서만 실행시키는데 한계가 있는 경우가 있다. A GitHub-hosted runner is a virtual machine hosted by GitHub with the GitHub Actions runner application installed. 구체적으로 어떤 경우가 있을 수 있는지 'ML application을 위한 Workflow를 Github Actions로 실행하고자 할 때'를 예시로 살펴보자면..

Dev/DevOps, Infra 2021.10.10

[AWS, Post-mortem] EC2 리소스 과다 사용으로 인한 인스턴스 상태 확인 실패 문제와 SQS dead-letter queues

AI 분석이 필요한 메세지가 AWS standard SQS에 들어오면 AI analyzer가 해당 메세지를 가져가서 분석을 시작하는 형태의 서비스가 있습니다. 이런 서비스에서 AI 분석 도중 EC2가 멈추고 Status check에서도 instance reachability check failed가 뜨는 경우가 발생할 때 어떤 식으로 대응을 해 나갈 것인지 고민하는 과정을 가졌습니다. 그리고 그 과정에서 알게된 SQS dead-letter queues에 대해서 정리하였습니다. AI analyzer가 도커 형태로 띄워져 있는 EC2 서버의 유형은 아래와 같다. 인스턴스 GPU vCPU 메모리 (GiB) GPU 메모리(GiB) 스토리지(GB) 네트워크 성능(Gbps) g4dn.4xlarge 1 16 64 1..

Dev/DevOps, Infra 2021.09.12

[Data Warehouses] Data Warehouses

Key Reference Data Warehouse Tutorial for Beginners: Learn in 7 Days 데이터 웨어하우스에 대해서 알아보면서 많은 도움이 되었던 글이다. 요즘 '깊고' '정확하게' 이해해야 한다는 (긍정적인) 부담감이 있는데 시간과 체력이 따라주지 않아서 힘이 든다. 그래도 필요할 때마다 필요한 주제를 찾아서 읽어봐야겠다는 마음으로 남겨둔다. 1. Data Warehouse란 ? 1) Data Warehouse와 Business intelligence 위키에서 Data Warehouse에 대해 소개한 내용을 보자. In computing, a data warehouse (DW or DWH), also known as an enterprise data warehouse ..

[TDD] Python Testing Framework - Pytest, unittest - Coverage

1. Coverage Code Coverage에 대해서는 를 보고 쉽게 이해할 수 있었습니다. Installation: $ pip install coverage Unittest: $ coverage run --branch -m unittest Pytest: $ coverage run --branch -m pytest Use $ coverage report -m to report on the results $ coverage html to get annotated HTML listings detailing missed lines 2. Coverage report tool Codecov + Github Actions Github actions에서 main 브랜치에 push 나 PR을 하면 pytest와 un..

Dev/SW Engineering 2021.08.16

[TDD] Python Testing Framework2 - Pytest, Unittest - mocking

1. Mock mocking이 필요한 경우를 예시로 들고, 해당 mocking을 Unittest로 구현할 때와 Pytest로 구현할 때를 나누어서 살펴보겠습니다. 1) Random result mocking import random import requests def roll_dice(); print("rolling...") return random.randint(1, 6) def quess_number(num): result = roll_dice() if result == num: return "You won!" else: return "You lost!" 이런 코드가 있을 때, Random 모듈이 잘 작동하는지가 아닌 random의 결과가 있을 때, 내가 작성한 guess_number 함수가 기대대로..

Dev/SW Engineering 2021.08.16

[Data Modeling] Apache Cassandra

1. Apache Cassandra란? Apache Cassandra is an open source NoSQL distributed database trusted by thousands of companies for scalability and high availability without compromising performance. Apache Cassandra는 scalability와 high availability에 적합한 수많은 회사들이 사용하고 있는 오픈 소스 분산형 NoSQL 데이터베이스 관리 시스템이다. 하지만 정의를 봐도 잘 이해가 되지 않는다. '분산형 데이터베이스가 뭔지, 어떻게 scalability와 high availability 하길래 최적화 되어있다는 것인지 모르기 때문이다...

[Github, CI/CD] 특정 파일이나 폴더에 대해서만 Github Actions가 trigger되는 방법

Dockerfile이 변경되었을 때만 build를 다시해서 ECR에 push 하는 작업이 필요했다. Github Actions에서 이렇게 변경 사항이 있는 아티팩트에 대해서만 액션이 트리거되어 CI/CD를 해주는 방법은 paths selector를 사용하는 것이다. name: Deploy Analyzer image to Amazon ECR on: push: paths: # HERE! - "Dockerfile" # HERE! branches: [main, release] jobs: deploy: name: Deploy runs-on: ubuntu-latest 이 방법은 monorepo에서 github actions로 CI/CD를 구성하고자 할 때도 유용하게 사용할 수 있다. https://medium.co..

Dev/DevOps, Infra 2021.08.09

[HTTP, AWS] 3xx 대 Status와 Lambda@Edge

3xx - Redirection 서버가 클라이언트의 요청을 완료하기 위해 유저 에이전트(웹 브라우저)의 추가 조치가 필요할 때 3xx 대 status code와 함께 client 에게 다시 보내는 것이다. 리다이렉션의 이해 웹 브라우저는 3xx 대 status code 가 있는 응답 결과에 Location 헤더가 있으면 Location 위치로 자동 이동하는데, 이를 리다이렉트라고 한다. 리다이렉트의 흐름을 보면, 3xx status code 300: Multiple Choices 사용하지 않는다. 영구 리다이렉션: 특정 리소스의 URI가 영구적으로 이동하여 이 리다이렉션은 영원히 지속된다. 그리고 검색 엔진도 이런 리다이렉션을 인지한다. 301: Moved Permanently 리다이렉트시 요청 메서드가..

Dev/DevOps, Infra 2021.06.24