글 못 쓰는 개발자

일관성 있는 에러 응답을 사용하자

Header 웹 서비스를 잘 개발하고 운영하기 위해서는 HTTP API의 성공 응답뿐만 아니라 에러 응답도 잘 설계할 필요가 있다. 에러 응답 설계는 개발자들마다 생각이 다르고 절대적인 표준이 없다. 당연하게도 모든 서비스들의 에러 응답은 모두 동일하게 설계되어 있지 않다. 내가 생각하는 에러 응답을 잘 설계한다는 것은 사용자의 입장에서 코드와 관련...

Spring Boot 애플리케이션에서 graceful shutdown은 어떻게 동작할까?

Header graceful shutdown이 적용되지 않은 상태에서 서비스를 운영 중이거나 생소하게 느끼시는 분들을 주변에서 많이 접하게 되는 것 같다. 마찬가지로 현재 재직 중인 곳에서도 일부 애플리케이션에는 적용되지 않은 상태였고 잘못 적용된 부분도 있어서 여러 가지 문제들을 겪고 있었다. 이를 계기로 graceful shutdown이 무엇이고...

Mariadb metadata lock으로 인해 발생한 장애, 그 후의 이야기

Header 이전 글에서 이야기한 Mariadb metadata lock으로 인해 발생한 장애의 이후 방지를 위해 이후에 어떤 것들을 했고 어떤 시행착오를 거쳤는지 이야기해보고자한다. Body 가장 먼저 한 일은 장애가 발생한 일시, 영향을 받은 서비스, 발생 원인, 복구 과정 그리고 예방책으로 구성된 회고록을 작성했다. 당시의 장애 상황에 대해서...

Mariadb metadata lock으로 인해 발생한 장애 회고

Header 운영중인 데이터베이스 테이블에 인덱스를 생성하는 과정에서 대상 테이블에 접근하는 세션들이 쿼리를 실행하지 못하는 상태로 지연되어 20분 정도 서비스가 중단되었던 장애를 회고해보고자한다. Body 개발과 운영 데이터베이스의 스키마를 비교하던 중 테이블에 생성된 인덱스가 동일하지 않아 운영 데이터베이스에서 누락된 인덱스를 생성하고자 하였...

Mongodb multi document transaction에서 발생하는 write conflict

Header 사내에서는 Mongodb 4.0 버전과 호환되어 트랜잭션을 지원하는 Documentdb 4.0 버전을 사용하고 있다. 전체 서비스 구성 중 파트너사와 외부 연동을 담당하는 웹 애플리케이션에서는 Mongodb를 메인 데이터베이스로 사용하고 트랜잭션이 서비스 레이어에 적용되어 있다. Mongodb의 multi document trasacti...