개발/Spring

스프링에서 편리하게 Master / Slave 분기 처리하기

도입 실제 서비스를 운영하다 보면 데이터베이스가 여러 개의 노드로 분산되어 Master / Slave (또는 Multi Master) 구조로 이루어져 있는 경우가 많습니다. 이때 어플리케이션 레벨에서 어떻게 DataSource를 분기처리 할 지 고민이 많았습니다. 이 경우에 크게 두가지 방법으로 나뉘는데요 1. RW / RO 별로 데이터소스를 만들어 개발자가 이를 인지하며 개발을 하거나 2. 단일 데이터 소스에서 트랜잭션의 분기처리를 Lazy 하게 처리하는 방법 으로 두가지가 있습니다. 저는 스프링의 [ AbstractRoutingDataSource ] 를 사용하여 2번 방법으로 진행하였으며, 코드는 [깃허브]에 있습니다. 먼저 결과를 알려드리자면, 2번 방식으로 진행했을 경우 아래와 같이 동작하게됩니다..

2021.08.27 게시됨

devops

프로메테우스에 대해 알아보자

도입 회사에서 서버 개발자로써 생활하다보니 다양한 장애 이슈를 마주하게 되었고, 이를 해결하다 보니 메트릭을 수집하여 서버의 상태를 확인 할 수 있는 모니터링 시스템이 필요하게 되었습니다. 이를 위해 프로메테우스 + 그라파나를 통해 메트릭 모니터링 시스템을 구축하였고, 그 과정에서 공부한 점을 정리하게 되었습니다. 관련 부분은 [Github] 에서 확인 할 수 있습니다. 프로메테우스란? 프로메테우스란 SoundCloud사에서 만든 오픈소스 모니터링 시스템입니다. 로그가 아닌 시스템의 상태를 나타내는 메트릭 정보를 시계열 형태로 저장하며 PromQL 이라는 SQL 형태로 저장할 수 있습니다. 쿠버네티스 환경에서도 프로메테우스 사용을 장려하고 있으며, 주로 Grafana를 통해 프로메테우스의 메트릭 정보를 ..

2021.08.07 게시됨

일상/회고

2021년 상반기 회고

라고 썼지만 지금은 8월을 넘어가고 있다. 올해가 끝나기 전에 먼저 상반기에 있던 일을 정리하도록 해야겠다. 직장인이 되니 정말 시간이 빨리간다 ㅋㅋ - 메인 이벤트 요약 1. 회사 생활 - 2020.12~ 2. 사이드 프로젝트 "만날까" 마무리 - ~ 2021.04 3. 생애 첫 오픈소스 컨트리뷰터 달성 - 2021.04 1. 회사 생활? 2021년 부터 취준생에서 신입 개발자가 되어 열씸히 회사를 다니고 있다. 백엔드 개발 포지션이며, 정직원으로는 처음 회사를 다니기 때문에 재밌는 일이 참 많다. 내가 일하다보니 불편해서 도입한 것도 많고, 이 부분은 팀내 세미나 등을 통해서 공유하기도 했다. 몇가지 기억나는 부분 중에서는 두가지 정도가 있는것같다. a. 테스트 코드 도입 코드를 짜다보니 코드의 문서..

2021.07.19 게시됨

개발/RDB

Galera Cluster에 대해 알아보자

도입 현재 다니는 회사에서 RDBMS로 MariaDB를 사용하고 있습니다. 서비스가 규모가 있다보니 단일 DB로는 버틸 수 없기 때문에 Galera Cluster로 클러스터를 구성하여 사용하고있습니다. 오늘은 MariaDB/MySQL에서 사용되는 동기식 멀티마스터 클러스터인 Galera Cluster에 대해 알아보도록 하겠습니다. 갈레라 클러스터를 간단히 도커로 세팅을 해보았습니다. [Github 링크] Galera Cluster 란 갈레라 클러스터는 동기 방식의 복제구조를 사용하는 멀티마스터 RDB 클러스터입니다. 단, 논리적으로는 완전 동기이지만 실제 write 와 tablespace에 commit하는 과정이 별개이고 각 노드간에는 비동기로 동작합니다. 갈레라 클러스터에서 이를 virtually sy..

2021.06.19 게시됨

사이드 프로젝트

사이드 프로젝트 WebP 도입 후기

배경 사이드 프로젝트를 진행하던 중 이미지 파일의 용량이 너무 커서 로딩시간이 지연되던 문제가 있었습니다. 스마트 폰에서 촬영된 고해상도, 고화소 이미지가 주 원인이였고, 이를 별다른 처리 없이 클라이언트에 내려줄 경우, 클라이언트는 이 고용량 이미지를 그대로 다운받게됩니다. 모바일이라면 데이터와 배터리가 낭비될 수 밖에 없습니다. 물론 이 경우 thunbnail 처리를 하는 것만으로 끝낼 수 있지만, 예전에 우연찮게 webp를 알게되서 서버에서 전달받은 이미지를 webp포맷으로 손실 압축하여 내려주도록 구현해보았습니다. 서버는 Spring을 사용하였습니다. WebP란? WebP는 2010년 Google에서 발표한 이미지 포맷입니다. JPEG를 대체하기 위해 발표되었으며, 현재는 JPEG, GIF, PN..

2021.05.05 게시됨

CS

WebP에 대해 알아보자

배경 사이드 프로젝트에 WebP를 적용해볼 일이 있어 적용하면서 공부했던 내용을 정리하였습니다. 생각보다 내용이 꽤 문서를 보는데도 정리하기가 어렵네요. 최대한 간단하게 정리하였습니다. WebP란? webp는 2010년 구글에서 공개한 이미지 포맷입니다. 기존의 JPEG 포맷을 대체하기 위해 나왔으며, 현재는 JPEG 뿐 아니라 PNG, GIF 그리고 Animated GIF (움짤)도 지원합니다. (당연히 JPEG에서 지원하지 않는 Transparency 또한 지원합니다. [alpth channel]) 손실 압축, 무손실 압축 모두 지원되며, 공식문서에 따르면 webp는 동일 이미지 기준 JPEG 대비 25 - 34%, PNG 대비 26% 적은 용량을 가지고 있습니다. WebP 구조 1. RIFF 컨테이..

2021.04.28 게시됨