전체 글

이왕 하는거 우왕 나오게
Retrospective

[개발자회고] #9. 2022 상반기 회고 (feat. 욕심쟁이)

2022년의 상반기가 지났다. 항상 그래 왔듯이 회고해보자. 목차 좋은 팀장 되기 ⭐ 팀 공간 만들기 R & R (Role and Responsibility) 리소스 관리 좋은 시니어로 나아가기 💻 서비스가 잘 되길 고민하는 개발자 공유 문화를 만드는 개발자 코드 품질을 고민하는 개발자 크리티컬 이슈 해결 🔥 배치 이슈 월요 장애 이슈 기술 블로그 공부하기 성장 욕구 ✍ 매일매일 조금씩 하자 아직은 혼자가 편해 사이드는 미완성 마무리 ❤ 1. 좋은 팀장 되기 ⭐ 재직한 3년 동안 10명에서 80여명으로 인원이 늘었다. 그에 따라 자연스럽게 나는 ‘셀 리더’, ‘파트장’을 지나 현재 ‘팀장’이라는 직책을 얻게 되었다. 엄청난 실력 때문이라기보단 보다 더 열심히 하라는 의미로 받아들였다. 이왕이면 팀장이 되..

Googling/postgresql

[postgreSQL] vacuum 총정리 (feat. dead_tuple, bloat, autovacuum)

1. MVCC => DEAD_TUPLE => BLOAT postgreSQL은 MVCC(다중버전 동시성 제어)의 이점을 위해 'UPDATE'와 'DELETE' 수행 후 이전 데이터를 즉시 제거하지 않는다. 즉시 제거하지 않은 이전 데이터를 'Dead Tuple'이라고 말한다. 그로 인해, Table Bloat(테이블 팽창), Btree Index Bloat(인덱스 팽창)가 발생할 수 있다. 이는 불필요한 I/O의 증가와 부적절한 인덱싱을 초래한다. 1-1. 어떻게 확인하는가? 🔎 팽창(BLOAT) 확인 : Githup 오픈소스[⭐1.1k] (https://github.com/pgexperts/pgx_scripts/tree/master/bloat) 튜플 확인 SELECT relname, n_dead_tup,..

Googling/postgresql

[postgreSQL] shared_buffers (feat. 권장하는 값, Aurora-vs-RDS, ScaleUp)

목적 DISK IO 를 최소화함으로써 IO 성능을 향상시킵니다. 1) 매우 큰 (수십, 수백 GB) 버퍼를 빠르게 액세스해야 합니다. 2) 많은 사용자가 동시에 접근할 때 경합을 최소화해야 합니다. 3) 자주 사용되는 블록은 최대한 오랫동안 버퍼 내에 있어야 합니다. 권장하는 값 공식문서의 내용을 의역해보았습니다. PostgreSQL 서버의 권장 shared_buffers 값은 시스템 메모리의 25%입니다. PostgreSQL 서버는 운영 체제 캐시에 의존합니다. 그래서 RAM의 40% 이상 할당하지 않는 것이 좋습니다. 토픽1. shared_buffers DB 파라미터 기본값이 Aurora PostgreSQL > RDS PostgreSQL인 이유는 무엇입니까? 위 [권장하는 값] 내용을 바탕으로 RDS..

Googling/cs

[DB] MVCC (feat. RDBMS 동시성 제어)

1. 풀어쓰기 약어를 풀면, 다중버전 병행수행제어 (MultiVersion Concurrency Control)가 된다. 쓰기트랜잭션이 읽기트랜잭션을 블로킹하지 않고, 읽기트랜잭션이 쓰기트랜잭션을 블로킹하지 않고, 각 트랜잭션마다 스냅샷 이미지를 보장해 주는 메커니즘을 말한다. 2. 왜 나왔을까? 데이터베이스에서 일관된 데이터를 얻는 것이 굉장히 중요하다. 만약 만원권 1,000장을 가진 사람이 있다고 가정해보자. (부럽다..) 만원권이 1,000장이 맞는지 세고 있을때, 다른 사람들이 몇 개의 만원권을 넣거나 빼거나 한다면 세고 있는 사람은 당연히 제대로 셀 수 없다. 가장 쉽게는 셀 동안은 다른 사람들이 넣거나 빼지 않게 보장하는 것이 일관된 데이터를 얻는 방법이다. 그래서 무조건 1,000장을 셀때..

Googling/cs

