본문 바로가기

<마르티네즈> 카오스 멍키 - 혼돈의 시대, 어떻게 기회를 낚아챌 것인가 '카오스 몽키'라는 제목에 속아 읽기 시작한 책이다. 이 책을 읽기 전에는 '카오스 엔지니어링'과 관련된 내용을 기대했다. 실은 저자가 실리콘밸리에서 겪은 IT 업계의 비하인드를 담은 회고록이었다. 저자는 솔직하고 대담한 필력으로 스타트업 창업과 인수합병, 그리고 실리콘밸리의 IT 대기업에 대한 이야기를 다룬다. 글을 읽다보면 저자인 마르티네즈는 똑똑하지만 거칠고, 잔꾀가 많은 사람으로 보인다. 책 내용과 관계없는 '카오스 몽키'를 제목으로 삼은 것은 실리콘밸리 사람들의 이목을 끌기 위한 전략이지 않았을까 의심스럽다. '카오스 엔지니어링'이란, 시스템이 예상치 못한 상황을 견딜 수 있도록 실험하는 것을 말한다. 운영 시스템에 무차별적인 부하를 일으켜 분산 시스템의 장애 지점을 찾아내고, 회복하는 과정을 ..
Domain services vs Application services 본 글에서는 도메인 서비스에 대해서 정리하고자 한다. 도메인 서비스와 애플리케이션 서비스의 차이점, 도메인 서비스를 사용할 때의 이점에 대해서도 설명하고자 한다. 1. Domain services와 Application services의 차이점 도메인 서비스는 entity와 VO에 자연스럽게 맞지 않는 도메인 지식을 제공하는 경우가 있다. 하지만 도메인 서비스를 도입하는 또다른 이유가 있다. 이는 도메인 모델 격리 (isolation)과 관련있다. Domain Service, Application Service는 entity, VO를 상위에서 다루는 stateless한 클래스를 의미한다. 이렇게 보면 둘은 꽤 유사해 보인다. 그러나 도메인 서비스는 도메인 로직을 갖고 있지만, 애플리케이션 서비스는 그렇지..
(PostgreSQL) Temporary Table과 Autovacuum Temporary Table은 Autovacuum 대상이 아니다. Temporary Table은 임시 테이블을 생성한 Connection에서만 조회할 수 있기 때문에 Autovacuum 데몬은 Temporary Table을 볼 수 없다. Temporary Table이 사용중인 공간은 Connection이 닫히면 저절로 회수된다. 그러나 만약, Transaction이 장기간 지속된다면 자원이 회수되지 않아 문제가 될 수 있다. Temporary Table에서 XID를 오랜시간 점유하고 있다면, Temporary Table을 생성한 세션을 종료하여 자원을 반환시켜야한다. 참고 What is autovacuum doing to my temporary tables? - Cybertec Did you know t..
(PostgreSQL) PostgreSQL autovacuum을 튜닝할 때 유용한 Tip 💡 이번 글에서는 Working with PostgreSQL autovacuum on Amazon RDS을 정리한 내용을 다루고자 한다. Autovacuum은 자동으로 VACUUM과 ANALYZE 명령문을 실행한다. Autovacuum은 추가/수정/삭제된 튜플이 많은 테이블을 찾는다. 그리고 데이터베이스에서 더 이상 사용되지 않는 데이터를 정리하여 저장공간을 확보한다. 기본적으로 AWS RDS PostgreSQL에서 Autovacuum이 활성화되어있다. 그리고 autovacuum과 관련된 설정들을 적절한 값을 기본값으로 설정해준다. 이 기본값들은 일반적인 기준으로 설정한 값이다. 때문에 시스템 특성에 맞는 적절한 값으로 설정값을 튜닝하면 성능상 이점을 얻을 수 있다. 해당 포스팅에서는 autovacuum 튜..
(PostgreSQL) AWS PostgreSQL RDS에 Transaction ID Wraparound 알럿 설정하기 본 글에서는 Amazon RDS for PostgreSQL에서 transaction ID의 상태를 모니터링하는 방법과 주요 문제를 해결하는 일반적인 방법에 대해서 설명하고자 한다. 이 글은 AWS Database blog에 포스팅된 Implement an Early Warning System for Transaction ID Wraparound in Amazon RDS for PostgreSQL 을 번역하여 정리한 글이다. transaction ID란? PostgreSQL은 vacuum 없이 21억여 개의 트랜잭션까지 처리할 수 있다. 만약 vacuum 없이 처리된 트랜잭션의 수가 2^31 - 10,000,000에 도달하게 되면, Postgresql은 베큠이 필요하다는 로그를 남기기 시작한다. 그리고 (..
(PostgreSQL) Truncate TABLE VS delete TRUNCATE란? TRUNCATE는 대용량 테이블을 빠르게 지울 수 있는 명령문이다. Truncate VS Delete DELETE 쿼리는 테이블의 데이터를 제거할 때 사용하는 쿼리이다. 그런데 전체 데이터를 삭제할 때에는 DELETE 쿼리는 효율적이지 않다. 이때에는 TRUNCATE TABLE을 사용하는 것이 좋다. TRUNCATE TABLE는 테이블 스캐닝 없이 전체 데이터를 지우기 때문에 DELETE 쿼리보다 빠르다. 그리고 스토리지를 바로 회수하기 때문에 VACUMM 작업을 수행할 필요가 없어서, 대용량 데이터를 제거할 때 유용하다. 사용법 TRUNCATE TABLE public.recommend_products; 테이블 식별 값(Primary Key)을 리셋시키고 싶은 경우에는 아래와 같이 질..
<나루세 마사노부> 도메인 주도 설계 철저입문 밑줄 그으며 책 읽기 📝 애플리케이션 서비스는 유스케이스를 구현하는 객체이다. 도메인 객체는 도메인을 코드로 옮긴 것이다. 도메인을 코드로 나타냈다고 해도 그것만으로는 이용자가 당면한 문제나 필요가 해결되지 않는다. 이용자의 필요를 만족시키거나 문제를 해결하려면 도메인 객체의 힘을 하나로 엮어 올바른 방향으로 이끌어야 한다. ... 유효성 검증 로직에서 에러를 반환하게 하는 경우, 결과 객체를 반환한다. 결과 객체는 개발자에게 강제력을 미치지 못한다. 즉, 처리 실패 핸들링의 역할을 클라이언트에 전적으로 위임하게 되는데, 이는 자칫 의도치 않게 실패를 그냥 지나쳐버리는 결과를 낳는다. 반대로 예외를 발새하는 쪽을 택하면 반환 값을 반환하지 않는다. 예외를 발생시키고 아무것도 하지 않으면 프로그램이 종료되..
[쿠버네티스] uWsgi Graceful Shutdown 발단 회사 시스템에서 API 요청이 비정상적으로 종료되는 오류가 있어서 원인을 분석하게 되었다. 그러다 이 오류는 배포 타이밍과 비슷한 패턴으로 발생한다는 것을 발견하게 되었다. 즉, 이 문제는 Pod이 죽을 때, uWsgi 컨테이너가 Graceful Shutdown을 하고있지 않아서 발생한 문제였다. 이번 글에서는 이 경험에서 학습했던 uWsgi의 특징과 쿠버네티스 파드의 종료 방식에 대해서 정리해보고자 한다. Graceful Shutdown이란? 프로그램이 종료될 때, 최대한 사이드 이펙트 없이 로직을 잘 처리하고 종료하는 것을 말한다. 예를 들어, 열심히 PPT를 작성하던 도중에 파워포인트가 꺼지는 모습을 상상해보자. 이 때, 아무런 조치없이 프로그램이 종료되고, 이전의 작업 내용이 유실된다면 이는..