I/O 활용 – 회원 관리 시스템
자바의 다양한 I/O 방식을 활용해 실무에서 가장 기본이 되는 회원 관리 시스템을 단계별로 구축해본다. 단순히 데이터를 저장하는 것을 넘어, 어떻게 하면 더 효율적이고 객체지향적으로 데이터를 관리할 것인가?에 초점을 맞춰본다 도메인 모델 설계 – Member와 Interface 모든 저장소 구현체는 MemberRepository 인터페이스를…
자바의 다양한 I/O 방식을 활용해 실무에서 가장 기본이 되는 회원 관리 시스템을 단계별로 구축해본다. 단순히 데이터를 저장하는 것을 넘어, 어떻게 하면 더 효율적이고 객체지향적으로 데이터를 관리할 것인가?에 초점을 맞춰본다 도메인 모델 설계 – Member와 Interface 모든 저장소 구현체는 MemberRepository 인터페이스를…
핵심 원칙 Java I/O를 이해하는 데 필요한 단 하나의 대원칙이 있다. 모든 데이터는 반드시 바이트(byte)단위로 저장된다. 문자를 직접 저장할 수 없다. 이 원칙 하나를 확실히 이해하려면 이후 나오는 모든 내용이 자연스럽게 풀린다 문자 다루기 1 – 직접 인코딩/디코딩 스트림은 바이트만…
실험 환경 공통 상수 정의 성능 비교 예제에서 공통으로 사용할 상수를 정의 예제 1 – 1바이트씩 읽고 쓰기 (기준점) 쓰기 읽기 왜 이렇게 느릴까? 예제 2 – 버퍼를 직접 활용한 읽고 쓰기 쓰기 읽기 예제1 대비 약 1,000배 정도 성능…
스트림(Stream)의 개념 자바에서 외부 데이터와의 입출력은 스트림(Stream)을 통해 이루어진다. 스트림은 데이터의 흐름을 나타내는 추상화된 개념으로 파일, 네트워크, 콘솔 등 다양한 입출력 작업을 일관된 방식으로 처리할 수 있게 해준다 스트림의 방향성 스트림은 단뱡향이다 따라서 양방향 통신을 위해서는 입력과 출력 스트림을 각각…
실무에서 스레드 풀이 포화 상태가 되면 어떻게 대응할지 정책을 정해야 한다. ThreadPoolExecutor는 4가지 기본 거절 정책을 제공하며, 커스텀 정책도 구현 가능하다 거절 정책이 필요한 이유 거절 상황 거절 발생 조건 대응 필요성 RejectedExecutionHandler 인터페이스 모든 거절 정책의 기반 동작 방식…
실무에서는 트래픽 패턴에 맞는 적절한 스레드 풀 전략을 선택해야 한다. Java는 Executors를 통해 세 가지 기본 전략을 제공하며, 각각 장단점이 명확하다 기본 전략 개요 단일 스레드 풀 (Single Thread Pool) 특징 고정 풀 전략 (Fixed Thread Pool) 핵심 특징 동작…
실무에서 대량의 요청을 효율적으로 처리하려면 스레드 풀의 동작 원리를 정확히 이해해야 한다. ThreadPoolExecutor 핵심 파라미터 파라미터 설명 초과 스레드 (Excess Thread) 스레드 풀 동작 원리 작업 처리 우선순위 처리 순서 단계별 실행 분석 핵심 메커니즘 스레드 생성 전략 왜 큐가…
우아한 종료란? 서버 애플리케이션을 운영하다 보면 업데이트나 유지보수를 위해 서버를 재시작해야 하는 상황이 발생한다. 이 때 처리 중인 작업을 중단 없이 완료한 후 종료하는 것이 중요하다 문제 상황 예시 이상적인 종료 프로세스 이러한 종료 방식을 우아한 종료 (Graceful Shutdown)라고 한다…
실전 예제로 보는 Future Runnable 방식의 한계 전통적인 Runnable 방식으로 1부터 100까지의 합을 병렬 처리해본다 Runnable 방식의 문제점 Callable과 Future로 개선 같은 작업을 Callable과 Future로 구현 개선된 점 💡 핵심: 마치 단일 스레드에서 일반 메서드를 호출하는 것처럼 느껴진다 Future가 필요한…
Runnable의 한계를 극복하고 반환 값을 받을 수 있는 Callable과 Future에 대해 알아본다 Runnable의 한계 기존 Runnable 인터페이스를 살펴본다 Runnable은 다음과 같은 명확한 한계가 있다 반환 값이 없음 예외 처리의 제약 자식은 부모의 예외 범위를 넘어설 수 없기 때문이다 💡 참고:…