본문 바로가기

개발 관련78

자바 비동기 (2) 지난 포스팅에서 비동기에 대해 살짝 알아봤습니다. 기본적인 Thread, Runnable 를 사용하거나, 자바5 부터 생긴 Future, FutureTask, 그리고 web 3.0 부터 지원된 비동기 서블릿이 있었습니다. 그리고 자바 8로 넘어가면서 비동기를 지원하기 위해 CompletableFuture 가 새로 생겼는데요. 이번에는 이 CompleteableFuture 에 대해 알아보도록 하겠습니다. 1. CompletableFuture? 앞에서 언급했듯이 자바는 비동기를 지원하기 위해 Future 이라는 인터페이스가 있었습니다. 그런데, 왜 CompletableFuture 가 추가되었을까요? 여기서 Future 의 인터페이스에 있는 메소드들을 보면, boolean cancel(boolean mayIn.. 2022. 7. 14.
자바 비동기 (1) 최근 학생들에게 학습을 추천해주는 것과 관련된 작업을 하고 있는데요. 주 단위로 추천이 되어 매주 배치를 통해서 추천 학습이 들어가지만, 신규 회원일 경우 배치에서 누락되는 경우가 있어서, 로그인 등의 행위를 했을 때 비동기적으로 데이터를 쌓아줄까 고민을 하고 있습니다. 프로젝트는 Java - Spring 을 기반으로 하고 있는데, 잠깐만 찾아봐도 방법이 많습니다. 이번 글에서는 비동기에 대한 정의 및 올드한 내용에 대해 다뤄볼까 합니다. 1. 비동기 프로그래밍이란? 일단, 비동기를 논하기 전에 왜 비동기가 나왔는지부터 알아야 할 것 같습니다. 기본적으로 메소드를 실행한다는 것은 메소드가 완료될 때까지 그 메소드를 호출한 코드는 기다려야 함(블록킹 blocking) 을 의미합니다. 얼핏 들으면 당연해보입.. 2022. 7. 14.
Caffeine(캐시 라이브러리) 사용 이번에 회사에서 학습기에 들어가는 화면에 대한 관리를 하는데, 자주 바뀌는 사항이 아니다보니, 캐쉬를 적용하자는 말이 나왔다. 캐시라고 하면 레디스(redis) 를 생각했었는데, caffeine 이라는 것이 나와서, 적용해볼겸 정리해보려고 한다 . 1. Caffeine Java 8을 기반으로 하는 High Performance 캐싱 라이브러리 빈도 및 최근 데이터에 따라 사이즈가 넘어갈 경우 eviction(방출?) 최근 접근 or 쓰기 에 따라 만료 시간 설정 비동기적으로 refresh 가능 key, values 가 자동적으로 weak reference 로 wrap cache access 에 대한 statistics 제공 등등.. 이 있다. 2. 사용 우선, maven 을 사용하므로 pom.xml 에 .. 2022. 7. 14.
eventPublisher 와 eventListenr 사용 서론 최근 마이크로미터를 사용하여 해당 서비스의 접속 카운트를 표시할까 해봤다. (오로지 흥미 위주로..) 처음에는 MeterRegistry 와 Counter 를 직접 사용하여 해당 메소드에 추가해주는 식으로 구현했었다. 구현하고 보니 정작 이거 counter 부분에서 에러가 나면 어떻게 되지? 중요 비즈니스 로직과는 무관하게 진행되야 하는건데 라는 생각이 들어서 다른 방법을 알아보던 차에 다른 방법을 생각해봤다. 처음에는 인터셉터의 afterCompletion 을 사용해봤으나, lateinit 을 이용하고 해도 계속 초기화 문제가 발생해서 이리저리 해보다가 결국은 이렇다할 해결책을 못 찾고(코틀린과 스프링에 대한 지식이 부족...), 다른 방법을 찾다가 EventListener 을 통해 비동기 방식으로.. 2022. 7. 14.
캡슐화(encapsulation) 캡슐화(encapsulation) 객체가 내부적으로 기능을 어떻게 구현하는지를 감추는 것 내부의 기능 구현이 변경되더라도 그 기능을 사용하는 코드는 영향을 받지 않음 내부 구현 변경의 유연함을 줌 1. 절차 지향 방식과의 비교 회원의 서비스 만료 날짜 여부에 따른 처리를 하는 로직 1. 절차 지향 방식 코드 @Getter public class Member { ... private Date expireDate; private boolean male; } if(member.getExpireDate() != null && member.getExpireDate().getTime() < System.currentTimeMillis()) { // 만료 시 처리 로직 } Member 의 expireDate 를 현재.. 2022. 7. 14.
Feign 사용 (2) Circuit Breaker 적용 API 통신에서 서킷 브레이커를 적용해야 한다는 얘기를 들었고, 이 역시 처음 듣는 용어라 일단 이해를 위해.. Circuit Breaker 란? 회로차단기로 불리며, 전기적 회로를 과전압 등으로부터 보호하기 위한 장치 시스템에서 장애의 확산을 막기위해 (결함을 격리) 사용되는 패턴의 일종 Netflix 의 Hystrix가 있음 즉, 통신에 문제가 있을 때, pool 을 계속 점유하는 현상을 막기 위해, 차단기를 open 하여 격리한다고 생각하면 될 거 같다. 뭔가 개념적으로는 이해가 되면서도 헷갈리는 개념이랄까나.. (이해안됐다는 소리...?) 여하튼 본론으로 들어가서 이전에 적용했던 Feign 에 서킷브레이커를 적용시켜보도록 함. resilience4j-feign 을.. 2022. 7. 14.