JWT를 이용한 로그인 자체는 쉽게 구현했으나, 로그인 한 정보를 핸들러메서드에서 불러오는 방법을 몰라 며칠을 고민했던 기억이 있다. 어쨌거나 결국 찾긴 찾았고, 더 좋은 방법을 지금도 틈틈히 찾고 있지만 아직까진 발견할 수가 없다. 로그인 구현은 시간이 나면 정리하기로 하고, 웹플럭스에서 사용자 정보를 가져오는 코드는 아래와 같다. public Mono getCurrentUser() { return ReactiveSecurityContextHolder.getContext() .map(SecurityContext::getAuthentication) .map(Principal::getName) .switchIfEmpty(Mono.error(new UserNotFoundException())) .flatMa..
목차 앞으로 쓰게 될 모든 웹플럭스 실습 글에 굳이 강조하겠지만, 아래의 코드는 그야말로 내 마음대로 공식문서와 각종 레퍼런스를 짜깁기해서 만들어낸 결과물이다. 당연히 Best Choice와는 거리가 멀 수밖에 없지만, 이거라도 잊지 않으려고 하나씩 적어본다. 우선 리액티브 몽고 템플릿에 대한 소개로 시작하자. Reactive Mongo Template 아직 한 번도 적지 않은 것 같은데, 리액티브 몽고디비를 사용하려면 그래들에 아래와 같은 의존성을 추가해야 한다. implementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive' 우선 여기서 알아갈 수 있는 사실은, 리액티브 몽고디비 역시 스프링 데이터의 일원이라는 사실..
RSocket RSocket은 넷플릭스에 의해 개발된, 리액티브 스트림을 지원하는 프로토콜이다. 당연하게도 양방향, 비동기로 메시지를 주고받는 프로토콜로서 TCP, 웹소켓 등의 전송 프로토콜 위에서 작동하고, 오버헤드가 적어 마이크로서비스 간의 통신에 적합하다. 물론 리액티브 스트림과 프로젝트 리액터를 구현한 WebFlux에서도 편하게 사용할 수 있으며, 일단 커넥션이 맺어지면 클라이언트/서버의 구분은 사라지고 양쪽 모두 아래의 비동기 패턴 중 하나로 통신을 시작할 수 있다. Request-Response 요청-응답 패턴 클라이언트가 서버에게 요청을 보내면 서버가 처리 후 응답 메시지를 보내는 비동기 패턴. 한 번에 하나의 요청과 응답을 처리할 수 있으며, 이 덕분에 여러 개의 요청을 처리할 때 동시성 ..
Criteria는 직역하면 '기준'정도 되는 뜻으로, 리액티브 몽고 디비에서 쿼리 작성에 사용하는 클래스이다. 굉장히 다양한 메서드를 제공하며, 이를 이용하고 조합해 복잡한 Query, 혹은 Update 객체를 만들 수 있다. 이 글에서는 자주 쓰이는 메서드에 대해 짧게 정리하고 넘어가자. is(): '=='를 사용하여 해당 필드와 일치하는 값을 조회 ne(): '!='를 사용하여 일치하지 않는 값을 조회 lt(): ''사용 gte(): '>=' 사용 in(): 해당 필드 값이 리스트, 배열 중 하나와 일치하는 값 조회 nin(): 주어진 값 중 어떤 것도 포함하지 않는 값 조회 regex(): 정규표현식을 사용해 일치하는 값 조회 elemMatch(): 배열이나 리스트의 요소 중 하나가 해당 조건에 일..
목차 평소에 관성적으로 써오면서도 정확히 무슨 역할을 하는지 몰랐던 애너테이션 몇 개를 정리하고 넘어가려고 한다. 대상은 아래와 같다. @Lazy @LazyCollection @JsonManagedReference @JsonBackReference @JsonIgnoreProperties @JsonProperty @Lazy 스프링 프레임워크를 사용하면 소프트웨어 시작시 애플리케이션 컨텍스트 로드와 함께 등록된 모든 빈들이 생성된다. 따라서 코드의 규모가 커지고 빈의 개수가 많아질수록 필연적으로 메모리 점유율이 올라가고 시작시간이 느려질 수밖에 없는데, @Lazy는 이런 문제를 조금이라도 해결하기 위해 스프링 프레임워크에서 지원하는 애너테이션이다. 해당 애너테이션을 붙인 빈은 자동으로 지연로딩(Lazy Lo..
알고리즘 문제를 이리저리 돌려가며 풀다가 Map을 스트림으로 다룰 때의 자료형이 필요했다. 일단 인텔리제이에서 알려주는 대로 사용해서 문제를 풀고, 따라가며 공부하기. Map.Entry 소개부터 하자면 Map.Entry는 자바 컬렉션 프레임워크의 Map 인터페이스의 내부 인터페이스이다. Map과 마찬가지로 키-값의 데이터를 저장하며, Map에서 .entrySet() 연산자를 호출하면 생성할 수 있다. 정확하게 말하자면 .entrySet()의 경우 이름 그대로 아래와 같은 Set을 생성하며, Map integerMap = new HashMap(); Set set = integerMap.entrySet(); 위 Set에 모든 엔트리 객체가 담겨있기 때문에 개별 Map.Entry를 제어하려면 그대로 스트림을..
[WebFlux]자주 사용하는 연산자 정리(2) - buffer [WebFlux]자주 사용하는 연산자 정리(3), 그리고 [WebFlux]자주 사용하는 연산자 정리(4) + 목차 Method vs. Operator 별생각 없이 메서드나 연산자라는 단어를 마구 뒤섞어 쓰다가 의문이 들었다. 같은 뜻의 단어를 두 개나 사용할 필요가 있을까? 하고. 해서 연산자 정리도 할 겸 아주 얕게 알아보았는데, 결론부터 말하면 둘은 다른 개념이지만 아주 남남은 아니다. 요약하면 아래와 같다. 메서드(Method) - 클래스나 객체 내부에 정의된 함수. Mono와 Flux 역시 내부에 많은 메서드를 가지고 있음 연산자(Operator) - 실제 연산에서 사용되는 메서드. 스트림의 데이터 처리를 연산이라고 부르기 때문에 붙..
목차 지난 글에선 리액티브 선언문과, 그에 맞춰 개발 및 통합이 진행 중인 리액티브 스트림에 대해 훑었다. 2023.03.25 - [Development/WebFlux] - [WebFlux]리액티브 스트림(Reactive Streams) [WebFlux]리액티브 스트림(Reactive Streams) 원래 계획은 리액티브 스트림에 이어서 모노, 플럭스까지 정리하는 거였지만, 하나도 모르는 내가 한 번에 몰아 정리하기는 불가능하다는 판단이 들어 글을 나누었다. 읽고, 실습해도 이상하게 gnidinger.tistory.com 또한 리액티브 스트림의 구현체중 하나인 프로젝트 리액터와, 그 구현체인 스프링 웹플럭스에 대해서도 언급했다. 이 글에서는 웹플럭스 내부의 인터페이스 중 Publisher를 구현한 두 가..
원래 계획은 리액티브 스트림에 이어서 모노, 플럭스까지 정리하는 거였지만, 하나도 모르는 내가 한 번에 몰아 정리하기는 불가능하다는 판단이 들어 글을 나누었다. 읽고, 실습해도 이상하게 개념이 잡히지 않는 웹플럭스, 쪼개서 알아보자. Reactive Streams 리액티브 스트림은 비동기/논블로킹 처리를 위한 스트림 기반의 프로그래밍 모델이다. 또한 데이터 생산자와 소비자 사이에서 백프레셔를 지원해 데이터의 흐름을 제어할 수 있으며, 이는 리액티브 선언문에 쓰여있는 대로 병목현상이나 예기치 못한 소프트웨어의 정지를 방지한다. 리액티브 스트림의 탄생 이전에는 라이브러리마다 다른 방식으로 같은 목적의 프로그램을 구현해야 했으며, 2013년 넷플릭스와 레드햇을 위시한 기업들이 공동으로 개발하며 표준화 작업을 ..
목차 이전 글에서 NGINX에 대해 개괄적으로 공부할 때 이벤트 루프(Event Loop)라는 것이 등장한 적이 있다. 2023.03.07 - [Development/Network] - [Network]NGINX 튜토리얼 [Network]NGINX 튜토리얼 여기저기에서 이름은 많이 주워들은 엔진엑스. 좋다! 빠르다! 가볍다! 길래 쓰지 않을 이유가 없어 보여 한 번 써볼까 하고 기웃거리는 것이 이 글의 목적이다. 엔진엑스는 2004년 10월, 러시아에 gnidinger.tistory.com 이번 글에서는 웹플럭스에서도 사용되는 이벤트루프와 네티(Netty)에 대해 훑어보자. Event Loop 이벤트 루프란 한 마디로 정의하면 비동기 처리를 위해 사용되는 단일 스레드이자 메인 루프라고 할 수 있다. 단어..
- Total
- Today
- Yesterday
- 면접 준비
- 유럽
- spring
- 파이썬
- 남미
- 스트림
- 칼이사
- 야경
- 리스트
- 세모
- 백준
- RX100M5
- 중남미
- java
- 여행
- 동적계획법
- a6000
- 자바
- 알고리즘
- Backjoon
- 스프링
- 기술면접
- Algorithm
- 세계일주
- 유럽여행
- BOJ
- Python
- 지지
- 맛집
- 세계여행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |