본문 바로가기

전체 글32

가상스레드, NIO # 7장 Io병목 해결## 1. 네트워크 io와 자원효율### 네트워크 개념서버 프로그램은 기본적으로 네트워크 프로그램이다. 다양한 구성요소와 네트워크로 데이터를 주고 받는다.### 계층- L7: HTTP- L4: TCP - L3: IP### 2가지 요소- 출력 스트림으로 데이터 내보내기- 입력 스트림으로 데이터 받기- 예시) 서버가 db에 출력 스트림으로 쿼리를 보냄 -> db에서 온 데이터를 입력 스트림으로 받음. ### 일반적인 동작(블로킹 방식)- Blocking I/O - I/O 동안 스레드 대기(blocked)- CPU 사용률 향상 방법 - 스레드 증가 - 스레드 한계 - 메모리 사용량 증가 - 무한 생성 불가 - 과도한 스레드 문제 - Context Switching 비용.. 2025. 12. 22.
스프링 이벤트 Observer 패턴으로 구현된 느슨한 결합의 힘실무에서 서비스 간 결합도를 낮추면서도 자연스럽게 후처리를 연결하고 싶을 때 스프링 이벤트는 특히 유용한 기능이라고 생각합니다.특히 핵심 비즈니스 로직은 그대로 유지하면서도 부가 로직을 깔끔하게 분리하고 싶을 때 선택해볼만한 구조라고 볼 수 있습니다.이 글에서는 스프링 이벤트의 개념, 동작 방식, 트랜잭션과의 연동 지점까지 차근차근 정리해보겠습니다.1. 스프링 이벤트란? — 핵심 개념과 배경스프링 이벤트는 한 객체에서 발생한 특정 이벤트를 다른 객체들이 감지하고 반응하도록 하는 메커니즘이라고 이해하시면 됩니다.서비스 간 결합을 줄이기 위해 사용하며, 특정 변경사항을 “알리는” 것에 특화되어 있습니다.이벤트 발행자: publishEvent()를 호출합니다.이.. 2025. 11. 30.
@configuration 작동원리 “이게 왜 Rabbit 설정이지?”@Configuration부터 RabbitAdmin까지 한 번에 이해하기RabbitMQ 설정을 하다 보면 이런 생각 한 번쯤 든다:“그냥 @Configuration 클래스 만들어서 Queue, Exchange, Binding을 @Bean으로 올려놨을 뿐인데…스프링은 이게 RabbitMQ 설정이라는 걸 도대체 어떻게 아는 거지?”나도 처음엔 이 부분이 굉장히 찝찝했는데,한 번 구조를 쫙 뜯어보고 나니까Spring 전체 동작 방식이 한 방에 연결되더라.이 글은 바로 그 흐름을 정리한 글이다.RabbitMQ를 예로 들지만, 사실상 @Configuration / @Bean / Auto-Configuration 기본 원리를 이해하는 내용이라고 보면 된다.1. @Configurat.. 2025. 11. 15.
JPA (양방향) 연관관계 1) 🧭 개요: 단방향 vs 양방향, 언제 무엇을 쓰나단방향: 한쪽만 FK를 참조. 단순하고 안전. 조회 방향이 한쪽으로 고정될 때 유리.양방향: 양쪽에서 서로 탐색 가능. 객체 그래프 탐색이 편하지만 일관성 관리 책임이 생김.(연관관계 편의 메서드 사용해야함)원칙: 기본은 단방향 → 반대편 탐색이 비즈니스에 “자주” 필요할 때만 양방향로 확장.2) 🔗 단방향 연관관계모델링(예): Schedule 이 patient_seq(FK)를 가짐 → Schedule → Patient 단방향.조회 한계: Patient 기준으로 Schedules를 모으려면 리포지토리 쿼리 필요.언제 좋나: 읽기 방향이 명확하고, 반대편 컬렉션 탐색 빈도가 낮을 때.List schedules = scheduleRepository.f.. 2025. 11. 12.
JVM 콜드 스타트와 웜업 전략 목차1. 🚀 문제 정의: 재시작 직후 서버가 느린 이유지연 로딩(Lazy Loading), JIT 워밍업, 최초 I/O 연결 지연 요약🧠 JVM 클래스 로딩 3단계와 지연 로딩 영향2. 🔥 HotSpot JIT 개념과 C1·C2 티어드 컴파일자주 실행 코드의 코드 캐시, C1(빠른 시작) ↔ C2(깊은 최적화) 동작 요약3. 🧰 우리 팀의 Warm-up 필요성 & 기본 원칙“트래픽 투입 전 의도적 워밍업”으로 첫 요청 지연 최소화4. 🏗️ Spring Boot Warm-up 구성요소와 책임WarmUpListener / WarmUpExecutor / WarmUpMetrics / (I)WarmUpEndpoint / WarmUpProperties / ExecutorService / HealthIndi.. 2025. 10. 27.
null 초기화 전략 요약내부 상태는 일관되게 null로 초기화하라. 의미가 명확하고 타입 시스템의 도움을 받는다.**외부 세계(API)**에서 오는 undefined는 “필드가 없음(누락)”으로 그대로 존중하라.렌더/부작용을 줄일 수 있다면 처음부터 최종값(0/'' 등) 으로 시작해 불필요한 전환을 없애라.실수 방지는 ?., ??, 가드 클로즈, 그리고 “PATCH 직렬화 규칙(누락=미변경, null=비우기)”로 완성한다.1) undefined vs null — 사전 정리 🧭✅ undefined의미: 값이 정의되지 않음 (존재하지만 미할당, 혹은 응답에서 필드 누락)자주 보이는 곳선택적 props의 기본 상태초기화하지 않은 reactive/ref 변수백엔드 응답에서 필드가 아예 빠진 경우let a;console.log(a.. 2025. 10. 19.