Overview ThreadLocal을 사용하던 중 ThreadLocal은 반드시 remove를 해주어야 하고, 그렇지 않으면 다른 스레드간 데이터 간섭이 생겨 에러가 발생할 수 있다는 점을 어쩌면 당연시하고 사용했습니다. 하지만 Spring을 사용하다보면 Thread Pool은 스레드를 작업이 끝난 후 삭제하지 않고 다시 반환한다는 점에서 그렇다면 '반환된 Thread간 간섭은 없는걸까?' 라는 의문이 들었습니다. 지금 생각하면 조금 바보같은 생각일지 몰라도 단순히 저 궁금증에서 시작하게 되었습니다.ThreadLocal 저장 방법위 질문을 해결하기 위한 가장 기본적인 접근법은 Heap과 Stack중 어느 곳에 저장되는 지를 확인하는 것입니다.그리고 ThreadLocal은 remove를 사용해야 한다는 ..
spring cache 기본 사용법: https://dolgogae.tistory.com/85spring key generator 사용법: https://dolgogae.tistory.com/86Overview앞선 두 개의 게시글에서 spring cache 기본 사용법과 커스텀 key generator에 대해서 살펴보았다. 마지막으로 cache를 어떻게 사용할지 결정하는 config 설정에 대해서 알아보도록 하겠다. 캐싱을 사용할 때 만료시간이 어떻게 설정할지, xml 파일로 설정을 분리할 지 어떻게 캐싱을 분산처리 할지 등에 대해서 설정이 가능하다.CacheManager의 동작 원리cacheManage도 여느 spring 설정과 동일하게 AOP를 기반으로 동작한다.그리고 @EnableCaching이 ..
spring cache 기본 사용법: https://dolgogae.tistory.com/85Overview앞선 글에서 spring caching에 기본적인 사용법에 대해서 설명을 했다. 결과 값이 자주 업데이트 되지 않는 함수에 대해서 적용하면 in-memory에서 별도 연산없이 바로 결과를 가져오기 때문에 성능적인 이득을 볼 수 있었다. caching을 만드는 과정에서 각 cache를 구분하는 key를 생성하는 keyGenerator에 관한 내용을 이번 장에서 다뤄보고자 한다.SimpleKeyGeneratorSimpleKeyGenerator는 keyGenerator의 디폴트 설정값이다. 캐싱을 하는 메서드에서 인자값을 기반으로 key를 생성한다.@Cacheable(value = "products")p..
OverviewSpring에서 제공하는 caching이라는 기능이 있다. spring caching은 컴퓨터를 하는 사람이면 흔히 알고 있는 개념과 동작이 비슷하다. 여러 번 호출에 대해서 결과값이 비슷하다면 메서드를 직접 실행하지 않고 미리 메모리상에 저장을 해둬서 성능을 높이는 방법이다. 만약 DB 정보가 크게 바뀌지 않는다거나 네트워크를 타야하는 연산이라면 더욱 성능 향상에 도움이 될 것이다. 물론 계산 복잡도가 높은 메서드에 대해서도 많은 이점을 받을 수 있다.Caching 종류와 사용법@Cacheable캐시에서 값을 조회하거나 없으면 메서드를 실행해 값을 캐시에 저장하는 기능을 제공한다.@Cacheable(key = "#id")public String getItemById(Long id) { ..
서론 최근에 개발을 하면서 클래스 내에서 중복 되는 로직의 메서드가 많았던것 같다. 하지만 모든 부분이 겹치면 한 개의 메서드로 해결이 가능하지만, 같은 로직을 타다가 일부만 조금 다른 로직이거나 다른 switch 문을 타야하거나 등의 문제가 있었다. 이를 추상화 하면서 알게 된 지식에 대해 정리하고자 한다. 기존에 Consumer는 Kafka - Spring을 사용하면서만 사용했는데 이러한 중복 로직을 추상화하는데에도 쓰일 수 있다는 점을 알게 됐다. Problempublic class ExampleClass{ public void methodN(){ // logic A // logic B switch(type){ // logic N ..
서론 Testcontainers을 알게되기 전엔 테스트를 하며 임베디드 처리를 하던 DB, Kafka, Redis등의 인프라들이 있었습니다. 예를 들어, Redis는 https://www.baeldung.com/spring-embedded-redis를 참고하여 임베디드 처리했습니다. 그리고 Kafka는 @EmbeddedKafka를 사용하였습니다. 이런 임베디드 처리 코드를 늘려갈수록 불필요한 코드가 많아짐을 느꼈습니다. 또한, @Profile 처리를 해야하는 일이 많았습니다. 테스트 코드에는 어노테이션이 많아지고 이를 상속으로 해결하려해도 뭔가 지저분해 보여서 다른 방법이 없나에 대한 생각을 하다 Testcontainers를 발견하게 되었습니다. 임베디드보다 간단하게 설정이 가능하고 여러 인프라를 아우르..
- Total
- Today
- Yesterday
- K8S
- 프론트엔드
- apache
- frontend
- consumer
- Data Engineering
- 리액트
- caching
- rhel
- NextJS
- API
- Container
- Java
- OS
- Producer
- Front
- broker
- spring
- Firebase
- spring boot
- apache kafka
- JPA
- cs
- feign client
- backend
- Linux
- KAFKA
- centos
- React
- zookeeper
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |