[Spring] Master/Slave 읽기 분리는 왜 LazyProxy 위에서 동작해야 할까?
·
카테고리 없음
개요@Transactional(readOnly = true)를 붙이면 조회는 Slave로, 쓰기는 Master로 나가도록 DataSource를 라우팅하는 패턴은 널리 쓰입니다. 그런데 이 라우팅을 AbstractRoutingDataSource 만으로 구현하면 읽기 트랜잭션이 항상 Master로 가버리는 현상을 만나게 됩니다. 원인은 Spring 트랜잭션 매니저가 "커넥션을 빌리는 시점"과 "readOnly 플래그를 세팅하는 시점"의 순서에 있고, 이를 교정하는 장치가LazyConnectionDataSourceProxy입니다. Spring Framework + HikariCP + MyBatis 조합을 기준으로 설명하겠습니다.2. 배경 — Master/Slave 읽기 분리란쓰기 부하와 읽기 부하를 분리하기 ..
[TIL] EHcache 캐시 오염 트러블슈팅 - 캐시 객체
·
[TIL]
1. 개요이슈 예시운영자 A : ??님, 해당 광고는 A라는 광고 식별값이 내포되어있어야 하는데 B의 광고 식별값이 내포되어 있는게 발견됐습니다. 확인 가능하실까요?본인 : (테스트 후) 오잉? 아무리 봐도 흘러들어갈 문제가 없는데.. 도대체 어떻게 그 정보가 흘러 들어간거지? 확실한 결과값인가요?운영자 A : (일정 시간이 흐르고) 이번엔 D의 광고 식별값이 붙어나왔어요! 도대체 왜 이런거죠?본인 : ??? 문제가 확실해 보이니, 확인 한 번 해보겠습니다.개발 환경에서 아무런 문제가 없었던 특정 식별값 정보가, 일정 시간이 흐르고 운영 환경에서 잘못된 광고 식별값이 붙어 나온다는 아이러니한 상황을 마주했습니다.운영팀측의 세팅값에서도, 개발팀측의 로직상에서도 아무런 문제가 없었기 때문에 한참을 해맸으나,..
[TIL] Class 핫리로드와 톰캣의 오해 - 톰캣이 올라오고 class 파일을 교체해도 적용될까?
·
[TIL]
.class 핫 리로드 오해 트러블슈팅 — 톰캣이 아니라 별도 JVM이었습니다1. 개요 (Overview)이슈명운영 서버에서 .class 파일만 교체했는데 재시작 없이 반영되는 세팅 원인 추적문제 정의운영 중 배치 서버에서 .class 파일을 교체한 뒤, 톰캣을 재시작하지 않았는데도 배치 작업에서 변경 사항이 반영되는 현상이 관찰되었습니다. 처음에는 "톰캣이 핫 리로드를 지원하는 것인가?" 라고 추정했지만, 실제로 내부 프로젝트 설정에는 핫 리로드 관련 옵션이 활성화되어 있지 않았습니다. 이 문서는 왜 반영된 것처럼 보였는지를 추적하고, JVM 클래스 로딩 메커니즘에 대한 오해를 바로잡은 기록입니다.2. 문제 재현 및 로그 (Reproduction & Logs)재현 방법Tomcat이 구동 중인 서버에서 ..
[TIL] HTTP 커넥션 풀 고갈 트러블슈팅 - EntityUtils.consume()
·
[TIL]
HTTP 커넥션 풀 고갈 트러블슈팅 — EntityUtils.consume() 한 줄의 비밀1. 들어가기 전이슈 현상외부 API 장애 발생 시 Apache HttpClient 커넥션 풀이 빠르게 고갈되어, 정상 API 호출까지 연쇄적으로 실패하는 현상문제 정의외부 API 호출 코드에서 응답이 200일 때만 EntityUtils.toString() 으로 본문을 읽고, 비-200 응답에서는 본문을 읽지 않은 채 응답을 닫는 구조.이때, 외부 API가 일시적으로 5xx/4xx 응답을 반복적으로 반환하기 시작하자 짧은 시간 안에 커넥션 풀이 고갈되었고, 결국 장애와 무관한 다른 외부 API 호출까지 ConnectionPoolTimeoutException 으로 실패하는 연쇄 장애가 발생.2. 문제 재현 및 로그 ..
멀티태스킹 vs 멀티프로세싱 차이점은?
·
카테고리 없음
멀티태스킹 vs 멀티프로세싱 이해해보기개발을 하다 보면 '멀티태스킹'과 '멀티프로세싱'이라는 용어를 꽤나 자주 접하게 됩니다.두 개념 모두 여러 작업을 처리하는 방식이지만 실무에서 마주하는 성능 문제나 동시성 이슈를 해결하려면 이 둘의 차이를 명확히 알아야 합니다. 이번 글은 멀티태스킹/멀티 프로세싱의 좀 더 명확한 차이와 동시성까지의 이해도를 높이고자 작성했습니다.✅멀티태스킹과 멀티프로세싱의 핵심 차이멀티태스킹이란 무엇일까?멀티태스킹은 하나의 CPU가 여러 작업을 번갈아가며 처리하는 방식입니다. 실제로는 한 번에 하나씩 처리하지만, 작업을 매우 빠르게 교체하면서 실행하기 때문에 우리 눈에는 동시에 실행되는 것처럼 보입니다. (시분할 서비스) 일상에서 예를 들면 음악을 들으면서 문서를 작성하거나, 웹서핑..
2025년의 개발 인생 회고록 (feat.취업 준비와 신입의 삶)
·
[후기-회고]
나에게 있어서, 25년은? 나에게 25년은, 어쩌면 취업이라는 큰 목표를 이룰 수 있었던 한 해라고 말할 수 있을 것 같다. 24년 10월말. 부트캠프를 수료하고, 11월 부터 본격적인 백수의 신분으로 취업 준비가 시작되었고, 상반기까지 약 6개월간 진행되었다. 25년 4월. 운이 좋게도, 일평균 수억 건 규모의 트래픽을 처리하는 기업에 합류하며, Java 진영의 백엔드 개발자로 우당탕탕 신입 생활을 보내고 있다.무엇보다 좋은 팀원들과 사수들을 만났기 때문에 무사히 적응할 수 있었고, 크고 작은 성장을 지금까지 이루고 있다는 점이 가장 마음에 든다. 부트캠프를 수료하고, 본격적인 취업 준비.. (24.10 ~ 25.04)나의 취업 준비를 정의하자면, 수많은 스터디의 삶 이라고 정의 내릴 수 있을 것 같..
OS - 운영체제 정리 : 운영체제 역할, 커널, 이중 모드와 시스템 콜, 인터럽트
·
[CS]
✅운영체제란?운영체제(OS, Operating System)는 컴퓨터의 하드웨어를 동작시키고 관리하는 핵심 소프트웨어입니다. 우리가 일상적으로 사용하는 Windows, macOS, Linux 등이 모두 운영체제에 해당합니다. 여기서 핵심은, 운영체제 또한 일종의 소프트웨어이기 때문에, 메모리에 올라가는 프로그램이다. 라고 생각해도 무방하다고 생각합니다.운영체제의 특별한 위치일반적인 응용프로그램(Chrome, Word 등)은 메모리의 '사용자 영역'에 적재되어 실행됩니다. 하지만 운영체제는 그 중요성 때문에 커널 영역(Kernel Space)이라는 보호된 특별한 메모리 공간에 상주합니다. 운영체제는 현존하는 프로그램 중 가장 큰 규모를 자랑합니다. 예를 들어 Linux 커널의 경우 2,700만 줄 이상의 ..
JAVA - 함수형 인터페이스 파헤쳐보기
·
카테고리 없음
들어가며https://develop-706.tistory.com/75 지난번 람다에 이은 포스팅입니다. 람다와 함수형 인터페이스는 코드 간결성, 함수형 프로그래밍 지원, 병렬 처리 간소화를 위해 Java 8에서 도입되었습니다. 직접적인 성능 최적화보다는 개발자 생산성 향상과 멀티코어 활용이 주 목적이었습니다. 특히 람다와 함수형 인터페이스는 자바에서 제공하는 강력한 추상화 도구로, 자바 표준 라이브러리와 스프링 프레임워크에서 광범위하게 활용되고 있습니다. 따라서 내부 동작과 과정을 제대로 이해하려면 함수형 인터페이스에 대한 깊은 이해가 필수적이라고 생각하여 포스팅 하게 되었습니다. (학습자에 대한 내용으로, 틀린 내용이 있음을 사전에 전달 드립니다.) 함수형 인터페이스 기본 개념❓함수형 인터페이스란?람..