테스트코드 & 정적분석 3

OutOfMemoryError 해결하기: IntelliJ로 메모리 누수 분석하는 방법

코드에 누수가 있거나 요청량이 많아지면 메모리 사용량 100%가 발생할 수 있습니다.  메모리 사용량이 100%가 되면 더이상 메모리를 할당할 수 없고 이는 서비스 장애로 이어집니다. Intellij에서는 메모리 사용량을 분석하기 쉽게 만든 툴이 있어 소개해드리겠습니다. 우선. 메모리 분석하기에 앞서 OutofMemory를 만들어보겠습니다.  간단하게 컨트롤러에 반복문을 만들었고,JVM 옵션으로 -XX:+HeapDumpOnOutOfMemoryError 를 넣었습니다.위 옵션은 OutOfMemory 발생 시 heap dump를 생성하는 옵션입니다.(만약 엑츄에이터를 사용한다면 GET 요청을 통해 dump를 받을 수 있습니다.)(terminal에서는 $ jmap -dump:format=b,file=/path..

TDD로 코드 품질과 효율성 높이는 방법: 장단점과 실전 활용

테스트 주도 개발 (TDD)은 개발 이전에 테스트 코드를 먼저 작성하고, 테스트 코드에 따라 기능을 개발하는 방법론입니다. TDD의 장점개발 과정에서 미리 버그를 찾을 수 있습니다.코드의 안정성이 높아진 덕분에 복잡한 리팩토링을 시도할 수 있습니다.테스트 코드가 행위 중심으로 코드를 작성하게 유도하여, 더 높은 수준의 개발이 가능합니다.기능의 확장 및 수정에도 코드의 품질을 유지할 수 있어, 지속적인 통합/ 지속적인 배포 에 적합합니다. TDD "레드-그린-리팩터" 사이클TDD개발은 레드, 그린, 리팩터 순서를 따릅니다.레드 : 새로 개발할 기능에 대하여 테스트 코드를 작성한 단계입니다. 이 때, 테스트 코드는 실패해야 합니다.그린 : 테스트 코드를 통과할 수 있도록 최소한의 코드를 작성한 단계입니다. ..

JVM 메모리 덤프 생성 및 분석

JVM이 동작하는 프로세스의 메모리 덤프를 생성하는 방법을 살펴보겠습니다.먼저, 현재 실행 중인 JVM 프로세스들을 확인합니다. $ jps -l 여러 프로세스가 있습니다. 다양한 프로세스들이 보이겠지만, 저는 spring-batch 프로젝트에 대한 덤프를 미리 생성해두었습니다.만약 kafka와 같은 다른 프로세스에 대해 덤프를 생성하고자 한다면 다음 명령어를 사용하면 됩니다: $ jmap -dump:format=b,file=/path/file.hprof 2501  여기서 format은 binary를 의미하며, 2501은 프로세스 ID입니다. jmap은 JDK에서 제공하는 유용한 도구입니다. 주의사항 - 덤프를 생성하는 도중에는 성능 저하가 발생할 수 있습니다. - 생성된 덤프 파일의 크기는 JVM이 사용..