분류 전체보기
[Real MySQL] 5장. 인덱스
디스크 읽기 방식 CPU나 메모리와 같은 주요 장치는 ⇒ 전기적 장치 디스크 드라이브 ⇒ 기계식 장치 따라서 데이터베이스 서버에서는 항상 디스크 장치가 병목 지점이 된다. 데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건인 것들이 많음. 이러한 기계식 디스크 드라이브를 대체하기 위해 전자식 저장 매체인 SSD가 출시되고 있음. (SSD는 기존의 디스크 드라이브에서 데이터 저장용 플러터를 제거하고 플래시 메모리를 장착하고 있음) 랜덤 I/O와 순차 I/O 랜덤 I/O, 순차 I/O 모두 디스크 드라이버의 플래터를 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽는 것을 의미. 디스크에 데이터를 쓰고 읽는데 걸리는 시간은 디스크 헤더를 움직여서 읽고 쓸 위치로..
[스프링 인 액션 정리] 11-12 리액티브 API, 데이터 퍼시스턴스
동기 vs 비동기 웹 프레임워크 동기 웹 프레임워크 매 연결마다 하나의 스레드를 사용하는 스프링 MVC 같은 전형적인 서블릿 기반의 웹 프레임워크는 스레드 블로킹과 다중 스레드로 수행된다. 즉 요청이 처리될 때 스레드 풀에서 작업 스레드를 가져와서 해당 요청을 처리하며, 작업 스레드가 종료될 때 까지 요청 스레드는 블로킹된다. 따라서 블로킹 웹 프레임워크는 요청량의 증가에 따른 확장이 사실상 어렵다. 게다가 처리가 느린 작업 스레드로 인해 훨씬 더 심각한 상황이 발생한다. 해당 작업 스레드가 풀로 반환되어 또 다른 요청 처리를 준비하는 데 더 많은 시간이 걸리기 때문. 비동기 웹 프레임워크 비동기 웹 프레임워크는 더 적은 수의 스레드로 더 높은 확장성을 성취한다. 이벤트 루핑이라는 기법을 적용한 이런 프..
[Real MySQL] 4장. 트랜잭션과 잠금
트랜잭션 vs 잠금 트랜잭션 데이터의 정합성을 보장하기 위한 기능 논리적인 작업셋을 모두 완벽하게 처리하거나 처리하지 못할 경우 원 상태로 복구해서 작업의 일부만 적용되는 현상(Partial Update)이 발생하지 않게 만들어주는 기능. 잠금 동시성을 제어하기 위한 기능 여러 커넥션에서 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할 1. 트랜잭션 MySQL 스토리지 엔진별 트랜잭션 지원 스토리지 엔진 중 MyISAM, MEMOERY은 트랜잭션을 지원하지 않음. 반면 InnoDB는 트랜잭션을 지원함. (참고로 트랜잭션은 개발자를 괴롭히는 것이 아니라, 애플리케이션 개발에서 고민해야 할 문제를 엄청 줄여주는 천사 같은 기능이다) 트랜잭션 주의사항 트랜잭션의 범..
[스프링 인 액션 정리] 10장. 리액터 개요
애플리케이션 코드를 개발할 때는 명령형과 리액티브의 두 가지 형태로 코드를 작성할 수 있다. 명령형 코드 순차적으로 연속되는 작업 각 작업은 한 번에 하나씩 그리고 이전 작업 다음에 실행된다. 데이터는 모아서 처리되고 이런 작업이 데이터 처리를 끝낸 후에 다음 작업으로 넘어갈 수 있다. 리액티브 코드 데이터 처리를 위해 일련의 작업들이 정의되지만, 이 작업들은 병렬로 실행될 수 있다. 그리고 각 작업은 부분 집합의 데이터를 처리할 수 있으며, 처리가 끝난 데이터를 다음 작업에 넘겨주고 다른 부분 집합의 데이터로 계속 작업할 수 있다. 리액터 스프링 프로젝트의 일부분인 리액티브 프로그래밍 라이브러리. 리액터는 스프링 5에서 리액티브 프로그래밍을 지원하는 데 필요한 기반. 리액티브 프로그래밍 명령형 프로그래..
[스프링 인 액션 정리] 8장. 비동기 메시지 전송하기
8. 비동기 메시지 전송하기 REST를 사용한 동기화 통신이외에도 비동기 메시징을 통해 애플리케이션 간 통신할 수 있다. 비동기 메시징은 애플리케이션 간에 응답을 기다리지 않고 간접적으로 메시지를 전송하는 방법 비동기 메시징을 통해 통신하는 애플리케이션 간의 결합도를 낮추고 확장성을 높여준다. 비동기 메시징 종류 JMS RabbitMQ AMQP 아파치 카프카 EJB의 MDB(스프링의 메시지 기반 POJO 지원) 등이 있다. 메시지를 수신하는 방식 풀 모델 우리 코드에서 메시지를 요청하고 도착할 때까지 기다리는 방식 푸시 모델 메시지가 수신 가능하게 되면 우리 코드로 자동 전달하는 방식 두가지 모델 모두 용도에 맞게 사용할 수 있다. 그러나 스레드의 실행을 막지 않으므로 일반적으로 푸시 모델이 좋은 선택이..