
이 글에서는 시스템 실행 중 성능을 향상시키기 위해 데이터를 캐싱하는 몇 가지 기술을 살펴보겠습니다. 일반적으로 계산하는 데 시간이 오래 걸리는 값을 캐싱하면 나중에 액세스할 때 시간을 절약할 수 있습니다. 캐싱되는 값은 자주 변경되지 않거나, 최신 버전이 필요하지 않은 경우가 많습니다.Spring Boot에서 캐싱Spring Boot REST API에서 캐싱을 활성화하는 가장 간단한 방법은 애플리케이션에 설정하고, 엔드포인트에 @Cacheable 어노테이션을 사용하는 것입니다.애플리케이션에서 다음과 같이 @EnableCaching 어노테이션을 추가하기만 하면 됩니다.@SpringBootApplication@EnableCachingpublic class SpringBootCachingApplication..

Python은 그 단순함, 가독성, 그리고 방대한 라이브러리 생태계 덕분에 매우 유용한 언어입니다. 많은 개발자들이 NumPy, pandas, requests, Flask와 같은 유명한 라이브러리에 익숙하지만, 그 외에도 생산성을 높이고 특정 문제를 더 효율적으로 해결할 수 있는 덜 알려진 라이브러리들이 많이 존재합니다. 이러한 라이브러리들은 잘 알려진 라이브러리들에 비해 덜 주목받지만, 작업을 단순화하고, 워크플로를 최적화하며, 프로젝트에 혁신을 가져올 수 있는 독특한 기능들을 제공합니다. Python에는 매우 유용하지만 널리 알려지지 않은 라이브러리들이 많이 있습니다. 이러한 라이브러리는 반복 작업을 자동화하고, 데이터를 더 효율적으로 처리하며, 적은 코드로 강력한 애플리케이션을 구축하는 데 도움을 ..

