분류 전체보기
-
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 코어 수)┌─────┐┌─────┐┌..
-
Python 2.7에서 'ascii' codec can't encode characters 에러 해결하기Language/Python 2025. 12. 29. 11:56
Python 2.7로 한글이 포함된 코드를 작성하다 보면 한 번쯤 마주치게 되는 에러가 있습니다.UnicodeEncodeError: 'ascii' codec can't encode characters오늘은 이 에러가 왜 발생하는지, 그리고 어떻게 해결할 수 있는지 알아보겠습니다.원인: Python 2.7의 두 가지 문자열 타입Python 2.7에서는 문자열 타입이 2가지로 나뉩니다.타입설명예시str바이트 문자열 (기본값, ASCII만 지원)'hello'unicode유니코드 문자열 (한글 등 지원)u'안녕하세요''안녕하세요' # str 타입 - 실제로는 UTF-8 바이트u'안녕하세요' # unicode 타입겉보기엔 비슷해 보이지만, 내부적으로는 완전히 다른 방식으로 처리됩니다.에러 발생 시점문제는 s..
-
아이폰 "앱 추적 허용" 팝업, 도대체 뭘 추적한다는 걸까?IT/issue 2025. 12. 23. 11:44
들어가며아이폰을 쓰다 보면 앱을 처음 실행할 때 이런 팝업을 자주 본다."Instagram이 다른 회사의 앱 및 웹사이트에서 회원님의 활동을 추적하도록 허용하겠습니까?""추적"이라니, 뭔가 무섭게 들린다. 대부분 그냥 "앱에게 추적 금지 요청"을 누르고 넘어가는데, 정확히 뭘 추적한다는 걸까? 허용하면 어떻게 되고, 금지하면 뭐가 달라지는 걸까?이게 뭐야? Apple ATTATT (App Tracking Transparency)는 iOS 14.5 (2021년)부터 도입된 Apple의 앱 추적 투명성 정책이다.핵심은 간단하다.앱이 다른 앱이나 웹사이트에서의 활동을 추적하려면 반드시 사용자 동의를 받아야 한다."추적"이 정확히 뭔데?여기서 말하는 추적은 IDFA를 이용한 크로스앱 추적이다.IDFA란?Iden..
-
웹사이트는 쿠키로 내 정보를 어떻게 추적할까? (코드 예제로 알아보기)Web 2025. 12. 23. 11:15
웹사이트는 쿠키로 내 정보를 어떻게 추적할까? (코드 예제로 알아보기)들어가며이전 글에서 웹사이트마다 "쿠키 허용" 팝업이 뜨는 이유에 대해 알아봤다. 쿠키를 통해 방문 기록, 관심사, 구매 패턴 등을 수집할 수 있다고 했는데, 구체적으로 어떻게 저장되는 걸까?이번 글에서는 실제 코드 예제를 통해 쿠키가 어떻게 사용자 정보를 저장하고 추적하는지 알아보자.쿠키의 기본 원리쿠키 자체는 그냥 작은 텍스트 파일이다. 쿠키가 직접 뭔가를 추적하는 게 아니라, 웹사이트의 JavaScript 코드가 사용자 행동을 감지하고 쿠키에 저장하는 구조다.[사용자가 페이지 방문] ↓[웹사이트 JS 코드가 행동 감지] ↓[쿠키에 데이터 저장] ↓[다음 방문 시 쿠키 읽어서 분석] ..
-
요즘 웹사이트마다 뜨는 "쿠키 허용" 팝업, 대체 왜 뜨는 걸까?IT/issue 2025. 12. 23. 11:01
들어가며 요즘 웹사이트에 접속하면 꼭 한 번씩 마주치는 게 있다."이 웹사이트는 쿠키를 사용합니다. 동의하시겠습니까?" 예전엔 없던 것 같은데, 언제부터인가 거의 모든 사이트에서 이 팝업이 뜨기 시작했다. 그냥 귀찮아서 "모두 허용" 누르고 넘어가는 경우가 대부분인데, 문득 궁금해졌다. 도대체 왜 이런 팝업이 뜨는 걸까?결론부터 말하면, 법 때문이다 2018년 유럽연합(EU)에서 GDPR(일반개인정보보호법)이 시행되면서 전 세계적으로 쿠키 동의 팝업이 확산되었다. GDPR의 핵심은 간단하다."사용자의 개인정보를 수집하려면, 반드시 사전에 동의를 받아야 한다." 그리고 쿠키는 개인정보 수집 수단에 해당한다.쿠키가 왜 개인정보인가? 쿠키는 단순히 로그인 유지용으로만 쓰이는 게 아니다. 쿠키를 통..