본문 바로가기
반응형

Language/☕️Java12

[Java] 멀티스레드를 통한 성능개선 화스트 페이스 경보 발생... 문제상황 프로젝트 진행 중 이번달 말에 계산을 돌려야하는데 시간이 오래 걸린다고 성능을 개선해달라는 요청을 받았다. Slow Query가 있겠거니 하고 소스를 뜯어봤더니 왠 걸,, 프로시저로 되어있다. 메인 프로시저 하나에 수십개의 프로시저가 딸려있는 구조였다. 정리하자면, java단에서 반복문으로 한명 씩 해당 프로시저를 호출해서 계산하는 구조인데 해당 프로시저는 수십개의 서브 프로시저를 달고있는 구조였으며, 1명당 약 3.6초가 소요됐다. 100명을 돌리면 360초. 1000명을 돌리면 3600초...... 그..그만!! 해결방안 모색 여러가지 해결방안을 모색했고 적합한 방식을 찾아나갔다. Query 튜닝 처음에는 Slow Query가 있을 줄 알고 까보니 수십개의 프로.. 2023. 1. 19.
Java - bucket4j를 통해 트래픽 제한 및 IP 차단으로 Rate Limit 구현 작업개요 개인 사이트의 운영을 시작하다보니 갑자기..!! 여러가지 고려사항들이 떠올랐다... what the fork.. 가장 먼저, ec2 free-tier를 사용하다보니 DoS 공격이라던지, 한 IP에서 대용량의 트래픽을 요청하는 경우를 막는게 먼저라 생각했다. 그래서 요청 IP당 분단위로 트래픽을 제한하고, 그 이상으로 요청올 경우 error를 뱉어주려고 한다. 얌우치게 바로 시작해보자. Bucket4j Bucket4j는 토큰 버킷 알고리즘을 기반으로하는 Java 속도 제한 라이브러리이다. 토큰 버킷 알고리즘은 트래픽을 제어하기 위해 커다란 양동이(버킷)을 준비한 후, 그 안에 토큰을 넣어 요청마다 토큰을 소모시킨 후, 고갈이 되었을 때 에러를 내뱉어 준다. 그리고 일정시간 지났을 때, 다시 양동이.. 2022. 12. 21.
EnumMap을 써야하는 이유 Enum을 Key값으로 써야하는 Map을 만들 때 어떻게 해야할까? 흠,, 그냥 HashMap을 쓰면 되나..? 이때 java에서 Enum을 효과적으로 Map형태로 사용할 수 있는 EnumMap을 제공한다. 왜 EnumMap을 사용해야하는지 Araboja EnumMap? : EnumMap은 Enum(열거유형)에 대한 Map인터페이스의 특수한 구현형태이다. Map인터페이스를 구현하고 AbstractMap을 상속받아 Enum에 특화된 Map을 제공한 것이다. EnumMap 특징 EnumMap은 Java Collections Framework 중 하나이며 동기화되지 않는다. (필요하다면 Collections.synchronizedMap으로 wrap하는것을 권장한다.) EnumMap은 정렬된 컬렉션이며 키의 순.. 2022. 11. 20.
JVM 아키텍처 2탄 - 런타임 데이터 영역(Run-time Data Area) 간만에 JVM 아키텍쳐 2탄을 작성하는 것 같다... 한동안 대충 슥 보고 JVM을 이해했다 생각하여 게시글 작성도 안한 것에 대해 반성하며 글을 시작한다. 런타임 데이터 영역은 5개의 주요 구성 요소로 나뉜다. 메서드 영역(Method Area) 클래스가 사용될 때 JVM은 해당 클래스 파일을 읽고 분석하여, Static 변수를 포함하여 런타임상수풀, 필드, 메서드 데이타, 메서드 코드, 생성자와 같이 모든클래스 수준의 데이터를 메서드영역에 저장한다. JVM당 하나의 메서드 영역만 있으며 공유자원에 속하기 때문에 모든 스레드가 접근할 수 있다. 아래 어떤 정보를 저장하는지 디테일하게 알아보자. Type Information Type(class or interface)의 전체 이름 Type의 직계 하위 .. 2022. 8. 31.
반응형