본문 바로가기

분류 전체보기

(42)
MySQL InnoDB 스토리지 엔진 'Real MySQL 8.0(백은빈, 이성욱), 위키북스, 2021' 1권의 4장 아키텍쳐(InnoDB 스토리지 엔진) 파트를 단순 정리한 글입니다.4. 아키텍처(InnoDB 스토리지 엔진)4.2 InnoDB 스토리지 엔진 아키텍처InnoDB는 MySQL에서 사용할 수 있는 스토리지 엔진 중 거의 유일하게 레코드 기반의 잠금 제공(높은 동시성 처리 가능, 안정적, 고성능)4.2.1 프라이머리 키에 의한 클러스터링InnoDB 모든 테이블은 기본적으로 PK 기준으로 클러스터링 되어 저장이는 PK 값의 순서대로 디스크에 저장된다는 뜻모든 세컨더리 인덱스는 레코드의 주소 대신 PK 값을 논리적인 주소로 사용PK 이용한 range scan은 상당히 빠르게 처리 가능쿼리 실행 계획에서 PK는 기본적으로 다른 보조 ..
마이크로서비스 쿼리 구현(Microservices Patterns) 마이크로서비스 패턴(Microservices Patterns) by Chris Richardson 책의 7장 마이크로서비스 쿼리 구현을 개괄적으로 정리한 내용입니다. 마이크로서비스 아키텍쳐에서는 여러 서비스에 흩어져 있는 데이터를 쿼리하기 어려움여러 DB에 분산된 데이터를 조회해야 하는데 기존 분산쿼리 매커니즘은 기술적으로 가능하다 해도 캡슐화에 위배되어 사용할 수 없음마이크로서비스 아키텍쳐에서의 쿼리 구현API 조합(composition) 패턴클라이언트가 여러 서비스 직접 호출하여 조합가장 단순함CQRS(Command and Query Responsibility Segregation) 패턴쿼리만 지원하는 하나 이상의 뷰 전용 DB를 유지API 조합 패턴보다 강력하나 구현이 더 복잡 7.1 API 조합 ..
비동기 메시징 패턴 응용 통신(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을 위해 개발한 ..