분류 전체보기
-
프로젝트에 Feature Flag 적용하기Spring Framework 2024. 6. 1. 15:40
Feature Flag란 무엇인가? (Feature Toggle)Feature Flag란 특정 기능을 동적으로 활성화 혹은 비활성화하기 위해 사용되는 조건부 코드 실행 메커니즘입니다.런타임 환경에서 특정 조건에 따라 코드 특정 부분을 스위치 하여 실제 사용자에게 제공되는 서비스 기능을 다르게 제어할 수 있습니다.특히 이러한 제어를 위해서 매번 코드를 수정해서 배포할 필요가 없다는 특징이 있습니다. Feature Toggle이라고도 불리며 기능을 ON / OFF 할 수 있는 게 특징입니다. 매우 다양한 활용도특정 기능을 ON / OFF 할 수 있는 만큼 매우 다양하게 활용해 볼 수 있습니다. 예를 들면 아래와 같은 활용을 수행해 볼 수 있습니다.서킷브레이커 ON/OFFA/B 테스트카나리 배포Trunked..
-
Spring Batch 대신 @Scheduled 활용해보기Spring Framework 2024. 5. 8. 00:58
Spring Batch와 SchedulerSpring Batch와 @Scheduled는 모두 스프링 프레임워크에서 시간 또는 이벤트 기반의 작업을 스케줄링하기 위해 사용됩니다. 다만 Spring Batch는 스케줄러를 대체하는 것이 아니라 스케줄러와 함께 작동하도록 고안되었습니다.예를 들어 Quartz, Jenkins, Tivoli, Control-M 등과 함께 활용해야 합니다. 주로 데이터 처리, 데이터베이스 작업, 파일 처리 등과 같은 대량의 작업을 일괄적으로 처리하는 데 Spring Batch를 활용합니다. 예를 들어 파일을 다운로드하고, 파일을 전송하고 삭제하는 기능을 구현할 때는 Spring Batch를 선택해서 활용하였습니다. 그렇다면 언제 Spring Batch 대신 @Scheduled를 ..
-
Future를 활용하여 Timeout 구현하기Java/Executor Service 2024. 4. 7. 22:21
개요 코루틴 Timeout이 제대로 동작하지 않은 이유라는 글을 작성하며 코루틴을 활용하여 Timeout을 구현해 보았습니다. 동기적인 코드가 섞여있는 상황이라면 코루틴에 협조적이지 않아 타임아웃이 잘 동작하지 않았던 이슈가 있었고 새로운 스레드를 할당하여 문제를 해결했지만 타임아웃이 발생하더라도 비동기적으로 실행되는 코드들이 계속 동작하는 문제가 있었습니다. 이 문제를 해결하기 위해서 Java 1.5부터 Future를 활용해 볼 수 있습니다. Future란? Future submit(Callable task); Future submit(Runnable task); ExecutorService에서 Runnable, Callable Task에 대해 submit 메서드를 활용하면 Future에 대한 반환값을..
-
코루틴 Timeout이 제대로 동작하지 않은 이유Kotlin/코루틴 2024. 3. 25. 00:24
개요코루틴 timeout을 다루며 코루틴 Timeout이 제대로 동작하지 않은 이유에 대해 공유해보고자 합니다.부제: coroutine timeout dose not work 코루틴의 withTimeout 메서드public suspend fun withTimeout(timeMillis: Long, block: suspend CoroutineScope.() -> T): T { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } if (timeMillis setupTimeout(TimeoutCoroutine(timeMillis, uCont), block) }} withTimeout 메서드를 활용하면 ..
-
ScheduledThreadPoolExecutor란?Java/Executor Service 2024. 3. 17. 19:29
개요 ScheduledThreadPoolExecutor라는 개념을 알게 되어 이해해보고자 합니다. 해당 글을 읽기 전 Future, ThreadPool, ExecutorService, ThreadPoolExecutor 개념에 대해 잘 모른다면 다음 글을 읽고 오시면 좋습니다. ExecutorService란? ThreadPoolExecutor란? ScheduledThreadPoolExecutor란? val fixedThreadPool = Executors.newFixedThreadPool(2) val scheduledThreadPool: ExecutorService = Executors.newScheduledThreadPool(2) //newScheduledThreadPool 내부 구현은 Scheduled..
-
Kotlin takeIf와 takeUnless 함수Kotlin/Kotlin 2024. 3. 13. 00:01
개요 Kotlin에서 takeIf()와 takeUnless() 함수를 제공한다는 사실을 알게 되었고, 해당 함수들에 대해서 알아보고자 합니다. takeIf 함수 public inline fun T.takeIf(predicate: (T) -> Boolean): T? { contract { callsInPlace(predicate, InvocationKind.EXACTLY_ONCE) } return if (predicate(this)) this else null } takeIf 함수는 T (어떤 객체)의 확장함수입니다. predicate를 인자로 받아서 조건에 만족하는경우 자기 자신을 반환하거나 null을 반환합니다. takeUnless 함수 public inline fun T.takeUnless(predi..
-
SOHO란?금융지식쌓기 2024. 3. 12. 00:01
SOHO란? Small Office Home Office의 약자로 기존 사무실의 개념에 벗어나는 공간 내에서 이루어지는 사업을 뜻합니다. 창업용어로써 전문성을 가지고 적은 자본으로도 창업이 가능합니다. 흔히 가택 근무 형태나 인터넷 등을 통해 소규모 사업을 하는 개인 자영업자들을 말합니다. KB 국민은행의 SOHO센터 국민은행을 예로 들면 SOHO 센터를 운영하며 개인사업자 지원제도 및 전용대출상품등을 제공합니다. 참고자료 https://www.moef.go.kr/sisa/dictionary/detail?idx=224 https://m.blog.naver.com/sbcblog/222130815315 https://ko.wikipedia.org/wiki/%EC%86%8C%ED%98%B8_(%EC%98%A4..
-
logback 초간단 사용법모니터링 2024. 3. 11. 00:01
개요Logback은 Java 커뮤니티에서 가장 널리 사용되는 로깅 프레임워크 중 하나입니다. log4j를 대체하고 있으며 빠른 적용이 가능합니다. Dependencydependencies { implementation("ch.qos.logback:logback-core:1.3.5") implementation("ch.qos.logback:logback-classic:1.3.5") testImplementation("org.slf4j:slf4j-api:2.0.4")}3가지 의존성을 추가해주면 됩니다. Logback Architecture %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n ..