F.Y.R

    [F.Y.R] Jitter? ( Retry의 전략 )

    맡고 있는 프로젝트에서 다른 서버와 통신을 하는 코드를 보던 중, 통신을 하는 서버에서 동시성 이슈로 재시도를 원하는 에러코드가 내려왔고, 이에 잠깐의 sleep을 한 후에 재시도하는 것을 볼 수 있었다. Retry? MSA구조에서는 서로 다른 서버와 통신을 할 일이 많다. 그렇기 때문에 서로 다른 서버와 통신할 때 실패율을 줄이는 것이 중요하며, 호출 재시도를 하며 실패율을 줄일 수 있다. 보통 Sleep을 해주는 이유는 동시에 요청이 왔을 때, 바로 재시도를 하게 된다면 동시성 이슈에 있어서 성공률은 떨어지기 때문이다. 그래서 보통은 Exponential Backoff Algorithm ( 백오프 ) 를 사용해야하는 걸로 알고 있었다. 1번째 재시도 : 1초 -> 2번째 재시도 : 2초 -> 3번째 ..

    [Error] org.hibernate.LazyInitializationException: could not initialize proxy

    😀 원인 파악 코드를 열심히 작성해서 리뷰를 받고, 즐거운 마음으로 라이브 배포를 했다.. 그러나 몇 분이 지나지 않고 error alert이 나오기 시작했고,,, 정말 어처구니 없는 실수를 했다는 것을 깨달았다. 에러 내용은 JPA에서 나온 오류였다.. org.hibernate.LazyInitializationException: could not initialize proxy 위와 같은 오류가 생긴 원인을 파악하기 위해서 구현한 부분을 다시 보았고, Entity 객체를 DTO 객체로 변경하기 위해 BeanUtils copyProperties로 간편하게 하려고 했던 부분해서 문제가 있다는 것을 발견할 수 있었다.. (괜히 빠르게 하려다가..) BeanUtils copyProperties란? 스프링에서 제..

    [Error] Cause: java.lang.ExceptionInInitializerError

    매번 GIT으로 레포지토리를 클론하고 새 환경에서....! Project를 실행하거나 빌드할 때, "java.lang.ExceptionInInitializerError" 에러를 자주 만나곤 한다. 구글링을 해보니 거의 80%는 JUnit, Gradle 등 버전 문제라고 한다. Java 8로 동작하는지, Junit의 버전은 무엇인지 체크를 잘 하면 되고, 보통은 IDE에서 15로 설정된 JVM를 8/1.8 로 설정을 해주면 잘 실행된다. Intellij IDEA => Preferences -> build -> Gradle -> Gradle JVM 버전 잘 설정하자....!