글또
-
높은 트래픽 환경에서의 현재 재고 처리 구조 고민글또 2025. 6. 29. 17:41
들어가며안녕하세요.이번 글에서는 가상의 시나리오를 통해 회사의 아키텍처를 어떻게 개선할 수 있을지 고민해 보고자 합니다. 저희 회사에는 주문 서비스와 창고 서비스가 존재합니다.이커머스에서 재고를 관리해 주문 수량을 제한하는 건 흔한 패턴입니다.하지만 저희 시스템은 고객이 주문할 때 재고를 실시간으로 확인하지 않습니다.이는 "무조건 배송"이라는 비즈니스 모델을 반영한 설계입니다.그렇다면, 만약 주문 시점에 재고를 체크해야 하고, 동시에 높은 트래픽이 몰린다면 어떤 문제가 발생할까요? 현재 구조현재 주문은 주문 서비스에 누적되며, 당일 주문 마감 시간이 되면 그제야 창고 서비스로 전달되어 배송 작업이 시작됩니다.창고 서비스는 사용자 트래픽을 직접 받지 않기 때문에 특정 시간 제외하고 트래픽으로부터 안전합니..
-
카프카 부하 분산: 동적 쓰로틀링과 캐시글또 2025. 4. 26. 22:59
들어가며안녕하세요.이번 글에서는 카프카 기반 쓰로틀링에 대해 이야기 해보려합니다. 서비스 특성상 특정 시간대에 카프카 트래픽이 집중되며 DB 병목이 발생하는 문제가 있었습니다.단순히 서버를 증설하는 방식보다는 현재 가지고 있는 자원을 활용해 문제를 해결하고자 했습니다. 해결 전략일반적으로 부하 해결을 위해 자주 사용하는 방법은 캐시, DB 읽기/쓰기 분리, 쓰로틀링 적용입니다.저희 서비스에는 아직 글로벌 캐시를 적용하지 않았습니다.또 트래픽이 항상 높은 게 아니라 특정 시점에만 몰리는 구조였기 때문에, 상시 유지되는 캐시는 오히려 불필요한 관리 포인트 증가라고 생각했습니다.결국, 현재 리소스 내에서 문제를 해결할 수 있는 방법으로 동적 쓰로틀링 전략을 선택하게 되었고, 필요에 따라 캐시를 결합해 트..
-
글또 10기 소감글또 2025. 3. 29. 23:46
안녕하세요.이번에는 글또 10기를 마무리하며 몇 자 적어보려 합니다. 벌써 지난 7기, 8기, 9기를 지나 10기를 마무리하는 시간이 다가왔습니다. 시간이 참 빠릅니다.10기를 시작할 때 “좋은 기술 글을 쓰자”는 목표를 품었지만, 실제로 기술 글은 많이 쓰지는 못했습니다.그럼에도 불구하고 열심히 글을 작성하면서 많은 배움이 있었고 만족감을 느낍니다.회사에서는 다양한 문제 상황이 발생할 때마다 이를 해결하는 과정을 기록하는 것을 좋아합니다.새로운 기술이나 이론을 찾아 정리하는 것도 물론 의미가 있지만, 실제로 겪은 문제를 해결하는 과정을 글로 남기며 공부하는 것이 더 효과적이라 생각하기 때문입니다.이번에도 회사에서 발생한 DB 장애, 애플리케이션 장애 등 여러 가지 문제 상황에 대해 글을 작성하였고, 그..
-
DB 장애 분석: Galera Cluster Segfault글또 2025. 1. 31. 20:06
들어가며안녕하세요.이번에는 DB장애 분석 글을 써보려합니다.현재 저희 회사에서 가장 큰 이슈는 DB 장애 문제였고, 이를 해결해 보면 좋겠다고 생각했습니다. 제가 문제를 해결하기 위해 시도한 방법과 과정을 써보고자 합니다. 글의 순서는 다음과 같습니다.문제 상황의심 사례 분석메모리 부족, 많은 스레드 부하: 부하 테스트 (Sysbench 활용)특정 시각의 배치 작업, 시나리오 테스트 (K6 활용)개선점마무리 문제 상황 저희 회사는 MariaDB를 EC2에서 구동하며 Galera Cluster를 사용하고 있습니다.그중 일부 노드가 간헐적으로 다운되는 현상이 발생했습니다.Cluster 내 3개 노드 중 일부가 장애를 일으켜도 동작은 가능했지만, Segmentation Fault(Segfault) 에러..
-
개발자를 위한 커리어 관리 핸드북글또 2025. 1. 4. 19:22
해당 리뷰는 한빛미디어의 후원으로 책을 받아 작성합니다. 들어가며안녕하세요.오늘은 책 한 권을 읽고 느낀 점을 적어보려고 합니다.운 좋게 한빛미디어에서 책을 후원해 주셔서 읽게 되었습니다.여러 후보 중에서 이 책을 선택한 이유는 다음과 같습니다."내가 잘하고 있는 걸까? 앞으로 나의 커리어가 정체되지는 않을까?"책을 읽고 나니 답변을 얻기보다는 질문이 바뀌었습니다."나에게 정말 중요한 것은 무엇일까?" 개발자를 위한 커리어 관리 핸드북 - 예스241:1 멘토링하듯 알려주는 커리어 관리 노하우* 네이버, 배민, 토스, 틱톡, 트위니 등 국내 개발자 10인의 커리어 이야기 수록커리어가 어느 시점에 이르면, 코드를 다루는 것보다 중요하고 복잡한www.yes24.com 이직의 신호제가 생각하는 회사의 일은..
-
2024 회고글또 2024. 12. 22. 12:00
들어가며안녕하세요.이번 글에서는 2024년 한 해를 돌아보며 정리하고, 내년을 계획해보려 합니다. 매번 느끼지만, 시간은 정말 빠르게 흐른다고 생각합니다.2023년 회고 글을 작성한 게 엊그제 같은데 벌써 2024년 회고를 작성하고 있습니다.올해를 돌아보며 커리어, 취미, 그리고 개인적인 성장을 정리해보고자 합니다. 커리어작년 회고에서 언급했던 신규 프로젝트를 성공적으로 릴리스한 한 해였습니다.재고와 출고를 관리하는 WMS 프로젝트로, 회사에서 중요한 역할을 담당하는 프로그램입니다.스타트업의 장점 중 하나는 경력이 적더라도 큰 프로젝트를 맡아볼 기회가 많다는 점입니다.저에게 연이어 큰 프로젝트를 경험할 기회가 주어진 것은 행운이라 생각합니다.또 , 이번 프로젝트를 통해 기존에 막연히 사용하던 기술을 더..
-
Galera Cluster 알아보기글또 2024. 12. 20. 18:05
0. 들어가며안녕하세요.이번에는 Galera Cluster에 대해 알아보려고 합니다.회사 내부에서 Galera Cluster를 사용하고 있는데, 사용해 보니 특색 있는 Clustering 방식이며 잘 모르고 사용해서는 안 되는 기술이라는 생각이 들어서 공부하게 되었습니다.제가 궁금했던 점과 에러를 파악하며 공부했던 내용을 정리합니다. 글의 순서는 다음과 같습니다. Galera cluster 소개 Replication 방법 인증 복제 비동기 복제 DeadLock Large Transaction DDL 복제 방식 (Schema Upgrades) Cluster join 시 이뤄지는 일들 (State Snapshot Transfers) SST, IST ..
-
Mybatis 사용시 return 값을 검사하는 이유는 무엇일까글또 2024. 12. 18. 22:54
2024.12.18 과거 글 수정들어가며안녕하세요.이번 글에서는 MyBatis 사용 중 고민되었던 코드 작성 방식에 대해 다뤄보겠습니다. 고민 다음은 새로운 회사의 코드에서 발견한 예제입니다. 이 코드가 왜 result 값을 검사하는지 고민하게 되었습니다. @Serviceclass UserService( private val userRepository: UserRepository) { fun register(user: User) { val result = userRepository.insert(user) if (result != 1L) { throw RuntimeException("사용자 등록 중 예외가 발생했습니다.") } }}..