많은 IT 회사들이 Kafka를 이용해서 로그를 수집하고 수집된 로그를 각 비지니스 로직에 맞게 파이프라인 처리를 해서 로그를 활용할 수 있는 수단들을 마련한다. 이런 과정이 정상적으로 진행 되고 있는지 모니터링 하려면 최소한으로 갖추어야 할게 무엇일까? 아마 가장 쉬운 방법은 Kafka Consumer Group의 Lag을 수집해서 일정 수치 이상으로 L

Read More

Scala언어로 만들어진 어플리케이션을 도커로 패키징해서 배포할때 메모리와 CPU 자원을 격리 시켰는데 이상하게 자원이 격리가 되지 않는 문제를 6개월 전에 겪었다. 그땐 호스트 머신의 모든 메모리를 사용해버리고 해당 호스트 머신에 떠 있는 모든 서비스가 장애로 전파되는 경험을 하게 되었는데 HeapSize를 지정하지 않아서 이런 문제가 생겼나보다 하고 그

Read More

이전에 haproxy log 시각화하기 글에서 fluentd를 이용해서 로그를 수집 했었다. 저 글을 쓸 당시엔 status code가 200 케이스는 수집을 하지 않았는데 200 성공 지표도 보아야 하는 상황이 생겨서 200 성공 로그 까지 모두 수집 했더니 로그를 수집하는 속도가 로그를 쌓는 속도를 이기지 못해 로그 수집이 점점 밀리는 현상이 생겼다.

Read More

로그 시각화는 시스템 운영에 있어서 아주 중요한 역할을 한다. 가령 서버에 트레픽이 많이 몰리는지 그래서 응답속도가 느려지고 있는지 혹은 메모리를 많이 써서 스왑이 일어나고 있는건 아닌지 등등 이런 시스템 전반적인걸 한눈에 보기 위해서 로그를 수집하고 이를 차트로 그린다. 만약 로그를 수집만 하고 차트를 그려서 보지 않는다면 어떻게 될까? 장애를 미리 파악

Read More

카나리아 릴리즈 전략이란 Netflix, Facebook, Spotify 등의 혁신적인 조직에서 채택한 스마트한 배포 전략이다. 이런 배포 전략을 가져가면 서비스 개발을 하는 개발자들은 개발단계에서 발견하지 못 한 문제에 대한 큰 부담을 줄일 수 있으며 새롭게 릴리즈된 버전의 장애를 모든 사용자가 아닌 최소한의 사용자만 경험하게 되고 장애를 파악함과 동시에

Read More

비트코인은 디지털 가상화폐 생태계를 구성하는 기술(블럭체인)과 개념의 모음을 뜻한다. 그리고 비트코인이라고 불리는 화폐단위인 비트코인은 비트코인 네트워크에 참여한 참여자들 사이에서 저장하거나 이동하는데 사용되는 단위를 말하며 비트코인 프로토콜을 이용해서 인터넷으로 사용자들과 통신을 하며 인터넷 외에 다른 통신수단이 사용될 수도 있다.  비트코인 사용자는 네

Read More

필수 준비 centos 7.2 Hadoop-2.7.4 JAVA 8 SSH   멀티 노드 클러스터 하둡 2.7.4 설치 9대의 클라우드  VM머신에 하둡을 설치 할 예정이다. master: kgn-mesos-master1.pg1.krane.9rum.cc slave: kgn-mesos-slave1.pg1.krane.9rum.cc kgn-mesos-sl

Read More

빅데이터 활용이 당연시 되는 현재, 빅데이터로 부터 시행착오를 겪어 원하는 결과를 얻거나, 스트림처리와 머신러닝을 효과적으로 수행하기에 적합한 빅데이터처리 오픈소스 스파크를 메소스에서 실행하는 방법에 대해서 알아 보자.   Spark Mesos는 어떻게 동작하는 걸까? Spark Driver는 spark-shell, spark-submit, zepplein

Read More

Apache Kafka를 일반적인 방법으로 설치해서 사용하는 방법은 이미 공식 홈페이지 Quickstart에 존재 하지만 Mesos를 통한 데이터 센터를 추상화 하여 운영하는 경우 Kafka또한 Mesos위에서 관리 되게 하고 싶을것이다. 나 또한 이런 고민으로 시작해서 검색을 해보니 이미 DCOS에서 먼저 고민하고 솔루션을 제공 해주고 있었다. 사실 DC

Read More

어쩌면 Jenkins와 비슷한 기능을 하는 듯 하지만 조금 다른 GoCD에 대해서 알아보기 위해서 공식 문서 https://docs.gocd.org/current/introduction/concepts_in_go.html 를 기반으로 GoCD를 소개 하려 한다. 만약 Continuous Integration and Continuous Delivery 에 대

Read More

