Programming/Java 66

윈도우 서버에서 jar 파일 백그라운드 실행하기

윈도우 서버에서 jar 파일 백그라운드 실행하기(+ 배치 파일 cmd 닫는 방법) 해당 포스팅은 윈도우 서버에서 jar 파일을 백그라운드로 실행하는 동작을 배치 파일(.bat)으로 만들어 사용해 보며 정리한 내용입니다. java 명령어로 실행할 경우 윈도우 서버에서 계속 동작해야 하는 Java 프로그램을 이미지와 같이 'java -jar [jar 파일명].jar' 명령어를 통해 실행하는 경우, 실행 이후 cmd(명령 프롬프트) 창을 닫으면 실행한 프로그램도 함께 종료되어 버리는데요. 이런 경우 리눅스 서버에서는 'nohup' 명령어를 통해 jar 파일을 백그라운드로 실행시킬 수 있는 반면, 윈도우 서버에서는 'javaw' 명령어를 통해 프로그램을 백그라운드로 실행시킬 수 있습니다. javaw 명령어로 실..

Programming/Java 2024.03.09

Java 운영체제(윈도우, 리눅스) 프로세스 상태 확인하는 방법

Java 운영체제 프로세스 상태 확인 방법(Process, ProcessBuilder) 최근 Java 코드를 사용하여 서버의 특정 포트를 사용하는 프로세스의 상태를 확인하는 기능이 필요했는데요. 'java.lang.Process', 'java.lang.ProcessBuilder' 클래스를 사용하여 '운영체제(windows, linux)에 따른 프로세스 상태를 확인하는 방법'에 대해 정리해 보았습니다. 내용의 핵심은 'Process', 'ProcessBuilder'이며, Process는 Java 외부 프로세스를 실행하고 제어할 수 있기 때문에 해당 클래스를 활용하면 프로세스의 상태를 확인하는 기능뿐만 아니라 프로세스와 관련된 다양한 기능들을 구현할 수 있다는 것입니다. Process Class 'java...

Programming/Java 2024.02.11

SOLID 객체 지향 프로그래밍의 5가지 원칙

