본문 바로가기

kotlin7

동시성 이슈를 해결하기 위한 Redisson 분산락 알아보기(2) - 재고 테스트 1편에서는 동시성 이슈의 관한 이론과 Redisson의 이론적인 부분을 알아봤다면 2편에서는 코드를 통해서 동시성 이슈에 대한 테스트를 진행한 내용에 대해서 정리한다. 동시성 이슈를 해결하기 위한 Redisson 분산락 알아보기(2) - 재고 테스트 설정 의존성 추가 implementation("org.redisson:redisson-spring-boot-starter:3.19.3") Config 설정 클래스 추가 @Configuration class RedissonConfig( val redisProperties: RedisProperties ) { @Bean fun redissonClient(): RedissonClient { val config = Config() config.useSingleSer.. 2023. 4. 30.
자바 -Xms -Xmx 힙 메모리 설정 Jar 파일을 실행할 때 여러 옵션들을 줄수가 있는데 그 중에서도 힙메모리 관련 설정인 -Xms와 -Xmx 옵션에 대해서 정리한다. 자바 -Xms -Xmx 힙 메모리 설정 -Xms와 -Xmx -Xms와 -Xmx 옵션은 Jar 파일을 실행할 때 초기 할당 메모리와 최대 할당 메모리를 지정하는 옵션이다. 간혹 -Xms 옵션을 초기 할당 메모리가 아닌 최소 할당 메모리로 잘못 알고 있는 경우가 있는데 최소가 아닌 초기 할당 이다. 만약 다음과 같이 설정을 했다고 가정해보자. -Xms2048m -Xmx4096m 다음과 같이 옵션을 주고 jar 파일을 실행하게 되면 초기 힙 메모리 사이즈가 2048MB로 설정되고 최대는 4096MB로 설정이 된다. 테스트를 위해서 인텔리제이에서 자바 애플리케이션을 실행할 때 옵션.. 2023. 3. 14.
Spring - @ConfigurationProperties 사용방법 정리 및 @ConstructorBinding @ConfigurationProperties은 *.properties or *.yml 파일에 있는 property를 자바 클래스에 값을 가져와 사용할 수 있게 해주는 어노테이션이다. @Value를 통해서도 값을 가지고 올 수 있지만 클래스 파일로 관리할 수 있다는 점에서 차이가 있다. 스프링부트 2.2 버전 전 후로 사용방법에 차이가 있어 내용을 정리함과 동시에 @ConstructorBinding 어노테이션에 대해서도 정리한다. Spring - @ConfigurationProperties 사용방법 정리 및 @ConstructorBinding @ConfigurationProperties 스프링부트 2.2 버전 이전 사용방법 기존에는 @ConfigurationProperties 사용하기 위해서는 @Confi.. 2023. 2. 25.
Kotlin - indexOf()를 통한 Data Class와 Class 특성 알아보기 개발을 하던 도중 indexOf()를 활용하여 전달 된 파라미터 값과 일치하는 리스트 값의 인덱스 번호를 반환해줘야 하는 경우가 생겼다. List안에는 일치하는 값이 있음에도 불구하고 indexOf() 함수를 활용하여 값을 찾으려고 하는데 반환 된 값이 -1로 떨어지는 것이었다. 해당 케이스에 대한 원인과 해결 방안에 대해서 정리한다. Kotlin - indexOf()를 통한 Data Class와 Class 특성 알아보기 원인 다음과 같이 List 컬렉션에서는 indexOf() 함수를 제공한다. indexOf()는 해당 값이 존재하지 않으면 -1을 반환하고 존재한다면 해당 index 값을 리턴한다. 찾으려고 한 값은 dto 객체 내의 특정 필드의 값을 찾는 것이 었고 예시를 들면 다음과 같다. val t.. 2023. 1. 24.
코틀린 - 코드 실행 시간 측정 measureTimedValue 코드 실행 시간을 측정하기 위해서 다양한 방법이 있지만 코틀린에서 제공하는 measureTimedValue에 대해서 알아본다. 코틀린 - 코드 실행 시간 측정 measureTimedValue 코드 실행 시간을 측정하기 위해서는 아래와 같이 코드를 짜도 무방하지만 코틀린에서는 좀 더 간편하게 시간을 측정할 수 있도록 함수를 제공한다. val startTime = getCurrentTime() // do something val endTime = getCurrentTime() println("elapsedTime : ${endTime - startTime}") measureTimedValue() 함수를 이용하면 간편하게 코드 시간 측정이 가능하다. 먼저 아래 두가지를 import 해준다. import kot.. 2022. 11. 8.
@RestControllerAdvice를 활용한 예외처리 예외를 처리할때 각각의 메서드에서 try-catch를 이용해서 처리하게 되면 코드의 라인이 길어지고 더불어 가독성도 떨어지게된다. 이렇게 되면 같이 협업하는 동료 입장에서도 업무 효율이 떨어지게 된다. 이럴때 사용할 수 있는 것이 공통 예외 핸들러를 통해서 관리하는 방법이다. @RestControllerAdvice를 활용한 예외처리 @ControllerAdvice 먼저 @ControllerAdvice는 @ExceptionHandler, @ModelAttribute, @InitBinder 가 적용된 메서드들에 AOP를 적용하여 컨트롤러단에 적용하기 위해 고안된 어노테이션이다. 해당 어노테이션을 통해 모든 @Controller에 대해서 전역적으로 발생할 수 있는 예외를 잡아서 처리할 수 있다. @RestCo.. 2022. 9. 6.