본문 바로가기

분류 전체보기

(49)
Kotlin 에서 GraphQL-spqr 사용시, Companion Object 스키마 빌드 오류 Kotlin + GraphQL 로 개인 토이프로젝트를 진행하다 부딪현던 문제에 대한 공유입니다. 진행하던 토이프로젝트는 Kotlin + Spring-Boot + JPA + GraphQL 이 사용한 대표적인 기술스택이었고 GraphQL 을 사용하기위하여 GrapQL-spqr-starter 의존성을 사용하였었습니다. GraphQL-spqr 은 기존의 Schema-first 즉 graphQL 스키마를 먼저 정의하고 코드를 작성하는 방식에서 Code-first, 코드를 작성하면 그 코드를 바탕으로 스키마를 만들어주는 라이브러리인데요. 그렇게 작업을 하던 과정에서 Java 에서 GraphQL-spqr 을 통하여 작업할때는 마주할 수 없었던 컴파일 오류를 맞이합니다.. 처음보는 오류에 당황했지만 침착하게 대응해봅니..
MySQL Gap Lock, Next key Lock (갭락, 넥스트 키락) 과 데드락 Real MySQL 8.0 을 보다가, Lock 과 Transaction isolation 에 대해 설명이 너무 부족한 것 같아 개인적으로 추가 정리를 해보고자 합니다. 그 중에서도 이번 포스팅은 MySQL 만의 특별한 락인 Gap Lock 을 다루어 보고자 합니다. Gap Lock(갭락) MySQL 은 레코드 기반의 잠금을 지원하여 주로 레코드 잠금(실제로는 레코드의 인덱스를 잠금)으로 동시성을 제어하는데, 갭 락은 실제 존재하는 레코드가 아닌, 레코드가 존재하지 않는 빈 공간에 대해서 거는 MySQL 만의 특별한 잠금이다. ID(PK) 3 4 10 예시로 위와 같은 데이터가 있다고 치면, (1~2) (5~9) (10~) 을 잠그는걸 갭 락이라고 한다. 또, 존재하는 레코드 인덱스에 대한 락 (3, 4..
covid19... 아프다... 몇일 전부터 계속 안좋았는데 자가진단키트로는 검출이 되지 않아 잡힌 면접도 그대로 진행. 출근도 계속 했는데 어제는 너무 증상이 심해져서 pcr을 받고 들어왔다. 오한이 너무 심해서 하루종일 누워만 있었던 것 같다. 역시나 결과는 양성.. 만약 양성이 나오면 자가격리하면서 계속 공부도 하고 하려했는데 도저히 그럴 상태가 아니네.. ㅋㅋ
[REAL MYSQL 8.0] InnoDB 스토리지 아키텍쳐 InnoDB 스토리지 엔진은 MySQL 스토리지 엔진중 거의 유일하게 레코드 기반의 잠금을 지원하여 높은 동시성 처리가 가능하여 많은 서비스 어플리케이션에서 가장 대중적으로 사용되고 있다. InnoDB 스토리지 엔진의 특징을 하나씩 살펴보자. InnoDB 스토리지의 특징 PK 에 의한 클러스터링 InnoDB 의 테이블들은 기본적으로 PK 클러스터 인덱스로 지정되어 저장된다. 즉 PK 순서대로 물리적으로 저장된다는 뜻이다. 그로인해 InnoDB 는 PK 기준 검색 및 레인지 스캔이 상당히 빠르다. 더보기 Clustered Index Clustered Index 는 테이블 당 하나만 지정할 수 있고, 지정한 컬럼을 대상으로 물리적으로 정렬되어 저장되는 인덱스이다. 물리적으로 정렬되어 있어, 빠른 검색속도를 ..
Process Synchronization - Race Condition, 임계구역 문제와 Semaphore http://www.kocw.or.kr/home/cview.do?mty=p&kemId=1046323 해당 강의를 보고 개인적으로 정리를 하는 포스팅 입니다. 운영체제 운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각 www.kocw.net 일반적으로 작업은 데이터를 저장하는 공간에서 데이터를 받아와, 작업 처리를 담당하는 프로세서가 처리하고 그 처리 결과를 다시 저장소에 저장하는 형식으로 동작한다. Race Condition Race Condition 이란 두 개 이상의 프로세스가 공통 자원을 병행적으로 읽거나 쓰는 동작을 할 때, 공용 데이터에 대한 접근이 어떤 순서에 따..
CPU Scheduling http://www.kocw.or.kr/home/cview.do?mty=p&kemId=1046323 해당 강의를 보고 개인적으로 정리를 하는 포스팅 입니다. 운영체제 운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각 www.kocw.net 프로그램은 CPU Burst -> I/O Burst 가 번갈아가며 일어남. CPU Burst time 이 긴 Job 을 CPU Bound Job -> 적은 양의 긴 CPU 점유 I/O 가 잦아 I/O Bust time 이 긴 Job 을 I/O Bound Job 이라고 한다. -> 많은 횟수의 짧은 CPU 점유 "CPU 스케줄링은 이처럼 각..
Kotlin 의 inline 함수 Kotlin 은 고차함수에 대한 문법을 지원한다. 고차함수를 사용한 함수는 런타임 오버헤드가 어느정도 발생하는데 이를 줄이기 위한 방법으로 Kotlin 은 Inline Function 을 지원한다. 더보기 고차함수란, 함수를 파라미터로 받거나 함수를 리턴하는 즉, 함수를 일급객체로 취급하는 함수를 말한다. 고차함수의 오버헤드 class InlineTestClass { fun highOrderedFunction(a: Int, actionBlock: (a: Int) -> Int): Int { actionBlock(a) return a + 1 } fun main() { val result = highOrderedFunction(1) { a -> a * 2 } println(result) } } 숫자와, 숫자 ..
RDS Slow Query Log 세팅 및 쿼리 개선 최근에 팀원이 기간에 따른 급여 이체 대상자 수 통계가 달력에 나타나는 기능을 개발하였는데, 3개월 이상의 단위로 조회할때 속도가 매우 느리다는 이야기를 들었다. 통계성 데이터기 때문에 현재 데이터를 쿼리하기보다는 리포트용으로 별도로 데이터를 적재하는 배치를 구현하는게 좋지 않나? 라는 의견을 개발 초기 PR 단계에서 냈었는데, 우선 개발 당시에는 과거 데이터를 보는 용도가 아니라, 다가올 급여이체에 대한 정보를 보는 용도의 목적이 크다고 하여 개발되었었는데, 처음 속도가 느리다는 문의가 들어올때에는 내가 개발한 부분이 아니라서 음 데이터 양이 많아서 그런가? 라고 넘겼으나.. 30초 이상이 걸린다는 이야기를 듣고 부랴부랴 slow query log 를 찾아보았다. 그러나 왠걸, slow query lo..