everydayminder
PlanutUML 작성 툴 PlantUML을 작성하기 위한 툴은 여러가지가 있다. Boost Note를 쓰면 별도의 설정을 하지 않아도 곧바로 문서를 작성하면서 코드로 시퀀스다이어그램을 그릴 수 있다. 만약, VS Code를 사용한다면 다음의 포스트를 참고하여 설정하면 된다. 기본 문법 PlantUML을 사용하여 시퀀스다이어그램을 작성하기 위한 주요 규칙을 살펴본다. 문서 작성 규칙 @startuml 작성본문 @enduml의 형식으로 작성하면 된다. 만약, VS Code에 extension을 사용하여, Markdown Preview Extended까지 사용했다면, ```plantuml @startuml 작성본문 @enduml ```과 같이 바깥에 한번 더 감싸줘야 한다. 혹은, @startuml ~ @e..
MySQL로 트랜잭션 격리 수준 동작 테스트를 하고, 결과를 정리해 놓는다. 트랜잭션 범위 MySQL에서 트랜잭션은 START TRANSACTION으로 시작하고, COMMIT으로 다음과 같이 실행된다. START TRANSACTION ... (트랜잭션) ... COMMIT 트랜잭션 격리 수준 확인/ 변경 MySQL에서의 트랜잭션 격리수준 확인 및 변경은 아래 포스트를 참고한다. MySQL 트랜잭션 격리수준 확인/변경 본 포스트에서는 MySQL 트랜잭션 격리수준을 확인하는 방법과 변경하는 방법에 대해 정리한다. MySQL 버전에 따른 사용법 차이 예전에는 tx_isolation이 쓰였는데, MySQL 5.7.20에서 transaction_isolation이 ali. luran.me 본 포스트에서는, 구문형..
듀얼모니터 창이동 단축키 프로그램 (맥북용) 맥북에서 듀얼 혹은 그 이상의 모니터를 연결해서 사용한다면, 필요시 창을 이동해야 하는 경우가 생긴다. 발표를 하거나, 다른 사람에게 공유를 할 수도 있고, 아니면 연결해 놓은 디스플레이의 크기가 작아서 보기 편한 디스플레이를 찾아 강제 이사를 시켜야 할 수도 있다. (아이패드를 보조 디스플레이로 연결하는 경우 종종 발생하는 상황이다.) 이럴 때, 드래그&드랍으로 창을 옮겨줘야 한다면 불편한 점이 이만 저만이 아니다. 따라서, 이러한 이동을 편하게 도와주는 프로그램을 사용한다면, 보다 편리하게 문제를 해결할 수 있다. 윈도우즈 계열에서 윈도우즈키 + 방향키의 기능과 유사한 기능인데, 맥북에서는 이러한 기능을 도와주는 프로그램이 있어야 편의성을 높일 수 있다. ..
VS Code에서 PlantUML 사용설정 Boost Note(무료)에서는 기본적으로 제공되는 기능인데, Visual Studio Code에서도 비슷한 설정이 있지 않을까 싶어 설정 하는 방법을 정리한다. 목표는 Boost Note에서 작성하던 방법과 동일하게, Markdown 작성과 PlantUML 작성을 함께 할 수 있도록 하는 것이다. 비교 대상 - Boost Note # Test @startuml Bob -> Alice: Hello @enduml 이렇게 작성하면 아래와 같이 자동으로 렌더링 해준다. 위와 같이, 문서로서의 기능과 다이어그램을 그리는 기능을 온전히 한 세트로 해야 편리하다. VS Code상에서 설정 VS Code에서는 Extension을 통해 해당 기능을 설정해야 한다. Shift ..
본 포스트에서는 MySQL 트랜잭션 격리수준을 확인하는 방법과 변경하는 방법에 대해 정리한다. MySQL 버전에 따른 사용법 차이 예전에는 tx_isolation이 쓰였는데, MySQL 5.7.20에서 transaction_isolation이 alias로 추가되었고, 8.0에 이르러서는 tx_isolation이 더 이상 사용되지 않기 때문에 변수를 사용하여 트랜잭션 격리수준을 확인하거나 설정할 때, 이를 참고하여 활용하면 된다. MySQL 5.7.2 이하: tx_isolation 사용가능 MySQL 8.0 이상: transaction_isolation 사용 트랜잭션 격리수준 확인하기 현재 트랜잭션 격리 수준이 어떻게 설정되어 있는지는 간단히 쿼리로 확인할 수 있다. SELECT @@GLOBAL.trans..
java DNS TTL 설정 자바에서 DNS 설정하는 여러가지 방법에 대해 확인해 보자. 배경 - DNS 기반 redundancy layer DNS에 여러 A 레코드를 두고, DNS lookup을 하면 그 중 하나의 A 레코드를 반환하도록 한다. 이렇게 하여 서비스의 부하 분산, 지역 분산 및 혹시 모를 장애 대비도 할 수 있다. 그런데, DNS에 기반한 위 가정에 맞추려면, java 애플리케이션의 경우 꼭 챙겨야 하는 설정이 있다. DNS Client Cache 설정 어떤 URL이 주어지면, DNS에 대한 질의를 하고자 하는 클라이언트와 그에 대한 답을 하는 서버로 역할이 나눠진다. 실행하는 자바 애플리케이션이 어떤 주소를 확인하기 위해 매번 DNS 질의를 해야 한다면 (아무리 패킷이 작더라도) 그만큼..
만약, 내 맥북에 여러 버전의 자바(java)가 설치되어 있는데, 그 위치를 모두 확인하고 싶다면 다음의 명령어를 사용하면 된다. $ /usr/libexec/java_home -V Matching Java Virtual Machines (3): 14.0.1, x86_64: "OpenJDK 14.0.1" /Library/Java/JavaVirtualMachines/openjdk-14.0.1.jdk/Contents/Home 11.0.7, x86_64: "AdoptOpenJDK 11" /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home 1.8.0_192, x86_64: "Java SE 8" /Library/Java/JavaVirtualMac..
어찌보면 psql은 pgadmin과 더불어 Postgresql의 공식 client 중 하나이다. 그리고, 생각보다 많은 기능을 준다. CLI라는 점 때문에 무시할 법도 하지만, 오히려 psql 고유의 커맨드 때문에 이것을 더 선호하는 순간이 있기도 하다. Postgresql에 접속하기 위한 psql 옵션들 접속에 사용하는 주요 파라미터는 다음과 같다. -d: 데이터베이스 -h: 호스트 또는 IP -p: 포트 -U: 사용자계정 -w: 패스워드 없이 접속 -W: 패스워드 확인 help를 실행하자 psql에 접속한 후에 help를 실행하면 다음과 같이 안내 메시지가 뜬다. postgres=# help You are using psql, the command-line interface to PostgreSQL...
MTTD, MTTR: 장애 대응 능력의 현재 지표 모든 서비스들은 장애가 나기 마련이다. 놓친 버그와 같은 내부 요인이나, 인프라 등의 외부 요인 등 원인은 다양하다. 그런데, 장애가 발생했다고 하여 마냥 손놓고 있을 수는 없지 않나? 우리는 장애를 수동적으로 맞이하고 있는지 혹은 적극적으로 대응하고 있는지를 데이터로 알 수 있지 않을까? 우리 팀/ 우리 서비스의 장애 대응 능력은 어느 정도 수준일까? 우리는 장애 대응을 얼마나 잘 하고 있나? 를 알 수 있는 지표를 정리한다. MTTD: 우리는 얼마나 빨리 장애를 인지하고 있나? MTTD(Mean Time To Detect)는 장애를 인지하는데 걸리는 평균시간을 뜻한다. 왜 평균이냐면, 발생한 장애 한 건으로 장애 인지 능력을 평가할 수 없기 때문에 평..
RTO, RPO란? 서비스를 하면서, 장애가 없다면 무척 좋겠지만 장애가 없는 시스템은 없다. 대신, 장애가 발생하더라도 장애를 어떻게 복구할지에 대한 전략과 목표가 필요하다. 이 때, 목표를 기술하는 대표적인 용어가 이 두 가지라 보면 되겠다. 실제 장애가 났다고 해보자. 아마 이 질문을 귀가 따갑도록 가장 많이 받게 될 것이다. 1) 장애 언제 복구돼? (복구 다 됐어?) 2) 고객 임팩트는? 유실된 데이터는 없어? RTO = 장애 언제 복구돼? RTO(Recovery Time Objective; 장애 복구 목표 시간)는 장애 복구를 하는데 드는 시간이다. RTO가 4시간이라고 하면, 장애 복구에 4시간이 걸린다는 의미이다. 장애가 나도 괜찮은 시스템은 거의 없지만, 장애가 발생해도 어느 정도 괜찮느..
Docker 기반 Postgresql 설치하기 Docker를 사용하여 Postgresql을 설치하는 방법을 정리한다. docker-compose.yml YAML 파일의 기본 골격을 다음과 같이 작성한다. version: "3" services: db: image: postgres:latest container_name: postgres restart: always ports: - "5432:5432" environment: POSTGRES_USER: "${DB_USER_ID}" POSTGRES_PASSWORD: "${DB_USER_PASSWORD}" volumes: - ${POSTGRES_HOME_DIR}/data/:/var/lib/postgresql/data 파일내 변수로 선언한 내용은 .env에 작성..
트랜잭션 DB에서의 트랜잭션이란, 보통 데이터베이스의 어떤 변경을 유발하는 작업 단위를 의미한다. 논리적으로 한 개의 실행 단위를 뜻하며, 물리적으로는 한 개 혹은 여러 개의 실행단위가 묶여 실행되기도 한다. 설명의 편의성을 위해, 종종 은행 계좌간 돈을 이체하는 사례가 주로 인용된다. 트랜잭션의 특징 - ACID DB에서의 트랜잭션은 아래 네 개의 특징을 지닌다. Atomicity Consitency Isolation Durability Atomicity(원자성) 트랜잭션은 논리적으로 하나의 실행단위여야 한다. 물리적으로 여러 개의 statement로 구성되어 있다 하더라도 논리적인 단위로 묶일 수 있어야 한다. 하나의 실행단위라면, 실행시 두 개의 상태로 귀결된다. 성공하거나 실패하거나 (all or..
PostgreSQL을 설치한 머신내에는 psql이 기본적으로 설치가 되어 있겠지만, 리모트로 접속해야 하는 경우는 별도로 설치해 줘야 한다. 여러 GUI 기반 client들도 많지만, 간단하게 보거나 명령어로 손쉽게 조회해 보려면 psql도 충분할 경우가 많다. 특히 기본 메타 정보 등을 조회하는 명령어는 범용 GUI에서는 지원하지 않기 때문에, psql 나름의 장점이 있다. 맥북에서 psql 설치하기 다음과 같이 libpq를 설치한다. $ brew install libpq libpq 설치가 완료되었다면, $ brew link --force libpq 를 실행하여 심볼릭 링크를 생성한다. Linking /usr/local/Cellar/libpq/13.2... 372 symlinks created. If ..
디렉토리 이하 특정 문자열 및 한글 포함여부 찾기 프로젝트 전체 파일들을 대상으로 특정 문자열 혹은 한글이 포함되어 있는 부분을 찾거나, 파일명 들을 추출하려면 다음과 같이 shell을 활용해 보자. 사용법 아래와 같은 형식을 지켜주면 되겠다. $ find . -name "파일명 또는 파일명 패턴" -print0 | xargs -0 egrep -l "검색어 또는 패턴" $ find . -name "파일명 또는 파일명 패턴" -print0 | xargs -0 egrep "검색어 또는 패턴" egrep 옵션 참고 egrep 뒤에 -l 옵션을 주면 파일명을 출력한다. -l, --files-with-matches Only the names of files containing selected lines are w..
파이썬으로 MySQL 사용하기 Python으로 MySQL에 접속하고, 데이터를 다루려면 여러 라이브러리가 있다. 마침 StackOverFlow에도 이와 관련한 Q&A가 있어서 살펴보고 선택하고자 한다. https://stackoverflow.com/questions/43102442/whats-the-difference-between-mysqldb-mysqlclient-and-mysql-connector-python What's the difference between MySQLdb, mysqlclient and MySQL connector/Python? So I've been trying to do some database update with python and while setting up the w..