이 글은 특정 구현에 종속되는 내용을 제외한 이론 위주의 정리 글입니다. 그림에는 Redis가 표시되어 있지만 Ehcache, Memcached, Hazelcast, Caffeine Cache 등 다양한 구현체로 이를 구현할 수 있습니다. Read Cache Strategy Look Aside Cache 서비스에 사용자 조회 요청이 들어오면 우선 Cache에 저장된 데이터가 있는지 확인하는 전략입니다. 초반 Cache 성능 향상 및 트래픽 급증 대비를 위해 (Cache miss 감소) cache warm up을 수행하는 것이 좋습니다. 이 방식은 Cache에 장애가 발생하더라도 데이터베이스에 요청을 전달함으로써 Cache 장애로 인한 서비스 중단 발생을 대비할 수 있습니다. 하지만 조회 요청이 많을 경우..
현재 회사에서 운용하고 있는 Galera Cluster 관련 이슈를 해결하기 위해 학습했던 내용을 공유하는 글입니다. 개인의 이해도 부족으로 인하여 잘못된 내용이 포함되어 있을 수 있으며 트러블 슈팅이 아닌 원론적인 이야기만 나열하더라도 감안해주시고 피드백 부탁드립니다. Galera Cluster? Galera Cluster는 Mutl Master Cluster 구조를 지원하는 MySQL, MariaDB 등의 계열에 호환되는 Open Source입니다. 복제 구성시 Origin node와 Replica node 사이의 Eventual consistency로 일정 시간 동안의 데이터 부정합 문제를 해결하기 위해 적용할 수 있는 방법인 Synchronous replication에는 몇 가지 문제점이 존재합니..
이 글은 Java 환경에서 Dynamic Proxy 기반의 기능들을 사용할 때 주로 발생하는 문제인 Self-Invocation을 Lambda를 통해 어떻게 회피할 수 있는지에 대한 내용을 담고 있는 글입니다. Dynamic Proxy, AOP에 대한 이론적인 부분(발생 원인, 호출 흐름 등)들은 다루지 않을 것이기 때문에 다른 글들을 참고하시길 바랍니다. https://www.slideshare.net/MoonGyeom1/2019-springaop https://blog.outsider.ne.kr/846 https://lob-dev.tistory.com/entry/Spring-AOP와-요청-인터셉트-개념 Lambda와 관련해서는 학습을 진행하며 작성한 글이기 때문에 잘못된 내용이 있을 수도 있습니다. ..
(2022-10-23 build.gradle.kts 포맷 및 써볼만한 기능 예시 추가) 이 글은 Service, Repository와 Test code만 가지는 간단한 예제만 포함합니다. (회사에서 도입된 것을 공부하고 있는 중이라 복잡한 예제를 글로 쓰기는 어렵네요. ㅎㅎ;) 상세한 내용은 JOOQ Document와 https://github.com/jOOQ/jOOQ/tree/main/jOOQ-examples 등의 링크를 참고하시길 바랍니다. JOOQ 란? Compile 시점에서 구문 오류를 파악 가능한 Type Safe 한 Native Query를 만들 수 있고, DB의 Table 정보를 기준으로 Entity를 생성하는 상용 소프트웨어 라이브러리입니다. 활발한 컨트리뷰트 활동과 질문이 이루어지고 있으..
이 글은 간단한 구현 예제만을 포함하고 있습니다. AOP에 대한 이론적인 부분은 기존에 포스팅한 https://lob-dev.tistory.com/entry/Spring-AOP와-요청-인터셉트-개념 을 참고해주시길 바랍니다. 프로젝트 구성 Web과 Lombok을 추가합니다. (해당 예제에서는 Web 관련 로직을 사용하진 않고, 통합 테스트만 작성합니다. ) 추가적으로 implementation 'org.springframework.boot:spring-boot-starter-aop' 의존성을 추가합니다. 우선 GreetingAspect를 통해서 Aspect를 적용할 수 있는 각 시점들을 확인해보겠습니다. Spring AOP는 xml를 통한 기본적인 설정 방식과 AspectJ에서 제공하는 Annotatio..
이 글은 3달 전쯤? 단순한 계기로 노션에 작성해둔 글을 수정해서 올려놓은 글입니다. 글 내용도 갑작스럽게 끝나는 느낌이 있어서 수정을 하는 와중에도 이렇게까지 다룰만한 내용인가, 올려놔도 되나? 하는 의구심도 들었는데요. 그냥 이 사람은 그렇게 이해한 상태이구나 정도의 가벼운 마음으로 봐주시길 바랍니다. ㅎㅎ JPA에서는 특정 Column을 별도의 영역에 정의하는 2가지를 방법을 제공한다.하나는 여러 column(field)을 하나의 embedded type으로 정의하여 객체에 포함하는 방법이고 다른 하나는 별도의 추상 클래스를 만들어 변수를 정의하고 @MappedSuperclass로 상속시키는 방법이다. 언급된 이 2가지 방식은 어떠한 차이가 있고 특정 column을 정의할 땐 어느 방법을 선..
Prometheus 개요 Prometheus는 오픈소스 기반의 모니터링 시스템으로 Service discovery pattern을 통해 데이터 수집대상을 발견하고 주기적으로 풀링하여 매트릭 데이터를 수집합니다. 수집된 매트릭 정보들은 로컬 디스크에 있는 시계열 데이터베이스에 저장되어 Prometheus의 도메인 특화 언어인 PromQL을 통해 빠르게 검색할 수 있습니다. Prometheus는 매트릭 수집을 위한 서버나 컨테이너 구성이 불필요(Single host)하며, 클라이언트가 매트릭 푸시를 위해 CPU를 사용할 필요도 없습니다. (Metric Push를 통한 응답 병목이나 서버 부하를 예방합니다.) 부가적으로 중앙 집중식 구성 방식과 관리 콘솔을 제공하기에 설치나 사용이 매우 쉽습니다. Promet..
추가로 정리 중 RabbitMQ Message Queue 및 Message 보존 설정 RabbitMQ server가 종료 후 재기동하면, 기본적으로 Queue는 모두 제거되게 된다. 이를 막기 위해서는 Queue를 생성할 때 Durable 옵션을 True로 설정하여야 하며, 메시지의 경우 PERSISTENT_TEXT_PLAIN 옵션을 주어야 Message가 보존된다. MessageProperties.PERSISTENT_TEXT_PLAIN 추가적으로 Queue에 있는 Message를 보존하는 속성으로 delivery-mode라는 것이 존재하는데, 기본 값은 1으로 메모리에서 메시지를 관리하는 상태가 되며, 2로 설정할 경우 RabbitMQ가 디스크에 메시지를 영속화시킨다. 금융 거래 이벤트와 같이 비즈니스..
추가로 정리 중 AMQP Frame Structure AMQP Spec에서는 객체 지향 개념과 유사하게 Class와 Method라는 것을 사용하여 AMQP Command를 정의한다. Class는 기능의 범위를 정의한다. Method는 각 Class 내부에서 서로 다른 작업을 수행하는 작업 단위이다. // example) Connection.Start {class}.{method} basic class : (메시지의 송신, 수신, 대기열의 접근, 클라이언트의 종료, 시작, 거부 등) channel class : (채널 생성, 종료, 중지) exchange class : (분기 설정, 생성, 삭제, 연결 등) queue class : (메시지 큐 생성, 삭제, 설정, 해제 등) tx class : (트랜잭션..
메인 이미지는 https://wiki.openjdk.java.net/display/zgc/Main 에서 가져왔습니다. 최근 ZGC에 대한 질문을 받았으나 대답하지 못해 아쉬웠던 상황이 있었습니다. 완벽하게 이해하고 쓰는 글이 아니라 학습을 위해 정리하는 글이기 때문에 잘못된 내용이 있을 수 있으니 그 점 양해 부탁드립니다. ZGC Heap Memory 공간이 커지더라도 S-T-W 시간이 증가하지 않는 특징을 가진 GC이며 각각의 객체를 단일 세대로써 관리되며, 객체들은 G1 GC와 유사한 Region 방식으로 관리된다. 해당 GC는 Java 11부터 Preview로 추가되었으며, 15에서 Production Ready 상태가 되었다. ZGC의 목표 G1 보다 처리량이 15% 이상 떨어지지 않으면서, S-..
- Total
- Today
- Yesterday
- Cache Design
- JVM
- Local Cache
- HTTP
- URN
- JPA
- java
- Data Locality
- mybatis
- URI
- RPC
- rabbitmq
- 소비자 관점의 api 설계 패턴과 사례 훑어보기
- hypermedia
- spring AOP
- cglib
- Global Cache
- THP
- lambda
- 게으른 개발자 컨퍼런스
- RESTful
- Url
- 게으른개발자컨퍼런스
- JDK Dynamic Proxy
- 근황
- configuration
- spring
- Distributed Cache
- AMQP
- Switch
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |