[Java] Java Thread Deep Dive
2022. 12. 17. 17:35
Java/Deep Java
Java thread는 OS thread에 1:1로 매핑된다는 특성 덕에 다른 언어에서 사용하는 thread에 비해 무겁다는 명성을 가지고 있습니다. OS thread의 크기는 기본적으로 MB 단위이므로 대규모로 thread를 생성해서 사용 시 메모리에 큰 부하를 줄 수 있습니다. 단, 곧 등장할 java의 virtual thread는 OS thread와 N:1 구조로 매핑되는 user level thread이므로 기존의 java thread와 비교하면 훨씬 가볍습니다. 하지만 아직 virtual thread가 프로덕션에서 활용된 사례가 많지 않기 때문에 당분간은 여전히 java thread를 자주 사용할 것이고, 그렇기 때문에 java thread와 OS thread의 관계에 대해 잘 이해해야 합니다...
[Database] DBA급 개발자로 - #23 Distributed Database 3/3
2022. 12. 16. 09:23
Database/DBA급 개발자로
이번 포스팅에서는 분산 환경에서의 OLAP, 쿼리 실행 모델 및 그 외 알아두면 괜찮은 것들에 대해 살펴보겠습니다. OLAP OLAP란 On-Line Analytical Processing의 약자입니다. OLAP는 OLTP처럼 단순한 CRUD 유형의 작업이 목적이라기보다는 분석 등의 복작한 작업을 수행하는 데 사용됩니다. Schema OLAP용 스키마는 fact 테이블과 dimenstion table로 구성됩니다. Fact 테이블은 dimention 테이블의 모든 키와 종합된 데이터를 가지고 있습니다. Dimension 테이블의 경우 fact 테이블의 종합된 데이터를 생성하기 위한 정보를 가지고 있습니다. Star Schema 별 모양을 닮은 스키마를 의미합니다. 다음에 살펴볼 snowflake sche..
[Database] DBA급 개발자로 - #22 Distributed Database 2/3
2022. 12. 10. 09:54
Database/DBA급 개발자로
이전 포스팅에서 분산 데이터베이스에 대해 간략히 살펴봤습니다. 이번 포스팅에서는 분산 트랜잭션 커밋을 어떻게 atomic 하게 처리할지, 복제는 어떻게 하는지 그리고 CAP 이론에 대해 살펴보겠습니다. Atomic Commit Protocol 분산 트랜잭션을 커밋하기 위해서는 모든 노드가 작업을 정상적으로 처리했는지 확인해야 합니다. 분산 환경에서 atomic 한 커밋을 보장하기 위한 프로토콜에는 two phase commit, three phase commit, paxos, raft, ZAP(apache zookeeper)과 viewstamped replication 등이 존재합니다. 이번 포스팅에서는 two phase commit과 paxos에 대해 살펴보겠습니다. Two Phase Commit Tw..
[Database] DBA급 개발자로 - #21 Distributed Database 1/3
2022. 12. 9. 22:38
Database/DBA급 개발자로
이전 포스팅에서 로깅을 활용해서 시스템 장애 시 데이터베이스를 어떻게 복구하는지 살펴봤습니다. 이번 포스팅에서는 분산 데이터베이스에 대해 살펴보겠습니다. Distributed Database 데이터베이스 노드가 네트워크로 연결돼서 데이터베이스 기능을 제공하는 형태를 분산 데이터베이스라고 합니다. 노드 간 통신이 네트워크를 통해 이뤄지므로 통신 비용을 고려해야 합니다. System Architecture 분산 데이터베이스는 다음과 같이 구성할 수 있습니다. 하나씩 살펴보겠습니다. Shared Memory 데이터베이스 노드가 네트워크를 통해 하나의 메모리를 공유하는 형태입니다. 데이터베이스 노드는 하나의 메모리에 적재된 데이터를 공유합니다. Shared Disk 네트워크를 통해 디스크를 공유하는 형태입니다...
[Database] DBA급 개발자로 - #20 Database Recovery
2022. 12. 5. 15:14
Database/DBA급 개발자로
이전 포스팅에서는 DBMS의 정책(steal, force policy)에 따라 데이터를 디스크에 어느 시점에 저장하는지와 WAL에 대해 간단히 살펴봤습니다. 이번 포스팅에서는 로그를 활용해서, 특히 WAL(Write Ahead Log)를 활용해서 어떻게 복구를 수행하는지 살펴보겠습니다. WAL(Write Ahead Log) WAL 기록 방법 우선 WAL을 활용한 데이터베이스에서는 변경사항이 어떻게 기입되는지 살펴보겠습니다. WAL에는 다음과 같은 로그를 추가합니다. 새로운 트랜잭션이 시작되면 WAL에 로그를 기입합니다. 트랜잭션이 종료되면 로그를 기입합니다. WAL에 기입된 각각의 로그는 transaction Id, Object Id, 이전 값과 변경 이후의 값을 포함합니다. A의 값이 1이고 B의 값이..
[Database] DBA급 개발자로 - #19 Database Logging
2022. 12. 4. 10:49
Database/DBA급 개발자로
이전 3개의 포스팅을 통해 DBMS가 어떻게 트랜잭션 동시성을 제어하는지 살펴봤습니다. 이번 포스팅에서는 database logging에 대해 살펴보겠습니다. Database Logging 데이터베이스는 다음과 같은 특성을 보장해야 합니다. 트랜잭션이 abort 된 경우 데이터가 부분적으로 영구 저장소에 저장되면 안 됩니다. 트랜잭션이 commit 된 경우 데이터는 영구 저장소에 영구 저장돼야 합니다. DBMS는 위와 같은 특성을 보장하기 위해 undo와 redo 기능을 제공합니다. Undo: 성공적으로 commit 되지 않거나 abort 된 트랜잭션에 의한 변경사항을 되돌립니다. Redo: Commit된 트랜잭션에 의한 변경사항을 영구저장소에 다시 반영할 수 있습니다. DBMS의 이런 기능이 어떻게 구..
[nGrinder] nGrinder을 이해하고 Script를 작성해보자
2022. 12. 3. 14:42
Open Source/Testing Framework
최근에 회사에서 데이터 마이그레이션을 대비하기 위해 서버의 평균 TPS가 얼마인지 확인해하는 요구사항이 있었습니다. 회사의 대표적인 테스팅 플랫폼으로 nGrinder가 있었기 때문에 nGrinder을 활용해 테스트를 진행했습니다. nGrinder을 학습 과정에서 발견한 유용한 정보들과 nGrinder 스크립트를 작성하는 방법을 공유하기 위해서 이번 포스팅을 작성하게 됐습니다. nGrinder란? nGrinder은 네이버에서 Grinder라는 테스팅 오픈소스에 유용한 기능들을 추가한 대표적인 테스팅 오픈소스 플랫폼입니다. Jython 또는 Groovy 언어를 통해 script가 작성 가능하고 여러 agent에서(컴퓨터) 부하를 발생시킬 수 있습니다. nGrinder의 사용법을 살펴보기 전에 용어와 개념에 ..
[Rancher] Docker Desktop을 대체해보자
2022. 12. 3. 13:36
Open Source
Docker desktop이 유료화되면서 회사에서 docker desktop을 무료로 사용하는 게 불가능해졌습니다. 팀에서 도커를 직접적으로 사용하지 않아 별도로 승인을 받기가 부담스러웠기 때문에 docker desktop의 대체제를 찾아야 했습니다. 참고로 저는 현재 Macbook M1을 사용하고 있습니다. 저는 docker desktop의 대체제로서 rancher을 선택했는데요, 비교적 간편한 UI의 형태이고 아직까지 M1을 지원하는 대중적인 소프트웨어가 눈에 띄지 않았기 때문에 선택했습니다. 사용법이 비교적 간편하지만 권한 문제로 골치 아팠던 경험이 있기에 설치법부터 도커 사용 예시까지 함께 살펴보겠습니다. 도커 설치하기 우선 도커부터 설치하겠습니다. brew install docker docker..