노트북으로 홈서버 구축하기 - 직접 만든 컨테이너 대시보드 (Spring Boot + React + SSE) (12편)

왜 직접 만들었나 Portainer가 있는데 굳이 만든 이유는 단순하다. 그냥 만들어보고 싶었다. Portainer는 기능이 너무 많다. 나는 컨테이너 목록 확인, 시작/중지/재시작, 로그 보기 딱 세 가지만 필요했다. 이 정도면 직접 만들 수 있겠다 싶어서 Spring Boot 백엔드 + React 프론트엔드로 구성했다. 완성 화면 컨테이너 목록을 카드 UI로 표시 (상태별 색상 배지) Start / Stop / Restart 원클릭 제어 Logs 버튼으로 실시간 로그 스트리밍 (SSE) 5초 주기 자동 갱신 ...

April 3, 2026 · 5 min · 978 words · Chanyeol

Java Stream API 실전 가이드 — filter, map, reduce 완벽 정리

1. 서론: 명령형에서 선언형으로의 전환 Java 8에서 도입된 Stream API는 자바 프로그래밍 패러다임을 획기적으로 바꾸어 놓았습니다. 기존의 for, while 루프를 사용한 명령형(Imperative) 방식은 “어떻게(How)” 동작하는지에 집중했다면, 스트림은 선언형(Declarative) 방식으로 “무엇을(What)” 할 것인지에 집중합니다. 스트림을 사용하면 코드의 가독성이 높아지고, 병렬 처리를 쉽게 적용할 수 있으며, 복잡한 데이터 처리를 간결한 체이닝으로 해결할 수 있습니다. 이번 가이드에서는 가장 핵심적인 연산인 filter, map, reduce를 중심으로 실무 활용법을 알아봅니다. 2. 스트림의 핵심 연산 3종 세트 2.1. filter: 조건에 맞는 데이터 선별 filter는 스트림의 요소 중 특정 조건(Predicate)을 만족하는 요소만 남기는 중간 연산입니다. ...

March 17, 2026 · 2 min · 416 words · Chanyeol

Tomcat JVM 힙 메모리(Heap Memory) 최적화 설정 가이드

서론 Tomcat 기반의 Java 애플리케이션을 운영하다 보면 가장 빈번하게 발생하는 장애 중 하나가 바로 OutOfMemoryError입니다. 서버의 물리적 메모리가 충분하더라도 JVM에 할당된 메모리가 적절하지 않으면 서비스는 쉽게 멈출 수 있습니다. 이번 포스팅에서는 실무에서 필수적인 JVM 메모리 설정 파라미터를 정리합니다. 1. 힙 메모리(Heap Memory) 핵심 설정 힙 메모리는 객체가 생성되고 상주하는 공간입니다. 가장 중요한 두 가지 설정은 -Xms와 -Xmx입니다. -Xms: JVM이 시작될 때 할당하는 초기 힙 크기입니다. -Xmx: JVM이 가질 수 있는 최대 힙 크기입니다. 실무 권장 설정 (setenv.sh) Tomcat의 bin/setenv.sh(윈도우는 setenv.bat) 파일을 생성하거나 수정하여 설정합니다. ...

February 23, 2026 · 2 min · 240 words · Chanyeol

Tomcat 성능 튜닝의 핵심: maxThreads, maxConnections, acceptCount 완벽 이해

서론 대규모 트래픽이 발생하는 환경에서 WAS(Tomcat)가 응답하지 않거나 속도가 급격히 느려진다면, 가장 먼저 의심해야 할 곳은 쓰레드 풀(Thread Pool) 설정입니다. Tomcat의 server.xml에서 설정하는 세 가지 핵심 파라미터의 관계를 정확히 이해해야 서비스 장애를 예방할 수 있습니다. Tomcat 요청 처리의 3단계 레이어 1. acceptCount (대기열 크기) 모든 쓰레드가 사용 중일 때, 운영체제(OS) 수준에서 요청을 대기시킬 큐의 크기입니다. 이 큐마저 가득 차면 클라이언트는 Connection Refused 에러를 받게 됩니다. 실무 팁: 너무 크게 설정하면 클라이언트는 타임아웃에 걸릴 때까지 하염없이 기다리게 되므로 적절한 제한이 필요합니다. 2. maxConnections (최대 연결 수) Tomcat이 동시에 유지할 수 있는 최대 네트워크 연결 수입니다. 쓰레드 수보다 훨씬 크게 설정하여(NIO 방식), 실제 처리 중이지 않은 연결도 잠시 붙들어 둘 수 있습니다. ...

February 23, 2026 · 2 min · 267 words · Chanyeol

Spring Boot @Async로 비동기 처리 구현하기: 서비스 응답 속도 개선

서론 사용자가 요청을 보냈을 때 이메일 발송, 리포트 생성, 외부 API 호출 등 시간이 오래 걸리는 작업이 포함되어 있다면 응답 속도가 느려질 수밖에 없습니다. 이럴 때 **비동기 처리(Asynchronous Processing)**를 도입하면, 핵심 로직만 즉시 응답하고 무거운 작업은 백그라운드에서 실행하여 사용자 경험을 크게 향상시킬 수 있습니다. @Async 활성화 및 설정 Spring Boot에서 비동기 기능을 사용하려면 먼저 @EnableAsync 설정을 추가해야 합니다. 1. 비동기 설정 클래스 기본 ThreadPool 대신 커스텀 설정을 통해 안정성을 확보하는 것이 좋습니다. ...

February 23, 2026 · 2 min · 241 words · Chanyeol
1