본문 바로가기

Computer Science

(35)
Real MySQL 8.0 읽기 - 아키텍처 본 포스팅은 Real MySQL 8.0 개정판을 읽고 정리한 내용입니다. 잘못된 내용이 있다면 편하게 댓글로 지적 부탁드립니다. 감사합니다. 아키텍처 MySQL 아키텍처 구조 MySQL 아키텍처 구조는 크게 MySQL 엔진과 스토리지 엔진으로 구분된다. MySQL 엔진 커넥션 핸들러, SQL 파서 및 전처리기, 옵티마이저 스토리지 엔진 실제 데이터를 스토리지에 저장, 스토리지로부터 데이터를 읽어온다. InnoDB와 MyISAM 스토리지 엔진이 존재하는데, 8.0 이후로부터 MyISAM 엔진은 거의 장점이 없어졌다. 따라서 앞으로는 InnoDB에 대해서만 언급한다. MySQL에서는 요청을 어떻게 처리할까? 가장 먼저 MySQL과 사용자가 커넥션을 맺는다. SQL문을 처리하고, SQL을 최적화한 후 스토리지..
라우팅 알고리즘과 프로토콜 본 포스팅은 이석복 교수님의 네트워크 수업과 성공과 실패를 결정하는 상위 1%의 네트워크 원리를 참고하여 작성한 포스팅입니다. 라우팅 알고리즘이란? 라우팅 알고리즘이란 출발 라우터에서 도착 라우터로 패킷을 보낼 때 최적의 비용으로 보낼 수 있는 라우팅 경로를 결정하는 알고리즘입니다. 네트워크를 아래 그림의 그래프로 추상화한다고 생각해볼 수 있습니다. 위 그림의 예에서, u라는 라우터에서 z라는 라우터까지 가는 경로를 결정해야하는 문제가 발생합니다. 이를 결정하는 알고리즘을 구체화하기 전에, 알고리즘의 분류를 먼저 생각해보겠습니다. Q. Global(전역적인 공통의 정보를 이용) 알고리즘인가? 혹은 decentralized(각 지역의 정보를 종합) 알고리즘인가? Global 모든 라우터가 전체 라우터의 t..
네트워크 계층 - IP, CIDR, NAT 본 포스팅은 이석복 교수님의 네트워크 수업과 성공과 실패를 결정하는 상위 1%의 네트워크 원리를 참고하여 작성한 포스팅입니다. 우리가 네트워크에서 요청을 보내면 HTTP 요청이 작성이 되어서 네트워크를 구성하는 계층들을 거쳐 Multiplexing, De-multiplexing이 일어나면서 데이터를 주고받게 됩니다. 이번 포스팅에서 어플리케이션 계층인 HTTP 프로토콜과 Transport 계층인 TCP 프로토콜에 대한 자세한 내용은 생략하겠습니다. 대략적으로 TCP 프로토콜의 도움으로 데이터의 신뢰성 있는 전송, 네트워크 혼잡 제어, 네트워크 흐름 제어 등이 가능해졌습니다. 사용자의 입장에서 네트워크 속으로 패킷을 보내면 신뢰성있게 잘 전달되고 응답이 잘 돌아온다는 것은 이해했는데, 상대의 호스트까지 어..
MySQL 쿼리 최적화 - Covering Index https://porolog.tistory.com/54 슬로우 쿼리 모니터링 - AWS CloudWatch https://porolog.tistory.com/53 DB Bulk Insert, Jmeter 부하테스트 안녕하세요, 오늘은 Issue Tracker 프로젝트를 진행하면서 10만건 이상의 데이터에서 비정상적으로 느린 API 응답을 어떻게 개선했는지 기록을 porolog.tistory.com 슬로우 쿼리 개선하기 이전 포스팅에서 슬로우 쿼리를 AWS CloudWatch를 통해서 로깅하도록 설정해보았습니다. 이번에는 로그된 슬로우 쿼리를 확인하고 개선해보겠습니다. 저번 포스팅의 로깅을 통해서 슬로우 쿼리를 찾았습니다. 놀랐던 점은 저는 당연히 아래 쿼리의 페이지네이션, 필터로 이슈 목록을 조회하는 쿼..
슬로우 쿼리 모니터링 - AWS CloudWatch https://porolog.tistory.com/53 DB Bulk Insert, Jmeter 부하테스트 안녕하세요, 오늘은 Issue Tracker 프로젝트를 진행하면서 10만건 이상의 데이터에서 비정상적으로 느린 API 응답을 어떻게 개선했는지 기록을 공유하고자 포스팅을 작성합니다. Spring Data JDBC로 Bulk I porolog.tistory.com 저번 포스팅에서 메인 페이지의 GET 요청을 보냈을 때 200회의 요청을 보내면 평균적으로 36초의 시간이 걸리는 것을 확인했습니다. JDBC Connection Timeout이 발생하여, DB에서의 슬로우 쿼리 발생을 원인으로 추정하였는데요. 이번 포스팅에서는 AWS CloudWatch로 슬로우 쿼리를 찾아보고 개선하는 과정을 기록해보겠습..
DB Bulk Insert, Jmeter 부하테스트 안녕하세요, 오늘은 Issue Tracker 프로젝트를 진행하면서 10만건 이상의 데이터에서 비정상적으로 느린 API 응답을 어떻게 개선했는지 기록을 공유하고자 포스팅을 작성합니다. Spring Data JDBC로 Bulk Insert하기 우선 부하 상황을 만들기 위해서 Spring Data JDBC로 Dummy Data를 Insert했습니다. 이 때, Spring Data JDBC의 saveAll 메서드는 기본적으로 객체 하나마다 개별적인 INSERT 쿼리를 실행합니다. 이는 saveAll 메서드가 객체 컬렉션의 각 요소를 개별적으로 처리하고 영속화하기 때문입니다. 각 객체는 개별적으로 삽입되며, 객체의 상태에 따라 개별적인 INSERT 쿼리가 생성됩니다. 객체마다 I/O가 실행되면 속도가 굉장히 느려..
MAC 주소와 ARP 프로토콜 MAC 주소란 무엇인가요? IP 주소와 비교하기 IP 주소와 MAC 주소는 공통적으로 네트워크에서 다른 장치를 식별하기 위한 주소라는 점에서는 공통적입니다. IP 주소 논리적 주소, 혹은 인터넷 프로토콜 주소라고 합니다. 네트워크 상에서 컴퓨터, 기타 디바이스를 식별하는 고유 주소입니다. MAC주소와 차이점은 물리적 주소가 아니기 때문에 IP 주소에 연결된 네트워크 하드웨어는 언제든지 변경될 수 있습니다. IP주소는 IPv4와 IPv6 방식이 있는데, 일반적으로 사용되는 IPv4는 32비트 주소로 255.255.255.255와 같이 표현됩니다. IP주소는 인터넷이나 로컬 네트워크와 같은 네트워크를 통해 데이터 패킷이 올바른 목적지 네트워크에 도달하게 하는 라우팅 역할을 수행합니다. MAC 주소 물리적 주..
Lock을 이용한 동시성 제어 및 2PL(two phase locking) 안녕하세요. 오늘은 데이터베이스에서의 Lock에 대해 이야기하려 합니다. 여기서는 Lock의 종류, 호환성, 그리고 두 번째로도 Lock을 사용하면서 발생할 수 있는 이상현상에 대해 알아보겠습니다. 또한, 이러한 문제를 해결하기 위한 방법 중 하나인 2PL Lock에 대해서도 자세히 알아보겠습니다. Lock의 종류 데이터베이스에서 Lock은 데이터의 동시 접근을 관리하고, 데이터의 일관성을 유지하기 위해 사용됩니다. 다음은 데이터베이스에서 사용하는 Lock의 주요한 두 가지 종류입니다. Shared Lock (S-Lock, 혹은 Read Lock): 이 Lock은 데이터를 읽는 작업(read)에 사용됩니다. Shared Lock을 설정한 트랜잭션은 데이터를 읽을 수 있지만, 변경할 수는 없습니다. 변경을..