분류 전체보기
-
함수형 인터페이스 정리(Supplier,Consumer,Function,Predicate)카테고리 없음 2025. 12. 23. 11:53
Java 함수형 인터페이스 4종 정리Supplier, Consumer, Function, Predicate Java의 java.util.function 패키지는 람다/메서드 레퍼런스로 “함수”를 값처럼 전달할 수 있게 해주는 표준 함수형 인터페이스들을 제공한다. 그 중 가장 많이 쓰는 4개가 아래다.Supplier: 입력 없음 → 값 제공Consumer: 값 받기 → 소비(부작용)만 함Function: 값 변환 → 다른 값으로 매핑Predicate: 조건 검사 → true/false 1) Supplier — “입력 없이 T를 만든다/제공한다”의미매개변수(입력)가 없고호출 시점에 T 타입 값을 반환한다.“지연 생성(lazy)”, “기본값 생성”, “팩토리”에 많이 사용된다.시그니처@FunctionalInt..
-
HTTP method 공부 (GET,POST,HEAD,TRACE,OPTIONS)공부일기장 2025. 12. 22. 16:46
1️⃣ 한 줄 정의 (가장 중요)REST API는 HTTP를 기반으로, 자원(Resource)을 URI로 식별하고표준 HTTP 메서드를 통해 자원의 상태(State)를 표현(Representation)하고 전송하는 아키텍처 스타일입니다.1) Safe / Idempotent가 뭔가?Safe (안전)서버의 상태를 “변경하지 않는” 요청즉 “조회용” 성격예: GET, HEAD, OPTIONS (일반적으로)주의: “안전”은 보안(safe security)이 아니라 부작용(side effect) 없음 의미.Idempotent (멱등)같은 요청을 여러 번 해도 결과가 같아야 함“서버 최종 상태” 기준으로 같으면 멱등예)DELETE /users/1을 10번 → 최종적으로 “1번 유저는 없음” (같음) → 멱등POST..
-
G1 GC Garbage 가 왜 필요하지? 성능 개선 방법까지 정리카테고리 없음 2025. 12. 22. 10:52
Garbage Collection이란?Garbage Collection(GC) 은 프로그램이 동적으로 할당한 메모리(힙 heap) 중에서,더 이상 어떤 코드에서도 접근할 수 없는 객체(garbage) 를 자동으로 찾아서 회수(해제) 하는 런타임 메모리 관리 기법입니다.개발자가 free() 같은 수동 해제를 안 해도 되고메모리 누수/이중 해제 같은 오류를 크게 줄입니다. 1) 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이란? -1카테고리 없음 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에 보낸 요청 이력)왜: 결제/환불 ..