이 글은 유데미 강의 ‘Java 멀티스레딩, 병행성 및 성능 최적화 - 전문가 되기’ 의 쿠폰을 받아 수강하고 작성한 글입니다. 멀티스레딩? 하나의 프로세스는 하나 이상의 스레드를 가질 수 있다. 프로그램들은 때에 따라 단일 스레드로 동작하기도, 여러 스레드로 동작하기도 한다. 멀티스레딩이란, 말 그대로 하나의 프로세스가 여러 개의 스레드를 사용하도록 프로그램을 작성하는 프로그래밍 기법이다. 이번 글에서는 멀티스레딩에 대해 아래와 같은 점들을 살펴본다. 단일 스레드 프로그램의 단점 멀티스레딩의 이점 멀티스레딩을 도입할 때 유의할 점 단일 스레드와 멀티 스레드 프로세스를 카페, 스레드를 점원에 비유해 점원이 한 명인 카페와 여러 명인 카페의 운영 방식을 상상해보자. 점원이 한 명인 카페의 문제점 먼저 한 ..
이번 글에서는 Spring Event 도입기 1장에서 언급한 이벤트 리스너 밖으로 전파된 예외의 처리에 대해 다룬다. Spring Event의 자세한 사용 방법은 1장에서 소개하고 있다. Spring Event 도입기 (1) - 핵심 로직을 변경으로부터 보호하라 핵심 로직 변경에 따른 문제 발생과 해결 문제 - 가독성 저하 현재 사내에서 운영하는 서비스에는 사용자의 요청을 받으면 엔티티를 생성해 저장하고 메시지 큐에 발행한다라는 핵심 로직이 존 devpanpan.tistory.com 리스너의 사용 방법에 따른 분류 리스너는 동기/비동기로, 발행 즉시/발행 주체의 트랜잭션 범위에 따라 다양하게 정의할 수 있다. 이 글에서는 리스너의 사용 사례를 아래의 4가지로 분류하고 각각의 예외 처리 방법을 살펴본다. ..
핵심 로직 변경에 따른 문제 발생과 해결 문제 - 가독성 저하 현재 사내에서 운영하는 서비스에는 사용자의 요청을 받으면 엔티티를 생성해 저장하고 메시지 큐에 발행한다라는 핵심 로직이 존재한다. 이 코드는 처음에는 아주 짧았고, 가독성도 나쁘지 않았다. 그러나 기획이 추가됨에 따라 해당 코드에는 여러 부가 로직들이 추가되었다. 엔티티의 생성 후 또다른 엔티티를 생성해야 하기도 하고, 메시지 큐에 발행하기 전 엔티티에 특정 변환 작업이 추가되기도 했다. 기획이 변경됨에 따라 이러한 변경 사항은 추가되기도, 다시 제거되기도 하며 핵심 로직을 포함한 클래스에 다양한 변경을 일으켰다. 그러다보니 코드는 점점 길어지고 가독성도 나빠졌다. 수정이 잦으니 여러 사람의 작업에 의해 conflict가 발생할 때도 많아졌고..
외부 API 호출이 포함된 비즈니스 로직의 테스트 테스트를 작성하는 과정에서, 우리는 항상 특정 의존 모듈에 대하여 2가지 중 하나를 선택해야 합니다. 실제 모듈을 주입받아 사용 해당 모듈의 모의 객체(Mock)를 생성하여 사용 내부 모듈로부터 수행되는 비즈니스 로직인 경우 둘 중 어느 쪽을 택하든 테스트를 구성하는 데에 문제는 없습니다. 하지만 외부에서 구동되는 서버의 API를 호출하는 경우에는 이야기가 다릅니다. 1번 방법(실제 모듈 사용)을 택해 실제 API 호출이 이루어지는 방향으로 테스트 코드를 작성하게 되면 아래와 같은 문제가 발생할 수 있습니다. 외부 API 서버의 상태에 의존 - 외부 API의 이용 가능 여부에 따라 테스트의 성패가 결정된다. 에러 상황을 테스트하기 어려움 - 외부 API가..
이펙티브 자바란? 자바 개발자의 필독서라고 불리는 책. 자바의 기본 문법에 대해 다루기보다는 어떤 상황에서 어떤 방법으로 문제를 해결해나가면 좋을지에 대한 가이드를 해 주는 책이다. 그렇기 때문에 언어의 문법에 대해 다루는 책보다는 난이도가 있는 편으로, 나 역시 첫 번째 시도 때에는 초반부를 읽다가 어려워서 책을 덮고 현업에서 일한지 만 1년이 다 되어가는 이 시점에서야 1회독을 한 책이다. 또한, 책 구성도 그러하고 저자 역시 권장하듯 순서대로 읽지 않고 원하는 아이템을 먼저 읽어도 되며, 다회독을 하는 것도 좋아 보인다. 나 역시 1회독에는 순서대로 읽으며 카테고리별 팁을 얻는 데에 집중했고, 2회독부터는 미리 정리해둔 요약집을 기반으로 그때그때 필요한/흥미가 가는 내용들을 골라 읽을 예정이다. 이..
드디어 가상 스레드가 도입된 Java의 새 LTS 버전이 출시되었다. 이번 포스팅에서는 이 Java 21의 주요 변경점들을 정리해보았다. Java 21? 2021년 출시된 Java 17 이후 2년만에 출시된 Java의 4번째 LTS(Long Term Support) 버전 주요 변화는 다음과 같다. Sequenced Collections Virtual Thread Record, Switch 개선 1. Sequenced Collections 기존 컬렉션은 순서를 다루기 불편함 기존 컬렉션 프레임워크는 컬렉션 내 원소들에 순서가 존재할 때 사용되는 문법이 제각각이고, 일부는 가독성도 좋지 않았다. 예를 들어, List 인터페이스의 첫 번째와 마지막 원소 접근 코드는 아래와 같다. List wordList = ..