일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- cli 만들기
- 돌연변이 테스팅
- MySQL
- standard output
- resize image with go
- 코틀린 in
- Java
- JPA
- output stream
- Pitest
- ruby
- IntelliJ
- Convariance
- image resizer with go
- Mutation testing
- 개인블로그 hugo
- kotlin
- InnoDB
- 코틀린 out
- 공짜블로그
- 코틀린 노트북
- 자바
- 객체지향
- change refresh rate
- Test
- resizer 구현
- 코틀린
- hugo 로 블로그
- standard input
- 의존성역전원칙
- Today
- Total
목록분류 전체보기 (160)
Rlog
Heap 튜닝 정리 개요 최근에 팀내에서 Memory 임계치가 70% 이상을 넘기는 일들이 발생했다. [사진] 지표를 통한 문제 분석 현재 팀내 시스템에는 08 ~ 22 사이에 다수의 일감을 분배해주는 큰 Dispatcher 시스템이 존재한다. 10초당 한번 씩 동작하고 있으며 DB 작업과 Queue 작업을 수반하고 수백~수천건의 객체들을 사용하게 된다. (중복 발행도 가능한 시스템이라 로드가 어느정도 있다.) 그래서 이 구간에서 Object Reference 가 잘 해제되지 않는건가? 라는 의심을 가지고 분석을 시작하게 됬다. 의심되는 부분을 일단 확인하기 위해 로그를 확인해봤는데 Dispatcher 시스템은 새벽시간대에는 동작하지 않는다는 것을 확인했다. 그래서 해당 시스템이 문제를 일으키지 않는다고..
이벤트 스토밍 도메인을 빠르게 익히기 위해 하는 과정 도메인 지식의 상향 평준화가 목표, 서로 배우는 것이 중요함. 이벤트 스토밍은 기록 및 관리하려고 하면 안됨. 그냥 워크샵에서 끝내는게 좋음. -> 유지보수 하려고 하는 대상으로 만들지 않아야 함. 준비물 큰 회의실, 종이, 포스트잇 마커펜 실제 문제 해결에 관련된 모든 사람(질문이 있는 사람) -> 해당 도메인 전문가 느낌. 교육이나 회의를 리드하는 사람(진행자) 진행방법 벽에 커다란 종이를 붙여 놓고 포스트잇(도메인 이벤트 중심)을 붙여 나간다 도메인 이벤트 설명은 혼란스러운 탐험의 도메인 이벤트 설명을 참조. 비즈니스 프로세스를 이해하는 데에 초점을 맞춘다. 모든 사람의 생각을 허용하고 존중한다. 혼란스러운 탐험(1단계) 각자 알고 있는 도메인 ..
동기식 프로그래밍 초기 컴퓨터의 문제 초기 컴퓨터는 하나의 프로그램만을 실행시키는 역할을 했다. 그래서 초기 시분할 시스템에서는 각 프로세스가 가상적인 폰 노이만 컴퓨터 였다. 폰 노이만 컴퓨터 답게 각각 명령어와 데이터를 저장하는 메모리 공간을 가지고 기계어로 된 명령어를 순차적으로 수행하며, 운영체제가 제공하는 I/O 수단을 통해 외부와 교류했다. 위와 같은 이유로 초기 컴퓨터의 문제점은 다양했다. 하나의 문제를 뽑자면, 외부 입출력과 같은 작업이 지속되면 프로그램이 블락(Block)되어 시간적으로 비효율적일 수 밖에 없었다. 스레드의 등장 위와 같은 문제점을 해결하기 위한 방법론 중 하나로 스레드 가 등장하게 되었다. 스레드는 PC(프로그램 카운터), 스택, 지역 변수등을 가지고, 공유해야 할 변수..
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 를 그 즉시 계산하게 된다는 것이다. 당연하게도 위와 같이 즉시 연산이 필..
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..
Coroutine Scope 코루틴에서 영역(Scope) 는 코루틴 컨텍스트와 코루틴의 생명주기(LifeCycle) 을 관리하기 위해 사용된다. 따라서 코루틴은, 앞서 배웠던 구조화된 동시성(Structured Concurrency) 를 위해서, 자신만의 Job 을 보유하게 된다. GlobalScope 를 왠만해서 사용하지 말라고 하는 이유 또한, 코루틴의 시작과 종료를 관리하기 어려운 상태로 빠져들 수 있으므로 Memory Leak 현상을 초래할 수 있게 된다. coroutineScope 함수 coroutineScope(block) 함수는 새롭게 코루틴을 만드는 역할을 한다. coroutineScope 의 특이한 특성은 새로운 코루틴이 끝나기전까지, 이전 코루틴을 일시중단시키게 된다. 예를 들기 위한 ..
Kotlin 을 사용하다 보면 유용한 확장함수들을 많이 만들어서 사용하게 되는데요. 이 확장함수를 사용하다 보면 "스마트 캐스트" 와의 문제에 부딪히고는 합니다. 한번 코드를 통해 Smart Cast 를 알아보도록 합시다. Smartcast 위에서 설명한 예시를 코드로 보여주자면, 아래와 같은 상황인데요. 분명 isNotNull 이라는 제가만든 커스텀 확장함수로 NullCheck 를 함에도 불구하고 아래와 같이 `?(safe-null)` 을 써야만 하는 상황입니다. 이 상황은 왜 발생할까요? Kotlin 의 SmartCast 는 쉽게 얘기해서 컴파일러(Compiler) 가 Programmer 대신에 Casting 을 Smart 해주게 하는 기능을 뜻합니다. 즉, 위 코드가 SmartCasting 이 안되..
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..