[PostgreSQL] 날짜 형태 검증하기 (ERROR: date/time field value out of range)

1. 날짜 형태로 형 변환 데이터 베이스에서 날짜형태로 형 변환을 하는 것은 다음과 같은 방법으로 쉽게 가능하다. -- Unix타임(int)형 변환 SELECT to_timestamp(1658792421) -- varchar 타입 변환 SELECT to_timestamp('20231026','yyyymmdd') -- 날짜형을 char로 변환 SELECT to_char(to_timestamp(1658792421), 'DD-MM-YYYY') 2. 유효한 날짜형태 검증 데이터 정제가 완료되지 않아 조회하려는 데이터에 날짜유형에서 벗어난 데이터 ('20231301',202301', '20231232' 등)가 하나라도 있을 경우 조회 자체가 안된다. 그럴 경우 날짜 규격에 맞지 않는 데이터를 보정 후 연산해야 하는 경우가 있는데 단순 월별 케이스문으로 분리하여 날짜 유형에 어긋나는 경우를 찾을 수도 있지만 row마다 날짜 유형이 다르거나 윤달을 체크할 수 없다. ...

2023-10-26 · 1 분 · Jun Kang

[Java] 가상 스레드 (Virtual Threads)란? 자바 21의 가상스레드 (Virtual Thread) 도입

1. 가상 스레드 (Virtual Threads)란? 2023.09.20 릴리즈 된 자바 21에 추가된 가상 스레드(Virtual Threads)라는 기능을 살펴보자. 가상 스레드는 경량 스레드로, 높은 처리량의 동시 어플리케이션을 작성, 유지 및 관찰하는 작업 공수를 크게 줄인다. OS스레드를 그대로 사용하지 않고 JVM 자체적으로 스케쥴링을 통해 사용할 수 있는 경량 스레드이며, 하나의 프로세스가 수십 - 수백만 스레드를 동시에 실행할수 있도록 설계되었다. 2. 자바의 전통적인 스레드 자바 개발자들은 근 30년동안 동시성 서버 어플리케이션의 처리를 위해 스레드에 의존해왔다. 모든 메서드의 구문들은 스레드 내부에서 실행되며, 1개의 요청을 1개의 스레드가 처리한다. 대표적으로 스프링은 멀티스레드 구조이기에, 여러 스레드의 실행이 동시에 발생하며 동시 요청이 많아질수록 스레드의 수 역시 증가한다. 각각의 스레드는 지역 변수를 저장하고 메소드 호출을하는 스택을 제공하며, 문제가 생겼을 때의 Context도 제공하는데, 예를들어 Exception은 동일 스레드 내에서의 메소드에 의해 throw/catch 된다. 그렇기 때문에 개발자는 스레드의 Stack trace로 문제를 추적할 수 있는 것이고, 그 외 Debugger (스레드의 메소드 내에서 구문을 차례로 훑어본다), Profiler(JFR) (여러 스레드의 행동을 시각화하여 스레드의 성능을 이해할 수 있도록 도와준다.)도 모두 스레드 기반으로 되어있다. ...

2023-10-25 · 3 분 · Jun Kang

[Java] Switch와 else-if의 효율성 비교 (Switch와 else-if 중에 어떤 걸 사용해야 할까?)

1. Switch와 if-else 조건에 따라 실행을 분기해야 할 때 우리는 조건문을 사용한다. Java에서는 switch / if-else 두 조건문을 선택적으로 사용 가능하다. 보통 가독성을 기준으로 선택을 많이 하나, 효율성 기준에서 어떤 것을 선택하는 것이 좋을지 비교해보려 한다. 일단 switch 구분에서 Strings를 사용하는 것에 관한 공식문서를 보면, The switch statement compares the String object in its expression with the expressions associated with each case label as if it were using the String.equals method; consequently, the comparison of String objects in switch statements is case sensitive. The Java compiler generates generally more efficient bytecode from switch statements that use String objects than from chained if-then-else statements. 번역 스위치 문은 각 조건에 있는 String 개체를 String.equals 메서드를 사용하는 것과 같은 방식으로 연관된 조건과 비교한다. 그렇기에 스위치문에서의 String 개체를 비교하는 것은 대소문자를 구분한다. Java 컴파일러는 일반적으로 체인 if-then-else 구문보다 스위치 문에서 더 효율적인 바이트 코드를 생성한다. ...

2023-10-24 · 5 분 · Jun Kang

[Java] 클래스 로딩 과정(Java Class Loading Process)이란?

1. 클래스 로딩 과정 (Java Class Loading Process) 이란? 자바 클래스 로딩 과정 (Java Class Loading Process)은 클래스 로더가 클래스 파일을 찾아 동적으로 JVM의 메모리 영역인 Runtime Data Areas에 올려놓는 과정을 말한다. 자바에서 객체가 어떻게 형성/관리 되는지 이해하려면. java 파일의 소스코드가 어떻게 JVM 위에 로딩되는지 아는 것이 중요하고, 클래스 로딩할 때 발생하는 문제 (‘java.lang.ClassNotFoundException'과 같은 에러)를 쉽게 해결하고, 코드상 동적으로 클래스 로딩하는 구문 이해하는데 필요하다. 2. 클래스 로더 3단계 과정 클래스 로더는 다음 3단계 과정을 거쳐 클래스 파일을 로딩한다. ...

2023-10-23 · 2 분 · Jun Kang

[Linux] 스왑 메모리(Swap Memory)의 개념과 적용방법

1. 리눅스 Swap 메모리 설정 (예제는 EC2 환경에서 진행) 1-1. Swap 메모리 확인 swapon -s free -h shared = 하나의 프로세스에서 다른 프로세스의 데이터에 효율적으로 접근하기 위해 사용하는 메모리 buff/cache = 버퍼와 캐시를 위해 사용하는 메모리, 커널이 성능향상을 위해 캐시 영역으로 사용되는 메모리 buff = 프로세스가 사용하는 메모리 영역이 아닌 시스템 성능향상을 위해 커널이 사용하고 있는 영역 cache = 캐시영역의 메모리, I/O 작업을 더 빠르게 하기 위해 커널에서 사용 total - buff/cache - free = 사용중인 메모리 total - used - buff/cache = 실제 사용가능한 메모리 ...

2023-10-23 · 3 분 · Jun Kang