Spring WebFlux: 요청 처리 흐름 DispatcherHandler, HttpWebHandlerAdapter...
·
⚙️ Frameworks/🌱 Spring
Spring WebFlux는 Spring MVC와 마찬가지로 프론트 컨트롤러 패턴을 사용하여 설계되었습니다. WebFlux의 프론트 컨트롤러인 DispatcherHandler는 요청 처리의 핵심 알고리즘을 제공하며, 다양한 위임 컴포넌트를 통해 실제 처리가 이루어집니다. 이번 글에서는 DispatcherHandler의 구조와 역할을 상세히 살펴보겠습니다.WebFlux 구성 요소일반적인 WebFlux 설정은 다음과 같은 구성 요소를 포함합니다:webHandler 빈으로 선언된 DispatcherHandlerWebFilter 및 WebExceptionHandler BeanDispatcherHandler 관련 Bean HttpWebHandlerAdapterHttpWebHandlerAdapter는 HttpHan..
`Spring Webflux`의 등장과 Reactive Programming
·
⚙️ Frameworks/🌱 Spring
들어가며안녕하세요, 오랜만에 Spring 이야기로 왔습니다.보통의 많은 Spring 프레임워크 입문자가 그렇듯 저도 Spring MVC 로 웹 애플리케이션 개발을 익혔고 그에 많이 익숙해져 있는 상태였는데요. 지금의 회사에서는 Spring Webflux 를 사용하고 있고, 저도 사용한지 약 1년이 되었습니다. 초반에 학습하느라 굉장히 힘들었던 기억이 나는데 이것을 따로 정리해본 적이 없어서 조금씩 정리해보려고합니다. (역시 학습은 Output을 해야 명확해지는 것이죠!)제가 이해한만큼 최대한 쉽게 이 시리즈를 작성해보려고했는데 오류가 있는 부분이 있다면 알려주세요 :) 자세히 설명하고 있지 않지만 전제하고 있는 개념들Blocking, Non-blockingThread, Thread Pool, Contex..
Cache를 적용하여 API 기능을 개선해보자 (2) Redis repository와 Redis Template
·
⚙️ Frameworks/🌱 Spring
이 글은 당근마켓을 모티브로 한 프로젝트 Secondhand 구현시 이슈 사항을 정리한 글입니다. 2023.11.24 - [🌱 Spring] - Redis Cache를 적용하여 Read API 기능을 개선해보자 (1) 이론학습 앞서 기본적으로 Cache에 대해서 학습하고 어노테이션을 적용해서 캐시 저장을 해보았는데요. 여기까지 학습과정 중에 아쉬웠던 점은 캐시 추상화 어노테이션을 사용하는 것만으로는 팀원과 구현해보기로 한 `write-back` 을 구현하기 힘들었다는 것입니다. `write-through`는 이런 방식으로 구현할 수 있습니다. @Service public class MyService { @Cacheable(value = "myCache", key = "#id") public String ..
Cache를 적용하여 Read API 기능을 개선해보자 (1) 이론학습
·
⚙️ Frameworks/🌱 Spring
이 글은 당근마켓을 모티브로 한 프로젝트 Secondhand 구현시 이슈 사항을 정리한 글입니다. 사실 처음 시작은 조회수 구현을 어떻게 효율적으로 할 수 있을까에서 출발하였습니다. [조회수 관련해서 참고한 블로그 글] 세션별로 중복되지 않게 일정 시간동안 1회씩 카운팅하고 싶은 욕심이었습니다. 그런데 학습을 하다보니 레디스 Cache를 읽기 API에서도 사용해보고 싶더라고요🔥 API 성능을 개선해본 뒤 차근차근 조회수도 개선해보도록 하겠습니다. Cache에 대하여 캐시 Cache는 자주 사용하는 연산에 대하여 속도가 빠른 임시 공간에 저장해두어 애플리케이션 연산 속도를 높일 수 있습니다. 애플리케이션 연산 속도는 DB I/O작업을 얼마나 줄이느냐에 비례하는데요. 캐시를 사용해서 DB는 물론, 어플리케이..
S3 업로드를 비동기로 처리하고 싶어요✊ : 반환이 있는 @Async를 사용할 때 주의할 것들....
·
⚙️ Frameworks/🌱 Spring
이 글은 Secondhand 프로젝트를 하며 트러블 슈팅하고 학습한 내용을 정리한 글입니다. 시작하며 Secondhand에 글을 작성할 때는 최대 10장의 이미지를 업로드할 수 있습니다. 이 기능을 구현하고 나서 가장 마음에 걸렸던 부분이 있는데요, 바로 이 10장의 이미지가 하나의 스레드에서 동기적으로 처리된다는 것입니다. 꽤 고화질인 이미지를 10장 한번에 처리를 하면 3초정도 소요되기도 합니다 👀.... 계속 마음에 걸렸던 코드라 이참에 리팩토링을 해보기로 했습니다. 개선 해보자 기존 로직 및 문제점 분석 원래 코드와 시퀀스 다이어그램을 먼저 공유하자면 다음과 같습니다. @Override public List uploadItemDetailImages(List request) throws ImageH..
🔐 비밀번호 암호화해보자 (Feat: Spring)
·
⚙️ Frameworks/🌱 Spring
해당 글에서 구현 언급한 코드는 practice-member-api 에서 확인 가능합니다. 시작하며 초반 연습용 프로젝트에서 회원가입을 구현하며 그냥 일반 텍스트로 회원 비밀번호를 관리해왔습니다. 하지만 보안상 비밀번호를 이렇게 평문으로 저장하는 일은 반드시 지양되어야 합니다. 마침 회원가입과 Jwt 토큰을 사용하는 인증/인가는 매우 자주 쓰는 로직이라 나만의 라이브러리를 만들고 싶었는데요. 원티드 프리온보딩 백엔드 미션이 딱 기본 회원가입 + jwt 토큰 방식의 인증인가 + 게시판 REST API라서 이참에 이 비밀번호 암호화를 구현해보기로 했습니다💪 Spring Framework 는 Spring Security 라는 하위 프레임워크에서 이러한 보안 인증인가 를 편리하게 제공해주고 있지만 해당 암호화 ..