"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 무료 Java 유틸리티 패키지 소개

무료 Java 유틸리티 패키지 소개

2024-11-07에 게시됨
검색:533

Introducing Free Java Utility Package

Java 백엔드 개발자를 위한 빠르고 사용하기 쉬운 프로그래밍 툴킷

관리자이자 개발자라는 직업 생활을 하면서 저는 셀 수 없이 많은 프리웨어와 오픈 소스 제품으로부터 많은 혜택을 받았습니다. 그러므로 나 역시 이 커뮤니티에 기여하는 것이 당연합니다.

이 Java 클래스 컬렉션은 다양한 프로젝트 과정에서 만들어졌으며 더욱 발전될 예정입니다. 이 도구가 귀하에게도 도움이 되기를 바랍니다.

https://java-util.k43.ch

디자인 목표

  • 사용 편의성: 클래스와 메서드는 유연하고 사용이 간편해야 합니다.
  • UI 호출 없음: 이 툴킷을 백그라운드 작업이나 서버 프로세스에 사용할 수 있도록 사용자 인터페이스 없이 모든 작업을 수행합니다.
  • 빠름: 가능한 한 성능이 뛰어난 코드를 작성합니다.
  • I/O보다 메모리 사용을 선호합니다: 오늘날 세계에서 메모리는 더 이상 제한 요소가 아닙니다. 따라서 과거에 (임시) 파일이 사용되었던 메모리에서 많은 작업을 수행할 수 있습니다(예: KDB는 SQL SELECT에서 데이터 구조를 생성하고 KFile 작업은 대부분 메모리에서 수행됩니다).
  • 광범위한 로깅 사용: KLog.debug() 함수는 코드 디버깅을 돕기 위해 코드 전체에서 많이 사용됩니다. 개발 중에 객체의 내부 필드 값을 표시하려면 각 클래스에 있는 toString() 메서드를 사용하세요.
  • 플랫폼 독립: 모든 것을 플랫폼 독립적으로 작성합니다.
  • 전제조건 최소화: Java SE 표준 라이브러리를 유지하세요. 꼭 필요한 경우에만 외부 JAR 파일을 사용하세요(예: KSMTPMailer, JDBC 드라이버).

로깅: 간단하지만 강력함

  • 디버깅, 정보 및 오류 메시지에 대한 로깅 복잡성을 줄입니다.
  • 추가 라이브러리 없이 표준 Java SE 로깅 클래스를 사용합니다.
  • 모든 로그 기록에는 정확한 타임스탬프와 소스 코드 위치가 포함됩니다.
  • 표준 ConsoleHandler 및 FileHandler 외에도 출력은 JDBC 데이터베이스로 전송되거나 오류가 SMTP 호스트로 전송될 수 있습니다.
  • 테이블 형식 라인, CSV, JSON, YAML 및 XML의 5가지 로깅 포맷터가 제공됩니다.
public static void main(String[] args) {

  KLog.info("Start");

  int result = 0;

  try {
    result = 10 / 0;
  } catch (Exception e) {
    KLog.error(e);
  }

  KLog.debug("Result is "   result);
}
2024-09-16T07:17:11.095 D main[1]:ch.k43.util.KLog:open:459                            ===== Application started 2024-09-16T07:17:11.048 =====
2024-09-16T07:17:11.111 D main[1]:ch.k43.util.KLog:open:460                            Java Utility Package (Freeware) ch.k43.util Version 2024.09.15
2024-09-16T07:17:11.112 D main[1]:ch.k43.util.KLog:open:463                            Homepage java-util.k43.ch - Please send any feedback to [email protected]
2024-09-16T07:17:11.122 D main[1]:ch.k43.util.KLog:open:466                            Host ab-macbook-pro (10.0.0.105)
2024-09-16T07:17:11.122 D main[1]:ch.k43.util.KLog:open:467                            OS platform Mac OS X (Version 14.6.1/aarch64)
2024-09-16T07:17:11.123 D main[1]:ch.k43.util.KLog:open:471                            OS disk space total 3.63 TB, free 2.37 TB, usable 2.37 TB
2024-09-16T07:17:11.123 D main[1]:ch.k43.util.KLog:open:474                            Java version 21 (OpenJDK 64-Bit Server VM - Eclipse Adoptium)
2024-09-16T07:17:11.123 D main[1]:ch.k43.util.KLog:open:477                            Java CPUs 10
2024-09-16T07:17:11.124 D main[1]:ch.k43.util.KLog:open:481                            Java heap maximum 16.00 GB, current 1.00 GB, used 7.68 MB, free 1016.32 MB
2024-09-16T07:17:11.124 D main[1]:ch.k43.util.KLog:open:485                            Java locale de/CH, time UTC  02:00
2024-09-16T07:17:11.125 D main[1]:ch.k43.util.KLog:open:488                            Java classpath ../bin/:../lib/angus-mail-2.0.3.jar:../lib/jakarta.mail-api-2.1.3.jar:../lib/org.json.20230618.jar:../lib/h2-2.2.224.jar:../lib/jakarta.activation-api-2.1.3.jar:../lib/angus-activation-2.0.2.jar
2024-09-16T07:17:11.125 I main[1]:Test:main:9                                          Start
2024-09-16T07:17:11.125 E main[1]:Test:main:16                                         ===> java.lang.ArithmeticException: / by zero
2024-09-16T07:17:11.126 E main[1]:Test:main:16                                         ===> Stack[1]: Test.main(Test.java:14)
2024-09-16T07:17:11.126 D main[1]:Test:main:19                                         Result is 0

데이터베이스: 모든 JDBC 데이터베이스에 액세스

  • 필요한 JDBC 드라이버를 로드하고 SQL 문을 실행합니다.
  • 모든 JDBC 호환 데이터베이스를 사용할 수 있습니다.
  • 원시 Java 형식으로 데이터를 검색합니다(행은 ArraryList로, 열은 Java 객체로).
  • 결과 집합의 형식을 JSON, YAML, XML, CSV 또는 표 형식 문자열로 지정합니다.
try (KDB db = new KDB(KDB.JDBC_H2, "jdbc:h2:mem:mydb", "", "")) {

  KLog.abort(!db.isConnected(), "Error: "   db.getErrorMessage());

  db.exec("CREATE TABLE ADDRESSES (SEQUENCE INT AUTO_INCREMENT, LASTNAME VARCHAR(20), FIRSTNAME VARCHAR(20))");
  db.exec("INSERT INTO ADDRESSES (LASTNAME, FIRSTNAME) VALUES ('Smith', 'John')");
  db.exec("INSERT INTO ADDRESSES (LASTNAME, FIRSTNAME) VALUES ('Miller', 'Bob')");
  db.exec("INSERT INTO ADDRESSES (LASTNAME, FIRSTNAME) VALUES ('Johnson', 'Eve')");
   db.exec("SELECT * FROM ADDRESSES", 10);

  System.out.println(db.getDataAsTable());
  System.out.println(db.getDataAsJSON());
}
SEQUENCE    LASTNAME             FIRSTNAME            
1           Smith                John                 
2           Miller               Bob                  
3           Johnson              Eve                  
{
  "ADDRESSES": [
    {
      "SEQUENCE": 1,
      "LASTNAME": "Smith",
      "FIRSTNAME": "John"
    },
    {
      "SEQUENCE": 2,
      "LASTNAME": "Miller",
      "FIRSTNAME": "Bob"
    },
    {
      "SEQUENCE": 3,
      "LASTNAME": "Johnson",
      "FIRSTNAME": "Eve"
    }
  ]
}

SMTP: 메시지 작성 및 보내기

  • 테스트, HTML 및 첨부 파일이 포함된 MIME 다중 부분 메시지를 생성합니다.
  • STARTTLS/TLS 또는 비 TLS 연결을 지원합니다.
  • OAuth 2.0 및 기본 인증을 지원합니다.
KSMTPMailer mailer = new KSMTPMailer();

mailer.setFrom("[email protected]");
mailer.setTo("[email protected]");
mailer.setSubject("Subject");
mailer.addHTML("

Your requested files

"); mailer.addText("Body Text"); mailer.addFile("test1.txt"); mailer.addFile("test2.txt"); mailer.addText("Regards, John"); mailer.send();

HTTP 클라이언트: 간단한 표준 또는 REST 호출

  • HTTP 및 HTTPS를 지원합니다.
  • 모든 표준 HTTP 메서드(GET, POST, PUT, POST 등)를 지원합니다.
  • 요청 헤더 날짜, User-Agent, Host 및 Content-Length가 자동으로 추가됩니다.
Properties props = new Properties();
props.put("Authorization", "Basic "   K.encodeBase64(userName   ':'   password);

KHTTPClient http = new KHTTPClient();

if (!http.post("https://example.com:4443", props, "HTTP body data")) {
   KLog.abort("HTTP POST failed - "   http.getLastError());
}

K: 유틸리티 클래스

  • URL, Base64, CSV, JSON, XML 및 YAML을 인코딩/디코딩합니다.
  • AES256 암호화/해독(AES/CBC/PKCS5Padding).
  • ZLIB 압축/압축 해제.
  • 해시(MD5, SHA-2 또는 SHA-3)를 생성합니다.
  • DNS 레코드(MX, A 등)를 쿼리합니다.
// Wait 1/4 second
K.waitMilliseconds(250);

// Get DNS MX record(s)
String[] mxRRs = K.queryDNS("MX", "yahoo.com");

//
// AES-256 Encryption/Decryption
//
String secretKey = "This is the secret key";

// Create a simple text file
KFile.writeFile("This is a simple text file", "AES-Text.txt");

// Generate and save random AES-256 initialization vector
KFile.writeFile(K.getRandomBytes(16), "AES.iv");

// Encrypt
byte[] clearText    = KFile.readByteFile("AES-Text.txt");
byte[] initVector   = KFile.readByteFile("AES.iv");
byte[] cipherText   = K.encryptAES256(clearText, secretKey.getBytes(), initVector);
KFile.writeFile(cipherText, "AES-Text.encrypted");

// Decrypt
cipherText  = KFile.readByteFile("AES-Text.encrypted");
initVector  = KFile.readByteFile("AES.iv");
clearText   = K.decryptAES256(cipherText, secretKey.getBytes(), initVector);

즐거운 시간 보내시고 마음에 드는 점과 개선이 필요한 점을 알려주세요. 이메일 [[email protected]] 또는 Mastodon을 통해 저에게 연락하실 수 있습니다.

릴리스 선언문 이 글은 https://dev.to/andybrunner/introducing-free-java-utility-package-1fph?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3