분산 시스템 일관성 한판정리
2024. 11. 8. 11:56
Others
분산환경 시스템을 학습하다 보면 linearizability, causal consistency, total ordering, atomic broadcast 등 비슷하면서도 다른 개념들로 인해 분산 시스템에서의 일관성을 이해하는데 종종 어려움을 겪고는 했습니다. 이번 포스팅을 통하여 위 개념들이 무엇을 의미하고 그리고 어떻게 다른지 살펴보도록 하겠습니다. Linearizable(Strong Consistency, Atomic Consistency) Linearizable 한 시스템은 분산 환경에서 발생한 모든 이벤트를 발생한 절대적인 시간 기준으로 순서(global order)를 매길 수 있습니다. Linearizable 한 시스템에서 발생한 모든 이벤트는 단일 프로세스에서 이벤트를 순차적으로 발생시..
성급하게 시스템을 최적화하는 당신을 위한 글
2024. 10. 18. 18:00
Others
제가 개발 중인 랭킹 시스템은 유저가 앱에 접속했을 때 처음 바라보는 화면이기 때문에 높은 TPS를 견딜 수 있어야 합니다. 또한 장 시간에 따라(증권사앱) TPS가 들쭉날쭉해서... 급격하게 증가하는 TPS도 견딜 수 있어야 해서 다양한 최적화 전략을 사용하고 있습니다. 하지만 기존에 사용하던 최적화 방법으로는 랭킹에 신규 기능을 추가하는 게 불가능했습니다(왜 그런지는 뒤에서 설명하겠습니다). 또한 기존의 최적화 방법이 전혀 도움 되지 않았을뿐더러, 불필요한 TPS를 생성하는, 즉 self DDOS를 유발하고 있었음을 알게 되었습니다. 기존 랭킹 시스템랭킹 시스템은 아래와 같은 요구사항을 만족해야 합니다. 장 시간에 따라 다르지만 최대 4000 TPS 유저가 처음 보는 화면이기 때문에 짧은 laten..
첫 테크 블로그 기고
2024. 7. 30. 20:19
Career/회고
유연하고 확장 가능한 배너 기능 구현하기어떠한 요구사항도 수용할 수 있는 기능은 어떻게 만들 수 있을까요? 토스증권에서 유저에게 노출하는 배너 기능을 어떻게 유연하고 확장 가능하게 구현하였는지 공유 드려요.toss.tech 처음으로 사내 테크 블로그에 프로젝트와 관련된 글을 기고하게 됐습니다. 테크 블로그를 작성하면서 들었던 생각은 앞으로도 저의 작업을 다른 사람들에게 공유할 수 있도록 잘 정리하는 습관의 중요성을 느끼게 됐습니다. 정리된 문서가 부족하다 보니 기억에 의존하거나 프로젝트를 전체적으로 다 살펴보고 나서야 글을 작성할 수 있는 준비가 됐었습니다. 하지만 또 그 준비를 하는 과정에서 프로젝트에 대한 이해도를 높일 수 있어서 나름 좋은 점도 분명히 있었습니다.저의 첫 테크블로그는 그 어떠한 요구..
터미널 로딩 속도 개선하기
2024. 7. 6. 16:07
Others
최근에 생산성 향상에 도움 되는 툴을 이것저것 만지면서 익숙해지고 있는 와중에 사용 중인 zsh 터미널이 느려지는 게 체감되기 시작했습니다. 작업을 하는 도중 "터미널을 켜야겠네"라는 생각이 들면 무의식적으로 귀찮다는 생각이 들 정도였기에, 이는 해결해야 하는 문제가 됐음이 분명했습니다. 터미널 속도를 향상하는 방법과 관련하여 훌륭한 포스팅을 찾았고, 해당 포스팅의 내용을 적용해서 터미널 로딩 속도를 개선했던 과정을 공유드리고자 포스팅을 작성합니다. 느린 지점 파악하기 zsh는 plugin을 설치함으로써 다양한 기능을 활용할 수 있습니다. 초기에 의심했던 부분은 설치된 plugin을 로드하는 부분에서 느리지 않을까 하는 생각이었습니다. 그래서 각각의 plugin을 로드하는 시간을 확인하기 위해 "~/...
State Machine Pattern으로 인지부하 줄이기
2024. 3. 15. 01:12
Software Development
최근에 제가 속한 팀에서는 유저 모으기를 위한 프로모션 이벤트를 준비했습니다. 해당 이벤트를 위한 프로모션은 준비 기간이 짧았지만, 개발 스펙이 작지 않아 모두 고생했던 기억이 있습니다. 처음에는 개발 스펙을 받았을 때는 무수히 많은 에지 케이스가 숨어있음을 알지 못했습니다. 유저가 이벤트에 참여하면 유저의 참여 정도에 따라 상태가 변화하는데, 각 상태마다 무수한 에지 케이스가 있어 이를 어떻게 효과적으로 컨트롤할 수 있을지 고민했습니다. 그 결과 개별 상태와 상태별로 가능한 동작을 효과적으로 제어하기 위해 state machine pattern을 활용하기로 결정했습니다. State machine pattern은 소프트웨어 설계 패턴으로, 상태를 관리하는 데 사용됩니다. 특히 상태의 수가 정해진 경우에 ..
[Pingora] Cloudflare 네트워크 프레임워크
2024. 3. 2. 00:56
Open Source
Cloudflare은 클라우드 벤더 중 하나로, 최근에 내부적으로 사용하던 Pingora를 오픈소스로 공개했습니다. 클라우드 서비스를 제공함에 있어 nginx의 한계를 극복하고자 자체적으로 Pingora를 개발해서 사용했다고 합니다. Pingora는 Cloudflare의 운영 환경에서 battle testing을 거쳤기 때문에 충분히 검증되었습니다. Pingora는 네트워크 애플리케이션 개발에 사용할 수 있는 라이브러리로, nginx와 같이 executable binary를 제공하지 않습니다. 기능프로토콜: HTTP/1, HTTP/2, end-to-end grpc, TCP/UDP 커스터마이징: callback, filter 특징Rust로 작성되었기 때문에 메모리 안전성이 뛰어남 멀티스레드 아키텍처를 ..
[Career] 2024년 첫 평가
2024. 2. 2. 22:25
Career/활동
새로운 회사로 이직 후 처음으로 평가 리포트를 받았습니다. 3개월간 제품팀에서 새로운 프로덕트를 만들어보고, 기능 개선을 해보고 스터디도 해보면서 다양한 경험을 해봤고, 이를 기반으로 팀원분들로부터 피드백을 전달받았습니다. 일반적인 회사에서 피드백이란 주기적으로 해야 하는 귀찮은 업무의 일환으로 여겨지는데 새로 이직한 회사에서는 건설적인 피드백을 주고받음으로써 다음 6개월간 업무의 방향을 어떻게 설정할지 생각해 볼 수 있었습니다. 우선 여러 팀원분들께서 공통으로 개선했으면 좋겠다고 말씀 주신 부분은, 피드백을 더 자주 요청하는 것입니다. 상대방이 피드백을 요청하지 않은 상태에서 피드백을 주는 것은 좋은 효과를 보기 어렵습니다(감정 상할 확률이 높죠...). 그렇기 때문에 피드백을 적극적으로 요청하는 자세..
[Career] 2023 회고- 기회는 얻는게 아닌 찾는것
2023. 12. 9. 22:40
Career/회고
다사다난했던 2023년이 지나고 2024년이 다가오고 있습니다. 누군가 제게 올해 어떻게 보냈는지 묻는다면, 저는 다음과 같이 대답할 것 같습니다. Armeria를 시작으로 오픈소스 기여의 즐거움을 깨달았습니다. 다양한 스터디를 통해 많은 사람들을 만났고, 덕분에 이직에도 성공할 수 있었습니다. 또한 개발자로서 한 단계 더 성장할 수 있는 계기가 됐습니다. Toastmaster 활동을 통해 공개 연설의 두려움을 극복하였고, 그로 인해 자존감도 더욱 높아졌습니다. 이 모든 경험들의 공통점은, 이를 통해 다른 기회가 찾아왔다는 것입니다. "준비된 자에게 기회가 온다"라는 걸 어렴풋이 알고는 있었지만 올해 경험들을 통해 그것이 왜 명언인지 다시 깨달을 수 있었습니다. 오픈소스 라인플러스에 재직 당시 "오픈소스..