Java CompletableFuture java 5에서 Future interface 는 비동기식 연산이 기능하도록 추가되었지만, 계산을 결합하거나 발생 가능한 오류를 처리할 수 있는 방법은 없었다. . java 8은 Future interface, CompleteStage interface 를 구현한 CompletableFuture class 를 선보였다. CompletableFuture 클래스는 다른 단계들과 결합할 수 있는 비동기 연산 단계에 대한 계약을 정의한다. 추가로, 비동기 연산 단계 및 오류 처리를 위한 약 50가지의 다양한 방법을 제공한다. CompletableFuture with Encapsulated Computation Logic public static CompletableFut..
Java Garbage Collection(GC) Effective Java 3/E 책을 보면서 GC에 대한 이야기가 많이 언급되었다. 한 번쯤 공부해 두면 도움이 될 것 같다는 생각에 관련 기사를 읽어보며 정리를 해보았다. ... 애플리케이션에서 성능의 가장 중요한 측면 중 하나는 올바른 GC를 선택하고 이를 최적화는 것이다. 최적의 GC 선택은 각 애플리케이션의 동작 및 요구사항에 따라 달라지므로 자바 개발자는 GC를 이해하는 것이 중요하다. Memory management and avoiding memory leaks 자바는 객체 사용 후 메모리에서 각 객체를 제거하는 자동 GC 실행 애플리케이션에서 생성된 자바 객체는 힙이라는 메모리 세그먼트에 저장 애플리케이션이 새 객체를 생성하고 힙이 가득 차..
Firebase 구글에서 제공하는 모바일 앱/웹을 위한 플랫폼인 Firebase 을 알아보려고 한다. AWS 같은 클라우드 컴퓨팅 플랫폼으로 기대(?)했었는데.. 알고 보니 백엔드의 역할을 대신해 주는 플랫폼으로 보인다.😥 . 인증, 데이터베이스, 스토리지, 푸시 알림 등의 기능을 제공하여 백엔드 개발 없이 프론트 개발만으로도 빠른 앱/웹 개발이 필요한 사람들에게는 유용할 것 같다. 백엔드 개발을 해야 하는데.. 필요가 없다니..🥲 백엔드 개발이 필요 없는 플랫폼인만큼.. Spring-boot 프로젝트를 firebase 에 배포할 수는 없어 보이고 필요하다면 별도 서버에 배포가 필요해 보인다. . Firebase 를 알아보는 김에 Spring-boot 와 연동까지는 해보자. Spring-boot 와 Fi..
Slack Bot - Real Time Messaging API 슬랙의 Real Time Messaging API 를 활용해서 슬랙봇을 만들어 보자. . Real Time Messaging 은 줄여서 RTM 으로 불리기도 하고, 이름처럼 실시간으로 이벤트를 수신하고 메시지를 보낼 수 있는 WebSocket 기반 API 이다. 그 밖에도 Events API, Web API API 를 제공해 주고 있다. . 사내에서는 방화벽 문제로 Real Time Messaging API 를 활용하려고 한다. Real Time Messaging API 의 간략한 설명을 보면 해당 API 를 더 이상 지원을 하고 있지는 않다. 다만, Events API, Web API 활용에 있어 방화벽 제한이 있을 경우 사용할 것으로 안..
Jenkins REST API in JAVA 특정 시기마다 대략 20개 정도의 배치를 Jenkins 에서 수동 재기동해야 하는 일이 있다. 가끔씩? 종종? sometimes.. 있는 일이긴 하지만 너무나 귀찮은 일이다. 한 번의 어떠한 동작으로 이 귀찮은 일을 처리할 수 있는 방법을 떠올리다 Jenkins API 를 활용해 보자는 생각이 들었다. . 이제 하나의 API 호출만으로 20개 정도의 배치가 Jenkins 에서 실행되도록 해보자. 참고로, jenkins-rest 라이브러리를 활용할 수도 있지만 REST API 호출을 적용해볼 예정이다. API Token REST API 사용을 위해 먼저 사용자 API Token 이 필요하다. 아래 경로에서 토큰을 추가할 수 있다. 설정 경로 Jenkins 메인 ..
Spring Batch & Jenkins 구동 방식 개선 현재 실무에서 스프링 배치의 구동 방식이 아래와 같다 Deploy Tool 배치 프로젝트 특정 브랜치의 jar 파일을 배치 서버에 배포 Jenkins Build periodically - Schedule 설정 Execute shell 을 통한 배치 실행 쉘에는 파라미터, 프로파일 설정과 jar 파일로 배치 잡을 실행하는 커멘드가 포함 현상 현재 구동 방식에서는 한 가지(한 가지가 아닐 수도 있지만..) 문제가 있었다. . jar 파일이 배포되는 사이 배치 잡이 실행되거나, 배치 잡이 실행되는 사이 jar 파일이 배포되면 Class 정보를 찾을 수 없다는 예외(java.lang.NoClassDefFoundError, java.lang.ClassNot..
HikariCP HikariCP(Hikari Connection Pool) Connection Pool 을 관리해 주는 라이브러리 Spring Boot 2.0 버전부터 Tomcat connection pool 대신 HikariCP 사용 . HikariCP 기본 설명은 쉽게 풀어서 설명된 링크를 참고해 보자. . 최근 HikariCP Connection 관련 장애를 겪고, HikariCP 의 Connection 관련 이슈와 대응방법에 대하여 알아보게 되었다. 고로... 본문에는 Hikari 기본설정, Dead lock 과 해결방법에 대해서 간단하게 다뤄보려고 한다. Hikari 기본설정 ✅ autoCommit pool에서 반환된 connection의 기본 자동 커밋 동작 제어 Default: true ⏳ ..
Functional Interfaces in Java Functional Interfaces 한 개의 추상 메서드를 가지는 인터페이스 인터페이스에 여러 개의 디폴트 메서드가 있더라도 추상 메서드가 하나라면 함수형 인터페이스 람다 표현식은 함수형 인터페이스로만 사용 가능 함수형 인터페이스를 직접 만들 경우 @FunctionalInterface 어노테이션을 사용하면, 해당 인터페이스가 함수형 인터페이스 조건에 충족하는지 검증 Multiple non-overriding abstract methods found in interface com.practice.notepad.CustomFunctionalInterface Functional Interfaces in Java 함수형 인터페이스 Descripter Me..