이번에는 자바5 부터 멀티 쓰레드 기반의 동시성 프로그래밍을 위해 추가된 Executor, ExecutorService, ScheduledExecutorService와 Callable, Future를 살펴보도록 하겠습니다. 1. Callable과 Future 인터페이스에 대한 이해 및 사용법[ Thread와 Runnable의 단점 및 한계 ]Thread와 Runnable을 직접 사용하는 방식은 다음과 같은 한계점이 있다. 지나치게 저수준의 API(쓰레드의 생성)에 의존함값의 반환이 불가능매번 쓰레드 생성과 종료하는 오버헤드가 발생쓰레드들의 관리가 어려움 먼저 쓰레드를 어떻게 만드는지는 애플리케이션 개발자의 관심과는 거리가 먼데, Thread와 Runnable를 통한 쓰레드의 생성과 실행은 너무 저수..
이번에는 자바 초기부터 멀티 쓰레드 기반의 동시성 프로그래밍을 위해 만들어졌던 Thread와 Runnable를 살펴보도록 하겠습니다. 1. Thread와 Runnable에 대한 이해 및 사용법 [ 쓰레드와 자바의 멀티 쓰레드 ] 쓰레드란 프로그램 실행의 가장 작은 단위이다. 일반적으로 자바 애플리케이션을 만들어 실행하면 1개의 메인(main) 쓰레드에 의해 프로그램이 실행된다. 하지만 1개의 쓰레드 만으로는 동시에 여러 작업을 할 수 없다. 동시에 여러 작업을 처리하고 싶다면, 별도의 쓰레드를 만들어 실행시켜줘야 하는데, 자바는 멀티 쓰레드 기반으로 동시성 프로그래밍을 지원하기 위한 방법들을 계속해서 발전시켜 왔다. 그 중에서 Thread와 Runnable은 자바 초기부터 멀티 쓰레드를 위해 제공되었던 ..
이번에는 멀티 쓰레드 환경에서 요청 쓰레드 별로 식별가능한 로그를 남기는 방법에 대해 알아보도록 하겠습니다. 실무에서 유용하게 사용될 수 있으니 참고하시면 좋을 것 같습니다. 1. 로그가 뒤섞이는 문제 상황 소개 및 해결 방법(MDC) [ 로그가 뒤섞이는 문제 상황 소개 ] 서비스를 운영하다 보면 로그를 통해 문의 대응 및 모니터링 등을 진행하게 된다. 그런데 문제는 멀티 쓰레드 환경에서 여러 동시에 요청이 처리되기 때문에 동일한 요청에 대한 로그가 연속적으로 쌓이는 것이 아니라, 순서없이 쌓인다는 것이다. 예를 들어 사용자 추가를 위한 요청이 동시 다발적으로 와서 다음과 같이 로그가 남았다고 하자. 아래의 로그를 보면 1개의 요청에 대한 로그가 쭉 남지 않고, 뒤섞임을 확인할 수 있다. 위의 로그를 요..
이번에 넥스트스텝 ATDD 강의를 듣게 되었습니다. 과제 중에 @SpringBootTest를 사용하는 테스트들을 격리시키는 부분이 있었는데, 제가 사용했던 방법을 공유하도록 하겠습니다. 1. SpringBootTest가 @Transactional로 롤백되지 않는 이유[ SpringBootTest에서 트랜잭션 롤백되지 않는 이유 ]테스트에서의 트랜잭션 롤백@DataJpaTest를 사용하면 영속성 계층을 편리하게 테스트 할 수 있다. 각각의 테스트 메소드가 끝나면 테이블은 비워지면서 모든 테스트가 격리된다. 그 이유는 @DataJpaTest 어노테이션 안에 @Transactional이 있어서 테스트가 끝나면 트랜잭션을 롤백시키기 때문이다.@Target(ElementType.TYPE)@Retention(..
Spring 프레임워크에서는 외부 API와 통신하기 위한 RestTemplate을 구현해두었습니다. 이번에는 기본적으로 주어지는 RestTemplate에 부가적인 설정을 더해 고도화해보도록 하겠습니다. 1. RestTemplate 타임아웃(Timeout), 재시도(Retry), 로깅(Logging) 등 설정하기 [ RestTemplate 추가 설정하기 ] RestTemplate은 스프링 MVC가 제공해주는 외부와의 HTTP 통신 도구이다. 개발을 하다 보면 다른 API를 호출해야 하는 경우가 많은데, 보통 Spring MVC에서는 RestTemplate을 사용한다. 기본적으로 제공되는 RestTemplate을 그대로 사용하는 것으로는 부족한 부분들이 있으므로 3가지 기능을 더해 더욱 실용적으로 만들어보도..