전체글622 7시간 장애와 수영장 지난주 금요일에 7시간동안 서비스가 안되는 초대형 사고가 났다. [서비스 장애 발생 공지] 2021년 6월 4일 서비스 오류 원인은 이벤트로 인해서 높은 트래픽이였지만, 현 서비스의 인프라 스펙을 봤을때 그정도 트래픽은 무리없이 넘어갔어야 했다. 하지만 결국 장애가 났었고, 이유는 서비스에서 사용중이던 여러 쿼리들과 코드들의 비효율 때문이였다. 슬로우쿼리 데드락을 유발할 수 있는 쿼리 최종 생성되는 쿼리를 예측할 수 없게 추상화된 SQL Builder 코드 이 쿼리를 개선하면, 또 다른 쿼리가 터지고, 그다음 쿼리가 또 터지고 연쇄폭발처럼 터져서 데드락 쿼리들 kill 하면서 인덱스 넣고 DB 업그레이드하고, 서버 늘리고 커넥션풀 늘리고 그랬다. 어떻게 마무리 되긴했지만, 위기감이 정말 많이 들었다. 바.. 2021. 6. 9. is_left vs left_at vs left_status 트위터를 보다가 재미난 포스팅을 하나 발견했다. you-might-as-well-timestamp-it 전체적인 글의 주장은 다음과 같다. 소프트웨어 개발에서는 상황에 의존하는게 좋은 설계이지, 어떤 상황에도 좋은 기준이라는건 있을 수 없다고 생각한다. 다만, boolean (is_deleted) 대신 timestamp (deleted_at) 를 저장하는 것은 상황에 관계 없이 확실하게 좋은 설계라고 생각한다. 일반적으로 어떤 flag 값이 필요하다고 하면 그 flag가 언제 변경되었냐도 거의 필수적으로 필요하게 된다. 이미 boolean으로 결정해서 사용할 경우 이 시간을 찾아 내기 위한 마이그레이션 비용이 생각보다 많이 필요하고, 그때 가서 변경하기엔 많이 늦었다. 만약 timestamp (delet.. 2021. 6. 3. Pinpoint APM Node 사용하기 지난 시간에 이어, 설치된 Pinpoint Node 의 기본적인 사용법과 장단점을 배워보겠습니다. 1. 로컬 프로젝트에서 접근하기 저는 로컬 개발을 위해 nodemon을 사용하고 있어, nodemon.json에 다음과 같이 설정을 해서 접근할 수 있습니다. { "env": { "PINPOINT_COLLECTOR_IP":"ec2 ip", "PINPOINT_SAMPLING_RATE":"1", "PINPOINT_APPLICATION_NAME":"pinpoint-node", "PINPOINT_AGENT_ID": "local" } } 물론 Pinpoint Collector의 방화벽 (Security Group) 에 현재 로컬 PC의 IP가 인바운드에 등록 (포트: 9991 ~ 9993) 되어 있어야 합니다. 위 .. 2021. 5. 30. 2020년 회고 (소라의 날개 34권 중) 2020년은 상반기/하반기가 아닌 1년 전체 회고를 작성하게 되었다. 7월초에 상반기를 정리해야지 하다가, 회사 프로젝트가 너무 바쁘게 지나가 10월이 지나고, 사내 첫 기술 컨퍼런스도 준비하고 하다보니 어느새 2021년 5월이 되었다. 너무 늦어서 쓸까말까 하다가, 2020년에 무엇을 했는지 어디에도 안남는것이 싫었고, 이번에 이런 이유로 안쓰게 되면 앞으로도 계속 안쓰게 될 것 같다는 생각이 들었다. 그래서 너무 늦었지만 2020년 회고를 쓴다. 1. 회사 올 한해는 기술적으로도 다사다난했지만, 서비스적으로도 꽤나 다사다난했던 한해였다. 그래서 단순히 개발자가 아닌 제품 개발자 로서 많은 고민을 할 수 있었다. 1-1. 신규 시스템 오픈 매입 (acquire) 시스템을 오픈.. 2021. 5. 22. Mac에 PostgreSQL없이 PSQL만 설치하기 일반적인 GUI 클라이언트에서는 PostgreSQL의 psql을 지원하지 않습니다. 그러다보니 psql 명령어를 입력이 필요하면 별도 설치가 필요합니다. 물론 PC에 PostgreSQL 을 설치하셨으면 psql 이 설치되어있겠지만, Cloud, Docker 가 대중화된 시점에서 직접 PC에 PostgreSQL을 설치하는 경우는 거의 없는것 같습니다. 1. 설치 먼저 기존에 설치된 psql이 있는지 확인해봅니다. psql --version 해당 명령어 실행시 설치가 안된 것이 확인이 되면 Homebrew를 통해 libpq을 설치합니다. brew install libpq 해당 패키지 설치시 psql, pg_dump 및 기타 클라이언트 유틸리티 전체를 사용할 수 있습니다. 다만, PostgreSQL 패키지에 .. 2021. 5. 21. Pinpoint APM Node 버전 설치하기 자바 진영에서 유명한 분산 환경 APM (Application Performance Monitoring) 도구를 고르라고 하면 네이버에서 만든 Pinpoint를 쉽게 떠올리곤 하는데요. 특히나 요즘 같이 분산환경에서 애플리케이션 모니터링에 최적화된 기능들이 많아 백엔드 구성하는데 있어 큰 도움을 받는데요. 아쉽게도 그동안 공식적으로 Java / PHP / 파이썬 / C 만 지원을 하던 중에, 드디어 Node를 지원하기 시작했습니다. 물론 자바처럼 100%를 지원하진 않지만, 그럼에도 충분한 장점이 있는 Pinpoint Node Agent를 이번 시간에는 설치해보겠습니다. 이 모든 과정은 기존에 Pinpoint 구성이 없다고 가정해서 진행합니다. 이미 Pinpoint를 구성해서 사용하는 중이시라면, 3번으.. 2021. 5. 17. 이전 1 ··· 32 33 34 35 36 37 38 ··· 104 다음