본문 바로가기

Java & Kolin7

java/kotlin 환경에서 비동기 코드를 테스트하는 2가지 방법 요즘 비동기 로직을 정말 많이 작성합니다. 외부 API 호출, 대용량 데이터 처리, 이메일 발송과 같은 시간이 걸리는 작업들을 기다리지 않고 처리할 수 있게 해 주기 때문입니다. 이를 통하여 불필요한 작업을 비동기로 넘겨서 response time을 크게 줄일 수 있죠. 그러나 비동기 로직은 테스트하기가 까다롭습니다. 실행 시점을 정확히 예측하기 어렵고, 메인 스레드가 아닌 다른 스레드에 동시에 실행되면서 발생하는 복잡성도 고려해야 합니다. 이로 인하여 어떤 함수를 호출하고, 이의 반환 값을 검증하거나, 반환 이후의 상태를 확인하는 방식으로는 테스트를 할 수 없게 됩니다. 아래와 같은 예시로 좀 더 이야기해볼게요.class EmailService( private val emailRepository:.. 2025. 3. 16.
Sentry에서 Cron 모니터링이 가능하다는 사실 크론 잡(Cron job)은 서버 관리나 작업을 자동화하는 데 많이 사용되는 방법 중 하나입니다. 예시를 들어보면 정기적으로 데이터베이스 백업을 수행하거나 문제가 되는 데이터를 정리하고, 이메일 알림을 발송하는 등 다양한 용도로 사용됩니다. 하지만 크론 작업을 무겁고 중요하게 사용할 경우 문제점이 하나 발생할 수 있는데요. 바로 모니터링이 쉽지 않다는 점입니다. 크론이 정상적으로 실행되고 종료되었는지, 오류가 발생하지 않았는지 혹시 중간에 배포가 있어서 끊기지 않았는지 확인하는 작업은 수동적이고 번거로울 수 있습니다. 개인의 퍼포먼스에 의존하는 만큼 관리하는 사람이 부재 중일 때, 문제가 발생한다면 꽤나 오래 문제가 지속될 수도 있습니다. 저 또한 비슷한 문제를 겪었습니다. 로직의 누락으로 크론이 실행 .. 2024. 10. 14.
M1 사용기 - JVM환경에서 ARM / Rosetta 번역 알아내기 개발을 하다보면 JVM만이 아닌 다른 환경에 종속적인 코드를 작성할 때가 있습니다. (ex. TestContainers - docker 컨테이너를 실행) 이때, JVM은 정상적으로 로제타로 번역이 되어서 잘 실행되지만, 이런 코드로 실행되는 것들은 M1에 맞지 않는 경우가 있습니다. 이런 경우를 대비하여 코드단에서 ARM / M1인지 알아보는 방법을 작성해보겠습니다. * 해당 내용은 Kotlin으로 작성되었습니다. 1. System.getProperty 먼저 해볼 수 있는 것은 아키텍쳐 이름을 가져오는 것입니다. 이 정보는 시스템 클래스에 os.arch로 저장되어있습니다. 아래와 같은 코드로 확인이 가능합니다. if (System.getProperty("os.arch").toLowerCase().cont.. 2021. 10. 10.
Garbage Collection 이 글은 Oracle의 Java Garbage Collection Basic, 그리고 JAVA SE 16의 HotSpot Virtual Machine Garbage Collection Tuning Guide 을 읽고 정리한 글입니다. Garbage Collection이란? Garbage Collection은 힙 메모리를 체크하여 사용되지 않는 객체를 확인하고, 삭제하는 프로세스입니다. C나 C++같은 언어가 수동으로 malloc이나 free로 메모리를 관리해주어야 하는 것에 달리 GC가 있는 언어는 각 언어의 Virtual Machine에서 관리해줍니다. 이러한 메모리 관리는 Reference Counting, Mark-and-Sweep 등등 많은 방법으로 이루어지지만, 오늘은 Oracle Hotspot.. 2021. 4. 4.