본문 바로가기

전체 글105

Inline 함수, 왜 쓸까? 보호되어 있는 글 입니다. 2024. 6. 29.
Coroutine이 취소되는 기본 동작 방식 코루틴의 취소코루틴은 실행 중에 취소 요청에 의해 취소되거나 예외가 발생하여 취소될 수 있습니다.코루틴이 취소되는 것이 중요한 이유는 필요하지 않은 코루틴을 적절하게 취소하여 컴퓨팅 자원을 효율적으로 사용하는 것이 중요하기 때문입니다.그러나 바로 스레드를 죽이는 것은 좋지 않은 해결방법입니다. 스레드에서 활용중이던 리소스 연결을 먼저 해제한 후 취소하는 것이 더 우아한 방법이겠죠? 취소하는 방법코루틴을 취소하는 기본적인 방법은 `cancel` 함수를 사용하는 방법입니다.이 함수를 사용하면 이런 특징을 가지고 있습니다.취소 시점으로부터 첫번째 중단 지점(suspend 함수 사용 지점)부터 취소가 이루어집니다.하위 job이 있는 경우 모두 취소합니다.suspend fun main(): Unit = corou.. 2024. 5. 25.
Coroutine의 개념 이해한대로 정리하기 들어가기 전에코루틴은 코틀린을 접하면서 가장 헷갈렸던 개념 중 하나입니다.그래서 틈틈이 인프런 강의도 보고 이것저것 글도 찾아보며 학습하고 있는데요. 조금씩 학습했던 것들을 정리하며, 더 깊이 남기기 위해 이 글을 작성해보았습니다.혹시나 부족한 부분이 있다면 댓글로 알려주세요 😀아래 개념을 전제하여 작성하였습니다만 이 글에서 다루고 있지는 않습니다.프로세스, 스레드컨텍스트 스위치 context switch동시성, 병렬성메모리 스택영역, 힙영역동기 프로그래밍, 비동기 프로그래밍 Coroutineco는 '협력하는'이라는 의미가 있는 접두사입니다. routine은 컴퓨터 공학에서 이야기하는 루틴입니다. 즉, 협력하는 함수라는 의미입니다.Coroutine은 Kotlin 언어를 개발한 Jetbrain 이 개발자.. 2024. 5. 18.
🐛 Error: EKS 워크 노드 생성에 실패했다... NodeCreationFailure : Unhealthy nodes in the kubenetes cluster 발생 상황AWS EKS 클러스터를 만드는 도중, 워커 노드 그룹 생성에 실패한 상황.AWS 콘솔을 찾아보니 이런 상태 문제가 발생해 있었습니다. 노드로 쓰일 컴퓨팅 리소스는 잘 생성이 되었으나 한참을 생성중인 상태더니 결국 이런 상태가 뜬 겁니다. 발생 원인관리형 노드 그룹의 노드가 15분 내에 클러스터에 연결되지 않으면, NodeCreationFailure 라는 상태 문제가 발생합니다.콘솔 상태가 Create failed로 설정됩니다. AWS 사용자 가이드에서 NodeCreationFailure를 찾아보면 이렇게 설명되어 있습니다. NodeCreationFailure시작된 인스턴스를 Amazon EKS 클러스터에 등록할 수 없습니다. 이러한 오류의 일반적인 원인은 노드 IAM 역할 권한이 충분하지 않거.. 2024. 5. 11.
Kotlin Scope 함수를 어떨 때 쓰면 좋았을까? 보호되어 있는 글 입니다. 2024. 4. 26.
💪우아한 종료Graceful shutdown을 위하여 정상 종료란 무엇일까요?OS로부터 종료 시그널을 받으면 새로운 요청을 받지 않고 처리되고 있던 요청이 모두 끝난 후 모든 자원을 릴리즈한 뒤 프로세스를 종료하는 것입니다.다른 말로는 그레이스풀 셧다운 Graceful shutdown이라고 하기도 합니다.Shutdown gracefully shuts down the server without interrupting any active connections. Shutdown works by first closing all open listeners, then closing all idle connections, and then waiting indefinitely for connections to return to idle and then shut down... 2024. 4. 12.
🐛 Error: MacOS에서 Kind로 구축한 k8s 클러스터의 Deployment external IP에 접근을 하지 못합니다 발생 상황 ``` ☁ _Lecture_k8s_starter.kit [main] ⚡ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE chk-hn LoadBalancer 10.96.253.167 192.168.1.11 80:30941/TCP 12m ``` 쿠버네티스 실습 중에 LoadBalancer service를 만들고 클러스터 내부와 외부에서 External IP로 각각 접근을 실행하였습니다. 클러스터 내부에서는 문제없이 접근할 수 있었으나, 클러스터 외부에서는 timeout이 발생하였습니다. 외부에서 ping을 날려봤지만, timeout이 됩니다. curl 192.168.247.5:30623 // 응답없음... 발생 원인 추측했던 원.. 2024. 4. 6.
공변성과 반공변성과 Generics 들어가며최근 제가 다른 실수(타입 추정이 잘 안되는 문제)를 계기로 제네릭에 대해 다시 공부할 일이 생겼습니다.그러며 새로이 깨달은 것이 `공변성(covariance)` 과 반공변성(Contravariance)`에 대해 제대로 이해하고 있지 않기도 하고.매번 헷갈린다는 생각이 들어서 이번 기회로 조금 정리해보려고 합니다. 이미 Java로 코드를 구현할 때, 이 개념을 자연스럽게 사용하고 있었는데요.새삼 개념과 객체지향 리스코프 치환 원칙 LSP까지 짚어보니 좀 복잡했지만 왜 이렇게 사용해야했는지 이해할 수 있어서 유의미했던 공부였습니다. 공변성과 반공변성먼저 변성(variance)은 타입 시스템에서 서로 다른 타입 간의 관계를 설명하는 개념입니다. 다시말해 상속관계에 있는 A, B 타입이 있을 때, 이를.. 2024. 3. 30.