Server/Spring Boot
-
Spring WebClient와 버추얼 스레드, 어떻게 조합할까?Server/Spring Boot 2026. 1. 9. 16:04
Spring WebClient와 버추얼 스레드, 어떻게 조합할까?Spring에서 HTTP 클라이언트를 선택할 때 고민이 많다. RestTemplate은 deprecated 예정이고, WebClient는 리액티브라 러닝 커브가 있다. 그런데 Java 21 버추얼 스레드가 등장하면서 판도가 바뀌었다.이 글에서는 RestTemplate, WebClient, RestClient를 비교하고, 버추얼 스레드 환경에서 어떤 선택이 최선인지 정리한다.HTTP 클라이언트 3종 비교RestTemplate (레거시)@Service@RequiredArgsConstructorpublic class UserService { private final RestTemplate restTemplate; public UserR..
-
Spring Boot 3.x에서 @Async와 버추얼 스레드 조합하기Server/Spring Boot 2026. 1. 9. 15:57
기존 @Async는 플랫폼 스레드 풀을 사용한다. 동시 요청이 많아지면 스레드 고갈 문제가 발생하고, 풀 사이즈를 늘리면 메모리 부담이 커진다. Java 21의 버추얼 스레드를 @Async와 조합하면 이 문제를 해결할 수 있다.이 글에서는 설정 방법부터 실무 적용 시 주의점까지 정리한다.배경 지식@Async 기본 동작@Async를 붙이면 해당 메서드는 별도 스레드에서 실행된다. 기본적으로 SimpleAsyncTaskExecutor를 사용하며, 보통은 ThreadPoolTaskExecutor로 커스터마이징해서 쓴다.버추얼 스레드 특징경량 스레드 (수십만 개 생성 가능)I/O 블로킹 시 자동으로 캐리어 스레드 반환JDK 21부터 정식 지원버추얼 스레드 원리에 대한 자세한 내용은 이전 글을 참고하자.설정 방법..
-
🏦 Spring Boot 대용량 트래픽 환경에서의 계좌 API 구현Server/Spring Boot 2026. 1. 5. 16:55
동시성 제어와 락(Lock) 전략을 활용한 안전한 금융 트랜잭션 처리📌 목차개요락(Lock)의 종류와 특징프로젝트 구조Entity 설계Repository 구현Service 구현Controller 구현DTO 클래스예외 처리테스트 코드정리개요금융 서비스에서 가장 중요한 것은 데이터 정합성입니다. 동시에 수천 명의 사용자가 같은 계좌에 접근하더라도 잔액이 절대 틀리면 안 됩니다.문제 상황 예시[시나리오] 잔액: 10,000원Thread A: 5,000원 출금 시도Thread B: 3,000원 출금 시도 (동시에)❌ 잘못된 결과: 둘 다 10,000원에서 차감 → 잔액 5,000원 또는 7,000원✅ 올바른 결과: 순차 처리 → 잔액 2,000원이런 Race Condition을 방지하기 위해 Lock(락) 메..
-
Java 21 버추얼 스레드 원리와 Spring Boot 설정 방법Server/Spring Boot 2026. 1. 5. 16:39
1. 버추얼 스레드란?Java 21에서 정식 도입된 경량 스레드입니다. 기존 플랫폼 스레드와 달리 JVM이 직접 관리하며, 메모리 사용량이 적고 수십만 개까지 생성할 수 있습니다.플랫폼 스레드 vs 버추얼 스레드구분플랫폼 스레드버추얼 스레드메모리1MB+수 KB동시 개수수백 개수십만 개관리 주체OSJVM스위칭 비용높음낮음2. 버추얼 스레드 동작 원리구조버추얼 스레드는 단독으로 실행되지 않습니다. 캐리어 스레드(플랫폼 스레드) 위에서 실행됩니다.버추얼 스레드 (수만 개 생성 가능)┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐...└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘ ↓ JVM 스케줄링캐리어 스레드 (기본값: CPU 코어 수)┌─────┐┌─────┐┌..
-
Spring Boot에서 많이 사용되는 View 엔진 추천 및 장단점Server/Spring Boot 2025. 4. 29. 23:21
Spring Boot를 사용할 때 프론트엔드를 구성하기 위해 View 엔진을 선택하는 경우가 많습니다. 이 글에서는 대표적인 View 엔진 4가지를 소개하고, 각각의 장단점을 정리해보겠습니다.1. Thymeleaf 설명: Spring 공식에서 권장하는 템플릿 엔진으로 HTML 친화적입니다. 장점: HTML 파일을 그대로 열어도 구조 확인이 쉬움 Spring과의 통합이 매우 뛰어남 (예: Spring EL 지원) 조건문, 반복문 등 표현식이 직관적 단점: 복잡한 로직을 처리하기엔 다소 제약이 있음 렌더링 속도가 JSP보다 느릴 수 있음 2. JSP (JavaServer Pages) 설명: 전통적인 Java 기반 웹 애플리..
-
자주 사용되는 디자인 패턴에 대해 알아보자 (springboot)Server/Spring Boot 2025. 4. 28. 17:44
Spring Boot 개발에서 꼭 알아야 할 디자인 패턴1. 싱글턴 패턴 (Singleton Pattern)싱글턴 패턴은 객체를 하나만 생성하여 모든 클라이언트가 동일한 인스턴스를 공유하도록 하는 패턴입니다. Spring에서는 주로 @Service, @Component, @Repository 등의 어노테이션을 사용하여 빈을 생성할 때 싱글턴을 기본으로 사용합니다.import org.springframework.stereotype.Service;@Servicepublic class SingletonService { private static SingletonService instance; private SingletonService() {} public static SingletonServ..
-
[Springboot] 인증(Authentication)과 인가(Authorization) 구분하기!Server/Spring Boot 2025. 4. 21. 17:42
✅ 인증(Authentication)과 인가(Authorization)의 차이📌 비유로 쉽게 이해하기회사 건물에 출입하는 상황을 떠올려 봅시다. 인증(Authentication): 당신이 누구인지 확인하는 것 👉 출입문에서 사원증을 찍고 "나는 홍길동입니다" 라고 밝히는 단계입니다. 즉, 아이디와 비밀번호로 본인을 증명하는 것입니다. 인가(Authorization): 당신이 무엇을 할 수 있는지 확인하는 것 👉 사원증을 찍었더니 5층까지는 출입 가능, 9층은 출입 불가라고 나옵니다. 즉, 인증된 사용자가 어떤 권한(Role)을 가지고 있는지에 따라 접근 제한됩니다. 🛠 Spring Boot에서 로그인과 토큰을 활용한 인증/인가 구현📍 사용 기술 Spring Boo..
-
[Springboot] SQL Injection 이란? 해결 방안은?Server/Spring Boot 2025. 4. 21. 17:28
🔐 SQL Injection이란?SQL Injection은 사용자의 입력값이 검증 없이 SQL 쿼리에 포함될 때 발생합니다...💥 SQL Injection 발생 예제 (Spring Boot)// 취약한 코드 예시@RestController@RequiredArgsConstructorpublic class UserController { private final JdbcTemplate jdbcTemplate; @GetMapping("/user") public String getUser(@RequestParam String username) { String sql = "SELECT * FROM users WHERE username = '" + username + "'"; ..