728x90

분류 전체보기 173

Kotlin NoteBook In Intellij

What is Kotlin Notebook? Kotlin Notebook 은 Intellij 에서 Jupyter Notebook 의 Python 과 비슷한 형태로 코틀린을 쉽게 실행시킬 수 있도록 만든 것인데요. 조금 더 간편하고 쉽게 코틀린을 실행시켜야 하는 상황에서 사용하기 좋을거 같습니다. 생성하는 방법 1. Python 설치 일단 코틀린 Notebook 플러그인 을 실행시키기 위해서는 위와 같이 Python 을 요구하게 됩니다. 따라서 Python 을 Settings - Plugin 에 검색하여 다운받아 주도록 합시다. (이미 다운 받으셨다면 별도로 다운로드 하지 않으셔도 좋습니다.) 2. 코틀린 노트북(Kotlin Notebook) 설치 이제 위와 같이 코틀린 노트북 또한 Plugins 에서 검..

Kotlin 2023.07.11

Heap 튜닝 정리

Heap 튜닝 정리 개요 최근에 팀내에서 Memory 임계치가 70% 이상을 넘기는 일들이 발생했다. [사진] 지표를 통한 문제 분석 현재 팀내 시스템에는 08 ~ 22 사이에 다수의 일감을 분배해주는 큰 Dispatcher 시스템이 존재한다. 10초당 한번 씩 동작하고 있으며 DB 작업과 Queue 작업을 수반하고 수백~수천건의 객체들을 사용하게 된다. (중복 발행도 가능한 시스템이라 로드가 어느정도 있다.) 그래서 이 구간에서 Object Reference 가 잘 해제되지 않는건가? 라는 의심을 가지고 분석을 시작하게 됬다. 의심되는 부분을 일단 확인하기 위해 로그를 확인해봤는데 Dispatcher 시스템은 새벽시간대에는 동작하지 않는다는 것을 확인했다. 그래서 해당 시스템이 문제를 일으키지 않는다고..

JVM 2022.11.22

우아한 러닝 1주차

이벤트 스토밍 도메인을 빠르게 익히기 위해 하는 과정 도메인 지식의 상향 평준화가 목표, 서로 배우는 것이 중요함. 이벤트 스토밍은 기록 및 관리하려고 하면 안됨. 그냥 워크샵에서 끝내는게 좋음. -> 유지보수 하려고 하는 대상으로 만들지 않아야 함. 준비물 큰 회의실, 종이, 포스트잇 마커펜 실제 문제 해결에 관련된 모든 사람(질문이 있는 사람) -> 해당 도메인 전문가 느낌. 교육이나 회의를 리드하는 사람(진행자) 진행방법 벽에 커다란 종이를 붙여 놓고 포스트잇(도메인 이벤트 중심)을 붙여 나간다 도메인 이벤트 설명은 혼란스러운 탐험의 도메인 이벤트 설명을 참조. 비즈니스 프로세스를 이해하는 데에 초점을 맞춘다. 모든 사람의 생각을 허용하고 존중한다. 혼란스러운 탐험(1단계) 각자 알고 있는 도메인 ..

일일회고 2022.11.09

Kotlin 동시성 프로그래밍

동기식 프로그래밍 초기 컴퓨터의 문제 초기 컴퓨터는 하나의 프로그램만을 실행시키는 역할을 했다. 그래서 초기 시분할 시스템에서는 각 프로세스가 가상적인 폰 노이만 컴퓨터 였다. 폰 노이만 컴퓨터 답게 각각 명령어와 데이터를 저장하는 메모리 공간을 가지고 기계어로 된 명령어를 순차적으로 수행하며, 운영체제가 제공하는 I/O 수단을 통해 외부와 교류했다. 위와 같은 이유로 초기 컴퓨터의 문제점은 다양했다. 하나의 문제를 뽑자면, 외부 입출력과 같은 작업이 지속되면 프로그램이 블락(Block)되어 시간적으로 비효율적일 수 밖에 없었다. 스레드의 등장 위와 같은 문제점을 해결하기 위한 방법론 중 하나로 스레드 가 등장하게 되었다. 스레드는 PC(프로그램 카운터), 스택, 지역 변수등을 가지고, 공유해야 할 변수..

Kotlin 2022.11.07

Kotlin Sequence

Kotlin Sequence Kotlin 에는 Collection 과 함께 Sequence 라는 스펙이 존재한다. 공식문서에 따르면 Collection 처럼 Element 를 저장하는 방식이 아니고, Iterator 에 가깝다. 정확히는 순회하면서 Element 를 생산(Produce) 한다. Lazily Evaluation Sequence 의 가장 큰 장점은 지연 평가가 가능하다는 것이다. 즉, 우리가 Collection 을 사용하여 map, filter, ... 와 같은 연산을 수행하게 될 경우 그 즉시 값을 계산하게 된다. 예를 들면 listOf(1,2,3,4,5).map {it * 2} 와 같이 될 경우 5개 Element 를 그 즉시 계산하게 된다는 것이다. 당연하게도 위와 같이 즉시 연산이 필..

