
지식 공유의 장이 필요하다고 열심히 얘기했더니, 이런 날이 왔다. 팀 내 코드 리뷰 문화 정착에 이어 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..

들어가며 5개월 전, 테스트코드를 처음 작성하면서 이런 생각을 했다. '이거... 테스트 통과하는 게 당연한 거 아니야...?' 'given에서 조건을 다 주고 테스트하는데 당연히 통과하지... 이럴 거면 왜 테스트코드를 작성하는 거지?' '내가 뭔가 잘못 작성하고 있나?' 멘토님은 테스트코드의 필요성을 제대로 알지 못하면 그런 생각이 드는 게 당연하고, 심지어 '짜고 치는 거 아닌가'라는 생각이 드는 것도 맞게 생각한 거라고 하셨다. 여기에서 말하는 테스트코드의 필요성에는 어떤 게 있을까? 테스트코드를 왜 작성해야 하는지 알아보자. 필요성 DB 변경 없이 테스트 실무에서는 API 호출을 통해 동작을 테스트하기 어려운 경우가 많다. 실제 사용하는 DB를 변경하면 절대 안되기 때문에 로컬 환경이 아닌 이상..

들어가며 "세마포어와 뮤텍스의 차이점을 말해보세요." 어제까지만 해도 이 질문에 대답하기 어려웠다. 이 글을 보고 있는 당신도 아마 어제의 나와 비슷한 상태일 거라고 생각한다. (난 이제 아니다!) 대답하기 위해, 처음부터 알아보자. 목차 1. 세마포어란? 2. 세마포어의 연산 3. 세마포어의 분류 4. 뮤텍스 5. 세마포어와 뮤텍스의 차이점 세마포어와 뮤텍스 세마포어란? 두 개 이상의 프로세스들은 간단한 형태의 시그널을 이용해 협동할 수 있다. 한 프로세스가 특정 시그널을 수신할 때까지 정해진 위치에서 중지하도록 강제한다. 시그널을 위해 세마포어라고 불리는 특수 변수들을 사용한다. 두 개 이상의 프로세스들이 협동하기 위해 시그널이 필요하다. 시그널 발신, 수신을 위해 변수가 필요하다. 세마포어는 특수 ..

들어가며 이번달에도 FNF 발표자로 참여했다. 주제를 먼저 정해서 공부하지 않고 이번 달에 공부했던 것들 중 가장 흥미로웠던 주제를 발표하기로 마음먹었다. 새로 참여하는 CS 스터디에서 OS 파트를 다루었고, 그 중 세마포어와 뮤텍스에 대해 깊이 있게 공부했기에 이거다! 싶었다. 상호배제 보장 방법 중 운영체제/프로그래밍 언어가 지원하는 방법에는 세마포어 말고도 모니터나 메시지 전달 등의 기법이 있었지만, 학부 수준에서 다루었기에 친숙한 세마포어와 뮤텍스를 중심으로 공부했다. 발표 준비하며 정리한 글 - https://heather-dev.tistory.com/34?category=1020656 Semaphore & Mutex 들어가며 "세마포어와 뮤텍스의 차이점을 말해보세요." 어제까지만 해도 이 질문..