본문 바로가기 메뉴 바로가기

공부노트

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • RSS

공부노트

검색하기 폼
  • 분류 전체보기 (43) N
    • Java (15) N
    • DB (2)
    • JPA (2)
    • 네트워크 (1)
    • Git & GitHub (2)
    • 기타 (2)
    • Web (2)
      • Spring (9)
    • 하루스터디 (7)
  • 방명록

Java (15)
ForkJoinPool 아키텍처와 경합 최소화

Java 7부터 도입된 스레드 풀 ForkJoinPool은 Java 5의 전통적인 ThreadPoolExecutor와는 구조와 동작 방식이 특이하다. 직접 ForkJoinPool을 사용한 적은 없더라도 병렬 스트림, CompletableFuture, 가상 스레드 풀 등 다양한 자바 기능들이 내부적으로 ForkJoinPool를 의존하여 나도 모르게 사용하고 있었을 가능성이 크다. ForkJoinPool은 멀티 코어 CPU를 최대한 효율적으로 활용하는 것을 목표한다.코어 수와 유사한 개수의 스레드를 만들고 이것들의 가동률을 100%로 유지한다.병렬도와 무관하게 경합을 고려해야 하는 로직을 최소화한다.ForkJoinPool구현의 주요한 아이디어들을 살펴보자.1. ForkJoinPool내의 경합을 최소화환 ..

Java 2025. 12. 19. 13:58
[Java] Lambda는 JVM에서 어떻게 다뤄지는가? (invokedynamic)

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 2023. 11. 10. 03:44
[Java] Enum에서는 valueOf()보다 table switch로 최적화된 swtich ~ case를

이 글에서는 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..

Java 2023. 9. 14. 23:53
HikariCP 설정 바꾸기

커넥션 풀 라이브러리를 사용하면 풀에 커넥션을 저장, 재사용이 가능하며 커넥션들의 유효성을 검사하는 등의 기능을 사용할 수 있다. 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 ..

Java 2023. 5. 21. 23:43
왜 Mockito를 통해 테스트를 해야 할까?

mockito는 스스로를 자바의 단위 테스트를 위한 '맛있는' 프레임워크라고 부르고 있다. mockito를 사용하면 기존 코드, 혹은 아직 만들지 않은 코드에 대한 스텁(Stub)을 만들 수 있다. mockito와 Stub을 통한 테스트가 어떤 장점이 있길래 많은 사람들이 이를 사용하는 것일까? Out-In 개발은 비즈니스 요구 사항이 명확하지 않은 상태에서 빠르게 사용자 인터페이스부터 설계하는 방식이다. 사용자의 진입점을 먼저 정의한 뒤 비즈니스 로직들에 대한 설계가 이루어진다. 내부 구현에 대한 설계가 완벽하게 이루어지지 않아 Out-In 방식으로 사용자의 진입점부터 개발하는 상황을 생각해 보자. 간단하게 하나의 서비스 클래스를 의존하는 컨트롤러를 아래와 같이 만들었다. MockitoService..

Java 2023. 5. 14. 22:37
[Java] Stack보다는 ArrayDeque를 쓰자. Stack과 Vector의 문제점

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..

Java 2023. 4. 2. 22:36
이전 1 2 3 다음
이전 다음
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
  • 자바
  • 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
more
«   2025/12   »
일 월 화 수 목 금 토
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
글 보관함

Blog is powered by Tistory / Designed by Tistory

티스토리툴바