본문 바로가기

전체 글

[Docker]Dockerfile을 이용해 빌드, 배포하기 트러블슈팅 Project3-DAY3-Step1 목표: 수정된 openapi.yaml을 ec2에서 Dockerfile을 사용하여 배포 자동화를 달성하자. 필요한 것: redoc-cli: openapi.yaml을 .html파일로 변경하여 정적 호스팅 가능하게 하자. apache2: .html파일을 정적호스팅 하자. ssh: ec2에 접속하자. scp: local의 파일을 ec2에 옮기자. shell script: 명령어를 파일에 정리하여 반복되는 작업을 한번에 실행하자. Apache2 is not running 작업흐름 ec2에 ssh를 통해 접속하여 Docker를 설치한다. 로컬에서 redoc-cli를 통해 .html파일을 생성한후 index.html로 파일명을 변경한다. ec2에 접속하여 apache2 서버를 이미.. 더보기
[회고]세번째 project를 진행하고 DevOps가 뭐지? 리눅스..?라고 생각했던 2월에서 벌써 세 번째 프로젝트를 끝마쳤고, 앞으로 모니터링에 대한 학습과 마지막 거대한 프로젝트 하나면 나의 개발자로서 첫걸음을 뗄 수 있을 것이다. 한 주 한주 회고를 진행하면서 매번 한주 공부한 것이 아쉽고 다음 주는 더욱더 잘 정리해보자라는 다짐을 하며 보냈는데, 막상 지금까지 와서 보니 나는 꽤 많은 것을 배웠다. 이번 프로젝트도 마찬가지다. 이번 프로젝트에서 가장 중요한 점은 "커뮤니케이션"이다. 이번 프로젝트는 가상의 상황을 가정한 채 진행되었다. 나는 한 소프트웨어 회사의 개발자이고 빵 공장을 운영하는 고객의 요청을 받는다. 판매 요청에 따라 현재 존재하는(레거시) 공장 서버와 통신할 수 있도록 해주세요. 공장 서버가 오래되어서 가끔 작동을 안.. 더보기
[모니터링]EC2의 CPU사용량에 따른 경보를 디스코드 웹훅으로 전송하자! Bare Minimum Requirement EC2 서버를 ASG를 통해 구성합니다. 구성은 다음을 따릅니다. CloudWatch 알람을 통해 ASG의 스케일 인/아웃을 진행합니다. 스케일 인/아웃이 진행될 때 디스코드에 알림을 보냅니다. 메트릭을 바탕으로 장애 발생 예상 시점에 디스코드에 알림을 보냅니다. CPU 사용률(CPUUtilization) 값이 특정 값 이상일 때 경보가 발생하게 하세요 ASG 시작구성 설정 및 EC2 생성 ASG 시작구성 설정을 적절히 하고, 사용자 데이터에 다음을 넣어, 잘 실행되는지 확인할 수 있도록 한다. #!/bin/bash echo "Hello, World" > index.html sudo apt update sudo apt install stress nohup bu.. 더보기
[JS]Function관련 문법 Q1. 'Hello HoF!' 리턴하는 함수를 리턴해야 합니다. function returnFunction() { return function hello() {return 'Hello HoF!'} } Q2. 함수와 수(num)를 입력받아 num에 함수를 적용(apply)한 결과를 리턴해야 합니다. function functionParameter(func, num) { return func(num) } Q3. 두 개의 함수와 수(num)를 입력받아 num에 함수들을 num에 가까운 순서대로 적용한 결과를 리턴해야 합니다. function compose(func1, func2, num) { return func1(func2(num)) } Q4. 두 개의 함수를 입력받아 두 함수가 결합된 새로운 함수를 리턴해.. 더보기
[lambda]Serverless Framework를 사용하여, 람다함수로 express 서버를 띄워보자 Serverless Framework란 Serverless Framework is open source software that builds, compiles, and packages code for serverless deployment, and then deploys the package to the cloud. 출처 AWS 공식문서에 따르면 Serverless Framework란 서버리스 배포를 위한 코드를 빌드, 컴파일한 후 클라우드에 배포하주는 오픈소스 소프트웨어이다. 쉽게 말하면 AWS의 SAM을 활용하여 서버리스 배포를 CLI에서 쉽게 할 수 있는 것처럼, Serverless Framework도 서버리스 배포를 쉽게 할 수 있게 도와주는 도구이다. 다른점은 Azure, Google과 같은 다.. 더보기
[k8s]readiness probe로 파드 health check 하기! 목표: 3.0 버전의 CozServer 파드가 탐침기(probe)에 의해 문제가 있음을 스스로 발견하게 하고, 자동으로 롤백할 수 있게 하세요 디플로이먼트의 spec.minReadySeconds 속성의 기본값은 0입니다. 이 말은 곧 파드가 Running으로 변하면 "사용 가능한 것으로 간주한다"는 의미입니다. 그런데, 실제로 CozServer의 3.0 버전은 문제가 있는 버전이었죠. minReadySeconds를 늘리면, 롤아웃의 속도를 조절할 수 있습니다. CozServer의 3.0 버전 디플로이먼트에 readiness probe를 달면, 롤아웃이 늦춰지는 동안(minReadySeconds가 충분히 길어야 합니다), 탐침이 가능합니다. - readiness probe를 달고 - HTTP GET 요청을.. 더보기
[k8s]스테이트풀 셋 Stateless 한 파드를 Stateful 하게 관리하고 싶다. 파드는 일시적이며 Stateless하다. Deployment에서 파드의 교체와 배치를 담당하며, 레플리카셋을 통해 파드를 수평 확장할 수 있다. 파드가 Stateless 하기에 수평 확장이 쉽고 파드들은 상호 대체 가능하다. 이렇듯 쿠버네티스는 Stateless 한 애플리케이션을 관리하는데 특화되어 있다. 아무래도 컨테이너 기술 자체가 그렇듯이 말이다. 그러나 데이터베이스와 같이 Stateful 하게 관리해야 할 때도 있을 것이다. 그럴 땐 어떻게 할까? MySQL, mongoDB, redis와 같은 데이터베이스 어플리케이션이 담긴 파드가 사라질 때, 데이터가 함께 사라지도록 두어서는 안 된다. 쿠버네티스에서 제공하는 Volume은 컨테이.. 더보기
[JS]객체, 배열 연습문제 Q1. 객체, 키, 수를 입력받아 주어진 키에 해당하는 값이 배열인 경우, 수가 가리키는 인덱스에 해당하는 요소를 리턴해야 합니다. function getElementOfArrayProperty(obj, key, index) { let arrProperty = obj[key]; if (Array.isArray(obj[key])){ return arrProperty[index] } } 우선 객체에 주어진 키에 해당하는 값이 배열인지 판단한다. 배열이라면, index에 해당하는 요소를 리턴한다. Q2. 배열과 객체를 입력받아 배열의 각 요소들을 객체의 키로 했을 때 그 값을 추출하여 만든 새로운 객체를 리턴해야 합니다. function select(arr, obj) { let newObj = {}; for .. 더보기