[DB] 트랜잭션 격리수준과 부정합 이슈 (feat. Dirty Read ~ Phantom Read)

1. 풀어쓰기 Read Uncommitted 한 읽기 트랜잭션이 시작했을때 다른 트랜잭션은 자유롭게 UPDATE 가능하다. 한 읽기 트랜잭션은 다른 트랜잭션에서 Update 중(un-commit)인 데이터를 조회할 수 있다. => 다른 트랜잭션이 중간에 롤백을 해도 읽기 트랜잭션은 롤백 전 데이터를 조회할 수 있는다. => 다른 트랜잭션의 Update(커밋)과 무관하게 일관된 데이터를 얻을 수 없는 확률이 높다. => Dirty Read Read Committed 한 읽기 트랜잭션이 시작했을때 다른 트랜잭션은 자유롭게 UPDATE 가능하다. 한 읽기 트랜잭션은 다른 트랜잭션에서 Update 완료(commit)된 데이터만 조회할 수 있다. => Dirty Read는 발생할 수 없다. 위 고립수준보다는 일관..

Googling/cs

[CS] 동기(synchronous)와 비동기(Asynchronous)를 쉽게 이해해보기 (feat. 싱크로나이즈드 수영과 핫도그)

프로그래밍에 가장 기본이 되는 동기(synchronous)와 비동기(Asynchronous)를 쉽게 설명해보려고 한다. 왜 동기라는 용어는 혼란스러운가? 'synchronous' is existing or occurring at the same time. - Google Dictionary 동기(synchronous)는 영단어 직역을 하면 '동시에 발생하는 방식'이라고 한다. 이게 혹시 함수가 동시에 실행된다는 건가? 그럼 비동기 개념 아닌가? 하며 혼란에 빠질 수 있다. 하지만 조금씩 비슷한 의미를 따라가다 보면 충분히 이해할 수도 있어 보인다. 여기서 '동시에 발생하는 방식'으로 딱 한번 실행하는 상황을 가정하는 것보단, '동시에 발생하는 방식'이 연속적으로 실행하는 상황을 가정하면 전개가 좀 용이하..

Review

[넷플릭스] 타다 : 대한민국 스타트업의 초상 (feat. 신박하다)

이 다큐영화가 나온다는 소식을 접하고 꼭 봐야겠다 생각했다. 개봉(2021-10-14)하였다는 소식에 상영관을 찾았지만 시간과 장소의 제약이 컸다. 시간이 많이 지나서 우연히 넷플릭스 추천영화를 검색하던 도중 '타다 : 대한민국 스타트업의 초상'이 넷플릭스에 있다는 것을 확인하고 1초의 망설임도 없이 영화를 시청했다. 법인카드를 활용하여 타다를 탈 기회에 몇 번 있었다. 프리미엄 택시인가보다 하고 탔는데 넓고 쾌적해 사용감은 좋았다. 왜 타다는 모두 카니발인가? 그리고 왜 어느 순간 타다는 사라졌는가? 에 대한 물음도 없이 그냥 그렇게 나의 경험 속에서 사라졌었다. 시간이 지나고 문득 기사 속에서 '타다금지법'이라는 키워드를 만나긴 했지만 많은 모빌리티 스타트업들과 택시 간의 다툼이 잦았기때문에 그런 것..

Googling/postgresql

[postgreSQL] 써보니 유용한 쿼리 (feat. 메타 정보 쿼리)

내가 직접 만든 테이블은 아니지만 postgreSQL에 내장되어있는 테이블이 존재한다. 실제로 잘 활용하는 쿼리를 사례와 함께 적어보려고 한다. 테이블 인덱스 확인 실행계획을 볼 때 인덱스를 아예 타고 있지 않거나 잘못된 인덱스를 타고 있음을 확인할 수 있다. 이 떄 보통 테이블에 어떤 인덱스가 있는지를 보고 의도하는 인덱스를 탈 수 있게 쿼리를 튜닝해준다. SELECT * FROM pg_indexes WHERE tablename = '소문자 테이블 명'; 현재 테이블별 전체 카운트 확인 테이블 별로 전체 카운트를 수시로 확인하면 얼마나 데이터 성장세가 가파른지, 어떻게 인프라를 대비해야하는지, 어떻게 데이터를 관리하는게 더 효율적인지 고민해볼 수 있다. 테이블별로 count 쿼리를 직접 때려도 되지만 ..

날개단
날개단 기술 블로그