일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- kotlin querydsl
- 기록으로 실력을 쌓자
- AWS EKS
- Spring
- 정보처리기사 실기 기출문제
- CloudWatch
- MySQL
- IntelliJ
- kotlin coroutine
- 코틀린 코루틴의 정석
- Kubernetes
- 정보처리기사실기 기출문제
- minikube
- 공부
- kotlin spring
- 오블완
- Linux
- CKA
- AI
- Elasticsearch
- PETERICA
- Pinpoint
- aws
- CKA 기출문제
- Java
- 티스토리챌린지
- mysql 튜닝
- APM
- kotlin
- 정보처리기사 실기
- Today
- Total
목록Programming (187)
피터의 개발이야기
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다. ㅁ 비구조적 동시성의 한계ㅇ 책에서 설명하는 구조화된 동시성을 이해하기 위해서는 비구조적 동시성의 한계를 우선 알아야 한다. ㅇ 작업의 단위가 단편적인 경우도 있지만, 상호의존적인 여러 개의 하위 작업들로 나누어지는 경우가 있다. 예전에는 이를 단일 스래드로 순차적으로 처리하면서 에러 발생 시 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) { ..
ㅁ 들어가며ㅇ 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..