[Java] OutOfMemory 잡기
·
JVM/Java
🎯 GoalsOutOfMemory 발생 원인 파악 하는 법을 안다. 예제 코드JVM option 에 다음 설정을 추가한다.Intellij IDEA > Rum Configuration > Modify > Add VM Options-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError-Xms20m힙 최소 크기 20MB-Xmx20m힙 최대 크기 20MB 제한-XX:HeapDumpOnOutOfMemoryOOM 발생시 HeapDump 파일을 생성public class HeapOOM { static class OOMObject {} public static void main(String[] args) { List list = new ArrayList(); while (..
2024년 뭘 했을 때 성장했는가
·
Private
내 언어로 설명할 수 있어야한다.결국 공부해보니 다음 행위를 한 것만이 온전히 내 것이 됐다.(1) 기록으로 남긴것연습장에 손으로 갈겨쓰기연습장에 마인드맵 그리기||Notion / 블로그||컨플루언스 문서화medium 글 기고더 깊은 단계로 진행될 수록 기억에 오래 남았다.하위 단계는 기본적으로 '남'이 보고, 내가 설명하는 것을 토대로 만들기 때문이다.(2) 반복 사용결국 반복이다.기술도 '익숙해짐'에 따라 체감 난이도가 떨어지는 것을 경험했다.Kafka / Kafka-Streams1년 넘게 매일같이 썼더니 이제 그림이 그려진다.구조가 그려진다.매일 보다보니 이제 Kafka 로그도 읽힌다.Vim / Linux어쩔 수 없이 IDE에서 매일 쓰다보니 이제 왠만한 명령어는 다 익혀졌다.Redis거의 손 안댔..
[Redis] TTL - 어떤 방식으로 만료된 키를 제거할까?
·
DataBase/Redis
개요레디스는 키에 Time To Live (TTL) 이 지정된 경우 키가 만료(expired) 되면 해당 키를 제거한다.어떤 방식으로 만료된 키를 제거하는 것일까? 레디스는 2가지 방법을 제공한다.바로 Passive 방식과 Active 방식이다. Passive way클라이언트가 만료된 키에 접근하면, 그때야 비로소 해당 키를 제거한다.장점CPU 오베헤드가 발생하지 않는다.단점만료된 키에 클라이언트가 접근하지 않는다면?=> 만료된 키가 제거되지 않는다.=> 메모리 낭비 발생 Active way아래 과정을 1초에 대략 10회 진행한다.TTL 값이 있는 키 20개를 랜덤하게 뽑는다.뽑은 키 중 만료된 키만 제거한다.(2.)에서 25% 이상 키가 제거되었다면 (1.)로 돌아간다.(2.)에서 25% 미만 키가 제..
[Redis] TTL - 언제 업데이트 될까?
·
DataBase/Redis
개요Redis TTL 은 EXPIRE 명령어로 쉽게 설정할 수 있다.한 번 설정한 TTL이 '갱신'되거나 '유지'되는 케이스를 미리 알고 사용해야한다.이 글은 Redis Command 별 TTL이 언제 갱신 또는 유지되는지를 소개한다.  키에 매핑된 값 전체를 완전히 대치하는 연산만이 TTL을 갱신한다. ex)DEL값을 아예 '삭제' 해버린다.SET값을 새 값으로 아예 '대치' 해버린다.     키에 매핑된 기존 값에 연산을 하거나값을 추가하는 연산은 TTL을 유지한다. ex)INCR / DECR기존 값에 +-1LPUSH / LPOP기존 List에 원소 추가/제거SADD/SREM기존 Set에 원소 추가/제거HSET기존 property 를 변경RENAMEkey 이름을 변경 member2team 이라는 SE..
[Redis] DataStructure Lifecycle
·
DataBase/Redis
Collection type다음과 같이 여러 value 를 담을 수 있는 Data Typehashlistsetsortedset값 추가시 자동 생성된다.LPUSH, SADD 등과 같은 명령어 입력시 자동으로 key 가 생성된다.> EXISTS myset(integer) 0> SADD myset "A" "B"(integer) 2> EXISTS myset(integer) 1> SREM myset "A" "B"(integer) 2> EXISTS myset(integer) 0갖는 값이 0개가 되는 시점에 제거된다.LPOP, SREM 과 같은 명령어로 모든 원소를 제거하면해당 키는 알아서 제거된다.> SMEMBERS myset1) "A"2) "B"> SREM myset "A" "B"(integer) 2> EXIST..
[Spring] DataJpa - Query methods, @Query
·
JVM/Spring
Entity class 를 정의하고 CRUD Repository 구현 노가다를 하지 않게해준다.JpaRepository 는 대부분의 공통 메소드를 지원하기 때문이다. JpaRepository 지원 메소드Class Diagram을 보면 JpaRepository 가 얼마나 많은 메소드를 지원하는지 알 수 있다.(List)CrudRepository , PagingAndSortingRepository , QueryByExmampleExecutor 등 여러 인터페이스를 상속받는다. Spring Data Jpa 3.4.0 기준 JpaRepository 가 제공하지 않는 메소드는?다음처럼 username 을 가지고 Member 를 조회하는 기능이 필요하다고 하자.인터페이스에 새로운 메소드를 정의했다.public in..