극한의 애플리케이션에서 성능을 최적화해야 하는 문제에 직면한 Java 개발자라면, 이는 쉽지 않은 과제임을 잘 아실 것입니다. 이 글에서는 시스템 아키텍처를 그대로 유지하면서 약간의 코드 수정을 통해 성능을 향상시킬 수 있는 몇 가지 전략과 요령을 살펴봅니다.극한 상황이란 무엇인가요?이 글에서 '극한 상황'이란 반복적인 작업을 수행하거나 대량의 데이터를 처리해야 하는 애플리케이션을 의미합니다. 이러한 요구는 다양한 분야에서 흔히 발생합니다.금융 애플리케이션: 금융에서는 백그라운드 작업이 수백만에서 수십억 개의 레코드를 처리하는 일이 일반적입니다.머신 러닝: Java는 머신 러닝에 자주 사용되지는 않지만, 이러한 애플리케이션들은 대규모 데이터셋을 처리하는 경우가 많습니다.분석: 분석 애플리케이션은 대규모 ..
![[Spring Boot] 대용량 데이터 쿼리 REST 엔드포인트 처리](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckwuUr%2FbtsKDrZNShX%2FGLAzlu3tc0uZqvt2dUk0O1%2Fimg.png)
이 글에서는 메모리 소비 문제로 인해 기존 방식으로는 구현할 수 없는 REST 엔드포인트의 예를 살펴보겠습니다.시나리오이번 예제에서는 Customer, Order, OrderItem, 그리고 Product로 구성된 간단한 시나리오를 사용합니다.우리의 목표는 보고서를 생성하는 엔드포인트를 만드는 것입니다. 이 엔드포인트는 다음 데이터를 쿼리하고 반환해야 합니다.백만 개의 주문(Orders)500만 개 이상의 주문 항목(OrderItems)기존 구현몇 가지 필드를 가진 DTO를 정의해보겠습니다.@Datapublic class ReportDto { private final Long orderId; private final LocalDate date; private final String customerN..

스트림(Stream)은 여러 해 전 도입되었지만, Java 개발자들은 여전히 이 강력한 도구를 완전히 활용하지 못하고 있습니다. 이 글에서는 다음 프로젝트에 참고할 수 있는 유용한 스트림 활용 팁을 소개합니다. 아래 예제에서는 다음 클래스들을 사용할 것입니다.@Getterclass Company { private String name; private Address address; private List personList;}@Getterclass Person { private Long id; private String name;}@Getterclass Address { private String street; private City city;}@Getterclass City { privat..

머신 러닝은 방대한 분야이며, 현재 기술의 최전선에 있는 모델과 기법들을 개괄적으로 다룬 자료를 찾는 것이 어렵게 느껴질 수 있습니다. 따라서, 이 글에서는 각 모델을 과학적으로 분석하기보다는 개념적으로 탐구해보겠습니다. 각 모델에 대해 더 깊이 파고들기를 권장하며, 이론이 실무와 연결되어야 한다고 생각하기 때문에 실제 사용 예시도 제공하겠습니다. 만약 빠진 정보가 있다면 피드백을 주시고, 추가 정보를 요청해주세요. 시작하기 전에 다룰 모델 목록은 다음과 같습니다.CNN (Convolutional Neural Networks)RNN (Recurrent Neural Networks)TransformersGAN (Generative Adversarial Networks) CNN (합성곱 신경망)CNN(Con..

시스템 설계 면접은 지원자가 확장 가능하고 효율적인 시스템을 만들 수 있는지를 검증하는 데 있어 항상 중요한 요소입니다. 주요 용어에 대한 지식은 면접에서 좋은 점수를 받는 데 도움이 될 것입니다. 아래는 반드시 알아야 할 시스템 설계 면접 용어 50가지에 대한 정의와 실제 예시시를 학습을 위한 추가 자료와 함께 설명합니다.1. Scalability정의: 리소스를 추가하여 증가하는 부하를 지원할 수 있는 시스템의 능력입니다.예시: 웹 트래픽 증가를 처리하기 위해 서버를 더 추가합니다.What is Scalability and How to Achieve it?2. Load Balancer(로드 밸런서)정의: 들어오는 네트워크 트래픽을 여러 서버로 분할하여 한 서버에서 많은 양의 부하를 처리하지 않도록 합니..

이 글에서는 모든 개발자가 반드시 알아야 할 다양한 C# 개념을 살펴봅니다. 코드 예제를 알고 이해한다면 .NET에서 꽤 잘하고 있는 것일 가능성이 높습니다.1. IEnumerable와 ICollection의 차이점C#으로 로직을 작성할 때 개발자는 IEnumerable와 ICollection를 자주 접하게 됩니다. 이 둘은 매우 비슷해 보이지만 소프트웨어 개발에서 서로 다른 용도로 사용됩니다.IEnumerable는 일반 컬렉션이 아닌 컬렉션의 기본 인터페이스 역할을 합니다. 정의된 유형의 컬렉션을 반복하는 데 도움이 됩니다.데이터 조작이 허용되지 않으므로 더 안전한 경량 컬렉션을 사용하는 것이 좋습니다. 데이터 조작을 방지하려면 어떤 컬렉션이든 IEnumerable을 사용하는 것이 좋습니다.IEnume..

최신 소프트웨어 개발에서 마이크로서비스, 클라우드 네이티브 아키텍처, 그리고 계속 증가하는 클라이언트 디바이스(모바일 앱, 웹 앱, IoT 등)로의 전환으로 인해 새로운 아키텍처 패러다임이 필요해졌습니다. 가장 두드러진 패턴 중 하나는 Backend for Frontend(BFF) 아키텍처입니다. 애플리케이션이 더욱 분산됨에 따라 빠르고 유지 관리가 용이하며 안전한 사용자 경험을 제공하기 위해 개별 고객의 요구에 맞게 백엔드 서비스를 맞춤화해야 할 필요성이 커지고 있습니다.Backend for Frontend(BFF) 아키텍처란 무엇인가요?Backend for Frontend의 핵심은 각 프런트엔드 인터페이스에 대한 전용 백엔드 계층을 제공하는 아키텍처 패턴입니다. 각 프런트엔드(예: 모바일 앱, 웹..
![[CORS] 간단하게 설명하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoJgNf%2FbtsKeP7qflX%2F3tMf9jqir1rlXa4a9b1goK%2Fimg.png)
아래의 내용을 본 적이 있나요? 아마도... 그리고 아마도 꽤 많이...봤을거에요.이 오류를 수정하는 방법을 설명하는 수백만 개의 문서가 있지만 "Cross-Origin Resource Sharing(CORS)"는 정확히 무엇이며 왜 존재하는 것일까요?왜??먼저 시나리오를 통해 그 이유에 대한 질문에 답하고 다양한 시점에 어떻게 작동하는지 살펴봅시다.뱅킹 서비스인 bank.com에 로그인한다고 상상해 보세요. 로그인하면 '세션 쿠키(Session Cookie)'가 브라우저에 저장됩니다. (세션 쿠키는 기본적으로 bank.com 뒤에 있는 서버에 브라우저가 계정에 로그인했음을 알려줍니다). 앞으로 bank.com에 대한 모든 요청에는 이 쿠키가 포함되며, bank.com은 사용자가 로그인한 것을 알고 제대..