Back-End/Java 7

[Java] JavaFX WebView에서 Axios, fetch 사용시 서버로 Body를 전달하지 못하는 문제

1. Trouble Java8의 JVM 환경에서 동작하는 JavaFX의 WebView에서는 Axios, fetch, Ajax 등의 기능을 제한적으로만 사용할 수 있어 Http Body를 넣을 수 없다 2. Root cause JavaFX의 WebView에서 제공하는 javascript 런타임 엔진은 JVM에 있다. 그리고 java 8버전의 javascript 런타임 엔진은 'Nashorn'이다. 문제는, Nashorn은 순수한 ES5.1 스펙(ECMAScript)을 구현한 순수 javascript 엔진이라는 점이다. 그렇기 때문에 Axios (ES6에 도입된 Promise 기반), fetch (ES6부터 내장 라이브러리), Ajax(XMLHttpRequest 기반이며 순수 javascript가 아님) 셋..

Back-End/Java 2023.03.28

[Java] lombok의 @Builder 사용시 필수 필드를 입력하게 하는 방법

Lombok의 @Builder를 사용해 빌더 패턴을 구현할 때, 특정 필드를 반드시 입력하도록 하는 필수 필드로 만들 수 있다. 방법1. @NonNull 애너테이션 사용하기 import lombok.Builder; import lombok.NonNull; @Builder public class Person { @NonNull private String name; @NonNull private Integer age; private String address; } 위의 코드에서 name과 age 필드는 @NonNull 애너테이션이 붙어 있기 때문에 필수 필드가 된다 따라서 Person.builder()를 호출할 때 이러한 필드를 지정하지 않으면 컴파일 오류가 발생함 Person.builder() .addre..

Back-End/Java 2023.03.14

[Java] Java Array와 Hash의 데이터 접근/삽입 속도 비교

1. 서론Codility Lesson4. MissingInteger 문제를 풀면서 Hash와 Array간 데이터 접근/삽입 속도의 차이를 크게 체감할 수 있었다. 해당 문제에서 array로 접근하기엔 size를 100만개로 줘야 했기에 사이즈가 좀 크지 않은가 하는 생각에 Hash, Priorty Queue로 접근했는데 아무리 머리를 굴려봐도 Time Out이 났다. 그래서..! 메모리 제한도 없고, 그냥 배열로 풀라는 뜻인가 해서 배열로 풀었더니 바로 Pass. 도대체 Hash와 Array간 속도 차이가 얼마나 나길래 이런것인가 싶어서 직접 테스트해봤다. 2. 테스트 개요 array, HashMap, ConcurrentHashMap 세 가지에 대해 데이터 삽입/접근을 테스트한다 데이터 삽입(Add El..

Back-End/Java 2022.03.06

[Java] JUnit5 기본 Annotation

1. @Test 테스트 메서드임을 나타내는 어노테이션. 테스트 하려는 메서드에 붙여서 사용할 수 있다. public class MyTestClass { @Test void myTest1() { System.out.println("myTest1"); } } 2. @BeforeAll, @AfterAll: 생명주기 어노테이션 2.1. @BeforeAll 클래스가 실행되기 전 한 번만 실행되는 메서드 2.2. @AfterAll 클래스의 모든 테스트 메서드가 실행된 후 한 번만 실행되는 메서드 2.3. @BeforeEach 클래스의 각 테스트 메서드가 실행되기 전 매번 실행되는 메서드 2.4. @AfterEach 클래스의 각 테스트 메서드가 실행된 후 매번 실행되는 메서드 @Test 여러개 있을 때 Before/..

Back-End/Java 2022.03.03

[Java] Process & Thread 개념

❑ 프로세스(Process)와 쓰레드(Thread) 프로세스와 쓰레드의 개념 및 관계 프로세스는 간단히 말해 '실행 중인 프로그램(Program)'이다 쓰레드는 프로세스를 구성하는 한 가지이자, 작업을 처리하는 일꾼이다. 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있다. 쓰레드를 프로세스라는 공장에서 작업을 처리하는 일꾼으로 생각하면 이해하기 쉽다. 스레드를 경량화된 프로세스라고도 한다 컴퓨터는 프로세스마다 자원을 분할해서 할당한다. 한 프로세스의 스레드들은 같은 공간(분할된 자원)에서 진행된다. 각 스레드는 Stack 영역만 독립적으로 갖고 그 외 부모 프로세스의 자원을 공유한다. 그렇기 때문에 Context Switching처럼 하나의 프로세스를 다 ..

Back-End/Java 2022.02.21

[Java] Java에서 외부 jar 실행 후 출력되는 결과 가져오기

외부 jar를 실행할 때 실행한 jar에서 Console에 출력하는 결과를 가져와야 할 때가 있다. Process 객체가 제공하는 InputStream을 이용해 해당 결과를출력할 수 있다. Code public class MyProcessTest { public static void main(String[] args) { try { Runtime r = Runtime.getRuntime(); Process p = r.exec("java -jar TestJar.jar"); InputStream is = p.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); while (true) { String s = b..

Back-End/Java 2022.02.15

[Java] 외부 jar 실행 후 pid(process id) 가져오기(Java 8)

In Java9 java 9 버전부터 Process Class가 pid 라는 메서드를 제공하므로 쉽게 얻을 수 있다 pid public long pid​() Returns the native process ID of the process. The native process ID is an identification number that the operating system assigns to the process. Implementation Requirements: The implementation of this method returns the process id as: toHandle().pid(). Returns: the native process id of the process Throws: Un..

Back-End/Java 2022.02.11