java
![[찍어먹기] Spring Boot 부터 ELK Stack 까지 :: 반 정형 데이터 수집기 만들기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FduZOEc%2Fbtro08GeGY6%2FAAAAAAAAAAAAAAAAAAAAADS-1PIBzLTjcc4F3nlfD2qSdZa1w-7zQ7Q7kP75oIyK%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DU66O6zXKUGFen1Zenw4mtx5F%252FlM%253D)
[찍어먹기] Spring Boot 부터 ELK Stack 까지 :: 반 정형 데이터 수집기 만들기
첫 번째 요리. Spring Boot를 활용한 반정형 데이터 수집 애플리케이션입니다. 이 애플리케이션은 요청받은 데이터를 여러 형태의 저장소(로컬 파일, DB 등)에 저장하는 역할을 합니다. 요구사항 POST 요청을 통해 수집할 데이터를 받음 한 시간마다 수집한 데이터를 로컬에 파일로 저장(롤링) File I/O 는 느리고, 요청마다 파일에 데이터를 쓰면 버틸 수 없기 때문에 임시로 메모리에 쌓고 비동기로 파일에 Write 조리 과정에서 여러 차례의 설계 수정과 리팩터링이 있었습니다. 이제 각 단계별로 설명해드리도록 하겠습니다. 단계별 레시피(소스 코드)도 함께 있으니 clone 받아 따라 해 보세요! 더보기 초기 개발 설계 수정 및 피드백 반영 피드백 반영 이벤트 Pub-Sub 피드백 반영 1. 초기 ..
![[Effective Java] 아이템 68 : 일반적으로 통용되는 명명 규칙을 따르라](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FNil1O%2Fbtroec4fHGk%2FAAAAAAAAAAAAAAAAAAAAAFB-LdhzQRwF8BzILANZJ_4DCt-EKGScPwrjfiwLyg8w%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DNvj3UPPaPD%252FsHNiw%252FE0chR5cLL8%253D)
[Effective Java] 아이템 68 : 일반적으로 통용되는 명명 규칙을 따르라
아이템 68 : 일반적으로 통용되는 명명 규칙을 따르라 철자 규칙 패키지와 모듈 점(.)으로 구분하여 계층적으로 짓는다. 모두 소문자 알파벳 혹은 숫자로 구성한다. 조직 바깥에서도 사용될 패키지라면, 인터넷 도메인 이름을 역순으로 사용한다. 점(.)으로 구분되는 각 요소는 보통 8자 이하 짧은 단어/약어로 한다. 클래스와 인터페이스 하나 이상의 단어로 구성하며, 각 단어는 대문자로 시작한다. 약어의 경우 각 약자의 시작과 끝을 명확하게 알 수 있도록 첫 글자만 대문자로 하는 경우가 많다 (HttpUrl ↔️ HTTPURL) 메서드와 필드 클래스 명명 규칙과 첫글자를 소문자로 쓴다는 점만 다르다. 첫 단어가 약자라면 단어 전체가 소문자여야한다. 상수 필드는 구성하는 단어 모두를 대문자를 사용하며, 단어 사..
![[자바로 배우는 리팩토링 입문] 리팩토링이란?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbKX7nN%2Fbtrb7bc35c4%2FAAAAAAAAAAAAAAAAAAAAAKPFc-ZhEzx4CoSQU2dq44P7CyMmNgz3uDV1NupOHg1G%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DPrB76yWU%252BWP%252FF71IusNY7%252FS%252FcVI%253D)
[자바로 배우는 리팩토링 입문] 리팩토링이란?
저희 회사에는 각 층에 작은 도서관이 있습니다. 개발 서적은 물론이고 비개발 서적도 많아 사옥 이름이 그렇게 지어진 게 아닌가 싶을 정도입니다. 지난주에 오랜만에 출근을 해 이번 연휴(토~월) 동안 읽을만한 책을 하나 빌려왔는데, 선정 기준은 아래와 같았습니다. 3일 동안 읽을 수 있는 분량 지금 진행중인 프로젝트에 도움이 될만한 내용 젠킨스 책을 빌릴까 고민했다가 이게 좀 더 읽기 쉬울 거 같기도 하고, 동료의 추천도 있어 이 책을 빌려오게 되었습니다! 이 책은 0장에서 리팩토링에 대한 이해, 그 이후 장에서 예제 코드와 함께 리팩토링을 진행합니다. 이번 포스팅에서는 0장에서 소개하는 리팩토링에 대해 포스팅하도록 하겠습니다. 리팩토링 리팩토링은 외부에서 보는 프로그램 동작은 바꾸지 않고 프로그램 내부 ..
Try with Resources - 손쉬운 자원 해제
Java 개발을 하다보면 close 메서드를 호출해 자원을 해제해줘야하는 자원을 마주하게된다. 만약 프로그램에서 사용한 자원을 해제하지 않아 독점하게되면 운영체제의 자원이 고갈되어 다른 프로그램은 자원을 사용하지 못하게되는 결과를 초래하기 때문이다. Scanner BufferedReader FileInputStream FileOutputStream BufferedInputStream BufferedOutpusStream 기타 등등 위와 같은 자원을 사용 객체들은 try-catch-finally 블록에서 자원을 사용하고 해제해야만한다. 예를 들어, 텍스트 파일을 읽어 콘솔에 출력하는 코드는 아래와 같이 작성해 자원을 반드시 해제시켜야한다. public class Test { public static voi..
![[WhiteShip Java LIVE Study] 6주차 : 상속](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbCSSIc%2FbtqXBXmsYtj%2FAAAAAAAAAAAAAAAAAAAAAFhp_vaVCr7xSRu_NMftpm4YVvG6lnDca7QMJ3wNB8AG%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Dg3yvuS5SguNjRNRyze3Chz3oxdo%253D)
[WhiteShip Java LIVE Study] 6주차 : 상속
목표 자바의 상속에 대해 학습하세요. 학습할 것 (필수) 자바 상속의 특징 super 키워드 메소드 오버라이딩 다이나믹 메소드 디스패치 (Dynamic Method Dispatch) 추상 클래스 final 키워드 Object 클래스 상속 상속이란 기존의 클래스에 기능을 추가하거나 재정의해 새로운 클래스를 정의하는 것을 의미한다. 말그대로 기존의 클래스에 정의되어있는 모든 필드와 메소드를 물려받고, 추가적인 필드와 메소드를 구현할 수 있도록 한다. 이 때, 기존에 정의된 클래스를 상위 클래스(Super Class)라고 하고 상위 클래스를 상속받는 클래스를 하위 클래스(Sub Class)라고 한다. 아래 다이어그램에서 Animal(동물)은 Mammal(포유류), Bird(조류), Reptile(파충류)의 상..
BufferedReader 가 Scanner 보다 빠른 이유
애매하게 시간이 날 때 알고리즘 문제를 푸는 습관을 들여보고있다. 그렇다 또 일을 벌인거다. 입출력 문제부터 풀어보고 있는데, BufferedReader를 사용한 코드가 Scanner를 사용한 코드보다 배로 빠른 것을 보고 포스팅을 하게 되었다. 왜 BufferedReader가 Scanner보다 빠를까? Scanner A simple text scanner which can parse primitive types and strings using regular expressions. A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace. The resulting tokens ma..