전체 글

전체 글

    [찍어먹기] Spring Boot 부터 ELK Stack 까지 :: 데이터 수집해서 시각화 하기 (1)

    [찍어먹기] Spring Boot 부터 ELK Stack 까지 :: 데이터 수집해서 시각화 하기 (1)

    앞선 포스팅에서 반정형 로그 수집기 애플리케이션을 만들어보았습니다. 구현 내용을 다시 상기해보면, 해당 애플리케이션은 반정형 데이터 수집 요청을 받아 Writer 인터페이스를 구현하는 Writer들로 데이터를 저장하는 역할을 했습니다. 이번 포스팅에서는 FileWriter로 로컬 저장소에 저장된 데이터들을 ELK Stack(Elastic Stack)을 이용해 수집하고, 저장하고, 시각화해보도록 하겠습니다. docker compose 작성 GitHub - ParkIlHoon/data-collector: [개인 프로젝트] 찍먹용 데이터 수집 프로젝트 [개인 프로젝트] 찍먹용 데이터 수집 프로젝트. Contribute to ParkIlHoon/data-collector development by creatin..

    [Effective Java] 아이템 42 : 익명 클래스보다는 람다를 사용하라

    [Effective Java] 아이템 42 : 익명 클래스보다는 람다를 사용하라

    아이템 42 : 익명 클래스보다는 람다를 사용하라 익명 클래스 과거 자바에서는 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스를 사용했습니다. 이런 인터페이스의 인스턴스를 함수 객체라고하여, 특정 함수나 동작을 나타내는 데 썼습니다. JDK 1.1 부터 함수 객체를 만드는 주요 수단은 익명 클래스가 되었습니다. Collections.sort(words, new Comparator() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }); 위 코드는 문자열을 길이순으로 정리하는데, 정렬을 위한 비교 함수로 익명 클래스를 사용합니다. Comparator 인터페이스가 정렬을..

    [Effective Java] 아이템 32 : 제네릭과 가변인수를 함께 쓸 때는 신중하라

    [Effective Java] 아이템 32 : 제네릭과 가변인수를 함께 쓸 때는 신중하라

    아이템 32 : 제네릭과 가변인수를 함께 쓸 때는 신중하라 가변인수 가변인수는 메서드에 넘기는 인수의 개수를 클라이언트가 조절할 수 있게 해줍니다. 덕분에 메서드를 n번 오버로딩 하지않고 원하는 개수만큼 인자를 넘길 수 있게 해줍니다. 이 가변인수 메서드를 호출하면 가변인수를 담기 위한 배열이 자동으로 하나 만들어지는데요. 아래와 같은 방법으로 확인할 수 있습니다. public class Item32 { public static void varargsMethod(String... args) { System.out.println(Arrays.toString(args)); } } 위와 같은 가변인수 메서드를 아래와 같은 코드로 호출해줍니다. 사실 호출하지 않아도 IDE 덕분에 타입이 유추가 되긴하죠..ㅎㅎ ..

    [Effective Java] 아이템 21 : 인터페이스는 구현하는 쪽을 생각해 설계하라

    [Effective Java] 아이템 21 : 인터페이스는 구현하는 쪽을 생각해 설계하라

    아이템 21 : 인터페이스는 구현하는 쪽을 생각해 설계하라 자바 8 이전에는 기존 구현체를 깨뜨리지 않고서는 인터페이스에 메서드를 추가할 방법이 없었으나, 자바 8 에서 디폴트 메서드를 제공하면서 가능해졌습니다. 디폴트 메서드 해당 인터페이스를 구현한 후 디폴트 메서드를 재정의하지 않은 모든 클래스에서 디폴트 구현이 쓰이게됩니다. 🧑‍💻 : 와 그러면 인터페이스 설계할때 가볍게하고 나중에 디폴트 메서드를 추가해도 괜찮네요 👩 : 그러면 안돼요. 🧑‍💻 : ??? 디폴트 메서드는 구현 클래스에 대해 아무것도 모른채 합의 없이 무작정 삽입될 뿐입니다. 생각할 수 있는 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하기란 어려운법! 자바 8의 Collection 인터페이스에 removeIf 메서드가 ..

    [Effective Java] 아이템 5 : 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

    [Effective Java] 아이템 5 : 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

    아이템 5 : 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 많은 클래스가 하나 이상의 자원에 의존합니다. 아래 SpecllChecker는 사전(dictionary)에 의존하고 있는데, 아래처럼 구현하는 경우를 많이 볼 수 있습니다. 정적 유틸리티 public class SpellChecker { private static final Lexicon dictionary = new LexiconDictionary(); private static boolean isValid(String word) { ... } private SpeckChecker() { } // 객체 생성 방지 } 싱글턴 public class SpellChecker { private final Lexicon dictionary = ..

    [찍어먹기] Spring Boot 부터 ELK Stack 까지 :: 반 정형 데이터 수집기 만들기

    [찍어먹기] Spring Boot 부터 ELK Stack 까지 :: 반 정형 데이터 수집기 만들기

    첫 번째 요리. Spring Boot를 활용한 반정형 데이터 수집 애플리케이션입니다. 이 애플리케이션은 요청받은 데이터를 여러 형태의 저장소(로컬 파일, DB 등)에 저장하는 역할을 합니다. 요구사항 POST 요청을 통해 수집할 데이터를 받음 한 시간마다 수집한 데이터를 로컬에 파일로 저장(롤링) File I/O 는 느리고, 요청마다 파일에 데이터를 쓰면 버틸 수 없기 때문에 임시로 메모리에 쌓고 비동기로 파일에 Write 조리 과정에서 여러 차례의 설계 수정과 리팩터링이 있었습니다. 이제 각 단계별로 설명해드리도록 하겠습니다. 단계별 레시피(소스 코드)도 함께 있으니 clone 받아 따라 해 보세요! 더보기 초기 개발 설계 수정 및 피드백 반영 피드백 반영 이벤트 Pub-Sub 피드백 반영 1. 초기 ..

반응형