분류 전체보기
-
Tomcat,Spring Boot에서 GET,POST 요청은 어떻게 처리될까?카테고리 없음 2026. 1. 2. 08:16
Tomcat → Spring MVC → Controller → Response 전체 흐름 완전 해부 1️⃣ 들어가며Spring Boot로 개발하다 보면 우리는 보통 이렇게만 생각한다. 브라우저 → @GetMapping → 응답하지만 실제로는 이 한 줄의 요청이 처리되기까지Tomcat, Servlet Container, Filter, DispatcherServlet, HandlerMapping, MessageConverter 등수많은 컴포넌트와 메소드 호출을 거친다.이 글에서는 GET 요청(@GetMapping) 을 기준으로Tomcat에서 시작해 → Spring MVC 내부를 통과 → 다시 Tomcat을 통해 응답이 반환되는 전체 흐름을메소드 단위까지 내려가며 정리한다. [ Browser ] | ..
-
HTTPS(TLS)는 어떻게 암호화될까? — 공개키, 인증서, 대칭키를 쉽게 이해하기자바웹프로그래밍 2026. 1. 1. 19:44
1. HTTPS는 왜 필요할까?HTTP는 평문 통신이다.즉, 네트워크 중간에서 패킷을 가로채면 요청/응답 내용이 그대로 보인다.이를 해결하기 위해 등장한 것이:HTTPS = HTTP + TLS(암호화)HTTPS의 목표는 단순하다.🔐 통신 내용을 암호화하고🧾 접속한 서버가 진짜인지 확인하는 것2. HTTPS에서 쓰이는 암호화 방식은 두 가지HTTPS(TLS)는 암호화 방식을 하나만 쓰지 않는다.구분용도공개키 암호(비대칭)서버 신원 확인, 대칭키를 안전하게 합의대칭키 암호실제 데이터(HTTP 요청/응답) 암호화👉 핵심 포인트“공개키는 보조, 대칭키가 주력”3. 서버 인증서(Certificate)는 왜 필요할까?서버는 TLS 연결 초기에 인증서(Certificate) 를 브라우저에 보낸다.인증서 안에는 ..
-
Tomcat에서 Mono를 반환하면 정말 논블로킹일까? — Tomcat 스레드, Servlet Async, WebClient를 처음부터 끝까지 정리카테고리 없음 2026. 1. 1. 16:46
📘 Tomcat + MVC + WebClient(Mono 반환) 완전 정리Spring MVC 프로젝트에서 다음과 같은 코드를 보면 많은 개발자들이 혼란을 느낀다. @GetMapping("/async") public Mono async() { return webClient.get().uri("http://external/api") .retrieve() .bodyToMono(String.class); }block()도 없고Mono를 반환하는데왜 “Tomcat에서는 여전히 블로킹 비동기다”라는 말이 나올까?이 글에서는 Tomcat을 전혀 모르는 사람도 이해할 수 있도록,요청이 들어온 순간부터 응답이 네트워크로 나가기까지..
-
CompletableFuture + commonPool은 왜 위험한가 — timeout을 걸어도 서버가 망가지는 이유Spring 2025. 12. 24. 16:46
[개요] 이 글은 다음 질문에서 출발했다.“CompletableFuture로 비동기 처리하고 timeout까지 걸었는데,왜 서버는 여전히 터질 수 있을까?”이 질문에 답하기 위해ForkJoinPool(commonPool), CompletableFuture timeout, RestTemplate 블로킹 I/O를직접 코드와 로그로 실험하며 검증했다.이 글은 이론 설명이 아니라실제 실험 결과를 통해 ‘왜 이런 문제가 발생하는지’를 증명하는 기록이다. 1. 처음 상태: commonPool + CompletableFuture (timeout 없음)대출 비교 API를 구현하면서 여러 금융사 API를 병렬 호출했다.각 금융사 API는 RestTemplate을 사용한 외부 HTTP 호출이었고, 느린 금융사(SLOW)가..
-
함수형 인터페이스 정리(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양방향, 낮은 지연하지만 프록시/방화벽에..