728x90

분류 전체보기 166

코드스피츠 코틀린 2강 정리

KClass KClass - 코틀린 클래스를 얻는 방법? 클래스::class 인스턴스::class KClass.members Collection KCallable 모든 호출가능한 요소 KProperty 속성 여기서 의문은 왜 Class Property 는 호출 가능한 요소인가? 라고 하면 Kotlin 에서는 값을 만들면 getter 또는 setter 를 자동으로 만들어준다. 물론 이건 변수가 val / var 냐의 차이도 있지만, kotlin delegate 를 공부해보면 kotlin property 는 호출 가능한 요소임을 좀 더 와닿게 알 수 있다. 예시가 허접하지만 대충 이렇게 된다 class Person { var name: String by PersonNameDelegator() } class ..

Kotlin 2022.06.14

코드스피츠 1강 정리

머릿글 들어가기에 앞서, 좋은 강의 영상을 제공해주신 코드스피츠에 감사합니다. 이 글은 코드스피츠 - 코틀린 강좌 영상을 주관적으로 정리한 글입니다. 그래서 영상의 내용도 많은데, 제가 오버랩되서 떠오른 내용도 많습니다 ㅎㅎ. 틀린 부분이 있다면 피드백 부탁드립니다. 영상 링크 코틀린에 대한 이해 코틀린은 독립된 언어로 여러 플랫폼에서 번역되는 가운데서도 고유의 철학을 유지 다만 JVM 에는 호환성이 높으나, 다른 언어는 Reflection 이나 GC가 없는 언어에서는 호환성이 그다지 높지 않음 안드로이드, IOS 를 코틀린으로 대체하면 사실상 공통로직 한벌짜는데는 좋은데, 플러터 처럼 공통 UI 를 지원하지는 않아서 인력이 증강될 확률이 높음. 언어 시스템의 형 원시형 (Primitive) 대입이나 함..

Kotlin 2022.06.12

HAR File 로 HTTP Request 추적하기

최근에 AWS ELB 쪽 버그를 제보하면서 AWS 에서 버그를 제보하는 방법에 대해서 가이드를 받았었다. 가이드를 받던 도중 .har 파일이라는 것에 대해 알게되었는데, 이게 참 기획자 분이나 QA 분에게 알려드리면 좋을것 같아서 사내 위키에 올리고 팀원에게 공유했다. Har file 이란? HTTP Archive format 의 약자로 Json 형태의 파일로 네트워크 기록을 Debug 하기 위해 사용한다. Viewer 를 통해 파일을 열어보면 아래 사진으로 확인할 수 있듯이 해당 유저가 Network Tab 의 기록동안 어떤 일을 했는지 파악할 수 있다. 하는 방법 1. Chrome Tab 에서 개발자 도구를 연다 2. Network 기록 제거를 실행한다. (반드시 해주어야함!!!) 3. 기록을 다 지..

일일회고 2022.06.10

MySQL 미사용 인덱스 조회 하는 방법

최근 팀에 SlowQuery 개선으로 인덱스를 추가하면서 쓸모없는 인덱스가 겹치는 인덱스들이 있겠다는 생각이 들었다. 그래서 팀원들과 같이 얘기해보고 DBA 분과도 얘기해봤지만 마땅한 방법을 찾지 못했었다. 그래서 처음에는 General log 떨어지는 것들을 조사해보는 프로그램 이런걸 만들어볼까? 하다가 이건 미친짓이다 싶어서 분명히 방법이 있을거야 하고 검색을 해보게 됬다. MySQL 을 공부하다보면 알게 되는것이 성능 분석을 위해서는 performance_schema 를 확인하는 것이 가장 좋다. 일단 MySQL 공식문서에도 나와 있듯이, performance_schema 테이블은 information_schema 보다 좀 더 low 한 level 에서의 측정을 기반으로 성능측정을 하게 된다. 성능..

DB 2022.06.08

어떻게 Service Layer 간 Transaction Session 을 공유할 수 있을까?

