분류 전체보기 234

각 상황에 맞는 @ControllerAdvice로 예외 메시지 분리하기

@ControllerAdvice는 스프링 애플리케이션 전체에서 예외 처리 메서드를 선언할 수 있는 특수한 스프링 빈이다. 본 프로젝트에서는 @BaseControllerAdvice랑, 각각의 도메인별 @ControllerAdvice를 설정해주었다. @BaseControllerAdviceCustomException 외의 나머지 예외를 처리하기 위해 다양한 예외 상황에 대비할 수 있는 폴백 기능을 추가하였다.@Slf4j@RestControllerAdvicepublic class BaseControllerAdvice { @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ExceptionHandler(Exception.class) public BaseErr..

이메일 인증 기능 @Async 비동기 처리

✔️ 이메일 전송 기능에서 비동기를 도입하였다.이메일 전송 로직에서 JavaMailSender를 이용하고 있는데, 메일 지연 전송 시간이 많이 든다는 단점이 있다.아래 내용과 같이 대략 9.65s가 소요된다. ✔️  이메일을 보내는 과정 자체를 쓰레드가 기다리는 것이 아니라 요청을 보내고 쓰레드는 다른 작업을 수행하도록 변경하였다.✔️ AsyncConfig@Configuration@EnableAsyncpublic class AsyncConfig implements AsyncConfigurer { @Override @Bean(name = "mailExecutor") public Executor getAsyncExecutor() { ThreadPoolTaskExecutor exe..

PlantUML을 이용하여 시퀀스/클래스 다이어그램 설계

현재 Auth 도메인을 맡고 있다.Auth 도메인에서 전반적인 API 명세서는 다음과 같다.1. 토큰 재발급2. 회원탈퇴3. 로그아웃4. 회원가입/로그인 이 프로젝트 또한 PlantUML을 이용하여 시퀀스 다이어그램과 클래스 다이어그램을 그려보았다.토큰 시퀀스 다이어그램/클래스 다이어그램   회원탈퇴 (시퀀스 다이어그램/클래스 다이어그램) 로그아웃 (시퀀스 다이어그램/클래스 다이어그램) 회원가입/로그인

PlantUML을 이용하여 시퀀스 다이어그램 설계 (1)

현재 Spring Webflux를 이용하여 간단한 채팅 서버를 구현하고 있다. 주 기능은 다음과 같다.1. 사용자가 채팅 요청을 보내면 사용자가 들어간 채팅방의 모든 사용자에게 채팅을 보낸다.2. 모든 사용자에게 푸시 알림을 보낸다. (비동기적으로 소요시간이 0.5s가 되는 푸시 알림 서버에 Request를 보내고,Response를 Client에게 보낸다.) 클라이언트의 비지니스 로직은 다음과 같다.비즈니스 로직- payload 로 넘어온 채팅방 PK가 정말 있는 채팅방인지와 사용자가 채팅방에 들어가있는지 확인- 해당 채팅방에 채팅 레코드 추가- 해당 채팅방에 있는 사용자 모두 조회- 조회된 사용자들의 device 에 모두 push 요청- push 요청 보내기 시작하면서부터 모든 사용자의 device 에..

4장 함수형 인터페이스

함수형 인터페이스(Functional Interface)단 하나의 추상 메서드만을 가진다.함수를 값으로 취급하기 때문에 어떤 함수를 호출할 때, 함수 자체를 파라미터로 전달가능하다.단 하나의 추상 메서드를 가지는 인터페이스 예제public class Example { public static void main(String[] args) { List cryptoCurrencies = SampleData.cryptoCurrencies; Collections.sort(cryptoCurrencies, new Comparator () { @Override public int compare(CryptoCurency c1, CryptoCurrency cc2) { return cc1.getUnit(..

3장 Blocking I/O vs Non-Blocking I/O

Blocking I/O하나의 스레드가 I/O에 의해서 차단되어 대기하는 것CPU 대비 많은 수의 스레드를 할당하는 멀티스레드는 문제점 발생컨텍스트 스위칭으로 인한 스레드 전환 비용 발생컨텍스트 스위칭기존에 실행되고 있는 프로세스의 정보를 PCB라는 공간에 저장되고, 다시 실행해야 할 프로세스 정보를 PCB로부터 불러오는 과정을 컨텍스트 스위칭이라고 한다.컨텍스트 스위칭이 많으면 많을수록 CPU 전체 대기 시간은 길어지기 때문에 성능은 저하된다.과도한 메모리 사용으로 오베헤드 발생 가능성새로운 스레드가 생성되면 JVM에서는 해당 스레드를 위한 스택 영역의 일부를 할당하며, 스래드 정보는 개별 프레임에 저장서블릿 컨테이너 기반의 Java 웹 애플리케이션은 요청당 하나의 스레드를 할당한다. 각각 하나의 스레드..