분류 전체보기 (69) 썸네일형 리스트형 NIO(New I/O)와 Webflux 비동기 프로그래밍 Java의 New Input/Output을 사용해보며 대규모 처리에서 중요한 개념이라고 생각되어 이를 소개합니다. 1. NIO는 어떤것이고 왜 사용하는가NIO가 등장하기 이전에 사용된던 방식은 Blocking I/O입니다.글에서는 편하게 과거 방식의 Blocking I/O 를 BIO 라고 부르겠습니다. BIO에서는 클라이언트당 하나의 스레드를 할당해야 하며, 클라이언트가 많아질 경우 OOM(Out Of Memory)이 발생하거나 과도한 context switching 등의 문제가 발생합니다. 예를 들어, 하나의 스레드를 생성하는 데 약 1MB의 메모리가 필요하다고 가정하면,10,000명의 클라이언트 요청을 동시에 처리할 경우 10GB의 메모리가 필요합니다. 이를 해결하기 위해 2002년 Sun Micro.. WebFlux의 기본 개념 (Event Loop, Lazy Evaluation, publish-subscribe) 이 글은 Netty + WebFlux가 작동하는 방식에 대한 기본 개념들을 설명합니다. Netty + WebFlux의 특징을 보면 적은 리소스로 많은 사용자의 동시 요청을 받을 수 있고,I/O 작업이 많은 경우 더 효율적입니다. Spring WebFlux는 "비동기", "논블로킹", "리액티브 스트림" 이라는 용어로 소개되지만, 처음 접할때는 다소 복잡하게 느껴질 수 있습니다. 그런데 WebFlux의 구조는 아래 개념만 알고있으면 사실 크게 복잡하지 않습니다.이벤트 루프지연 평가구독-발행 이벤트 루프이벤트 루프는 하나의 스레드가 반복적으로 이벤트를 감지하고, 이를 순차적으로 처리하는 실행 모델입니다 Java 개발자가 이해하기 쉽도록 코드로 표현하면 아래 코드와 같습니다.void eventWorker() .. Java Stream API의 핵심 개념과 병렬 처리의 함정 Java 8에 도입된 Stream API는 반복문 위주의 명령형 코드를 선언형 스타일로 바꾸고,더 나아가 병렬 처리를 손쉽게 구현할 수 있도록 도와주는 강력한 도구입니다. 이 글에서는 기본적인 사용법은 다루지 않고,실무에서 주의해야 할 핵심 개념들과 병렬 처리 시 발생할 수 있는 문제들에 대해 정리해보려 합니다. 1. Java Stream API가 무엇인지?Stream API는 2014년 4월, Java 8과 함께 등장한 기능으로, 컬렉션 또는 배열 데이터를 데이터 흐름(stream) 형태로 처리할 수 있게 합니다. 기존에는 for/while 루프를 사용해 명시적으로 데이터를 처리했다면,Stream은 데이터 처리 과정을 선언적으로 구성할 수 있습니다. 이를 통해 가독성이 좋아지고, 병렬 처리도 간결하게 .. 예외 처리 전략 현대의 소프트웨어 시스템은 동기·비동기, 단일·분산 아키텍처 등 다양한 형태로 구성됩니다. 이러한 환경에서 예외 처리 전략을 잘 수립하는 것은 시스템 안정성과 유지보수성을 결정짓는 핵심 요소입니다. 이 글에서는 Service Layer(비즈니스 로직 계층)에서 예외를 어떻게 설계하고 던질지, 그리고 REST API, 비동기(이벤트 기반) 아키텍처에서 예외를 어떻게 표현/처리할지를 단계별로 정리합니다. 1. 예외 계층 구조 설계1.1 예외 분류 예시RuntimeException├── BusinessException // 도메인 비즈니스 규칙 위반├── ValidationException // 입력값 검증 실패├── AuthenticationException // 인.. 선착순 이벤트 아키텍처 구성 선착순 이벤트 인프라 아키텍처를 구성해보겠습니다. 선착순 이벤트는 짧은 시간에 많은 트래픽이 몰리고, 정확한 수량만큼만 제공되어야 합니다.수량이 초과되면 마케팅 비용의 손실이 발생할 수 있고, 많은 트래픽으로 인해 서버가 다운될 수 있어 다음 조건에 맞춰 아키텍처를 구성해야 합니다. 여기서는 백엔드 이벤트 API 서버를 중점으로 설명합니다. 이벤트를 설계하기 위한 조건은 아래와 같습니다.이벤트 수량을 정확히 제한해야 합니다.높은 트래픽에서도 빠른 응답 속도를 유지해야 합니다. 이 글에서는 인프라 아키텍처를 먼저 소개한 뒤, 서비스 구성을 설명하겠습니다. 작업 절차쿠폰 발급 이벤트를 예시로, 처리 절차는 다음과 같습니다.사용자의 쿠폰 발급 요청을 받습니다.중복 없이, 정해진 수량 내에서 쿠폰을 발행합니다... Java 에서의 데이터 입출력(I/O), Byte Stream 자바에서 입출력(I/O)은 생각보다 매우 단순합니다. 네트워크든 파일이든 결국 하나의 입구(InputStream)와 하나의 출구(OutputStream)로 통일됩니다.InputStream과 OutputStream은 바이트 스트림으로이 글에서는 특히 자주 사용되는 Socket과 File입출력을 중심으로 Java의 I/O 구조를 쉽게 살펴보겠습니다. InputStream과 OutputStream 바이트 스트림자바의 I/O 핵심은 InputStream과 OutputStream입니다. 이들은 모든 바이트 스트림의 최상위 추상 클래스이며, 데이터를 읽거나 쓸 수 있는 공통 메서드를 제공합니다.InputStream: 데이터 입력(읽기, 수신)을 위한 스트림OutputStream: 데이터 출력(쓰기, 송신)을 위한 .. CDN 이란? 글로벌 서비스 캐싱 전략 CDN(Content Delivery Network)는 사용자와 서버가 물리적으로 멀리 떨어진 경우 발생하는 응답 속도의 한계를 극복하기 위해 고안된 서비스입니다. 왜 CDN이 필요한가?만약 한국의 사용자가 미국에 위치한 서버에서 동영상 스트리밍 서비스나 고화질 이미지를 요청할 경우, 아무리 서버에서 고성능의 캐싱 전략을 사용하여 즉시 응답하더라도 물리적인 거리로 인해 필연적으로 지연이 발생합니다. 이러한 지연 문제를 해결하기 위해 등장한 서비스가 바로 CDN이며, CDN은 사용자의 요청을 빠르게 처리할 수 있도록 사용자 가까이에 위치한 Edge 서버를 활용합니다. CDN의 동작 방식사용자의 요청은 가장 가까운 Edge 서버로 전달됩니다.Edge 서버가 정적 리소스(js, css, 이미지 등)를 캐싱하고.. Spring Security 없이 OAuth2 클라이언트 직접 구현 OAuth2 인증 절차OAuth2 클라이언트를 Spring Boot 만 사용하여 구현해보겠습니다.Spring Security 없이, 순수 HTTP 통신과 세션 기반으로 인증 흐름을 직접 설계함으로써OAuth2의 내부 동작을 보다 깊이 있게 이해해보는 것이 목적입니다. 매우 간단합니다. 깃허브에서 전체 코드 확인하기:https://github.com/youseonghyeon/oauth2-client GitHub - youseonghyeon/oauth2-client: oauth2-client 구현을 위한 리포지토리oauth2-client 구현을 위한 리포지토리. Contribute to youseonghyeon/oauth2-client development by creating an account on Gi.. 이전 1 2 3 4 ··· 9 다음