지식 공유의 장이 필요하다고 열심히 얘기했더니, 이런 날이 왔다. 팀 내 코드 리뷰 문화 정착에 이어 2주에 한번 진행하는 세미나, 개발 위클리까지 잘 정착시켰다. 세미나를 정착시킨 장본인이니, 1회 발표를 담당했다. 주제는 Spring @Transactional 의 동작 방식인데, R2DBC 의 Transactional Manager 를 제외한 나머지가 그 범위다. 추후 이 자료를 글로 풀어 사내 위키 및 이 블로그 포스트로도 업로드할 생각이다. 그전에 자료를 먼저 공유한다. 누구라도 Spring 내부 코드를 보거나 구글링한다면 접할 수 있는 내용이지만, 직접 코드를 따라 들어가며 정리하고 또 매일같이 사용하는 어노테이션에 대해 설명할 수 있다는 게 큰 기쁨이었다. 코드가 많은 발표 자료지만, 개발자들..
당신은 누구십니까 Q. 어떤 일 하세요? A1. 암호화폐 거래소에서 백엔드 서버개발 하고 있습니다. Q. 어떤 일 하세요? A2. 암호화폐 거래소 백엔드 기술연구팀에서 코어로직에 대한 성능 개선 및 추가 연구를 진행하고 있습니다. 어제까지 저는 A1로, 오늘부터 저는 A2로 대답합니다. 2023년에 진행한 모든 업무와 그동안 파고들었던 모든 공부들은 저를 기술연구팀으로 데려다 주었어요. 어떤 것들이 있었는지 함께 보시죠! 한 해 동안 실컷 파고들었던 공부 1. MySQL 8.0 2. 인덱스 튜닝 3. 인덱스 설계 4. 쿼리 튜닝 5. SQLP 5개 주제가 모두 하나의 분야라고요? 인정하겠습니다. 저는 DBMS 내부 구현을 공부하고 그 구조를 토대로 인덱스 설계와 튜닝, 쿼리 성능 개선하는 데에 조금, 아..
들어가며 멀티모듈 프로젝트에서 서버 간 통신을 지원하는 방법으로는 여러 가지가 있지만, 업무 시 매일 쓰고 있기에 이번 settlement 프로젝트에서도 gRPC 를 통해 서버 간 통신을 지원하도록 처리했다. Monolithic 서비스에서는 로직 수행 중 예외 발생 시 GlobalExceptionHandler 를 통해 처리하면 된다지만, 서버 간 예외는 어떻게 전파시켜야 할까? gRPC 에서 예외를 전파하는 방법 gRPC 를 사용할 때에는 StreamObserver 를 통해 응답을 보내는데, 이 때 exception 을 보내는 방법이 있다. onError() 의 매개변수로 exception 을 담아 보내는 것. 1. BEFORE gRPC server @Slf4j @RequiredArgsConstructo..
들어가며 코드를 작성하고 한 번 쭉 읽어보면 뿌듯할 때가 있다. 보통은 할 수 있는 한 가장 멋지게 설계했을 때 그런 느낌이 드는데, 지금 생각해보면 템플릿 메서드 패턴을 사용했을 때였던 것 같다. 템플릿 메서드 패턴 상위 클래스에서 처리의 뼈대를 결정하고 하위 클래스에서 그 구체적인 내용을 결정하는 패턴이다. 상위 클래스 쪽에 템플릿이 될 추상 메서드가 정의되어 있고, 하위 클래스에서 추상 메서드를 구현해 처리한다. 예시 AbstractDisplay, CharDisplay, StringDisplay, Main 4개의 클래스를 이용한다. 이 카테고리에 쓰는 글들은 모두 JAVA 언어로 배우는 디자인패턴 입문을 참고했다. 1. AbstractDisplay.java public abstract class A..
들어가며 지난번에는 ArrayList가 add를 수행하는 방법에 대해 정리했다. 이번에는 업무 수행 중 발생했던 이슈를 통해 ArrayList 의 addAll 에 대해 알아보자. 문제 발생 배경 Affiliate System 구축은 아키텍처 설계, 데이터 모델링부터 개발/배포/운영까지 내가 총괄하는 첫 프로젝트였다. N레벨까지 무한 확장 가능한 다단계 트레이더 영입 및 커미션 지급 시스템인데, 거래소에서 인플루언서 등 영업력이 있는 사람들을 Affiliate 으로 영입하고, Affiliate 은 하위에 또다른 Affiliate 을 데려오거나 직속 고객을 모아 자신의 하부로부터 발생한 거래 수수료의 일정 퍼센티지를 커미션으로 지급받는, 한마디로 다단계 구조라고 할 수 있다. Affiliate 하위에 또 A..