본문 바로가기

전체 글837

[컨퍼런스 후기] SLASH 24 토스가 처음으로 주최하는 오프라인 개발자 컨퍼런스에 참석했다. 회사 동료의 배려로 티켓을 양도받아 참석할 수 있게 되었다. 정말 감사하다.그 동안 토스의 개발 컨퍼런스 영상을 온라인으로 보면서 많은 재미와 인사이트를 얻었지만, 이번엔 현장의 생생한 분위기를 직접 느낄 수 있어 더욱 기대가 컸다. 백엔드 개발자로서, 컨퍼런스에서 가장 필수 요소는 카프카다. 하지만 솔직히 말하면, 얼마 전까지만 해도 나는 카프카를 사용해본적도 없고, 그 개념도 잘 알지 못했다. 카프카라는 단어가 나올 때마다 호기심은 생겼지만, 동시에 높은 벽을 마추한 듯이 느낌이 들곤 했다. 최근에야 카프카에 대해 본격적으로 공부하기 시작했고, 혼자서 이것저것 실험해보며 조금씩 이해의 폭을 넓혀가고 있다. 그럼에도 아직 실무에서 직접 적용.. 2024. 10. 3.
슬랙 알림 최적화 - 배치처리, 버퍼링 많은 기업에서 슬랙을 단순한 커뮤니케이션 도구 이상으로 활용하고 있을 것이다. 우리 팀은 애플리케이션에서 발생하는 중요한 에러 로깅 알림을 슬랙을 통해 관리하고 있다. 우리 앱은 이미 ELK(Elasticsearch, Logstash, Kibana)를 사용하여 로그를 수집하고 있으며, 여기에는 operation time 정보도 포함된다. ELK 검색을 통해 긴 operation time을 가진 요청들을 추적할 수 있지만, 슬랙 알림을 통해 이를 더욱 신속하게 모니터링할 수 있다고 판단하여 새로운 기능을 구현하였다. 구현은 간단했다. 로깅 필터에서 ELK에 로그를 쌓을 때, 특정 시간(15,000ms) 이상의 작업이 발생하면 비동기로 슬랙 알림을 발송하도록 했다. 이를 통해 별도의 검색 없이도 긴 시간이 .. 2024. 8. 25.
[책 후기] 이벤트 기반 마이크로서비스 구축 https://product.kyobobook.co.kr/detail/S000001810379 이벤트 기반 마이크로서비스 구축 | 애덤 벨메어 - 교보문고이벤트 기반 마이크로서비스 구축 | 실시간 데이터 활용을 위한 새로운 시스템 아키텍처 가이드이벤트 기반 마이크로서비스 아키텍처를 소개하는 실무 개론서다. 구조, 통신, 통합, 배포 등 기product.kyobobook.co.kr  이벤트 브로커를 어떤 용도로 사용할 수 있는가에 대해서 알 수 있는 책이라고 생각한다.현재 이벤트 브로커를 제대로 써본적이 없는데, 해당 책을 읽으며 다양한 곳에 사용할 수 있다는 것을 알게되었고 인사이트가 늘어났다.내가 이벤트 기반 마이크로서비스를 직접 구축해보거나, 직접 다뤄본적이 없기 때문에 감이 오지 않는 내용도 있었다.. 2024. 8. 18.
데이터 대량 등록/수정 성능 개선 with JDBC Batch Update 우리 애플리케이션에는 마트 관계자를 위한 관리 페이지가 존재한다.해당 페이지에서 상품 관리, 주문 관리 등 관리 작업이 가능하다.상품을 단건으로도 저장/수정이 가능하고, 엑셀 파일을 통해 대량으로 저장/수정도 가능하다. 엑셀 파일을 통해 대량으로 저장/수정하는 기능을 우리 앱에서는 '상품 통합 관리'라고 부른다.상품 통합 관리 기능은 아래 프로세스로 이루어져 있다.1. 엑셀 업로드2. 엑셀 파싱 후 클라이언트 반환3. 클라이언트는 파싱된 정보를 보고 상품 분류 요청4. 상품 분류에서는 해당 상품이 신규 상품인지, 기존 상품인지 분류하여 클라이언트에게 반환5. 기존 상품은 수정6. 신규 상품은 저장정리하면 통합 상품 관리 기능은 엑셀 파싱 -> 상분 분류 -> 상품 수정 -> 상품 저장 순으로 진행한다. .. 2024. 8. 17.
효율적인 개발과 유지보수를 위한 문서화의 힘 신입 개발자로 입사했을 때, 가장 어려웠던 점은 기존 코드로만 기능과 정책을 파악하는 것이였다.문서화가 제대로 되어 있지 않고, 테스트 코드 조차 제대로 존재하지 않는 경우가 많아 팀 동료들에게 계속 물어봐야 했다.또한, 코드 작성자가 퇴사자인 경우도 있어서 제대로 파악이 힘들었다.이러한 과정에서 많은 시간이 소모되었던 것 같다. 장바구니 기능 서버 이전 프로젝트의 서버 담당자를 맡게 되었다. 관련 글은 다음 링크에 있다: https://comengin.tistory.com/851 Redis로 장바구니 구현하기: 예상치 못한 함정과 그 해결책우리 앱의 장바구니 기능은 기존에 클라이언트 캐시로 관리되고 있었다. 해당 방식은 서버 부하를 줄일 수 있다는 장점이 있지만, 몇 가지 심각한 단점이 있었다. 1. .. 2024. 8. 11.
Redis로 장바구니 구현하기: 추상화의 편리함과 함정 우리 앱의 장바구니 기능은 기존에 클라이언트 캐시로 관리되고 있었다. 해당 방식은 서버 부하를 줄일 수 있다는 장점이 있지만, 몇 가지 심각한 단점이 있었다. 1. 캐시로 관리되다 보니 장바구니를 한 개밖에 가질 수 없었다.-> 우리 앱은 사용자가 여러 마트를 이용할 수 있는데, 마트를 옮길 때마다 기존 장바구니 데이터를 지워야했다.2. 클라이언트에서 장바구니 관련 오류가 발생하면 추적이 어려웠다.-> 오류를 재현할 정보가 부족하여 디버깅에 많은 시간이 소요됐었다. 이러한 문제들을 해결하기 위해 장바구니를 서버로 이전하기로 결정했었다. 장바구니 서버 이전 시, 가장 먼저 고민한 것은 저장소 선택이였다.RDB와 NoSQL 중 어느 것을 사용할지 고민했어는데, 다음 이유로 Redis를 선택했다.1. 클라이언.. 2024. 8. 10.