반응형 Java33 Junit5 구조와 아키텍처 (with Junit이 main 없이 동작하는 이유) 개발 환경: IntelliJ 2024.3.1.1(Ultimate), JDK 21, Gradle 8.13 IntelliJ IDEA 환경과 Gradle 환경에서 Junit 살펴보기 오늘은 개발자들이 Junit을 사용하면서 스쳐지나갔을 main 함수가 없는데 Junit이 동작할 수 있는 이유에 대해 알아보고자 한다. 우선 인텔리제이에서 Build And Run 설정을 IntelliJ IDEA로 설정했다. 그리고 간단한 테스트 코드를 바로 프로파일링을 해보았다. 그럼 com.intellij.rt.junit.JunitStarter.main 메서드가 제일 먼저 실행된다. 이번에는 Build And Run 설정을 Gradle로 설정했다. 이제 다시 프로파일링을 진행해보자. 우선 제일 먼저 호출되는 코드는 Gr.. 2025. 4. 5. @Version을 사용하지 않는데 ObjectOptimisticLockingFailureException 등장?! 예측하지 못한 예외 등장?! Kotlin + Spring Boot + Spring Data Jpa 등 다양한 기술을 사용한 프로젝트를 진행하고 있다. 어느 평화로운 날.. 갑자기 프로젝트의 스프링 부트 버전에서 Tomcat 취약점이 발견되어 최신 버전 3.4.1로 스프링 부트 버전을 올렸다. 버전을 올리고 테스트 코드를 실행하면서 잘 동작하던 코드에서 ObjectOptimisticLockingFailureException이 발생했다.로그를 보면 StateObjectStateException이 먼저 발생하고 해당 에러를 OptimisticLocking 예외로 감쌌다. 프로젝트에서는 현재 낙관적 락(@Version)을 사용하지 않고 있어서 당황했다.기존 스프링 부트 버전으로 다운 그레이드하면 예외를 던진 코.. 2025. 1. 9. Chapter 7. 프로파일링 기법으로 숨겨진 이슈 찾기 매우 중요한 세 가지 프로파일링 기법에 대해 살펴보자. 샘플링을 통해 앱 코드의 어떤 부분이 실행되는지 확인한다.실행을 프로파일링(인스트루멘테이션(instrumentation))하여 잘못된 부분을 찾아내 최적화한다.앱을 프로파일링하여 DB와 통신하는 SQL 쿼리를 식별한다. 1. 샘플링으로 실행되는 코드 관찰 샘플링이란 프로파일러로 앱이 실행되는 코드를 찾아내는 방법이다.실행 자체에 대한 상세 정보는 많이 제공하지 않지만, 어떤 일이 일어나고 있는지 큰 그림을 그려보고 추가 분석에 필요한 정보를 제공한다. 샘플링은 항상 앱 프로파일링의 첫 단계로 활용하는 것이 좋고, 사실 샘플링만으로도 충분한 경우가 많다. 실습 시나리오는 다음과 같다. cURL 또는 포스트맨으로 앱에 구현된 /demo 엔드포인트를 호출.. 2024. 11. 23. Chapter 6. 프로파일링 기법으로 리소스 사용 문제 파악하기 프로파일러는 다양한 난관에 봉착했을 때 앱이 이상하게 작동되는 근본 원인을 밝혀내는 강력한 도구다.프로파일러는 실행 중인 JVM 프로세스를 가로채서 다음과 같이 유용한 세부 정보를 제공한다. CPU와 메모리 같은 리소스가 앱에서 어떻게 소비되는가?실행 중인 스레드와 그 현재 상태는 어떤가?실행 중인 코드 및 특정 조각에서 사용하는 리소스(예: 메서드별 실행 시간)는 무엇인가? 1. 프로파일러는 어떤 경우에 유용할까? 프로파일링 도구가 도움이 되는 상황을 세 가지 정도 꼽아보면 이렇다. 비정상적인 리소스 사용량 식별코드의 어느 부분이 실행되는지 찾기앱 실행 속도가 저하되는 문제 파악 1.1 비정상적인 리소스 사용량 식별 프로파일러는 대개 앱이 CPU와 메모리를 어떻게 소비하는지 파악하는 용도로 쓰인다.앱이.. 2024. 11. 22. Chapter 5. 로그를 활용하여 앱 동작 감시하기 표준 메시지 로그 메시지 포맷부터 먼저 알아보자. 2021-07-25 16:11:01.434 INFO o.s.b.w.embedded.tomcat.TomcatWebServer: Tomcat started on port(s): 8080 (http) with context path 로그 메시지는 타임스탬프, 심각도, 앱의 어느 파트에서 메시지를 남겼는지 등의 정보가 포함된다. 2021-07-25 16:11:01.434: 앱이 메시지를 기록한 시점으로, 시간순으로 정렬된다.INFO: 메시지의 중요도이다.o.s.b.w.embedded.tomcat.TomcatWebServer: 로그 메시지를 남긴 모듈과 클래스를 보통 표시한다.Tomcat started on port(s): 8080 (http) with conte.. 2024. 10. 28. Chapter 2, 3, 4. 디버깅 관련 정리 2. 디버깅 기법으로 앱 로직 이해하기 디버거를 사용할 때 제일 중요한 것은 '내가 조사하려는 로직이 무엇인가?'를 아는 것이다. 브레이크 포인트 앱 실행을 중단 시킬 위치는 브레이크 포인트를 찍어 표시한다.브레이크 포인트를 찍으면 해당 코드라인에서 실행이 중단되고 해당 스코프의 모든 변수와 그 값을 살펴볼 수 있다.또 실행 트레이스를 이용하면 코드 라인을 탐색할 때 현재 위치를 기억할 수 있다. 실행 스택 트레이스 실행 스택 트레이스는 마치 실제 지도처럼 디버거가 중단 시킨 코드 라인의 실행 경로를 나타내며, 이후 어디로 나아가야 할지 결정하는 데 도움을 준다.스택 트레이스는 디버거가 실행을 멈춘 지점까지 메서드가 서로 어떻게 호출하는지 나타내며, 메서드명, 클래스명, 호출한 코드 라인을 자세히 표시한.. 2024. 10. 24. 이전 1 2 3 4 ··· 6 다음 반응형