Java 7부터 도입된 스레드 풀 ForkJoinPool은 Java 5의 전통적인 ThreadPoolExecutor와는 구조와 동작 방식이 특이하다. 직접 ForkJoinPool을 사용한 적은 없더라도 병렬 스트림, CompletableFuture, 가상 스레드 풀 등 다양한 자바 기능들이 내부적으로 ForkJoinPool를 의존하여 나도 모르게 사용하고 있었을 가능성이 크다. ForkJoinPool은 멀티 코어 CPU를 최대한 효율적으로 활용하는 것을 목표한다.코어 수와 유사한 개수의 스레드를 만들고 이것들의 가동률을 100%로 유지한다.병렬도와 무관하게 경합을 고려해야 하는 로직을 최소화한다.ForkJoinPool구현의 주요한 아이디어들을 살펴보자.1. ForkJoinPool내의 경합을 최소화환 ..
JVM이 Lambda를 어떤 방식으로 다루는지 궁금해서 찾아보던 중 Oracle 블로그에서 Red Hat의 시니어 엔지니어인 Ben Evans가 쓴 글을 찾을 수 있었다. 이를 이해하며 Lambda가 JVM에서 어떻게 다뤄지는지 살펴보려 한다. https://blogs.oracle.com/javamagazine/post/behind-the-scenes-how-do-lambda-expressions-really-work-in-java https://blogs.oracle.com/javamagazine/post/behind-the-scenes-how-do-lambda-expressions-really-work-in-java blogs.oracle.com javac, javap 모두 19.0.1을 사용하였다...
이 글에서는 Java Enum의 valueOf()보다 switch ~ case의 사용이 빠른 예시와, Enum의 switch ~ case가 바이트코드 레벨에서 어떻게 최적화되는지를 기술하였다. Spring MVC의 코드를 살펴보던 도중 RequestMethod라는 Enum에서 HTTP 요청 메서드 문자열을 Enum으로 변환할 때 java.lan.Enum.valueOf()를 사용하지 않고 resolve()라는 메서드를 별도로 만들어 사용하는 것을 보았다. // Spring 6.0.6+ public enum RequestMethod { GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; @Nullable public static RequestMethod resolv..
커넥션 풀 라이브러리를 사용하면 풀에 커넥션을 저장, 재사용이 가능하며 커넥션들의 유효성을 검사하는 등의 기능을 사용할 수 있다. HikariCP는 자바에서 가장 많이 쓰이는 커넥션 풀 라이브러리다. Spring Boot 2.0 이전에는 Apache Commons DBCP(DataBase Connection Pool)이 사용되었으나 2.0부터는 HikariCP를 공식적으로 사용하면서 별도의 설정 없이도 사용할 수 있게 되었다. 기본 설정도 우수하지만 아래와 같이 필요에 따라 설정을 변경할 수 있다. 다음은 hikari datasource 설정에 대한 한 예시이다. # application.yml spring: datasource: url: jdbc:mysql://localhost:3306/example ..
mockito는 스스로를 자바의 단위 테스트를 위한 '맛있는' 프레임워크라고 부르고 있다. mockito를 사용하면 기존 코드, 혹은 아직 만들지 않은 코드에 대한 스텁(Stub)을 만들 수 있다. mockito와 Stub을 통한 테스트가 어떤 장점이 있길래 많은 사람들이 이를 사용하는 것일까? Out-In 개발은 비즈니스 요구 사항이 명확하지 않은 상태에서 빠르게 사용자 인터페이스부터 설계하는 방식이다. 사용자의 진입점을 먼저 정의한 뒤 비즈니스 로직들에 대한 설계가 이루어진다. 내부 구현에 대한 설계가 완벽하게 이루어지지 않아 Out-In 방식으로 사용자의 진입점부터 개발하는 상황을 생각해 보자. 간단하게 하나의 서비스 클래스를 의존하는 컨트롤러를 아래와 같이 만들었다. MockitoService..
Stack을 쓰지 말라 프로그래밍에 조금만 익숙하다면 Stack과 Queue라는 자료구조를 알 것이다. 각각 LIFO(Last In First Out), FIFO(First In First Out)가 필요한 상황에 흔히 사용된다. java.util의 Stack은 Vector를 상속받아 구현되었는데 Vector는 대표적인 자바의 레거시 클래스로 Stack 또한 이 단점을 그대로 가지고 있다. A more complete and consistent set of LIFO stack operations is provided by the Deque interface and its implementations, which should be used in preference to this class. For exam..
- Total
- Today
- Yesterday
- 자바
- multiplebagsfetchexception
- Spring
- Jenkins 예약 배포
- Spring 테스트
- MySQL 이벤트 스케줄
- 의존성 주입
- 가변 인수
- 생성자 주입
- Java
- Spring Boot Monitoring
- invokedynamic
- 함수형 인터페이스
- JPA
- GitHub Discussion Template
- java switch case
- MySQL
- thenComparing
- logback-spring.xml
- GitHub Discussion
- stubbing
- JPA JSON
- Fromtail
- Payload 암호화
- 스프링
- 람다식
- comparing
- springboottest
- GitHub Discussion 템플릿
- RandomPort
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |

