728x90

2026/04/04 6

가상 스레드와 코루틴 한번에 보기 : Spring MVC, WebFlux 흐름으로 이해하기

가상 스레드와 코루틴은 무엇이 다를까? Spring MVC, WebFlux 흐름으로 이해하기들어가며동시에 많은 요청을 처리하는 서버를 설계할 때, 오래된 화두가 다시 표면 위로 올라온다. “스레드를 얼마나 쓸 것인가”, “블로킹 코드를 유지할 것인가, 논블로킹으로 갈 것인가”다.Java Virtual Thread(Project Loom) 와 Kotlin Coroutine은 둘 다 “더 많은 동시성을 더 적은 비용으로”라는 방향으로 겹쳐 보인다. 그래서 흔히 가벼운 스레드와 더 가벼운 스레드처럼 한 줄에 묶여 오해가 생긴다.이 글에서는 그 오해를 끊고, 아래 순서로 문제의식(왜) 부터 스프링에서의 연결(MVC vs WebFlux) 까지 정리한다.왜 가상 스레드·코루틴 이야기가 나오는가 기존 thread-..

CS/JAVA 2026.04.04

Tomcat과 Nginx 한눈에 보기 : 관문과 실행기 — Nginx 문법 분해까지

Tomcat과 Nginx: 관문과 실행기 — 같이 쓸 때 이해해야 할 것들백엔드 입문 단계에서 “서버”라는 말이 Tomcat인지 Nginx인지 헷갈리기 쉽다. 둘 다 HTTP를 다루지만, 하나는 자바 애플리케이션을 돌리는 실행기이고 하나는 트래픽을 정리하는 앞단에 가깝다. 이 글에서는 역할을 나누는 이유, Nginx 설정 파일이 말하는 구조, 그리고 Tomcat(및 Spring MVC) 안에서 요청이 어떻게 메서드 호출로 바뀌는지까지 한 번에 정리한다. 목차Tomcat과 Nginx는 서로 다른 일을 한다트래픽이 흐르는 그림Nginx가 앞단에서 자주 맡는 역할HTTPS를 어디서 끊을까: TLS 종료버퍼링이 필요한 이유보안·운영: 리버스 프록시를 쓸 때 빠지기 쉬운 것Tomcat은 무엇을 하는 프로그램인가n..

CS/JAVA 2026.04.04

JAVA Lambda 한눈에 보기 : Lambda와 함수형 인터페이스: 자바는 왜 람다를 도입했을까?

Lambda와 함수형 인터페이스: 자바는 왜 람다를 도입했을까?들어가며람다는 “문법이 짧아졌다”는 이야기만으로 끝나기 쉽다. 그런데 실제로 코드를 읽다 보면 아래에서 계속 막힌다.컴파일러는 어느 인터페이스의 구현으로 이 람다를 붙이는가(타깃 타이핑)Function이면 되는데 왜 ToIntFunction을 쓰는가 (박싱·성능)람다가 잡는 this는 누구의 this인가검사 예외(checked) 를 던지는 람다는 왜 잘 안 되는가메서드 참조 String::length는 “어떤 형태의 함수형 인터페이스”에만 들어갈 수 있는가이 글은 왜 필요했는지에서 시작해, 언어 규칙(타깃 타이핑·SAM·캡처) 과 java.util.function 설계, 메서드 참조의 분류, 그리고 실무/면접에서 나오는 골든 질문까지 한 번에..

CS/JAVA 2026.04.04

Java Stream 한눈에 보기 : 컬렉션에 담지 않고 흘려보내며 가공하는 파이프라인

JavaStream: 컬렉션에 담지 않고 흘려보내며 가공하는 파이프라인들어가며for-loop를 한 단계씩 풀어 쓰던 손이 어느 순간.stream().filter(...).map(...).toList()로 바뀌었다 — 그런데이건 단순히 짧아진 게 아니라, 무엇을 할지와 어떻게 할지의 경계가한 칸 옮겨간 사건이다. 반복문을 쓸 때는 "인덱스를 올리고,요소를 꺼내고, 조건을 검사하고, 결과 리스트에 넣는다"까지 전부 내가 직접써야 했다. 스트림으로 옮겨 가면 그중 어떻게 돌릴지는라이브러리가 가져가고, 나는 무엇을 할지만 적는다.그런데 여기서 끝나면 "짧아서 좋다"는 이야기로 멈춘다. 실제로 스트림을일정 기간 쓰다 보면, 의외로 언어 문법 수준이 아니라의미론(semantic) 수준에서 막히는 지점들이 줄줄이 나..

CS/JAVA 2026.04.04

자바 입출력 한눈에 보기 : IO vs NIO: 왜 Buffer, Channel, Selector를 들고 나왔을까?

들어가며InputStream.read() 한 줄과 ByteBuffer.put() 한 줄은 겉으로 비슷해 보인다. 그런데 운영 방식은 완전히 다르다.전통 java.io 는 스트림 파이프와 블로킹 read/write가 중심이다. “바이트가 흘러온다”에 가깝게 생각하면 읽기 쉽다.java.nio 는 버흼는 조각을 두고, position / limit / capacity 로 내가 어디까지 썼고 어디까지 읽을지를 직접 맞춘다. 채널은 그 버퍼와 짝을 이룬다.Selector 는 “여러 채널을 한 스레드가 감시한다”는 이벤트 루프 모델이다. 필기에서 별표 친 ACCEPT / READ 가 왜 핵심인지까지 연결해야 서버 그림이 선명해진다.목차1) IO와 NIO를 공부할 때 먼저 던질 질문2) 전통적인 java.io는 어..

CS/JAVA 2026.04.04

Java 비교 한눈에 보기 : Comparable vs Comparator: 정렬 기준은 객체 안에 둘까, 밖에 둘까?

Comparable vs Comparator: 정렬 기준은 객체 안에 둘까, 밖에 둘까?들어가며compareTo와 compare는 “음수면 앞, 양수면 뒤”로 외우면 잠깐 편하다. 그런데 실무·면접에서 막히는 지점은 다른 데에 있다.equals와 compareTo가 말하는 동치가 다르면 TreeMap·TreeSet이 어떤 괴현상을 일으키는가Comparator 체인을 읽을 때 thenComparing이 “언제” 발동하는가“자바 정렬은 퀵소트 아닌가요?” 라는 질문에 어디까지가 사실인가원시형 int[] 과 List 은 왜 다른 정렬 엔진으로 가는 게 자연스러운가이 글은 정렬 기준을 어디에 둘지(내장 vs 주입) 를 정리한 뒤, Comparator 유틸 전부를 실무 관점에서, 마지막으로 TimSort와 퀵소트..

CS/JAVA 2026.04.04
728x90