목차 Variable Arguments 가변인자는 JDK 1.5부터 도입된 개념이다. 이름 그대로 개수가 동적으로 변하는 인자를 처리하기 위한 기능이다. 가변인자가 도입되기 전까지는 배열을 사용했다고 하며, 현재도 내부적으로는 배열로 처리되고 배열로 다룰 수 있다고 한다. 사용하는 방법은 매개변수의 타입 뒤에 '...'을 붙여서 표시하며, 이상의 주요 특징을 요약하면 아래와 같다. 개수가 변하는 인자를 메서드의 매개변수로 전달 가능 메서드 내부에서는 배열로 처리되므로 유사하게 다룰 수 있음 필요에 따라 다른 매개변수와 함께 사용하는 것도 가능 나는 이제야 경험해 보았지만 코드의 가독성이 좋아지고 작성이 제법 간결해진다. 얼른 익숙해져서 마음껏 사용해야 하는데... Example 가장 간단한 예는 아래와 ..
[WebFlux]자주 사용하는 연산자 정리(1) [WebFlux]자주 사용하는 연산자 정리(3), 그리고 [WebFlux]자주 사용하는 연산자 정리(4) + 목차 지난 글에선 작은 프로젝트를 마이그레이션 하며 사용한 연산자에 대해 정리했다. [WebFlux]자주 사용하는 연산자 정리(1) [WebFlux]자주 사용하는 연산자 정리(1) 목차 Method vs. Operator 별생각 없이 메서드나 연산자라는 단어를 마구 뒤섞어 쓰다가 의문이 들었다. 같은 뜻의 단어를 두 개나 사용할 필요가 있을까? 하고. 해서 연산자 정리도 할 겸 아주 얕게 gnidinger.tistory.com 회사에 들어와 그보다 훨씬 규모가 있고 잘 짜인 코드를 공부하는 중인데, 처음 보는 데다 모르는 연산자가 마구 쏟아져 나와서..
목차 Strategy Pattern 전략 패턴은 정책 패턴(Policy Pattern)이라 불리기도 하며, 소프트웨어의 실행 중 상황에 맞는 알고리즘을 선택해 실행할 수 있도록 하는 객체 지향 디자인 패턴이다. 예를 들자면 배열을 정렬하는 sort()라는 메서드가 있을 때, 요청한 알고리즘이 어떤 정렬인지에 따라 다른 로직을 실행하도록 소프트웨어를 디자인하는 것이라고 할 수 있다. 위키백과에 따르면 전략 패턴은 대략 아래와 같은 절차에 따라 구성되며, 복수의 알고리즘을 정의 정의한 알고리즘을 캡슐화 해당 알고리즘을 전략에 맞춰 상호 교체 가능하도록 구성 이어서 아래와 같은 세 부분으로 구성된다. 전략 인터페이스(Strategy Interface) 알고리즘을 정의하는 인터페이스. 일반적으로 알고리즘을 수행..
목차 Singleton Pattern 싱글톤 패턴은 자바에서 이용되는 디자인 패턴 중 하나다(스프링 부트가 아니다!). 주로 아래와 같은 상황을 해결하기 위해 사용되며, 공유자원 관리 디비 연결, 로깅, 캐싱과 같은 자원은 시스템 전체에서 한 번만 생성되면 충분하다. 비용이 많이 드는 객체 생성 같은 객체가 빈번하게 생성되는 경우 비용이 많이 든다. 이 경우 싱글톤 패턴을 이용해 하나의 인스턴스를 생성한 뒤에 해당 인스턴스를 재사용함으로써 리소스 낭비를 줄일 수 있다. 전역 변수 사용 제한 전역 변수는 시스템 복잡도를 증가시키고 지역 변수와 충돌할 가능성도 있다. 이를 해결하기 위해 싱글톤 패턴을 이용해 전역변수의 사용을 최소화할 수 있다. 보통 아래와 같은 방식으로 구현하게 된다. 생성자를 privat..
처음 써보는 웹플럭스에 처음 써보는 리액티브 몽고+레디스를 사용해 마이그레이션을 시도할 때 가장 먼저 당황한 부분이 바로 이 부분이다. MVC패턴에선 당연히, 아주 손쉽게 이루어졌던 이 함수형 엔드포인트를 사용하는 웹플럭스에서는 작동하지 않았던 것. 물론 내 경험의 산물이라 100% 확신할 수는 없지만, 여태까지 내가 알기론 함수형 엔드포인트에서 기존의 방식대로 간편하게 유효성 검증을 하는 방법은 없다, 혹은 다른 라이브러리를 불러서 사용해야 한다. 아이 그럼 어쩌라고? 에 대해 헤매면서 얻은 답을 정리한다. Validator 결론부터 말하자면, 웹플럭스에서는 검증이 필요한 클래스(DTO와 같은)마다 개별 검증 클래스를 구현해야 한다. 따라서 CRUD에 따라 검증 로직이 다르고 복잡하다면, 패키지 안에 ..
목차 웹플럭스로 개발을 하는 방법은 크게 두 가지로 나뉜다. 기존의 엔드포인트 패턴 활용 함수형 엔드포인트 사용 물론 두 가지 방법 다 비동기 처리를 구현할 수 있고, 초심자 입장에선 뭐가 더 나은 방식이라고 말할 수 없다. 그래도 이왕 웹플럭스를 사용하는 김에 함수형 엔드포인트를 적용해 보자! 하고 한 달 정도 삽질을 한 뒤에 느낀 점을 정리하기 위해 이 글을 적는다. 결론부터 말하면 일단 적응하고 나면 일반 엔드포인트보다 훨씬 직관적인 코드 작성이 가능하다. Router 함수형 엔드포인트를 사용하려면 라우터 클래스의 작성이 필수적이다. 라우터는 이름 그대로 매핑하는 역할을 하는데, 여기서 매핑이란 URL 패턴과 핸들러메서드의 매핑을 가리킨다. 즉 사용자의 요청이 라우터를 거쳐 해당 엔드포인트의 핸들러..
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(): 배열이나 리스트의 요소 중 하나가 해당 조건에 일..
- Total
- Today
- Yesterday
- 중남미
- 동적계획법
- java
- 지지
- a6000
- 파이썬
- 리스트
- 자바
- 백준
- 기술면접
- Python
- Algorithm
- 알고리즘
- Backjoon
- 세계여행
- 세계일주
- 여행
- 세모
- 유럽
- 남미
- 맛집
- 스트림
- spring
- BOJ
- 야경
- RX100M5
- 칼이사
- 면접 준비
- 스프링
- 유럽여행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |