개발 과정에서나 운영 환경에서의 문제 해결에 있어서 로깅의 중요성은 아무리 강조해도 지나치지 않다. 로깅은 시스템의 내부 동작을 이해하고, 문제의 원인을 파악하는데 필수적인 정보를 제공한다. 이를 위해 로깅 시스템은 어플리케이션의 성능에 영향을 주지 않으면서 필요한 정보를 효과적으로 제공할 수 있어야 하며, 다양한 배포 환경과 상황에 따라 로깅의 세부 사항들을 조정할 수 있어야 한다. Java 개발 생태계에서는 다양한 로깅 프레임워크가 이러한 기술적 요구사항을 해결해 주고 있다. SLF4(Simple Logging Facade for Java)는 이들 프레임워크를 추상화한 표준화된 API로 제공하여, 개발자가 구체적인 로깅 구현체를 변경하고자 할 때 코드를 변경할 필요 없이 의존성만 교체함으로써 유연하게..
오라클(Oracle)에서 17버전부터는 NFTC(No-Fee Terms and Conditions)라는 새로운 라이센스를 내세우면서 무료로 사용이 가능하다는 것을 내세웠지만, 사실상 이는 무료의 사용 기간을 길게 한 것일뿐 무료 사용이 끝나는 기간에는 유료 결제를 해야 한다. 물론 자바의 버전을 계속 변경하다보면 사용이 가능할 것도 같지만, 문제의 여부를 테스트 해봐야 하고 수많은 서버가 있는 곳에서 이런 작업은 더욱 피곤하게 만든다. 그래도 다행인 것은 Java21이든 Java17이든 유료 라이센스에 영향을 주는 것은 운영서버 즉, 배포를 하는 환경일 뿐 개발자 환경에서는 OracleJDK로 하든 OpenJDK로 하든 상관이 없는 것으로 보인다. 처음에는 OpenJDK로 설치를 하여 진행하려고 했지만,..
자바로 파일을 복사하는 3가지 방식을 설명해보도록 하겠습니다. 이것 이외에도 다양한 라이브러리를 사용해서 복사하는 방법들이 있지만, 아래의 방식만 알아도 큰 문제는 없을거라 판단해서 3가지를 선정해보았습니다. 1. FileInputStream/FileOutputStream 방식 우선 가장 고전적인 방식으로 InputStream, OutputStream 을 사용하여 byte를 복사하는 방식입니다. public static void main(String args[]) { String orgFilePath = "D:/test_copy/original.jpg"; String outFilePath = "D:/test_copy/copy.jpg"; System.out.println("status -> " + file..
Java에서 List 데이터의 값으로 오름차순을 하거나 내림차순을 하는 방법은 최하단 포스팅을 확인하시면 되며, 여기서는 데이터를 저장한 순서를 뒤집는 방법을 설명해보고자 합니다. 데이터 세팅 public static void main(String[] args) { String[] arrs = {"삼성전자","테슬라","비트코인","펄어비스","코카콜라"}; List list = new ArrayList(Arrays.asList(arrs)); System.out.println("리버스 이전 리스트 -> " + list.toString()); } # 리버스 이전 리스트 -> [삼성전자, 테슬라, 비트코인, 펄어비스, 코카콜라] 오늘은 주식이 우울한 관계로 떡상하자는 마음에 주식 종목들과 암호화폐 종목을 리..
자바로 파일을 직접 컨트롤하여 파일을 삭제해야 하는 경우 및 혹은 하위 디렉토리까지 삭제를 해야 하는 경우가 있을 수 있다. 예를 들어 로그 파일을 매일 폴더를 생성하여 관리를 하고 있는데 날짜값이 오래되었으면 삭제를 해야 한다면, 자바로 날짜값을 접근하여 폴더를 삭제하거나 폴더명을 날짜값으로 만들 경우 제거하는 경우가 있다. 이번에 할 것은 날짜값을 체크해서 삭제하는 것이 아니라, 특정 폴더를 지정하면 하위 폴더를 모두 제거하는 로직을 해보도록 한다. 테스트 데이터 테스트 하기에 앞서 로직의 실험을 위해 우선 폴더를 생성하였는데 아래와 같이 D드라이브에 test라는 폴더를 만들었으며 해당 폴더 안에는 여러개의 하위 폴더들을 생성하였고, test 폴더 안에는 test.txt라는 파일이 존재한다. test..
Java에는 Http 상의 데이터 즉, URL 기반으로 파일을 download할 수 있는 다양한 라이브러리들이 있고, 기본 버전으로도 제공을 하고 있다. 본 포스팅은 3가지의 대표적인 방법들을 모두 써보고 비교하여 성능을 점검해보도록 하였다. 고전적인 방법 public static void fileDown(String url, String fileName) throws MalformedURLException, IOException { BufferedInputStream in = null; FileOutputStream fout = null; try { in = new BufferedInputStream(new URL(url).openStream()); fout = new FileOutputStream(f..
롬복(Lombok)이 사실은 호불호가 상당히 많이 갈리는 유틸리티이고, 같이 프로젝트를 진행할 때 롬복을 사용 안해본 사람들이 있다면 더욱 문제가 발생할 수 있는 기능이고 git 등에 공유하기도 힘들어서 적극적으로 추천하는 기능은 아니지만 롬복을 사용하는 추세가 증가하다보니 설정 방법에 대해서 정리해보고자 한다. 우선 롬복이라는 것은 단순히 라이브러리만 세팅해서 되는 기능이 아니다. 그렇게 간단했었다면 롬복을 비선호할 이유도 없었을 것이다. 롬복(Lombok) 이란? 우선 롬복을 사용하는 사람들은 게터(Getter), 세터(Setter) 등을 편리하게 만들어주기 때문에 사용한다고 하지만 필자는 이것이 뭐가 불편한지 모르기 때문에 왜 이것이 편리한지를 되묻고 싶다. Getter, Setter 만들때 수동으..
String부터 StringBuffer, StringBuilder까지 자바는 문자열을 다루기 위한 3개의 클래스를 제공한다. 개발 초기에는 아무런 생각 없이 String에 값을 계속 더하는 행위를 하지만, 이 방법이 잘못 되었다는 것은 개발이 어느정도 능숙해지고부터이다. String은 불변적인 객체이다보니 동적으로 문자열이 바뀌는 것에 취약하다. 그래서 새로운 문자열을 더할 경우 기존 문자열을 삭제하고 다시 두개의 문자열을 합친 후 String 변수에 보내는데 이때 garbage collector가 발생하게 된다. 최근의 자바 버전에서는 내부적으로 String에서도 문자열을 합칠 때 강제적으로 StringBuilder로 변하게 되는데 아무튼 적당한 문자열을 String에 하는 것은 큰 문제가 되지 않지만..
티카(Tika)는 아파치 재단에서 운영하는 문서 필터링 프로젝트이다. 워드(Doc)나 PDF, PPT 등 문서형태의 파일에서 내용을 추출하는 프로젝트로 오래된 만큼 괜찮은 성능을 보여준다. 라이브러리 추가(maven) org.apache.tika tika-core 1.26 org.apache.tika tika-parsers 1.26 org.apache.poi openxml4j 1.0-beta org.apache.poi poi-ooxml 3.9 티카 라이브러리만 설치하면 에러가 발생하는데 아래의 2가지 openxml4j와 poi-ooxml을 설치하면 이 문제를 해결 할 수 있다. 샘플 예제 import org.apache.tika.metadata.Metadata; import org.apache.tika...
데이터 분석을 많이 하거나, 대용량의 텍스트를 저장하기에 상당히 유용한 객체로 StringBuffer가 있다. 값을 한번에 저장하는 방법은 String으로 선언된 변수에 한번에 값을 넣는 방법이겠지만, 사이즈가 좀 큰 문자열은 한번에 넣기가 쉽지가 않다. 예를 들어 csv를 만든다고 할 때 그때그때 bw.write로 파일을 내리는 것보다 StringBuffer에 일정만큼 저장한 후 한번에 bw.write에 값을 전달하는 것이 훨씬 속도면에서 유리하다. 그러나 StringBuffer에서 데이터를 새로 담을 때, 아무 생각없이 new StringBuffer()로 계속된 초기화를 한적이 있는데 우연찮게 찾아본 문서를 보고 이 부분에 대해서 좀 더 고민할 필요가 있을 것 같아 포스팅을 공유해보고자 한다. new..
네이버 API 등록을 하는 것은 바로 이전 포스팅을 참고하면 되며 [Java] 네이버 검색 API 등록 및 호출하기 [Java] 네이버 검색 API 등록 및 호출하기 네이버 검색 API 등록 모든 API가 그러하지만 네이버 검색도 사용하기 위해서는 우선적으로 API 등록해서 키를 발급받아야 한다. developers.naver.com/docs/search/blog/ 검색 API 블로그 검색 개발가이드 NAVER needjarvis.tistory.com 위 내용이 마무리 된 사람을 기준으로 네이버 검색 및 간단하게 파싱(Parsing)하는 법에 대해서 설명하고자 한다. NaverCrawlerMain.java import java.net.URLEncoder; import java.util.Map; /** *..
네이버 검색 API 등록 모든 API가 그러하지만 네이버 검색도 사용하기 위해서는 우선적으로 API 등록해서 키를 발급받아야 한다. developers.naver.com/docs/search/blog/ 검색 API 블로그 검색 개발가이드 NAVER Developers - 검색 API 블로그 검색 개발가이드 developers.naver.com 위 링크로 들어가면 위와 같이 녹색으로 되어 있는 오픈 API 이용 신청 버튼이 존재한다. 이 녀석을 클릭하고 사용 API는 검색을 선택하고 환경을 추가로 설정하는데 웹 형태로 만들고 싶고 내 로컬에서 작업을 하고 싶다면, 위와 같이 로컬호스트 주소를 입력하고 등록하기를 선택한다. 등록하기를 완료하면 이렇게 Client ID와 Client Secret이라는 값들이 ..