전체 글
-
G1 GC Garbage 설명 (상세)카테고리 없음 2025. 12. 22. 10:52
Garbage Collection이란?Garbage Collection(GC) 은 프로그램이 동적으로 할당한 메모리(힙 heap) 중에서,더 이상 어떤 코드에서도 접근할 수 없는 객체(garbage) 를 자동으로 찾아서 회수(해제) 하는 런타임 메모리 관리 기법입니다.개발자가 free() 같은 수동 해제를 안 해도 되고메모리 누수/이중 해제 같은 오류를 크게 줄입니다. 2) CS 관점에서 “왜 필요한가?”운영체제/컴구 관점에서 프로세스 메모리는 한정되어 있고, 힙은 계속 커질 수 있어요.동적 할당을 수동으로 관리하면 대표적으로:메모리 누수(leak): 안 쓰는데도 해제를 못 해서 점점 메모리 고갈use-after-free / double free: 해제한 메모리를 다시 참조/또 해제 → 크래시/보안..
-
Flux와 SSe를 통한 chat data stream으로 받기 (문제/해결방안)카테고리 없음 2025. 12. 5. 16:57
1. SSE가 뭐냐? (정의/목적)SSE(Server-Sent Events)는 서버 → 클라이언트 한 방향으로만 실시간(또는 준실시간) 업데이트를 푸시하는 웹 표준이야.브라우저는 EventSource라는 내장 API로 하나의 HTTP 연결을 오래 유지(long-lived) 하면서 서버가 보내는 이벤트를 계속 받는다. 1-1. 왜 생겼나? (배경 / 역사)웹은 원래 클라이언트가 요청해야 서버가 응답하는 pull 모델이었지.실시간 UI를 만들려면: Polling주기적으로 요청 → 응답데이터 없으면 낭비, 지연 큼 Long Polling / Comet요청을 오래 열어두고 서버가 이벤트 생길 때 응답 후 종료다시 요청 반복 필요, 구현/스케일링 난이도 있음WebSocket양방향, 낮은 지연하지만 프록시/방화벽에..
-
spring security oauth2 (vscode,web) 로그인 환경 구축카테고리 없음 2025. 12. 3. 09:16
1.용어 정리(중요)Authorization Server: 구글Client(또는 RP): 스프링 기반 웹 앱 (로그인 시작/콜백 처리 주체)Resource Server: 여러분 API 서버(액세스 토큰으로 보호 자원 제공). 실서비스에선 Client와 Resource Server가 같은 앱일 수도 있지만 역할은 구분해서 생각하세요.OIDC(OpenID Connect): “로그인(신원)”을 다루는 확장 규격. 구글 로그인은 사실상 OIDC 사용이 표준입니다. 2. oauth2 로그인 전체 플로우 [브라우저] │ 1. GET /oauth2/authorization/{registrationId} ← 로그인 버튼/링크 ▼[Spring Security Filter Chain] │ │ (A) O..
-
자바쓰레드 와 병렬 vs 동시 (java) 그리고 JMM이란?카테고리 없음 2025. 11. 28. 11:53
자바쓰레드현대 JVM(HotSpot)에서는 java.lang.Thread = OS 스레드 Windows, Linux, macOS에서 HotSpot JVM의 Java 스레드는 “네이티브(커널) 스레드”에 1:1로 매핑됩니다.Java에서 new Thread(...).start()→ JVM이 OS의 스레드 생성 API(pthread, Win32 thread 등)를 호출→ 커널 스케줄러가 그 스레드를 스케줄링왜 java 스레드는 os쓰레드를 사용할까? 1. 진짜 병렬 실행(멀티코어 활용) => 이전에 JVM이 내부에서만 스레드를 돌림 (1개만 사용)2. 블로킹 I/O 문제 해결A 스레드가 I/O에서 블록돼도B,C 스레드는 다른 OS 스레드에서 계속 실행시스템 전반이 훨씬 안정적/예측 가능.3. 커널 스케줄러의 ..
-
Spring의 @Transactional은 AOP 프록시 기반 프록시를 “통과하는” 메서드 호출만 트랜잭션 어드바이스가 적용된다.Spring 2025. 10. 13. 17:12
Spring의 @Transactional은 AOP 프록시 기반이라서, 프록시를 “통과하는” 메서드 호출만 트랜잭션 어드바이스가 적용된다는 점입니다. 같은 클래스 내부에서 this.someMethod()로 자기 자신을 호출하면 프록시를 거치지 않으므로, @Transactional이 동작하지 않습니다. 왜 적용 안 되나요? (프록시 구조 이해)스프링은 @Transactional을 보고 빈의 프록시(Proxy)를 만듭니다. (JDK 동적 프록시나 CGLIB)🧩 예시 코드 구조@Servicepublic class OrderService { @Transactional public void placeOrder(String itemId) { System.out.println(">>> 비즈니스..
-
스트라이프 api를 이용해 결제시스템 로그 쌓기 (with spring boot,mongodb)카테고리 없음 2025. 9. 8. 15:45
왜 MongoDB에 따로 저장하나? 이벤트/웹훅은 JSON 구조가 가변적 → 문서형 DB가 유리.쓰기 폭주 + 읽기 드묾: 결제 피크에 이벤트가 쏟아짐 → TTL로 자동 정리(저장비 절감).장애 분석/정합성 검증(리컨실리에이션): “Stripe에선 성공인데 우리 DB는 실패?” 같은 상황에서 원본 페이로드가 생명줄.멱등/재시도/비동기 처리: Outbox/Idempotency 레저(원장)로 중복 방지와 안전한 재처리. MongoDB에 담으면 좋은 것 (무엇 & 왜) 원본 웹훅 이벤트(raw) + 서명/헤더왜: 장애 시 재현/분석, Stripe 재전송 대비, 중복 차단(이벤트 ID unique).TTL: 30~180일.Idempotency 레저(우리 서버가 Stripe에 보낸 요청 이력)왜: 결제/환불 ..
-
네이티브 머신 코드,HotSpot JVM , jvm 메모리구조자바웹프로그래밍/JAVA 2025. 9. 5. 10:20
네이티브 머신 코드 jvm 성능 공부 및 postgresql에서 쿼리 최적화를 하기 위해서 공부를 하고있는데 성능이 좋아지기위해 자주 사용 하는 코드를 네이티브 머신코드로 변경하다는 말을 자주 본다. 해당 네이티브 머신코드는 cpu가 직접 이해할수있는 이진 코드이며 (11111111 10101010) 같은 코드라고 보면된다. HotSpot JVMHotSpot JVM은 단순히 통계만 모으는 게 아니라 → 그 통계를 바탕으로 “어떤 코드를 JIT 컴파일할지, 어떤 최적화를 적용할지”까지 결정하는 엔진 2. HotSpot JVM의 실행 과정처음 실행 시 (Interpreter)자바 바이트코드(.class)는 바로 CPU에서 실행할 수 없으니, 처음에는 인터프리터가 한 줄 한 줄 해석하면서 실행합니다.이 단..
-
상관 서브쿼리(Correlated subquery) 와 비상관 서브쿼리(Uncorrelated) 조인에 대해 성능 평데이터베이스/postgresql 2025. 9. 3. 16:38
1. 상관 서브쿼리 (Correlated Subquery)서브쿼리가 바깥 쿼리의 컬럼을 직접 참조합니다.즉, 바깥 쿼리의 각 행(row)마다 서브쿼리가 실행됩니다 → 반복 실행 때문에 성능 부담이 커질 수 있습니다. -- 각 사원의 급여가 해당 부서의 평균보다 높은 사원 찾기SELECT e.emp_id, e.name, e.salaryFROM employees eWHERE e.salary > ( SELECT AVG(e2.salary) FROM employees e2 WHERE e2.department_id = e.department_id); 여기서 e.department_id는 바깥 쿼리 컬럼을 참조합니다.각 사원의 department_id마다 AVG()가 다시 계산됨 → 실행 횟수 ↑..