일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- minikube
- 기록으로 실력을 쌓자
- AWS EKS
- Kubernetes
- Pinpoint
- kotlin
- kotlin coroutine
- Java
- CKA
- Spring
- CloudWatch
- PETERICA
- 공부
- Elasticsearch
- 정보처리기사 실기 기출문제
- MySQL
- kotlin spring
- aws
- 오블완
- CKA 기출문제
- kotlin querydsl
- 티스토리챌린지
- 정보처리기사실기 기출문제
- mysql 튜닝
- IntelliJ
- APM
- AI
- Linux
- 코틀린 코루틴의 정석
- 정보처리기사 실기
- Today
- Total
목록전체 글 (777)
피터의 개발이야기
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다. ㅁ 비구조적 동시성의 한계ㅇ 책에서 설명하는 구조화된 동시성을 이해하기 위해서는 비구조적 동시성의 한계를 우선 알아야 한다. ㅇ 작업의 단위가 단편적인 경우도 있지만, 상호의존적인 여러 개의 하위 작업들로 나누어지는 경우가 있다. 예전에는 이를 단일 스래드로 순차적으로 처리하면서 에러 발생 시 Exception처리를 하고 종료를 하면 큰 문제가 발생하지 않았다. ㅇ 하지만 고가용적인 방식으로 각각의 작업이 비동기로 서로 독립적으로 수행하면 전체적인 작업은 빠르게 병렬처리되지만 제어권이 개별적으로 있어 에러헨들링은 어렵게 되었다. ㅁ 구조적 동시성의 개념과 필요성ㅇ 구조적 동시성(Structured Concurrency)이란 부모 작업과 하위..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다. 6장 CorotineContextCoroutine Context는 코루틴을 실행하는 실행환경을 설정하고 관리하는 인터페이스로 CoroutineContext 객체는CoroutineDispatcher, CoroutineName, Job 등의 객체를 조합해 코루틴의 실행환경을 설정한다. 코루틴을 실행하고 관리하는 핵심적인 역할을 하며, 코루틴의 실행과 관련된 모든 설정은 CoroutineContext객체를 통해 이뤄진다. - CoroutineContext 구성 요소- CoroutineContext 구성 방법- CoroutineContext 구성 접근- CoroutineContext 구성 제거 ㅁ CoroutineContext 구성 요소Coro..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다. 5장 async와 Deferred(async-await와 withContext)- async-await 사용해 코루틴으로부터 결과값 수신하기- awaitAll 함수를 사용해 복수의 코루틴으로부터 결과값 수신하기 - withContext 사용해 실행 중인 코루틴의 CoroutineContext 변경하기 ㅁ async-awaitㅇ 기본적으로 비동기 코루틴은 생성되자마자 실행을 시작한다. 그러나 Wait 또는 start 함수가 호출될 때까지 실행을 지연시키는 CoroutineStart.LAZY와 같은 CoroutineStart 인수를 전달하여 이 동작을 변경할 수 있다 .ㅇ async-await 메서드는 결과를 기다리는 동안 여러 비동기 작업을 ..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다. 4장 코루틴 빌더와 Jobㅁ 코루틴 빌더// Job 객체 생성val job: Job = launch(Dispatchers.IO) { println("job은 생성된 코루틴의 상태를 추적하고 실행과 정지를 수행할 수 된다.")}ㅇ runBlocking 함수와 launch 함수는 코루틴을 만들기 위한 코루틴 빌더 함수이다.ㅇ 코루틴 빌더는 코루틴을 추상화하나 Job 객체를 통해 코루틴의 상태를 추적하고 일시 중단 및 재실행을 할 수 있다. ㅁ join함수를 이용한 순차처리 val firstJob = launch(Dispatchers.IO) { println("[${Thread.currentThread().name}] firtst jo..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다. 2장 정리ㅇ 현재 실행 중인 스레드의 이름 출력: Thread.currentThread().nameㅇ 스레드의 이름 출력: JVM의 VM options에 -Dkotlinx.coroutines.debugㅇ CoroutineName으로 코루틴의 이름을 지정 ㅁ 실행 중인 코루틴의 이름 출력 VM option-Dkotlinx.coroutines.debug[main @coroutine#1] Start]종료 코드 0(으)로 완료된 프로세스ㅇ 스레드 출력 시 코루틴의 이름이 표출된다. ㅁ launch로 개별 스레트 할당하기fun main() = runBlocking { println("[${Thread.currentThread().name}]..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다.ㅇ 이번 글에서는 1장 스레드 기반 작업의 한계와 코루틴의 등장을 읽거, 코루틴이 단일 스레드, 멀티스레드의 한계인 스레드 블러킹을 해결하는 원리인 경량 스레드에 대해서 정리하였다. ㅁ 단일 스레드의 한계와 멀티스레드 ㅇ 메인 스레드는 일반적으로 프로세스의 시작과 끝을 함께 하는 역할을 한다.ㅇ JVM의 프로세스는 기본적으로 메인 스레드 단일 스레드로 실행된다. ㅇ 단일 스레드의 한계 ㄴ 단일 스레드는 동시작업을 수행할 수 없기 때문에 하나의 작업이 오래 걸리면 다른 작업의 처리도 지연된다.ㅇ 멀티 스레드 ㄴ 오래 걸리는 작업은 멀티 스레드를 이용하여 백그라운드로 처리한다. ㄴ 실시간성으로 처리해야 할 화면 그리기나 사용자 이벤..
ㅁ 들어가며ㅇ 코틀린 코루틴의 개념을 정리하였다.ㅇ 최근 트랜드인 비동기처리에 있어서 코틀린 코루틴의 차이점에 대해 알아보았다. ㅁ Coroutine이란?Coroutines은 Co + Routines 약자로, Co 는 Cooperation을 의미하고, Routines는 하나의 테스크를 의미한다. 풀어서 말하자면, 서로 협력하는 함수를 의미한다. ㅁ 간결하고 읽기 쉬운 코드ㅇ 코루틴을 사용하면 복잡한 비동기 작업을 마치 동기 코드처럼 작성할 수 있다. ㅇ 이는 콜백 지옥을 피하고 코드의 가독성을 크게 향상시킨다.ㅇ 아래는 코틀린의 가독성을 확인하기 위해 Callback 지옥, RxKotlin, coroutine을 비교해 보았다. Callback 지옥fun goWork(person: Person) { ..
ㅁ 들어가며ㅇ Terraform으로 minikube를 구축하는 테스트를 진행해 보았습니다. ㅁ minikube 환경ㅇ minikube의 기본으로 설치하였다. ㅇ minikube를 우선 시작한 후에 terraform으로 내부 리소스를 생성한다. ㅁ Provider 설정terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = "2.11.0" } }}provider "kubernetes" { config_path = "~/.kube/config" config_context = "minikube"}ㅇ providers.tf 파일을 생성하였다. ㅁ k8s 설정resour..
ㅁ 들어가며ㅇ spring boot tutorial를 참조하여 나만의 확장 프로그램 만들기를 구현해 보았습니다. ㅁ Configuration propertiesㅇ Kotlin에서 애플리케이션 속성을 관리하는 데 권장되는 방법은 읽기 전용 properties을 사용하는 것입니다. @ConfigurationProperties("blog")data class BlogProperties(var title: String, val banner: Banner) { data class Banner(val title: String? = null, val content: String)}ㅇ BlogProperties.kt을 생성합니다. ㅁ Application Enable Properties 설정@SpringBootApp..
ㅁ 들어가며ㅇ spring boot tutorial를 참조하여 나만의 확장 프로그램 만들기를 구현해 보았습니다. ㅁ RestController 생성@RestController@RequestMapping("/api/article")class ArticleController(private val repository: ArticleRepository) { @GetMapping("/") fun findAll() = repository.findAllByOrderByAddedAtDesc() @GetMapping("/{slug}") fun findOne(@PathVariable slug: String) = repository.findBySlug(slug) ?: throw ResponseStatusEx..
ㅁ 들어가며ㅇ spring boot tutorial를 참조하여 나만의 확장 프로그램 만들기를 구현해 보았습니다. ㅁ Gradle 수정plugins { ... kotlin("plugin.allopen") version "1.9.22"}allOpen { annotation("jakarta.persistence.Entity") annotation("jakarta.persistence.Embeddable") annotation("jakarta.persistence.MappedSuperclass")}ㅇ 코틀린에서 JPA를 사용하기 위해서는 allopen 플러그인을 사용해야한다.ㅇ allopen 플로그인과 JPA를 사용하기 위한 추가 annotation을 설정하였다.ㅇ 수정파일: build.gradle.k..
ㅁ 들어가며ㅇ 코틀린을 처음부터 코드로 잘 코딩할 수는 없다.ㅇ 기존 자바코드를 코틀린으로, 코틀린에서 자바로 변경하는 방법을 정리하였다.ㅁ Java -> Kotlin ㅇ 코드 > Java 파일을 Kotlin 파일로 변환을 클릭한다.ㅇ Kotlin 파일 변경 전에 Kotlin 구성을 수행해야 한다. ㅇ Kotlin 구성을 수행 완료 후에 개별 파일들을 Kotlin으로 변환처리하면 변환된 코틀린 소스를 확인 할 수 있다. ㅇ 왼쪽은 자바 소스이고 오른쪽은 변환된 코틀린 소스이다. ㅁ Kotlin -> Javaㅇ Kotlin에서 자바로 변경하기 위해서는 바이트코드로 중간 과정을 거쳐야 한다.ㅇ 원하는 Kotlin 소스를 선택 후 도구 > Kotlin > 바이트코드표시를 선택한다.ㅇ 오른쪽에 바이트코드 표시..
ㅁ 들어가며ㅇ spring boot tutorial를 참조하여 나만의 확장 프로그램 만들기를 구현해 보았습니다. ㅁ 확장 함수란? 확장 함수는 이미 정의된 클래스나 인터페이스에 상속 없이 함수를 추가 정의할 수 있도록 Kotlin에서 제공되는 기능입니다.예를 들어, 수정할 수 없는 타사 라이브러리의 클래스 또는 인터페이스에 대한 새 함수를 작성할 수 있습니다. 이러한 함수는 마치 원래 클래스의 메서드인 것처럼 일반적인 방법으로 호출할 수 있습니다. 이 메커니즘을 확장 기능 이라고 합니다. 기존 클래스에 대한 새 속성을 정의할 수 있는 확장 속성도 있습니다. ㅁ Extensions.kt// 영어 날짜 형식으로 텍스트 생성, 기존 format() 유형에 함수를 추가fun LocalDateTime.forma..
ㅁ 들어가며ㅇ 패러렐즈 데스크톱 19 크랙 글에서 설치과정을 정리하였지만, 크랙의 다운로드가 막혀 사용할 수 없게 되었습니다.ㅇ 새로운 저장소를 이용한 설치방법을 따로 정리하였습니다.ㅇ 제가 직접 설치해 보지는 않았습니다. 24.05.30 Update...Git이 막혔습니다. 크랙 소스가 없어졌습니다. ㅁ 새로운 Crack ㅇ 기존 크랙을 대체할 다른 크랙버젼이 있어서 링크 남겨 놓습니다.ㅇ 저는 이미 설치가 되어 있어 적용은 해 보지 않았습니다.ㅇ 설치는 해당 링크의 소스를 다운 받아서 진행하셔야 합니다. !! 아래의 글은 git의 번역본 입니다 !! ㅁ Parallels Desktop 19.0.0-54570용 크랙버젼✅ ARM64✅ x86_64✅ 네트워크✅ USB✅ 시스템 무결성 보호(SIP)ㅁ 사용..