아마 대부분의 개발하는 과정은 개발코드 생산 -> 테스트 -> 빌드 -> 배포 이 과정을 거칠 것이다. 코드 생산을 제외하고 대부분은 반복되는 작업이다. 이러한 반복된 작업을 자동으로 해주는 고마운 툴이 GOCD라는 툴이다. 아마 많은 분들이 Jenkins를 더 많이 사용하는 걸로 알고 있는데, 개인적으로 GOCD UI가 좀더 이쁘고 Pipeline관리가

Read More

멀티플레이 게임서버가 네트워크를 통해서 서로 데이터를 주고 받으려면 게임객체를 일정한 형식으로 맞추어서 전송하여한다. 쉽게하면 JSON을 통해서 주고 받곤 하는데, 높은 퍼포먼스를 요구하는 멀티플레이 서버는 이러한 시리얼라이즈 오버해드 또한 신경을 안 쓸 수가 없다.  이런 네트워크를 통해서 데이터를 전송 할때 호율적이고 서로 다른 언어 끼리도 동일하게 읽

Read More

테스트가 필요할때 에이전트를 빠르게 확장하고 테스트가 없을땐 에이전트를 줄여 놓을 수 있는 편리한 방법중 하나는 Ngrinder를 컨테이너 서비스위에 올려두고 사용하는 것이 방법중 하나일 것이다. 많은 컨테이너 서비스들이 있지만 난 즐겨 사용하는 Mesos Marathon에 Ngrinder를 올려서 개발 중간 중간 테스트가 필요할때 에이전트를 빠르게 확장하

Read More

테스트 없이 서버를 배포하고 런칭을 했을 때 갑작스러운 트레픽에 서버 성능이 나오지 않아서 서비스가 빛을 발휘 하지 못하는 경우를 게임개발업에서 많이 보아왔다. 그래서 꼭 정식 릴리즈를 하기 전에 서버 부하 테스트를 하는건 필수과정 중 하나이다. 내가 하고 있는 프로젝트가 멀티 플레이 게임 서버를 개발하고 있고, 이를 테스트 하기 위해선 어떤 도구가 있는지

Read More

타입 바운드 매개변수화한 타입이나 메서드를 정의할 때, 타입 매개변수에 대해 구체적인 바운드를 지정할 수 있다.   상위 타입 바운드 상위 타입 바운드는 어떤 타입이 다른 특정 타입의 서브타입이어야 한다는 제약을 가하는 것이다. 예를들어 A <: AnyRef라는 타입 매개변수는 AnyRef의 서브타입인 어떤 A라는 의미이다. 어떤 타입은 항상 자기자신의 슈

Read More

변성표기법 상속에 따른 변성을 어떻게 다루는지 알아보자.   추상 타입과 매개변수화한 타입 스칼라는 매개변수화한 타입을 지정한다. 이는 자바의 제너릭과 매우 비슷하며 이를 혼용할 수 있다. 하지만 스칼라에서는 매개변수화한 타입이라고 말하는게 정확하며 자바에선 제너릭이라고 말하는 것이 정확하다. 매개변수화한 타입은 List[String] = List("a",

Read More

패턴 매칭과 케이스 클레스 언듯 보면 자바의 스위치문과 비슷하지만 훨씬 강력한 패턴 매칭과 함께 케이스 클래스에 대해서 알아보자.   케이스 클래스 케이스 클래스는 case class 라는 키워드로 만들어진 클래스를 말하며 컴파일러는 케이스클래스를 위해서 몇가지 컴파일러가 편리한 기능을 제공한다. new 키워드를 사용해서 만들지 않아도 되도록 동반객체를

Read More

스칼라 클래스와 객체 스칼라에도 자바와 비슷하게 클래스가 있고 그 안에 필드, 메소드를 선언 그리고 내부 동작 원리에 대해서 간단히 정리하려 한다.   클래스 정의 자바와 문법이 비슷하며 new 를 사용해서 객체를 만들 수 있다. class TestClass { // 본문 } 위 클래스를 이용해서 객체를 만들려면 아래와 같이 하면된다. val c =

Read More

Scala Install 스칼라를 커맨드라인에서 쉽게 접근 하기 위해서 스칼라를 설치해보자.   Download 우선 스칼라 바이너리 파일을 다운로드 한다.   Path And Environment 다운로드 받은 스칼라 파일을 압축을 푼 후 터미널을 열어서 아래 명령어를 통해 /usr/local/share/scala 디렉토리로 옴기자. $ mv sca

Read More

Monad Transformers Future[Either[A, X]] 이런 모나드 안에 또 다른 모나드 인스턴스가 들어 있는 경우엔 어떻게 처리를 해야 할까? 만약 User 테이블에 값을 질의해서 가져온다고 했을때 데이터베이스엔 내가 질의한 값이 있을수도 있고 없을 수도 있다 그러면 우린 이런 유저를 Option[User]타입으로 정의 할수 있고 그리고

Read More