| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- string
- HashMap
- 정규식
- Array
- 단위테스트
- math
- junit5
- html
- 인텔리제이
- js
- Java
- vscode
- 자바
- javascript
- 스프링부트
- CSS
- SpringBoot
- ArrayList
- 문자열
- java테스트
- Eclipse
- 배열
- Visual Studio Code
- 자바문법
- junit
- 테스트자동화
- IntelliJ
- 자바스크립트
- list
- input
- Today
- Total
목록2026/04 (34)
어제 오늘 내일
오랫동안 사랑받아온 RestTemplate이 유지보수 모드(Maintenance Mode)로 들어갔다는 사실, 알고 계셨나요?스프링 팀은 대놓고 "앞으로는 WebClient를 쓰세요"라고 권장합니다.이유는 단순합니다. RestTemplate은 동기(Blocking) 방식이라서, 외부 API가 3초 걸리면 내 서버도 3초 동안 멈춰 있어야 하기 때문입니다.반면 WebClient는 요청만 보내고 딴 일을 하러 갈 수 있습니다. (Non-Blocking)1. WebClient 만들기 (Builder 패턴)WebClient는 불변(Immutable) 객체라서 쓰레드 안전(Thread-safe)합니다. 싱글톤 빈으로 등록해서 재사용하는 것이 좋습니다.@Configurationpublic class WebClien..
지난 시간에는 @RestController를 이용한 익숙한 방식을 배웠습니다. 하지만 WebFlux의 창시자들은 조금 더 Java 8+ 람다(Lambda)스러운 방식을 제안합니다.바로 함수형 엔드포인트(Functional Endpoints)입니다.이 방식은 "요청을 어디로 보낼지(Routing)"와 "어떻게 처리할지(Handling)"를 완벽하게 분리합니다.1. 두 가지 핵심: Router & Handler마치 지하철 노선도와 같습니다.RouterFunction (지도): "이 URL로 오면 저기로 가세요." (길 안내)HandlerFunction (목적지): "오셨군요. 제가 처리해 드릴게요." (실제 업무)MVC에서는 컨트롤러 안에 매핑(@GetMapping)과 로직이 섞여 있었지만, 여기서는 완전히..
WebFlux를 시작할 때 가장 큰 장벽은 "새로운 문법을 배워야 한다"는 두려움입니다.하지만 스프링 부트는 기존 MVC 스타일의 코드를 99% 재사용할 수 있게 해 줍니다.오늘 보여드릴 코드를 보면 "어? 이게 WebFlux라고? MVC랑 똑같은데?"라고 하실 겁니다.하지만 그 속은 완전히 다른 비동기 엔진(Netty)으로 돌아가고 있죠.1. 의존성 확인먼저 spring-boot-starter-web이 아니라 spring-boot-starter-webflux가 필요합니다.dependencies { implementation 'org.springframework.boot:spring-boot-starter-webflux' // implementation 'org.springframework.b..
데이터를 변환할 때 우리는 습관적으로 .map()을 씁니다.하지만 WebFlux 세계에서 DB를 조회하거나 외부 API를 호출할 때 .map()을 쓰면, 결과값으로 Mono> 같은 러시아 인형(중첩 구조)이 튀어나옵니다.이 껍질을 벗겨내고 알맹이만 쏙 빼내는 기술, flatMap이 필요한 순간입니다.1. 단순 변환의 제왕: mapmap은 동기적(Synchronous)이고, 1:1로 변환할 때 사용합니다.입력 데이터 T를 받아서 U로 바꿉니다.비유: 사과를 넣으면 -> 껍질 깎은 사과가 나옴.특징: 단순히 값을 가공하거나, 객체를 다른 객체로 매핑할 때 씁니다.// 1. 문자열을 대문자로 변환Flux.just("a", "b", "c") .map(String::toUpperCase) // "a" -> ..