본문 바로가기

전체 글88

스프링에서 외부 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.
스프링 이벤트(Spring Event) 사용해보기 스프링 이벤트를 사용하면 관심사를 분리하고 패키지 간의 의존성을 줄일 수 있습니다. 개인 프로젝트를 진행하면서 이래저래 사용하고 있어 짤막하게 정리해보려고 합니다. 1. 스프링 이벤트 개요 다음의 내용은 스프링 공식 문서 Standard and Custom Events 항목의 소개를 번역한 것입니다. ApplicationContext의 이벤트 핸들링은 ApplicationEvent 클래스와 ApplicationListener 인터페이스를 통해 제공됩니다. ApplicationListener 인터페이스를 구현하는 bean이 컨텍스트를 통해 배포되면 ApplicationEvent가 컨텍스트에 발행될 때마다 bean이 알림을 받습니다. 이는 표준 옵저버 디자인 패턴입니다. 스프링 이벤트의 발행은 이벤트를 발행.. 2024. 2. 12.