목록IT (165)
And Brain said,
로그 추적과 수집 및 분석은 왜 필요할까? 개발 단계에서는 시스템 장애가 발생되면 천천히 로그를 분석하고 디버깅 과정을 거치고 다시 개발하면 된다. 하지만 실제 상용되는 서비스에 장애가 발생한다면? 개발 단계에서의 과정을 똑같이 할 수 있을까? 만약 당신의 시스템이 MSA와 같은 분산된 서비스나 특히 클라우드로 이동할 수록 발빠르게 분산 로그 추적, 수집 및 분석은 필수적이게 될 것이다. 즉, 당신의 완성된 시스템에 방점을 찍을 수 있도록 오늘은 가장 유명하고 많이 사용되는 ELK Stack에 대해 실제 사내 서버에 내가 구축한 구조에 대해 설명하도록 하겠다. ELK에 대한 설명은 아래 포스팅을 참고바란다. https://theworldaswillandidea.tistory.com/102 ELK Stac..
서비스의 심장과도 같은 Database가 멈춘다면 어떻게 될까? 당연히 서비스는 제 기능을 하지 못할 것이고 멈춰있는 시간동안 서비스 기능 장애 뿐만 아니라, 데이터 손실 등의 문제에 직면하게 된다면 그 피해가 심각할 수도 있다. 심장은 계속 뛰어야만 한다, 그리하여 오늘은 DB 부하 분산 기법인 Clustering과 Replication 방식에 대해 알아보자. Clustering Clustering은 여러개의 DB 서버에 적절히 부하를 분산시키는 (로드밸런싱) 구조다. 당연히 DB 하나가 죽어도 곧바로 대비가 가능하며 고가용성을 보장한다. 보통 수평적 구조를 가지며 세부적으로 모든 DB 서버를 Active 상태로 둘 수도 있고 Active 상태와 Standby 상태를 섞어서 사용한다. 모든 DB 서버가..
오늘은 크리스마스 기념 Jenkins를 들고왔다. 내가 직접 수많은 오류를 내면서 작성했던 Pipeline Script를 여러분들에게 선물로 드리겠다. 일단 Jenkins가 왜 CI/CD 파이프라인의 지휘관인지, Git - Jenkins - Docker - Kubernetes의 간략한 아키텍처에 대해 내가 아는 수준에서 설명하겠다. 먼저 Git에 소스를 푸쉬하면 Jenkins는 그 변화를 감지하고 변경된 소스를 클론하여 Docker 이미지로 빌드하고 레포지토리에 푸쉬한다. 이후, Kubernetes는 레포지토리에 푸쉬된 이미지를 yaml 파일 또는 CLI 명령어등의 방법으로 컨테이너로 실행시킨다. 여기서 또한, Jenkins 파일에 Kubernetes 명령어들을 적어서 자동으로 실행시켜줄 수 있다. 이것..
오늘은 TypeScript의 호출 시그니쳐(Call Signature), Overloading 그리고 다형성(Polymorphism)에 대해서 배워볼 것이다. Call Signature 호출 시그니쳐란 간단히 말해 함수 위에 커서를 올리면 나오는 정보를 말하며, 함수를 어떻게 호출하고 그 반환 타입은 무엇인지 알려준다. 이렇게 커스텀 타입을 선언해주고 함수 위에 커서를 올리면 이 함수의 정보가 나온다. Overloading 오버로딩(Overloading)이란 동일한 이름에 매개 변수만 다른 여러개의 함수를 만드는 것을 함수의 오버로딩이라고 한다. 함수의 다형성을 지원한다. 이렇게 파라미터가 다른 동일한 이름의 함수들을 만들 수 있다. 위의 경우는 파라미터의 개수가 같은 경우이고 만약 파라미터의 개수가 다..
오늘은 Github 소스를 Jenkins를 이용하여 Docker 컨테이너로 생성하는 CI/CD 파이프라인에 대해 간략히 알아보겠다. 일단 기본적인 Docker 네트워크를 만들고 나는 기존의 컨테이너와 이미지들을 전부 삭제했다. // Docker Network 생성하기 $ docker network create --gateway 172.18.0.1 --subnet 172.18.0.0/16 msa-network // container 전체 삭제 $ docker rm -f $(docker ps -qa) // image 전체 삭제 $ docker rmi $(docker images -q) 이제 Docker-compose.yml 파일을 만들어 docker-compose를 이용하여 Jenkins를 컨테이너로 띄워보..