HOME
![[찍어먹기] Spring Boot 부터 ELK Stack 까지 :: 데이터 수집해서 시각화 하기 (2)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcqlWiM%2Fbtrr5T7K4ii%2FAAAAAAAAAAAAAAAAAAAAACmHTs7Tc5aDj4e6D0H-cIVgcMNzXUwREfRwUx8PSHGN%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3D6JLBSmGstU%252B%252FCbCk0ou9O4Zv1i0%253D)
[찍어먹기] Spring Boot 부터 ELK Stack 까지 :: 데이터 수집해서 시각화 하기 (2)
이전 포스팅에서 ELK Stack을 어찌저찌 원하는대로 돌아가게끔 구성했습니다. 이번 포스팅에서는 구성 후 받은 피드백과 오류 파티를 해결한 내용을 정리해보고자 합니다. X-Pack 문제 어느 순간부터 Logstash 를 기동할 때 아래와 같은 오류가 발생하고 데이터 Shipping이 불가능했습니다. [logstash.licensechecker.licensereader] Attempted to resurrect connection to dead ES instance, but got an error {:url=>”http://elasticsearch:9200/“, :exception=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableE..
![[찍어먹기] Spring Boot 부터 ELK Stack 까지 :: 데이터 수집해서 시각화 하기 (1)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FPKYdg%2Fbtrr4RWfEIS%2FAAAAAAAAAAAAAAAAAAAAAJS5nL-KWWa05jUlnF4wSLSb-ye30WDrvwltF2h48vzB%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Dny41qPAXrZkLiJ1ECc5fGjRUChM%253D)
[찍어먹기] 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 : 익명 클래스보다는 람다를 사용하라](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FARsNT%2Fbtrp6w1Lti5%2FAAAAAAAAAAAAAAAAAAAAANQWFHpzGItWM52nz8cf6VzODLMKwOiiq5x5Fo97ZFtz%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Df%252B7i4VM2GssPX8AEEuaeQzOeFGc%253D)
[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 : 제네릭과 가변인수를 함께 쓸 때는 신중하라](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fc419po%2FbtrpPFrL3Kc%2FAAAAAAAAAAAAAAAAAAAAAE_nhwWlyeedl74GcmHlMi5J35ABKwxhU_-K0p1YeDCv%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Dx7buseR8XNYB7cCxJxIM07p%252B%252FVs%253D)
[Effective Java] 아이템 32 : 제네릭과 가변인수를 함께 쓸 때는 신중하라
아이템 32 : 제네릭과 가변인수를 함께 쓸 때는 신중하라 가변인수 가변인수는 메서드에 넘기는 인수의 개수를 클라이언트가 조절할 수 있게 해줍니다. 덕분에 메서드를 n번 오버로딩 하지않고 원하는 개수만큼 인자를 넘길 수 있게 해줍니다. 이 가변인수 메서드를 호출하면 가변인수를 담기 위한 배열이 자동으로 하나 만들어지는데요. 아래와 같은 방법으로 확인할 수 있습니다. public class Item32 { public static void varargsMethod(String... args) { System.out.println(Arrays.toString(args)); } } 위와 같은 가변인수 메서드를 아래와 같은 코드로 호출해줍니다. 사실 호출하지 않아도 IDE 덕분에 타입이 유추가 되긴하죠..ㅎㅎ ..
![[Effective Java] 아이템 21 : 인터페이스는 구현하는 쪽을 생각해 설계하라](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FZOn1i%2FbtrpBBH7YkC%2FAAAAAAAAAAAAAAAAAAAAAHhokjsOQ0ZJX_QNJTkL7o4Im8NE1TCKw0epmE_SlkwS%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DBGDmJb4EyDILhlEJQDreAHD0KZk%253D)
[Effective Java] 아이템 21 : 인터페이스는 구현하는 쪽을 생각해 설계하라
아이템 21 : 인터페이스는 구현하는 쪽을 생각해 설계하라 자바 8 이전에는 기존 구현체를 깨뜨리지 않고서는 인터페이스에 메서드를 추가할 방법이 없었으나, 자바 8 에서 디폴트 메서드를 제공하면서 가능해졌습니다. 디폴트 메서드 해당 인터페이스를 구현한 후 디폴트 메서드를 재정의하지 않은 모든 클래스에서 디폴트 구현이 쓰이게됩니다. 🧑💻 : 와 그러면 인터페이스 설계할때 가볍게하고 나중에 디폴트 메서드를 추가해도 괜찮네요 👩 : 그러면 안돼요. 🧑💻 : ??? 디폴트 메서드는 구현 클래스에 대해 아무것도 모른채 합의 없이 무작정 삽입될 뿐입니다. 생각할 수 있는 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하기란 어려운법! 자바 8의 Collection 인터페이스에 removeIf 메서드가 ..
![[Effective Java] 아이템 5 : 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fz2SHo%2FbtrpxxsrowG%2FAAAAAAAAAAAAAAAAAAAAAHWUZeoErlv_5JapgMXxuY6jjQpvRYCcDCfQZ3311mj5%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DJTyCwOKfKNDWY4A5tyr9n2U5nNQ%253D)
[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 = ..