본문 바로가기

분류 전체보기89

[MySQL] MySQL 엔진 아키텍처 MySQL 스레딩 구조MySQL 서버는 스레드 기반으로 작동하며, 포그라운드(Foreground)와 백그라운드(Background) 스레드로 구분할 수 있습니다.포그라운드 스레드(클라이언트 스레드)포그라운드 스레드는 최소한 MySQL 서버에 접속된 클라이언트의 수만큼 존재하며, 각 클라이언트가 요청하는 쿼리 문장을 처리합니다. 클라이언트가 작업을 마치고 커넥션을 종료하면 스레드는 스레드 캐시(Thread cache)로 돌아갑니다.스레드 캐시에 일정 개수 이상의 대기 중인 스레드가 있으면 스레드를 종료시켜 일정 개수의 스레드만 유지합니다. 스레드 캐시에 유지할 수 있는 최대 스레드 개수는 thread_cache_size 시스템 변수로 결정합니다.포그라운드 스레드는 데이터를 MySQL의 데이터 버퍼나 캐시로.. 2024. 6. 9.
스프링에서 외부 API 호출을 테스트하는 방법(feat. RestClient) RestClient는 Spring 6.1 버전부터 추가된 동기식 HTTP 클라이언트로 기존의 동기식 HTTP 클라이언트인 RestTemplate에 비해 훨씬 더 현대적인 API를 제공합니다.RestClient의 테스트 방법을 찾던 중 유효하게 사용할 수 있는 두 가지 방법에 대해 알게 되어 기록합니다. @RestClientTest@RestClientTest를 사용하면 Jackson, GSON 등의 클라이언트 테스트와 관련된 bean 구성만 적용하여 최소한의 컨텍스트로 테스트가 실행됩니다.이 때, 테스트를 위해 사용하는 MockRestServiceServer와 RestClient가 바인드되어야 하기 때문에 RestClient를 사용하는 bean은 생성자에서 RestClient.Builder를 파라미터로 .. 2024. 5. 20.
[MySQL] 옵티마이저의 데이터 처리 방식 MySQL은 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장되어 있는지 통계 정보를 참조합니다. 그러한 기본 데이터를 비교해 최적의 실행 계획을 수립하는 작업이 필요합니다.쿼리 실행 절차MySQL 서버에서 쿼리가 실행되는 과정은 크게 세 단계로 나누어질 수 있습니다.사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MySQL 서버가 이애할 수 있는 수준으로 분리(파스 트리)한다.SQL의 파싱 정보(파스 트리)를 확인하면서 어떤 테이블부터 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선택한다.두 번째 단계에서 결정된 테이블의 읽기 순서나 선택된 인덱스를 이용해 스토리지 엔진으로부터 데이터를 가져온다.이 중 두 번째 단계가 "최적화 및 실행 계획 수립" 단계로 옵티마이저가 처리합니다. 이 단.. 2024. 5. 15.
Java의 데이터 입출력 스트림 코딩 테스트 연습할 때를 제외하면 Java의 스트림을 이용하여 직접 입출력 코드를 작성하는 경우가 드물었던 것 같습니다. 그런만큼 Java의 스트림을 통한 데이터 입출력에 대해 리마인드하고 부족했던 부분이 있었다면 채워넣을 겸 정리하는 시간을 가져보려 합니다.입출력 스트림자바에서 데이터 입출력은 스트림을 통해서 이루어집니다. 스트림(stream)은 단방향으로 데이터가 흐르며 키보드, 파일, 프로그램 등 다양한 출발지로부터 입력되고 모니터, 파일, 프로그램 등 다양한 도착지로 출력됩니다.프로그램을 기준으로 데이터가 들어오는 것을 입력 스트림(InputStream), 데이터가 나가는 것을 출력 스트림(OutputStream)이라 합니다. 프로그램이 다른 프로그램과 데이터를 교환하기 위해서는 입력.. 2024. 4. 24.
SOLID 원칙 SOLID 원칙은 우리에게 좋은 소프트웨어 구조를 만들기 위한 원칙을 제공해줍니다. 클린 아키텍처에 따르면 SOLID 원칙의 목적은 중간 소프트웨어 구조가 다음과 같도록 만드는 데 있습니다. 변경에 유연하다. 이해하기 쉽다. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다. SOLID는 이를 구성하고 있는 다섯 가지 원칙의 첫 번째 글자들로 만든 단어입니다. 이는 다음과 같은 원칙들로 구성되어 있습니다. 단일 책임 원칙(Single Responsibility Principle, SRP) 각 소프트웨어 모듈은 오직 하나의 책임만 가져야 한다. 개방-폐쇄 원칙(Open-Closed Principle, OCP) 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 대해 열려 있어야 하고, 수정에.. 2024. 3. 23.
CORS는 왜 필요할까? CORS란 교차 출처 리소스 공유(Cross Site Resource Sharing, CORS)는 애플리케이션을 통합하기 위해 서로 다른 출처 간 요청을 허용하기 위한 메커니즘입니다. 기본적으로 모든 브라우저는 보안 상의 이유로 동일 출처 정책(SOP)을 구현하고 있으며 이로 인해 교차 출처 리소스 공유라는 별도의 메커니즘을 이용하여야 합니다. CORS는 웹 어플리케이션 개발자라면 기본적으로 숙지해야 하는 내용입니다. 왜 동일 출처의 요청만을 허용하게 되었는지, 다른 출처의 요청을 허용하기 위한 CORS의 기본 메커니즘이 어떻게 되는지 알아야합니다. 왜 다른 출처의 요청을 허용하지 않는가? 과거에는 프론트엔드, 백엔드의 구분 없이 요청을 처리하고 브라우저를 렌더링하였습니다. 시간이 흐르면서 프론트엔드와 .. 2024. 3. 17.