본문 바로가기

반응형

전체 글

(43)
ELK를 활용한 로그분석 서비스 개발기 [1편] 사용자 로그를 분석하는 일은 더 나은 서비스를 만들어가기 위한 기본적인 과정이다. 시장에서는 짧은 코드 몇줄만 삽입하면 웹로그를 분석할 수 있는 Google Analytics가 대표적으로 활용되고 있다. 하지만 서비스가 일정 규모 이상으로 성장한다면 곧 자체적으로 로그를 정의하고 수집하여 분석할 수 있는 체계가 필요해질 것이다. 대규모 서비스의 경우 수많은 사용자 로그가 발생하며 이러한 대량의 로그를 실시간으로 집계하여 분석에 활용하기란 매우 어렵다. 때문에 일반적으로 다음과 같이 접근한다. 1. Data Warehouse(DW)에 원천데이터를 수집하고, 2. 필요한 로그 데이터를 다양한 Dimension과 Metric의 조합으로 사전에 집계하는 배치 작업들을 만들고, 3. 이렇게 만들어진 Data Ma..
당신이 SI를 떠나야하는 이유 System Integration(SI). 네트웍, 하드웨어 및 소프트웨어 등 IT와 관련된 수많은 요소들을 결합시켜, 하나의 시스템으로서 함께 운영될 수 있도록 하는 사업을 의미한다.(나무위키 발췌). 쉽게 말해 돈을 받고 고객이 원하는 소프트웨어를 만들어주는 형태의 사업인데, 현재 대한민국 IT 시장에서 가장 많은 비중을 차지하는 사업이 바로 SI사업일 것이다. 그러나 동시에 SI지옥, 개발자들의 무덤이라는 오명 또한 가지고 있다. 나 또한 2년 가까이 이 SI 업계에서 몸담아봤고 현재 대한민국 SI산업에 대해 부정적인 시각을 가지고 있다. 하지만 SI 산업 자체를 부정하고 싶지는 않다. 수요가 확실한 사업이며 배울 수 있는 것이 분명 있다. 다만 적어도 당신이 개발자를 꿈꾸는 사람이라면, 기술에 대..
DataJpaTest를 활용한 테스트 지난 포스팅에서는 Mockito를 활용하여 Service 객체가 적절하게 내부 객체를 호출하는지를 알아보는 테스트를 진행했었다. 그 과정에서 Mock 객체를 활용한 이유는 테스트의 주 관심 대상이 아닌 객체는 올바르게 동작한다는 가정을 하기 위해서였는데, 이제 해당 Mock 객체가 올바르게 동작했는지 테스트해보자. 마찬가지로 회의실 예약 예제를 활용해보자. 이번 테스트의 중점은 Spring Data JPA의 동작이다. 즉, 데이터가 실제로 올바르게 들어가고 나오는지를 보면 된다. 코드를 보자. 간단하다. testRetrieveRooms 메서드를 보면, 먼저 "A"라는 회의실을 생성해 roomRepository에 저장한다. 저장된 모든 회의실 중 첫번째 회의실을 꺼내온 다음, 회의실의 이름이 위에서 저장했..
누가 김민재의 중국행을 비난하는가 포탈의 김민재 관련 뉴스 기사 댓글. 김민재의 중국행은 네티즌들에게 조롱거리가 되었다. 최근 김민재만큼이나 국내 축구팬들에게 욕을 많이 먹은 축구 선수도 없을 것이다. 이유는 명료하다. 중국으로 이적했기 때문이다. 조금 더 길게 써보자면, '병역혜택을 받아서 미래가 밝은 젊은 나이인데도 중국으로 이적했기 때문'이다. 이것이 김민재가 비난을 받는 이유이다. 하지만 김민재의 중국 이적은 정말 그렇게 잘못된 일일까? 개인적으로는 아니라고 생각한다. 1. 병역혜택은 이미 계산 끝 말 그대로다. 병역혜택은 아시안 게임에서 금메달을 딴 성과에 대한 보상이다. 이미 계산이 끝났으며 김민재가 국가나 축구팬들에게 갚아야할 빚이 남아있는 것이 아니다. 그런데 일부 축구팬들은 '이러라고 병역혜택을 준것이 아니다'라는 주장을..
Mockito를 활용한 단위테스트 최근에 테스트 함수를 작성하기 위해 Mockito라는 테스트 프레임워크를 사용한 일이 있었다. 그런데 결국 어려운 개념이 아니었음에도, Mockito를 사용해야하는 이유를 제대로 받아들이는데 꽤 오랜 시간이 걸렸다. 따라서 다른 사람들의 시행착오 시간을 줄여주기 위해 내가 Mockito를 사용해보며 이해한바를 공유하고자 한다. Mockito란 먼저 Mockito는 Java 단위 테스트 프레임워크 중 하나로, 테스트를 Mock Object를 활용한다. 그렇다면 Mock Object란 무엇이란 말인가. 위키를 참조해보자. In object-oriented programming, mock objects are simulated objects that mimic the behavior of real object..
[자바스크립트] 최대값과 최소값 찾기 최대값과 최소값을 찾고자할 때 단순히 for문을 돌리는 방법이 있겠으나 이는 세련되지 못하다. 조금 더 자바스크립트스러운 방법을 알아보자. ❙ Math 객체 이용 기본 내장 객체인 Math 객체를 이용해보자. 이 객체는 절대값을 반환해주는 Math.abs, 난수를 발생시키는 Math.random 등 수학 기능과 관련된 다양한 메소드를 제공한다. 또한 Math.max, Math,min 메소드를 통해 최대값, 최소값을 구할 수 있다. 예제를 보자. var numbers = [ 19, 1, 3, 37, 8 ]; Math.max.apply(null, numbers); // 37 Math.min.apply(null, numbers); // 1 갑자기 apply 메소드가 사용됐다. 짧게 설명하자면 apply 메소드..
[자바스크립트] sort() 함수 활용하여 간단히 정렬하기 자바스크립트의 array 객체는 sort 함수를 내장하고 있다. 기본적이고 폭넓게 활용되므로 활용법을 알아두도록 하자. Array.prototype.sort(compareFunction(a, b)) 인자로 받는 함수는 직접적으로 정렬 순서를 결정하는데 사용되는 함수이다. 이를 생략하면 유니코드 순으로 정렬된다. compare function을 넣어준다면, 다음과 같은 원리로 정렬 순서가 결정된다. compareFunction(a, b)이 0보다 작은 경우 a를 b보다 낮은 색인으로 정렬한다. 즉, a가 먼저온다. compareFunction(a, b)이 0을 반환하면 a와 b의 순서를 변경하지 않는다. compareFunction(a, b)이 0보다 큰 경우, b를 a보다 낮은 색인으로 정렬한다. 즉, ..
[자바스크립트] arrow function과 this ecmascript6가 나온지는 한참됐지만 아직 브라우저(특히 ie)들이 이를 완벽히 지원하지 않고 있다. 따라서 현재도 여전히 es5에서 es6+로 넘어가는 과도기인데, 다행히 babel의 도움으로 지금 당장 es6로 개발을 해도 크게 문제될 것은 없다. es6의 가장 큰 문법적 변화사항을 꼽자면 역시나 arrow function이다. 그동안 주로 es5를 활용해서 자바스크립트 개발을 해왔다면 이 arrow function이 익숙지 않을것인데, 특히나 this와 관련해서 짚어볼 점이 있어 정리를 한번 해봤다. 1. Arrow function 문법 Arrow function의 기본적인 문법은 다음과 같다. 함수 작성시에 많은 부분을 생략할 수 있고, 화살표(=>)를 사용하여 조금 더 간결하게 코드를 작성..