Spring 의 Transaction 을 사용하다 보면 이런 생각이 든적이 있을 것이다. 어떻게 Propagation 정책이 동작하는거지? Code 가 Generate 될때 Inline 함수처럼 해당 함수로 들어가는건 아닐 것 같은데? 어떻게 같은 Session 을 공유하는 걸까? 라는 생각이 들 것이다. 아래의 코드를 한번 보자. 김영한님의 스프링 DB 1편 강좌의 예시 코드 중 하나이다. public void updateMoney(Connection conn, String memberId, int money) throws SQLException { String sql = "update member set money = ? where member_id = ?"; PreparedStatement pstm..

Spring 2022.06.06

AWS Target Group Health Check 경로 설정

최근 AWS 무중단 배포를 회사 AWS 연습장에서 계속 혼자서 해보고 있는데, HealthCheck 부분 때문에 꽤 골머리를 앓았다. 나는 /health 에 요청을 보내서 확인하고 있는 줄 알았는데 / 쪽으로 요청을 보내서 확인하고 있었다. 지금은 내가 /acturator/health 로 바꿔 놓았지만 원래는 '/' 로 되어 있었다. 하도 예전에 한번 했어서 '/acturator/health' 에 보냈었지? 이러고 배포를 해서 오늘 삽질을 제대로 했다. 일단 바꾸는 법은 아래와 같다. Target Group 에 들어가서 내가 선택한것과 똑같이 Health Checks 메뉴를 클릭한 뒤 Edit 버튼을 누르면 된다. 그러면 아래처럼 설정할 수 있는 창들이 나온다. 나는 Interval 을 좀 빠르게 보기 ..

AWS 2022.06.05

INSERTION-SORT

INSERTION-SORT 삽입 정렬은 배열의 크기가 작을 수록 유리한 알고리즘 이며 단순하다. 책에 카드 예시가 하나 이해하기 쉽게 나오는데 같이 한번 봐보도록 하자. 책상에 카드더미들이 놓여져 있고, 왼손으로 하나씩 집어서 옮긴다고 해보자. 카드 더미들을 옮긴 뒤에 하나씩 비교하며 Ascending 방식으로 정렬을 해야 한다. 삽입 정렬의 경우는 가장 오른쪽 부터 하나하나 씩 확인하여 적당한 위치에 옮기면 된다. 책에서 나오는 INSERTION-SORT 알고리즘의 수도 코드는 아래와 같다. A = [5, 2, 4, 6, 1, 3] // Index Starting from 1 not zero for j = 2 to A.length key = A[j] i = j - 1 while i > 0 && A[i]..

자료구조 2022.06.05

코루틴으로 Heap 사용량 최적화(?) 한 이야기 끄적

기존에 Spring 의 @Async 를 CustomThreadPool 을 이용해서 사용했었는데, 해당 부분이 엄청나게 빠른 요청이 초당 들어와서 Thread 가 부족해서 비즈니스 요건 상 discard 해도 크게 타격은 없기에 discardPolicy 를 사용하기도 했었다. 요즘 코루틴을 공부하면서 Coroutine 이 얼마나 효율적인지 배우고 있는데 이를 실무에 적용해봤더니 위와 같은 결과가 나왔다. 사실 근데 의문은 Coroutine 은 Continuous 를 Heap 에 담아두고 있는데 왜 Heap 사용량이 오히려 줄었지? 이런 생각이 들었다. 여하튼 아래를 보면 알 수 있듯이 CPU 사용량이 올랐다. 팍 튄 부분은 배포때문이고 16:00 때부터 코루틴으로 배포됬다고 생각하면 된다. CPU 사용량은..

Kotlin 2022.06.02

Express 에 B3-Propagation 전달하기

우리는 MSA 환경의 Spring 에서 주로 Sleuth 라는 Library 를 사용한다. Sleuth 는 B3-Propagation 을 이용하여 서버간의 Request 흐름을 알 수 있게 해준다. Zipkin 등을 이용하면 UI 측면에서 쉽게 추적할 수 있다. 일단 Sleuth 가 어떻게 되어 있는지 간단하게 살펴보자. 기본적으로 Sleuth 는 아래와 같이 trace_id 와 span_id 를 가진다. Spring Sleuth 를 사용하게 되면 Multi Thread 간의 문제도 최신버전에서는 해결해준다. @Async 를 썼을때 다른 Thread 로 Context 가 넘어가더라도 traceId 를 잘 복사해주는 것을 확인했었다. 하여튼 TraceId 를 통해서 우리는 아래와 같이 하나의 요청이 들어왔..

Nodejs 2022.05.30

Kotlin Coroutines - Basic

Kotlin Coroutines 는 다른 언어에 있는 async / await 과 유사한 부분을 구현할 수 있게 만든 library 라고한다. Kotlin 의 suspend function 은 비동기 함수를 다루는데 Java 의 Future 보다도 안전하고 더 적은 버그가 있다고 한다. 일단 백문이 불여 일타 라고 코드로 먼져 보도록 하자 실습 fun main() = runBlocking { // this: CoroutineScope launch { // launch a new coroutine and continue delay(1000L) // non-blocking delay for 1 second (default time unit is ms) println("World!") // print afte..

Kotlin 2022.05.29
728x90