전체 글
-
[Coroutine] runBlocking vs coroutineScope 차이는?Reactive/Coroutine 2024. 11. 9. 02:46
runBlocking, coroutineScope 차이점runBlockingrunBlocking 내부에서 새로운 코루틴 스코프를 생성블록 내부의 모든 코루틴이 끝날 때까지 runBlocking이 호출된 쓰레드는 대기주로 main 함수와 같이 비코루틴에서 호출할 때나 테스트 코드에서 코루틴을 사용할 때 일반적인 코드 블록처럼 동작하게 하기 위해 사용됨 coroutineScopesuspend 함수 안에서만 호출할 수 있음coroutineScope는 새로운 코루틴 스코프를 만들지만 현재 쓰레드를 차단하지 않음 1. Coroutine 신규 생성 여부fun main() { runBlocking { println("[Main] ${Thread.currentThread().name}") ..
-
[Coroutine] withContext, async 차이는 무엇일까?Reactive/Coroutine 2024. 11. 6. 22:22
withContext, async 차이withContext인자로 받은 CoroutineContext를 사용해 코루틴의 실행 스레드를 전환하고, 람다식의 코드를 실행한 후 결과값을 반환하는 함수람다식을 실행한 후에는 스레드가 다시 이전의 Dispatcher를 사용하도록 전환된다.fun main() = runBlocking { val result = withContext(Dispatchers.IO) { delay(2000L) println("${Thread.currentThread().name} 결과값이 반환됩니다.") "결과값" } println("${Thread.currentThread().name} 결과값이 반환됩니다. result: $result"..
-
[Cassandra] BatchOps insert if exist 컬럼에 null로 업데이트 하고 싶을 때Computer Science/Cassandra 2024. 6. 15. 17:50
Cassandra BatchOps Write Option에 대하여Cassandra에서 insert, update는 둘 다 upsert 방식으로 동작하기 때문에 근본적으로는 큰 차이가 없습니다. 자세히 들어가면 약간의 차이가 있지만 해당 내용은 이 글에서 다루지 않겠습니다.(참고 Link)cassandraTemplate.batchOps() .insert(Entities) .insert(Entities2) .execute();카산드라에서 batchOps를 통해서 경량 트랙잭션을 사용하여 원자성을 보장하도록 저장할 수 있습니다.존재하지 않는 PK에 대하여 INSERT -> 저장존재하는 PK에 대하여 INSERT -> 업데이트 위처럼 동작하게 될텐데 존재하는 PK의 row 필드 중에서 값이 존재..
-
[Cassandra] Cassandra truncate 이후 snapshot 제거Computer Science/Cassandra 2024. 4. 10. 21:57
Cassandra truncate 이후 snaptshot 제거 truncate TRUNCATE test_keyspsace.user_activity; 카산드라에서도 truncate 명령어로 테이블의 데이터를 지울 수 있다. 하지만 데이터를 다시 복구해야 할 수도 있기 때문에 스냅샷이라는 데이터를 남겨놓는다. 즉, truncate 한다고 해서 바로 Disk 사용량이 줄어들지 않고 스냅샷을 제거해야 서버의 Disk 사용량이 줄어들게 된다. snapshot 제거 ./nodetool clearsnapshot {keyspace} --all ex) ./nodetool clearsnapshot test_keyspsace --all Cassandra TRUNCATE 작업 후에 위의 명령어로 SNAPSHOT 제거도 필요하..