[Java] HashTable이 뭘까?
·
JAVA
1. Hashtable 클래스를 왜 살펴보는데?우리가 개발을 하다 보면 Map, Set을 자주 사용하게 된다. 근데 생각해 보면 그냥 Map, Set을 쓰기보단 HashMap, HashSet을 주로 사용한다. 그래서 나는 왜 그런지 궁금해서 자세히 알아보려고 java.util 패키지에 들어가 봤는데 내 눈에는 목적과는 다르게 다른 녀석이 눈에 띄었다. 바로 Hashtable이라는 클래스다. 이걸 보자마자 궁금증이 들었다. Hashtable은 대체 뭘 하는 녀석인가? 사실 이 녀석은 "면접 질문"으로 자주 나온다는 것을 들어서 유명하다는 것은 알고 있었지만 솔직히 그래서 이걸로 뭘 하는지를 모르겠고 사용해 본 적도 없었다. 그래서인지 나는 이 클래스를 조금이라도 이해하고 싶어졌다. 그래서 내부가 어떻게 생..
[Java] 동시성 제어가 가능한 CopyOnWriteArrayList와 일반 ArrayList의 차이점
·
JAVA
동시성 제어가 가능한 List인 CopyOnWriteArrayList를 알아보자📌 서론동시성 제어가 가능한 HashMap인 ConcurrentHashMap에 대해 공부하고 사용하다 보니 List에도 동시성 제어가 가능한 클래스가 존재할 것이라는 생각이 들었고 열심히 찾아본 결과 java.util.concurrent 패키지 내부에 CopyOnWriteArrayList라는 동시성 제어가 가능한 List가 존재한다는 것을 알아냈다. 이번 포스트를 위해 우리가 개발할 때 일반적으로 사용하는 ArrayList와 동시성 제어를 해준다는 CopyOnWriteArrayList를 스프링에서 사용해 보면서 동시성 제어가 어떻게 되는 것이고 성능은 어떨지 알아보자. SpringBootTest와 locust를 사용한 동시성..
[Java] ConcurrentHashMap의 동작원리 (CAS 기법)
·
JAVA
Java의 ConcurrentHashMap을 이해해 보자📌 서론Java에서 일반적인 HashMap을 사용하면 동시성 문제가 발생할 수 있다. HashMap은 멀티스레드 환경에서 안전하지 않기 때문에, 여러 스레드가 동시에 HashMap을 수정하려고 하면 데이터 불일치, 무한 루프, 또는 예기치 않은 결과가 발생할 수 있다. 이 문제를 해결하기 위한 방법 중 하나로 ConcurrentHashMap을 사용할 수 있다. ConcurrentHashMap은 멀티스레드 환경에서 안전하게 동작하도록 설계된 클래스다. 내부적으로 분할 잠금 메커니즘(lock stripping)과 CAS(Compare-And-Swap) 같은 비동기적인 동시성 제어 기법을 사용하여 여러 스레드가 동시에 데이터를 읽고 쓰는 상황에서도 안전..
[Spring] 커스텀 어노테이션 적용
·
Spring 기초/Spring 기초 지식
커스텀 어노테이션 적용기 📌 서론 SpringBoot로 개발하다 보면 @Controller, @Service, @Repository, @Transactional, @Component, @Bean 등등 정말 많은 어노테이션을 사용하여 편하게 개발을 한다. 근데 스프링이 제공하는 어노테이션 말고도 개발자가 직접 본인만의 어노테이션을 만들어서 프로젝트에 적용시킬 수 있다는 것을 아는가? 아마 대부분의 개발자들은 알고 있었겠지만 사용해 볼 일은 거의 없었을 것이다. 나는 사용자 커스텀 어노테이션이 어떻게 작성되고 프로젝트에서 사용되는지 내부의 동작원리가 궁금했고 직접 만들어보기로 했다. 지금부터 Spring에 직접 커스텀 어노테이션을 만들어보면서 이게 어떻게 동작하는지 알아보자. 완성된 코드는 아래의 Repo..
[JMeter] 멀티스레딩 vs 스레드 풀: Java로 만든 HTTP 서버 성능 테스트
·
JAVA
멀티스레딩 vs 스레드 풀: 실제 성능 테스트와 분석 진행 📌 서론 지금까지 열심히 java로 만든 http 요청 서버(멀티스레딩, 스레드 풀)를 JMeter를 사용하여 성능 비교를 해보려 한다. 이번 글을 통해 저부하부터 극한 부하까지 다양한 부하 상황에서 http 요청 서버(멀티 스레딩과 스레딩 풀)의 성능 측정 결과를 공유할 예정이다. 이 글을 읽은 후에는 tomcat이 왜 스레드 풀을 사용하는지 알 수 있게 될 것이다. 1. 성능 비교의 목적 목적 멀티스레딩 HTTP 서버와 스레드 풀 HTTP 서버의 성능을 비교하는 이번 실험의 주된 목적은 두 구현 방식의 효율성, 처리 능력 및 자원 사용의 효율성을 파악하는 것이다. 평가하고자 하는 내용 효율성 멀티스레딩 방식이 각 요청마다 스레드를 생성하고 소..
[Java] Optional로 Null 처리하기
·
JAVA
자바8부터 지원하기 시작한 Optional을 사용하여 Null을 처리하는 방법을 예시를 통해 이해해 보자 📌 서론 개발을 하다보면 null을 종종 보게 되는데 'null' 값의 관리는 굉장히 중요한 문제 중 하나다. 'null' 값은 종종 예기치 못한 NullPointerException을 일으키며, 이는 애플리케이션의 신뢰성과 안정성을 저하시키기 때문이다. 자바 8에서는 이런 문제를 해결하기 위해 Optional이라는 기능이 등장한다. 이번 포스트에서는 Optional을 사용하여 어떻게 안전하게 'null' 값을 처리할 수 있는지 예제를 통해 알아보자 1. Optional로 조건에 따른 필터링 이 예시는 Optional.filter를 사용하여 특정 조건을 만족하는 값에만 접근하는 방법이다. public..
RuntimeException의 예외 메시지를 가져오는 getMessage() 메서드 이해하기
·
Spring + Java
이번 포스트에서는 RuntimeException의 예외 메시지를 가져오는 getMessage()에 대해서 자세히 알아보자 📌 서론 테스트 코드를 작성하다 발생했던 문제를 해결하며 이 내용을 정리했다. 그 과정을 그대로 설명한다. 1. 테스트 코드에서 발생한 문제 파악하기 1-1. 테스트 코드를 작성했다. 테스트 코드를 작성하고 실행했는데 코드 중간에 작성된 assertEquals(expectedMessage, exception.getMessage())에서 오류가 발생했다. 1-2. 테스트 코드 호출 결과 테스트 결과를 보면 기대값이 존재하는데 Actual이 null인 오류가 발생했다고 나온다. 1-3. 오류 분석 - [커스텀 예외처리 클래스를 확인] 오류를 분석해 봤더니 내가 생성한 커스텀 예외 클래스인..
[Java] 자바 리플렉션(reflection)이란?
·
JAVA
이번 포스트에서는 자바 리플렉션과 이걸 사용하는 스프링에 대해서 알아보자 1. 자바 리플렉션이란 리플렉션이란? 리플렉션은 자바에서 클래스나 멤버에 대한 정보를 런타임에 조사하고, 조작할 수 있는 기능이다. 예를 들어, 클래스의 이름, 메서드, 필드, 생성자 등에 대한 정보를 프로그램 실행 중에 알아내고, 이를 통해 객체를 생성하거나 메서드를 호출할 수 있다. 이 기능 덕분에, 개발자는 코드의 유연성과 확장성을 높일 수 있다. 리플렉션 예시 코드를 보면 Class.forName("java.lang.String")은 String 클래스에 대한 Class 객체를 가지고 온다. 그리고 getDeclaredMethods() 메서드를 사용해서 가져온 클래스에 정의된 모든 메서드의 정보를 얻어내는 것이다. 이렇게 리..