Replication Lag?현대 많은 대규모 서비스들에선 단일 장애 포인트를 없애고 서비스에 일관된 수준의 빠른 응답을 보장하기 위해 데이터베이스를 Master-Slave 구조의 Replication 형태로 구축한다.서비스에서 발생하는 모든 데이터 변경 작업(CUD)을 Master 데이터베이스에서 처리하도록 하고, 처리완료된 데이터를 Slave 데이터베이스들에 싱크하는 구조이다. 위와 같은 구조를 통해 Master 데이터베이스 장애 시 Slave 데이터베이스를 통한 Failover 전략을 가능하게 하고, Slave 데이터베이스의 Scale Out을 통해 서비스 쿼리의 대부분을 차지하는 조회 작업을 일관된 품질로 제공할 수 있도록 해준다. 그러나 동시에 데이터의 일관성이 깨지는 케이스가 발생하기도 하는데..
분류 전체보기
올해도 돌아왔다 회고 이 블로그를 시작한 계기는 솔직한 마음으론 어디까지나 이력서에 한 줄 추가하기위한 개발 블로그였지만 요즘엔 그냥 내 공간 중 하나같다. 그만큼 글이 쉽고 가볍게 잘 써진다. (너무 가벼워서 잘 안써지고 날아가긴함) 작년까지만 해도 회고를 쓰는 스스로가 뭔가 유난스러워보였는데 그건 아마 이런 글은 그 해 무언가 이루거나 잘해낸 사람들이나 쓰는거라는 일종의 자격지심 비슷한 이유 때문이었던 듯 싶다. 지금은 그냥 작년에 그런 생각을 했던 내가 유난스러워서 부끄럽다. 올해는 가볍게 가볍게 ~_~ 1. 회사 얘기이직 올해 가장 큰 이벤트 중 하나였다. 2년 반 가까이 다닌 회사를 퇴사하고 새로운 회사로 이직을 했다. 기존 회사가 신사옥을 지으면서 판교에서 과천으로 이전하는데 도저히 과천으로..
오랜만에 다시 봐도 웃겨서 내 블로그에도 박제 문서 제대로 안읽고 대충 뇌피셜로 개발하다가 탄생했다. (사이드 프로젝트였어서 다행) 동작? 제대로 했을리가없다. 출처: 플젝 함께했던 동료 개발자의 블로그
깃헙 이슈를 둘러보다가 재미있는 글을 발견했다.https://github.com/mockito/mockito/issues/1013 Enable mocking static methods in Mockito · Issue #1013 · mockito/mockitoStatic methods mocking with Mockito This is a placeholder ticket for enabling mocking static methods in Mockito. Example action items that are totally negotiable and can ran in parallel. We're look...github.com 해당 이슈는 2017년 3월 Mockito 깃헙에 올라온 이슈로 당시엔 Mo..
왜 쓸까?Spring Retry에선 특정 메서드를 지정한 만큼 재시도 처리할 수 있도록 하는 기능을 제공한다. 일반적인 유스케이스는 외부 인프라(DB, API, 메시지 큐 등등..)와의 소통 및 처리과정에서 재시도 처리가 필요한 로직들일 것이다. 대개는 간헐적이고 일시적으로 발생하는 장애 상황에 대응하기 위한 전략으로 사용된다. 따라서 외부 API 호출 시 함께 사용되는 경우가 많으며, 관련 예제들도 보통은 Feign, RestTemplate 등의 클라이언트 관련 기술들과 함께 작성된 경우가 많다.사용해보기Spring Retry를 사용하기 위해선 아래 두 개의 의존성이 필요하다.dependencies { ... implementation 'org.springframework.retry:spring..
Redis(이하 레디스)는 Key-Value 형태의 데이터를 저장할 수 있는 일종의 NoSQL 데이터베이스 중 하나이다. 레디스는 특히 일반적인 DBMS 시스템과 다르게 디스크가 아닌 메모리에 데이터를 저장하기 때문에 데이터 조회 성능에서 매우 빠른 성능을 보인다. 또한, 레디스 내부에서 값 삽입을 비롯한 Operation 자체를 모두 싱글 스레드로 처리하기 때문에 동일 자원에 대한 레이스 컨디션으로 발생할 수 있는 문제를 원천적으로 예방해준다. (이것이 가능한 이유는 역시나 레디스가 메모리 기반으로 데이터를 관리해 빠른 속도를 보장하기 때문일 것이다.) 이러한 특징 때문에 레디스는 캐싱의 용도로 많이 사용되며, 그 밖에도 동시성 이슈가 우려되는 자원에 대한 락을 구현하기 위해서도 많이 사용된다. 그러..
HTTP의 표준 메서드HTTP 표준 메서드를 하나씩 떠올려보자. 아마 대부분의 사람들이 GET, POST, PUT, PATCH, DELETE 이렇게 5가지 메서드를 생각할 것이다. (그 외에도 HEAD, OPTIONS 등..) 위 5가지 메서드들은 마치 일종의 불변상수와도 같아서 HTTP라는 녀석이 처음 세상에 나올때부터 함께 존재했던 것과 같은 착각을 불러일으킨다. 하지만 HTTP는 1990년대 초에 처음으로 명세되어 거진 30년이 가까운 시간동안 끊임없이 발전해왔고, 특히 PATCH 메서드는 비교적 최근인 2010년에야 RFC5789를 통해 HTTP의 표준 메서드로 채택되었다. HTTP 스펙 살펴보기 위 두 이미지는 순서대로 HTTP/1.0과 HTTP/1.1의 스펙에 명시된 Method Defini..
문제상황@TransactionalEventListner를 사용하는 코드에서 문제가 발생했다. 문제를 유발한 코드는 아래와 유사했다.@Service@RequiredArgsConstructorpublic class GroupService { private final GroupRepository groupRepository; private final ApplicationEventPublisher applicationEventPublisher; @Transactional public void deleteGroup(long groupId) { groupRepository.deleteById(groupId); applicationEventPubl..