객체 지향 프로그래밍의 5가지 원칙 SOLID와 각각에 대한 예시 최근에 객체 지향 프로그래밍을 개발하는 것에 있어 스스로 근본적인 원칙에 대해서 잘 알고 있는지, 또 잘 적용하고 있는지에 대한 의문이 들었는데요. 결론적으로 유지 보수와 확장성이라는 궁극적인 목적을 고려하지 않은 채, 잘 못된 방향으로의 습관적 코딩을 하고 있었다는 반성을 하게 되었습니다. '객체 지향 프로그래밍의 5가지 원칙인 SOLID'에 대해서는 이미 잘 정리되어 있는 글들이 많지만 내용을 다시 한번 정리하며 스스로 앞으로의 방향성을 잡아가기 위해 기록한 내용입니다. SOLID 객체 지향 프로그래밍에서 코드의 유연성, 확장성 및 유지보수성을 높이기 위한 가이드라인이라고 할 수 있는데요. SRP(단일 책임 원칙), OCP(개방 폐쇄 ..

Programming/Java 2023.08.14

java @Builder 기능 더 활용하기(toBuilder, @Singular 등)

java @Builder 기능 더 활용하기 toBuilder(), @Singular, @Builder.Default java에서는 클래스를 객체화하기 위해 '점층적 생성자 패턴(Telescoping Constructor Pattern)'의 안전성과 '자바 빈즈 패턴(Java Beans Pattern)'의 가독성을 더한 '빌더 패턴(Builder Pattern)'을 주로 사용하는데요. @Builder // 외 생략 public class Order { ... } 위 코드와 같이 Lombok을 사용하면 직접 빌더 관련 코드를 구현할 필요 없이 @Builder 어노테이션만 적용하여 빌더 패턴을 사용할 수 있으며, 대부분 이러한 방식으로 빌더를 자주 사용하고 계실 거라고 생각됩니다. 해당 포스팅에서는 기본적인 ..

Programming/Java 2023.08.05

(java) transient volatile 키워드는 무엇인가

Java transient volatile Keyword Querydsl에서 Expression이 적용되는 방식을 찾아보다가 transient, volatile 키워드를 발견하게 되었는데요. 해당 키워드는 Expression 외에도 Hashtable, ConcurrentHashMap, PredicateOperation, PredicateTemplate 등 여러 곳에서 사용되고 있었으며, 지난번에도 한번 스쳐간 기억이 있어 이번 기회를 통해 정리해 보게 되었습니다. 우선 'transient'와 'volatile' keyword는 전혀 다른 역할을 하는데요. transient는 객체의 직렬화 과정에서 사용되는 키워드이며, volatile은 멀티 스레드 환경에서 여러 스레드에 의해 동시에 접근될 수 있는 변수..

Programming/Java 2023.08.02

java 임시 비밀번호 생성(SecureRandom 사용하는 이유)

java 특수문자를 포함한 비밀번호 생성 방법(SecureRandom 사용 이유) 해당 포스팅에서는 'java 임시 비밀번호 생성 방법'에 대한 내용을 다루고 있으며, 임시 비밀번호 생성 과정에서 Random 클래스가 아닌 'SecureRandom 클래스를 사용하는 이유'도 함께 살펴봅니다. 임시 비밀번호 생성 기본 예시 private static final char[] rndAllCharacters = new char[]{ //number '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', //uppercase 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R..

Programming/Java 2023.07.30

Java Map 반복시키는 가장 효율적인 방법

Java Map Interface 반복시키는 가장 효율적인 방법 Map Interface Map 인터페이스는 Key와 Value를 하나의 쌍으로 저장하는 방식의 자료형이며, 리스트나 배열과 같이 순차적으로(sequential) 해당 요소 값을 구하는 것이 아니라 'key를 통해 value를 가져오는 방식'이 가장 큰 특징입니다. 구현체 중 가장 많이 사용되는 클래스는 HashMap이며, 순서가 필요한 경우 입력된 순서대로 데이터가 출력되는 LinkedHashMap, 입력된 key의 sort 순서로 데이터가 정렬되는 TreeMap 등이 있습니다. 아래는 java에서 map을 반복시키는 몇 가지 방법들에 대해 어떤 방법이 더 효율적인지 궁금하여 비교하며 정리해 본 내용입니다. Map 반복 방법 Map map..

Programming/Java 2023.07.26

java stream BigDecimal add 합계 구하는 방법

java stream을 통해 BigDecimal 합계 또는 연산하는 방법 부동소수점의 부정확성으로 인해 java에서는 소수점에 대한 정확한 계산이 요구되거나 화폐 단위를 사용할 때 BigDecimal 타입을 사용하는데요. 해당 포스팅은 'java에서 stream을 활용하여 BigDecimal을 연산하는 방법'에 대해 정리한 내용입니다. 코드 예시 List bigDecimalList = Arrays.asList( BigDecimal.valueOf(1.123), BigDecimal.valueOf(0.335), BigDecimal.valueOf(2.10101), BigDecimal.valueOf(0.54321) ); //stream을 사용하지 않는 경우 연산 BigDecimal sum = BigDecimal...

Programming/Java 2023.07.19

java image resize library 이미지 리사이즈 라이브러리 비교해보기

Compare java image resizing libraries 해당 포스팅에서는 썸네일 생성 등, 이미지의 사이즈를 조절하는 기능을 java에서 구현하기 위해 사용할 수 있는 몇 가지 라이브러리와 해당 라이브러리들의 사용 방법에 대해 살펴봅니다. + 마지막에는 각 라이브러리들을 사용한 image resizing 결과를 비교해 보는 내용도 포함되어 있습니다. java.awt.Graphics2D Image.getScaledInstance() thumbnailator Imgscalr 1. java.awt.Graphics2D 'Graphics2D Class'는 graphics contexts에 대한 추상화를 제공하는 기본 클래스인 Graphics Class를 확장한 것으로 java 플랫폼에서 2차원 텍스트..

Programming/Java 2023.07.15

Java 8, 11, 17 버전별 추가된 기능 (+ 무슨 버전을 써야할까?)

java 8, 11, 17 버전이 많이 사용되는 이유와 버전별 추가된 기능 최근 몇 년 동안 java에서 가장 많이 사용되는 버전은 'java 8'으로 저 역시 실무에서는 java 8만 계속 사용하고 있는데요. 자바는 2021년 9월 출시된 LTS 버전 java 17 이후로 2023년 7월 현재 java 20 버전까지 출시가 된 상태입니다. 이처럼 java에는 다양한 버전이 있는데요. 아래 jetbrains의 '2022년 개발자 생태계 설문조사'를 살펴보면 자바 개발자들이 사용하는 버전이 java 8, 11, 17에 집중되어 있는 것을 볼 수 있는데, 그 이유는 무엇일까요? 해당 포스팅은 자바 생태계에서 java 8, 11, 17이 많이 사용되는 이유와 각 버전별로 추가된 기능에 대해 정리한 내용입니다...

Programming/Java 2023.07.05