Study: ComputerScience(CS)

    [Network] Message Queue(메시지큐) 정리

    💡 본 문서는 'Message Queue(메시지큐) 정리'에 대해 정리해놓은 글입니다. 벤더들 사이의 통신을 하려다보니 비동기로 메시지 처리하는 프로토콜이 필요했는데, Message Queue가 이를 잘 처리해주는 것을 확인하고 Message Queue에 대해 정리한 글이니 참고 부탁드립니다. 1. Message Queue 1.1 Message Queue(이하 메시지 큐) 배경 메시지 지향 미들웨어(Meesage Oriented Middleware: MOM)은 비동기 메시지를 사용하는 다른 응용 프로그램 사이에서 데이터 송수신을 의미합니다. MOM을 구현한 시스템을 메시지 큐(MessageQueue: MQ)라 합니다. 메시지 큐는 별도의 공정 작업을 연기할 수 있는 유연성을 제공하여 SOA(Service..

    [DB] MySQL 아키텍처 (feat. Real MySQL)

    💡 본 문서는 MySQL의 기본서라 불리는 Real MySQL이라는 책을 바탕으로 'MySQL 아키텍처'에 대해 정리해놓은 글입니다. 실제로 쿼리가 들어왔을 때 MySQL 자체에서는 어떤식으로 처리를 하고 어떤식으로 구성되어 있는지를 정리해두었으니 참고 부탁드립니다. 1. MySQL의 전체 구조 MySQL 서버는 크게 MySQL 엔진과 스토리지 엔진으로 구분해서 볼 수 있습니다. 여기서는 MySQL의 쿼리 파서나 옵티마이저 등과 같은 기능을 스토리지 엔진과 구분하고자 위의 그림에서는 "MySQL엔진"과 "스토리지 엔진"으로 구분했으며, 이 둘을 모두 합쳐서 그냥 MySQL 또는 MySQL 서버라고 표현합니다. 1.1 MySQL 엔진 클라이언트로부터 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 SQL파서..

    [Linux] gdb로 core dump 파일 디버깅하는 방법(feat. load core dump)

    💡 본 문서는 'gdb로 core dump 파일 분석하는 방법'에 대해 정리해놓은 글입니다. 열심히 키워놓은 프로그램이 어느 날 갑자기 죽거나 hang 걸리며 뻗어버리는 모습을 볼 때가 있습니다. 일반적으로 운영 로그/에러는 직접 logger를 만들어 따로 잘 저장해두겠지만 미처 고려하지 못한(생각보다 low한) 부분에선 바로 원인을 파악하기가 힘듭니다. 따라서 프로그램 실행 시 core dump를 남기게 설정한다면, 프로그램이 돌연사했을 때 특정 시점의 메모리 상태를 알 수 있어 이슈파악에 유용합니다. 이에 대한 설정 방법과 gdb를 이용한 디버깅 방법도 정리해두었으니 참고 부탁드립니다. 1. core 파일 다루기 core dump 파일은 ELF 형식(실행, 오브젝트, 공유라이브러리, '코어덤프'를 위..

    [DB] RDB 트랜잭션 (feat. 트랜잭션 격리 수준)

    💡 본 문서는 'RDB 트랜잭션'에 대해 정리해놓은 글입니다. RDB는 관계가 중요하기에 일련의 과정 중 일부만 성공하면 안되기에 트랜잭션을 통해 관리합니다. 이러한 트랜잭션의 특성 및 격리성에 따른 문제점 등을 다루며 실제 트랜잭션을 활용함에 도움될만한 정보를 정리하였으니 참고 부탁드립니다. 1. 트랜잭션 1.1 트랜잭션이란? RDB는 관계가 중요하기에 일련의 과정 중 일부만 성공하면 안되기에 모두 적용(Commit)되거나 모두 취소(Rollback)되어야 합니다. 따라서 여러 과정을 하나의 묶음인 '트렌잭션'이라는 단위를 통해 관리하여 데이터의 정합성을 보장합니다. 이에 문제가 생길 경우 데이터의 부정합이 생길 수 있으며, 트렌젝션의 스케줄 관리를 잘 못하면 데드락에 빠질 수 있습니다. 1.2 트랜잭..

    [Linux] 리눅스 시스템 디스크 파티션 및 관련 개념 정리

    💡 본 문서는 '리눅스 시스템 디스크 파티션 및 관련 개념'에 대해 정리해놓은 글입니다. 리눅스 시스템 관리에 있어 중요한 부분을 차지하는 디스크 파티셔닝 개념에 대해 다루겠습니다. 디스크 파티셔닝을 다루는 과정에서 필요한 용어들에 대해 알아보고, 특히 리눅스 시스템에 초점을 두었으니 참고부탁드립니다. 1. 파티셔닝 우선 파티셔닝은 하나의 물리 저장장치를 시스템 내부에서 여러 디스크 공간으로 나누는 작업을 일컫습니다. 이때 이 공간은 물리적으로 나뉠 수도 있고, 논리적으로 나뉠 수도 있습니다. 물리적으로 나뉜 공간을 프라이머리(Primary), 논리적으로 나뉜 공간을 익스텐디드(Extended)라고 부릅니다. 프라이머리 공간의 경우, 리눅스에서 최대 4개의 공간으로 나눌 수 있습니다. 따라서 더 많은 파..