본문 바로가기

소프트웨어 이야기

(PostgreSQL) 쿼리 실행계획 비쥬얼라이징하기 1. PgAdmin에서 실행계획 비쥬얼라이징하기PgAdmin에서 질의 쿼리 앞에 EXPLAIN (ANALYZE, COSTS, VERBOSE, BUFFERS, FORMAT JSON) 쿼리를 추가해주면, 손쉽게 쿼리 실행계획을 비쥬얼라이징해서 볼 수 있다.  PgAdmin QueryTool > Explain Tab에서 결과를 확인할 수 있다. Index, Join 방식 등도 비쥬얼라이징해주기 때문에, 복..
(saleor) 가독성 좋은 함수명 만들 때 유용한 팁 모음집 이 글은 Django E-commerce OpenSource인 Saleor에서 얻은 팁들을 정리한 문서입니다. 1. 값을 증분할 때는 increase / decrease 동사를 prefix으로 붙인다.def increase_voucher_usage(voucher): voucher.used = F('used') + 1 voucher.save(update_fields=['used'])def decrease_voucher_usage(v..
(Django) 비즈니스 로직을 어디에 모아둘까 비즈니스 로직을 어따모아둘까.. 🤔 루비온레일즈, 장고를 쓸 때마다, 도메인 관리에 대한 프레임이 정해져있지 않은 듯하여 매번 고민이다.  But. Djagno엔 QuerySet, Form Object 개념이 기본으로 포함되어 있어서, 좋다. 레일즈에서는 레이어를 만들거나, 라이브러리를 사용해야한다.  ( 참고 - 레일즈에 Service/Decorator Layer 적용하기 🐜🐜..
(PostgreSQL) 테이블에 제약사항이 있는 컬럼 추가하기 Postgresql 테이블에 컬럼을 추가하는 작업은 신중하게 처리해야한다.  사이즈가 큰 테이블에 기본값이 있거나, 제약사항이 있는 컬럼을 추가하는 작업은 리스크가 있기 때문이다. 이번 포스트에서는 제약사항이 있는 컬럼을 추가할 때 발생하는 리스크와 이를 분산시키는 방법에 대해서 정리해보고자 한다. PostrgreSQL 컬럼 추가 동작 방식 ALTER ADD COLUMN 명령문을 실행하면, PostgreSQL은 아래와 같은..
(PostgreSQL) JSON VS JSONB RDB에 JSON 포맷을 저장할 때, 평소처럼 텍스트 포맷으로 저장할지, JSON Format을 적용할지 고민하게 된다. 뫼비우스의 띠 같은 삶을 사는 나는 딱 1년전에도 비슷한 고민을 했었다.( 작년에 조사한 글 :  👉 [MariaDB]RDB 속에서 NOSQL 사용하기 👈)작년에는 리서치만 해보고 말았는데, 올해에는 PostgreSQL에 JSON 타입을 실제로 적용해봐야겠다. 🐜🐜🐜고..
(PostgreSQL) Transaction과 Lock에 대한 이모저모 Table Lock Mode Table Lock Mode에 따라 공존할 수 있는 Lock이 있고, Conflict나는 Lock이 있다. SELECT를 막는 Table Lock은 ACCESS EXCLUSIVE 뿐이다. Lock Mode의 최종보스다. SELECT FOR SHARE는 FOR UDPATE, FOR SHARE 쿼리에서 필요하다.EXCLUSIVE는 UDPATE / DELETE 등의 쿼리에서 필요하다. EXCLUSIV..
(PostgreSQL) Lock 경합 상태 확인하기 Block된 SQL 프로세스 조회 SQLSELECT blocked_locks.pid         AS blocked_pid,        blocked_activity.usename  AS blocked_user,    ..
(PostgreSQL) DB Lock을 줄이는 7가지 팁 해당 글은 When Postgres blocks: 7 tips for dealing with locks을 보고 정리한 글입니다  1. Default 값이 있는 필드를 추가하면 안된다PostgreSQL 10버전 이하를 쓰고 있다면, Default 값이 있는 필드를 추가하면, 테이블 락이 걸릴 수 있다. 그리고 엄청 느리다. 그래서 이런 쿼리를 날리면 안된다. ALTER TABLE items ADD COLUMN up..