전체 글 (41) 썸네일형 리스트형 중복 거래 방지를 위한 uuid 생성(UUIDv7, time-based uuid) 계기uuid란?Custom UUIDv7 구현결론계기동일 입출금에 대한 중복 거래 방지를 위해서는 어떻게 해야 하는가? 입출금 거래 시스템에 대한 애플리케이션 로직을 구현하며 '요청의 동일성을 어떻게 검증할 것인가?'에 대한 고민이 있었다. 여러 client에서 들어오는 입출금 요청은 단 한 번만 처리되어야 한다. 구현은 단일 서버를 가정하였기 때문에 입금과 출금 모듈도 하나의 트랜잭션으로 처리되지만, 네트워크 오류나 클라이언트-서버 간의 timeout, 재처리 로직 등에 의해서 동일 입출금 요청이 여러 번 서버에 요청이 올 수도 있다.예를 들어 사용자가 100원을 A통장에서 B통장으로 옮기고자 한다면, A통장에서 100원을 출금해 B통장으로 100원을 입금해야 한다. 출금과 입금은 한 번씩만 이루어져야 .. Toss Slash 24 - 대규모 사용자 기반 서비스 운영 아래 글은 Toss Slash 24 세션 참가 후 느낀 소감과 발표 내용을 단순 개조식으로 변환한 내용입니다. 자세한 내용은 아래 유튜브 영상에서 확인하실 수 있습니다.https://www.youtube.com/watch?v=5I7ehDTvnWA 24년 9월 12일에 좋은 기회가 되어 Toss에서 개최하는 컨퍼런스 Slash 24에 다녀왔다. 총 10개의 세션을 들었는데, 그 중에서도 가장 인상 깊었던 세션이 '대규모 사용자 기반의 마이데이터 서비스 안정적으로 운영하기'라는 세션이었다. 발표의 내용과 구성, 발화자의 딕션, ppt, 전달력 등 최근 들었던 발표 중에 가장 깔끔하지 않았나 싶다.발표에 따르면 70,000 TPS 트래픽이 발생하는 서비스를 안정적으로 운영하는 노하우에 대한 내용이다. 이를 .. 비동기 메시징 패턴 응용 통신(Microservices Patterns) 마이크로서비스 패턴(Microservices Patterns) by Chris Richardson 책의 3.3장 비동기 메시징 패턴 응용 통신을 개괄적으로 정리한 내용입니다. 메시징은 서비스가 메시지를 서로 비동기적으로 주고 받는 통신 방식이다. 메시지 구성 요소메시지header송신된 데이터에 대한 metadata에 해당하는 key-value로 구성messageId(송신자 또는 메시징 인프라에서 생성)응답이 출력될 메시지 채널을 가리키는 반환 주소(option)body실제로 송신할 텍스트 또는 이진 포맷의 데이터종류문서(document)데이터만 포함한 제네릭한 메시지(e.g. 커맨드에 대한 응답)메시지를 어떻게 해석할지는 수신자가 결정커맨드(command)RPC 요청과 동등한 메시지호출 작업과 전달할 매.. Spring Security에서 많이 쓰는 패스워드 암호화(Bcrypt) 계기최근 사내에서 유지보수하는 legacy 시스템 중 개발계 admin 사이트의 관리자 계정 패스워드를 모르는 경우가 발생했다. 인수인계 받은지 얼마 안되어 관리자 계정이 현업 1명에게만 부여되어 있다는 사실을 발견했는데, 나도 관리자로 넣어서 테스트해보고자 현업에게 요청했으나 비밀번호를 까먹었다는 답변이 돌아왔다.비밀번호 재설정에 대한 프로세스가 없어서 인증 프로세스를 skip하게 만들 생각도 해보았으나 리소스가 많이 들 것 같아 우선 배제해두었다. legacy 시스템의 유지보수는 외부 협력업체가 담당하고 있어서 개발계라 해도 내 마음대로 소스코드를 고치고 배포하고 하지 못하게 하였는데, 시간도 좀 걸리고 소스코드 분석도 해야하고 배포 프로세스도 새로 파악해야 하는 리소스가 꽤 드는 일이었기에 이건 최.. 동시성 이슈 해결하기(feat. spring(java), MySQL, Redis(Redisson)) Single ThreadMulti-ThreadingTomcat - Spring framework분산 시스템(Distributed Systems)단일 DB에서의 처리NoSQL에서의 처리 - Redis(Redisson library) 이번 글에서는 좀 더 실용적으로 접근해볼 예정입니다. 그래서 실제 서비스 운영 환경에서 동시성 이슈를 어떻게 해결해야 할지에 대해 직접 코드를 작성하며 살펴보고자 합니다.앞으로 설명할 내용들은 이전 글들(동시성 처리 - intro와 동시성 처리 - Lock Algorithms(락 알고리즘))의 내용에 기반하고 있기 때문에 먼저 읽고 오시면 아래 내용을 더 잘 이해하실 수 있을겁니다!concurrency, blocking, non-blocking, sync, async, lock.. Cookie & Storage, 뭘 사용해야 할까? cookie, storage, session, session cookie, web storage, local storage.. 웹 클라이언트의 저장 공간을 이야기할 때 자주 혼용해서 사용하는 단어들이다. 최근에 지인과 cookie 관련된 내용을 이야기하였는데 알고 있다고 생각했지만 설명하려고 하니 잘 알고 있지 못하고 있다는 것을 깨달아 다시 한 번 정리해보기로 했다.웹 클라이언트에서 데이터를 저장하기 위해 사용하고 있는 공간은 크게 Cookie와 Web Storage 2개로 나뉜다. 만료 시점에 따라서 각 저장 공간은 다시 2가지로 나뉜다. Cookie는 session cookies/persistent cookies로 나뉘고, Web Storage는 session storage/local storag.. spring rabbitmq 무작정 따라하기 목표RabbitMQ server 구성consumer(receiver) 구현producer(sender) 구현메시지 발행 및 수신 테스트풀어서 설명하자면, rabbitmq 라는 메시지 브로커 서버가 존재하면, consumer는 어떤 메시지를 받을 것인지 구현하고, producer는 특정 메시지를 발행하는 것이다.RabbitMQ server 구성macOS 환경에서 간단하게 homebrew를 통해 설치하였다. `brew info rabbitmq` 명령어를 통해 확인하면 Dependencies > required erlang 이라고 나오는데, 윈도우에서 설치할 경우 erlang을 버전에 맞게 설치해주어야 한다. homebrew를 통해 설치하였으므로 erlang도 자동으로 설치된다.rabbitmq 공식 docs에.. chaos engineering과 chaos monkey 사용법 chaos engineering이란?chaos engineering은 시스템의 안정성을 테스트하고 향상시키기 위한 실험적인 방법론입니다. 다양한 장애 상황을 인위적으로 만들어 시스템이 어떻게 반응하는지 관찰하고, 예측하지 못한 장애 상황에서도 시스템이 정상적으로 동작하게 만들도록 준비할 수 있습니다.chaos engineering이 필요한 이유꼬리 지연 등으로 인해 한 시스템의 장애가 다른 시스템으로 전파될 수 있는데, 장애 상황을 미리 경험하고 대응책을 마련함으로써 실제 장애 발생 시 효율적으로 대응할 수 있습니다. 또한 시스템의 고가용성을 유지하고 서비스 중단 시간을 최소화하여 안정적인 서비스를 제공할 수 있습니다.Chaos MonkeyNetflix에서 chaos engineering을 위해 개발한 .. 이전 1 2 3 4 ··· 6 다음