Kotlin 2022.10.25

Kotlin Coroutine Series - 7 ) Dispatcher

Dispatcher Dispatcher 는 코루틴에서 중요한 기능적 역할을 한다. 코루틴의 Task 가 어떤 Thread 에서 실행할지 결정하는 역할을 해준다. 앞서 봤듯이, 코틀린에서 우리가 코루틴을 이용하여 코드를 작성하면, 아래와 같이 분기가 쳐지는 것을 확인할 수 있다. fun originalFunction(continuation: Continuation): Any { continuation as OriginalFunctionContination if (continuation.label == 0) { continuation.thisLocalVariable = 10 continuation.thisLocalVariable2 = "Local Value" println("Start!!") continua..

Kotlin 2022.10.22

Kotlin Coroutine Series - 6 ) Coroutine Scope

Coroutine Scope 코루틴에서 영역(Scope) 는 코루틴 컨텍스트와 코루틴의 생명주기(LifeCycle) 을 관리하기 위해 사용된다. 따라서 코루틴은, 앞서 배웠던 구조화된 동시성(Structured Concurrency) 를 위해서, 자신만의 Job 을 보유하게 된다. GlobalScope 를 왠만해서 사용하지 말라고 하는 이유 또한, 코루틴의 시작과 종료를 관리하기 어려운 상태로 빠져들 수 있으므로 Memory Leak 현상을 초래할 수 있게 된다. coroutineScope 함수 coroutineScope(block) 함수는 새롭게 코루틴을 만드는 역할을 한다. coroutineScope 의 특이한 특성은 새로운 코루틴이 끝나기전까지, 이전 코루틴을 일시중단시키게 된다. 예를 들기 위한 ..

Kotlin 2022.10.22

Kotlin Contract

Kotlin 을 사용하다 보면 유용한 확장함수들을 많이 만들어서 사용하게 되는데요. 이 확장함수를 사용하다 보면 "스마트 캐스트" 와의 문제에 부딪히고는 합니다. 한번 코드를 통해 Smart Cast 를 알아보도록 합시다. Smartcast 위에서 설명한 예시를 코드로 보여주자면, 아래와 같은 상황인데요. 분명 isNotNull 이라는 제가만든 커스텀 확장함수로 NullCheck 를 함에도 불구하고 아래와 같이 `?(safe-null)` 을 써야만 하는 상황입니다. 이 상황은 왜 발생할까요? Kotlin 의 SmartCast 는 쉽게 얘기해서 컴파일러(Compiler) 가 Programmer 대신에 Casting 을 Smart 해주게 하는 기능을 뜻합니다. 즉, 위 코드가 SmartCasting 이 안되..

Kotlin 2022.10.03

Kotlin Spring JSR-303 Issue 해결

Kotlin JSR-303 Issue Kotlin Spring 을 통해 개발하다보면 생각보다 Spring 에서 Kotlin 스럽게 사용하기 위해 몇가지 Custom 을 해줘야 하는 상황들이 생깁니다. 아래와 같이 Kotlin Coroutines 는 Spring 5.3 부터 지원되는 Spec 으로 Controller 에서 suspend method 를 이용하는것을 가능하게 해줍니다. suspend modifier 와 hibernate validation Issue 따라서 기존의 Validation 들을 그대로 내비둔채 suspend modifier 를 붙여주게 되면 실제로 테스트 해볼때 아래와 같은 에러를 마주하게 됩니다. 이유는 hibernate-validation 이 Coroutines 를 Suppor..

Kotlin 2022.10.03

Kotlin Coroutine Series5 ) Cancellation And Exception Handling

Cancellation Cancellation 은 Coroutine 에서 정말 중요한 기능 중 하나이다. 앞서 Job Life Cycle 에 대해 우리가 공부했을때, Job 이 취소 될 수 있다는 것을 공부했었다. 또한 취소될때 곧바로 취소되는 것이 아니라 Cancelling State 에서 취소 되기전 Resource 반납등의 작업을 한다는 것 또한 알게 되었다. 따라서 코루틴을 활용한 Library 나 Framework 를 구성하게 될때, Cancelling 상태에서 어떤 작업을 할지를 잘 구성해야 자원을 낭비하지 않게 잘 구성될 수 있을 것 이다. 이번장은 중요한 만큼 Coroutine 코드도 많고, 내부 동작을 자세하게 들여볼 예정이다. Cancel 우리가 앞전에 봤던 Job 에는 cancel()..

Kotlin 2022.10.01
728x90