개요 백엔드에는 실시간으로 이루어지는 클라이언트로부터의 요청/응답 처리 외에도 최소 1분 이상의 오랜 시간이 소요되는 성격의 무거운 작업을 실행해야 하는 상황이 많다. 이를 위한 수단으로 Spring Batch, Quartz 등이 있는데 학습 곡선이 있는 편이다. JobRunr는 n개로 수평 확장되는 멀티 노드 마이크로서비스 환경에서 복잡성을 최소화화면서 가장 간단한 방법으로 Fire and Forget 성격의 특정 작업을 분산 실행할 수 있는 오픈 소스 Java 라이브러리이다. 이번 글에서는 Spring Boot 기반 프로젝트에서 JobRunr을 사용하는 법을 정리하였다. JobRunr 작동 원리 물리적으로 동일한 애플리케이션끼리만 Job을 분산하여 실행할 수 있다. 실행해야할 대상 메써드와 파라메터를..
개요 Eureka Server/Client 환경에서 Spring Boot 기반 프로젝트를 소스 코드의 변경점 없이 다른 App ID로 배포하는 방법을 정리하였다. (JHipster Registry/Gateway에서 정상 작동을 확인했다.) 환경 변수 아래는 현재 프로젝트를 소스 코드의 물리적 변경점 없이 다른 App ID를 가진 Eureka Client 그룹으로 작동시키기 위한 환경 변수 설정 방법이다. SPRING_APPLICATION_NAME=foo-batch EUREKA_INSTANCE_APPNAME=${spring.application.name} EUREKA_INSTANCE_INSTANCE_ID=${eureka.instance.appname}:${random.value} 현재 프로젝트의 이름이 f..
개요 JBoss Infinispan에 대해서는 본 블로그의 이 글에서 자세히 소개한 적이 있다. 이번 글에서는 여러 캐시 라이브러리가 공존하는 복잡한 프로젝트 환경에서 JBoss Infinispan을 추가하고, Spring Cache와 JCache를 연동하는 방법을 정리하였다. Spring Cache 적용 원리 프로젝트의 @Configuration 빈의 클래스 레벨에 @EnableCaching을 명시하면, 전처리기가 활성화되어 모든 스프링 빈의 퍼블릭 메써드 레벨에 명시된 @Cacheable, @CachePut, @CacheEvict를 확인하여 캐시가 작동하게 된다. 스프링 캐시는 별도의 설정을 하지 않고 활성화할 경우, 단순히 CuncurrentHashMap 오브젝트를 캐시로 사용하게 된다. Infin..
개요 Spring Boot 생태계에서 콘솔 애플리케이션을 만드는 방법은 다양하지만, 내가 선호하는 방법을 정리하였다. (대부분은 팀 내부에서 사용하는 유틸리티 성격의 툴링이 목적이다.) build.gradle.kts 웹 애플리케이션이 아닌 한 번 실행되면 준비된 기능을 실행하고 종료되는 애플리케이션을 만들 것이기 때문에 spring-boot-starter이면 충분하다. dependencies { implementation("org.springframework.boot:spring-boot-starter") } @SpringBootApplication 클래스 작성 커맨드라인 인자를 다루면 좋겠지만 팀 내에서만 사용할 것이기에 운영체제 환경 변수 주입을 더 선호한다. import org.springframe..
- Total
- Today
- Yesterday
- MySQL
- jpa
- spring
- 로드바이크
- 자전거
- Tomcat
- Spring Boot
- Eclipse
- 알뜰폰
- maven
- Kendo UI Web Grid
- 구동계
- bootstrap
- JHipster
- 평속
- Docker
- Spring MVC 3
- 로드 바이크
- Kendo UI
- node.js
- java
- jsp
- chrome
- graylog
- 태그를 입력해 주세요.
- JavaScript
- jstl
- CentOS
- kotlin
- DynamoDB
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |