전체보기(203)
-
Java Virtual Thread
Virtual ThreadJava 21에서 정식으로 도입된 Virtual Thread는 기존의 Kernel-level thread와 User-level thread를 1:1 매핑하여 사용하는 JVM 스레드 모델을 개선한 여러 개의 가상 스레드를 하나의 네이티브 스레드에 할당하여 사용하는 방법입니다.Java ThreadJava thread는 ExecutorService를 두어 JVM 내부에서 스레드를 관리/실행합니다. 이렇게 ExecutorService를 통해 스케줄링되는 Thread는 JVM을 통해 커널 스레드를 만들어 실행합니다.Virtual Thread란Virtual Thread는 기존 Kernel thread(1) : User thread(1)의 구조가 아니라 Kernel thread(1): Use..
2025.07.12 -
Batch INSERT 데드락
최근 업무 중에 INSERT 문에 대해 갑자기 데드락이 발생한 로그가 남았었습니다. 에러 로그가 발생한 쿼리는 아래와 유사한 형태의 쿼리였습니다.INSERT INTO `TABLE` (colunmA, columnB) VALUES (valueA, valueB), (valueA2, valueB2) ON DUPLICATE KEY UPDATE ... MySQL에서 데드락 관련 로그를 확인해보니 예시와 같은 형태인 두 개의 Batch INSERT 쿼리가 문제였습니다. 구글링으로 찾아보니 Batch INSERT 구문은 트랙잭션의 걸린 여러 개의 구문처럼 동작하기 때문에 각각의 쿼리에 포함된 데이터의 PK가 겹치게되면 데드락이 발생할 수 있다고 나와있었습니다.Query A:INSERT INTO my_table (pk,..
2025.07.03 -
First Class Collection
First Class Collection이란First Class Collection이란 Collection을 Wrapping 하면서 Collection 외에 다른 멤버 변수가 없는 클래스를 의미합니다.class Members { private List members; public Members(List members) { this.members = members; }}First Class Collection을 사용하는 이유비즈니스 종속적인 코드 작성예를 들어 한 스터디당 스터디원의 최대 인원은 10명이라는 조건이 추가되었다고 가정합니다. 우선 First Class Collection을 적용하지 않은 코드는 아래와 같습니다.public class Study { privat..
2025.06.13 -
Type vs Interface vs Class
TypeType은 변수 타입 정의에 별칭을 부여하는 것을 의미합니다. type Color = number | string;let favoriteColor: Color = "Red";Object나 Function도 정의하고 재사용할 수 있습니다.type People = { name: string;};const people: People = { name: "KIM"};type OnError = (id: number, error: string) => boolean;function downloadFile(id: number, onError: OnError) { ...}Type은 변수 타입에 별칭을 부여하고 재사용하는 기능만 제공합니다. 그리고 JavaScript로 변환할 때 어떠한 추가코드도 생성하지 않습..
2025.05.30 -
Java 19
레코드 패턴 매칭(프리뷰)기존에는 instanceof를 통해 해당 객체인지 확인 후, 형변환을 통해 객체를 사용해야 했습니다.record Point(int x, int y) {}public void test(Object o) { if (o instanceof Point) { Point p = (Point) o; ... }}하지만 레코드 패턴 매칭을 통해 형변환 로직을 제거하고 record의 구성요소를 직접 추출해서 사용할 수 있습니다.public void test1(Object o) { if (o instanceof Point p) { int sum = p.x + p.y; ... }}public void test2(Object o) ..
2025.05.14 -
Java 18
Java API CharsetJava API의 기본 Charset이 UTF-8로 지정되었습니다.간단한 웹 서버를 제공하는 커맨드라인 툴 제공정적 파일만 제공하는 간단한 웹 서버를 시작할 수 있는 새로운 커맨드라인 툴을 제공합니다.참고로 우리가 일반적으로 사용하고 있는 Apache, Nginx과 같이 실무에 사용할 수 있는 수준의 서버는 아닙니다.해당 서버는 테스트, 개발 및 디버깅 용으로 사용할 수 있습니다.jwebserver -p 9000@Snippet 어노테이션 추가Java Document 주석/** */에 @Snippet 어노테이션이 추가되었습니다.finally 구문 deprecatejava의 에러핸들링을 위한 try ~ catch ~ finally 구문이 있습니다.try { ...} cat..
2025.05.07