본문 바로가기
프로그래밍

백엔드개발자가 메인 데이터베이스 삭제한 후기

by information-bada 2022. 9. 22.
반응형
반응형

 

팀원중 한 명이 실수로 주요 백오피스 데이터베이스를 삭제했을 때 인데요. 

문맥의 일부

 

제가 전자 상거래 회사에서 일하고 있었을 때인데요. 몇 가지 핵심 백오피스 기능 개발을 담당하는 두 팀을 이끌고 있었습니다. 백오피스는 프런트 엔드에 노출된 정보를 전 세계 사용자가 이용할 수 있도록 관리했으며, 여러 팀에서 관리했습니다. 비교적 최근에 설립된 회사임에도 불구하고 수십만 명의 사용자 기반과 세계적인 영향력을 가지고 있었다.

 

저희 팀 중 한 팀은 재고 및 제품 정보 관리에서 주문 처리 흐름에 이르기까지 대부분의 백오피스 흐름과 도구를 지원하는 주요 백오피스 제품 카탈로그를 개발했습니다. 대부분의 백오피스 서비스, 애플리케이션 및 비즈니스 프로세스가 어떤 방식으로든 액세스하기 때문에 오히려 중요한 구성 요소였습니다. 다음 다이어그램을 살펴보시겠습니다. 

 

 

플랫폼은 마이크로서비스 아키텍처로 구성되었으며, 제품 카탈로그는 다른 마이크로서비스에 의해 관리되는 여러 다른 도메인의 이벤트 스트림으로부터 구축된 정규화되지 않은 정보를 가진 읽기 모델이었다.

제품 카탈로그는 제품 메타데이터, 재고, 생산 정보, 가용성, 가격 등 다양한 정보가 REST API에 노출되어 있는 1,700만 개의 제품을 포함하는 ElasticSearch 데이터베이스에 의해 지원되었습니다.

필터의 양이 많고 다양하기 때문에 ElasticSearch를 주로 사용했습니다(50가지 이상의 필터, 일부는 텍스트 검색 포함).

 

매우 짧은 탄력적인 검색 컨텍스트

 

어떤 기술에서도 데이터베이스에 대한 직접 쓰기 액세스 권한을 가진 사람은 없었습니다(SQL Server에서 MongoDB 및 Cassandra에 이르기까지 사용 사례에 따라 여러 기술을 사용했습니다). 그러나 ElasticSearch는 예외였습니다. 전통적으로 Infra나 DBA가 아닌 엔지니어링 팀에 의해 관리되었기 때문입니다.

 

다른 데이터베이스 기술과 달리 ElasticSearch는 REST 인터페이스를 통해 접근한다. 일반적으로 URL의 형식은 다음과 같습니다(당시 ElasticSearch 버전 5를 사용 중).

 

이 유형은 최신 버전에서 삭제되었습니다.

 

모든 종류의 작업은 HTTP 호출을 통해 수행되었으며, 그렇지 않으면 SQL 스크립트를 사용하여 수행되었으며, ElasticSearch에서는 HTTP 요청을 수행할 수 있습니다. 예를 들어 REST 지침을 준수하면 제품 카탈로그 인덱스(ElasticSearch의 인덱스가 SQL 테이블과 비슷함)가 있고 특정 제품을 가져오려면 GET elastic.com/productIndex/product/152474145을 수행합니다. PUT 또는 PATH로 해당 제품을 업데이트하거나 DELETE를 사용하여 삭제하거나 POST 또는 PUT로 생성하는 데 동일한 엔드포인트가 사용됩니다. 동일한 내용을 URL의 다른 부분에 적용할 수 있습니다. elastic.com/productIndex/product의 GET는 형식 정보를 얻습니다. 동일한 내용을 사용하여 유형을 생성, 삭제 또는 업데이트할 수 있습니다. 인덱스 정보를 가져오거나, 업데이트하거나, 삭제하거나, 인덱스를 만들기 위해 elastic.com/productIndex도 마찬가지입니다.

 

더 디드

 

 

 

대부분의 날과 마찬가지로 한 회의부터 다음 회의까지 이어지는 정기적인 금요일이었다. 회의 사이의 잠깐 동안의 공간에서 나는 보통 어려운 문제나 팀이 자율적으로 할 수 없는 작업을 돕는 것과 같은 임시 작업을 짜낸다. 이 경우 API에서 사용할 수 없는 필터로 일부 데이터를 내보내라는 비즈니스 요청이 있어 일반적인 작업은 아니지만, 대상자의 비즈니스 긴급성과 영향을 고려해 도움을 주기로 했습니다.

 

다음 회의 전까지의 15분 동안, 저는 실시간 환경에 빠르게 액세스하고 쿼리를 수행하기 위해 선임 멤버 중 한 명과 재빨리 합류했습니다. ElasticSearch에 대한 직접 액세스는 기본적으로 REST API이기 때문에, 우리는 일반적으로 요청을 하기 위해 포스트맨을 사용했다.

 

내 동료는 원격 화면 공유를 통해 도움을 주었다. 제가 주로 했던 연습은 라이브 코드에 대한 일종의 라이브 코드 리뷰였습니다. 먼저 올바른 URL이 있는지 확인하기 위해 연결을 테스트하고 싶었기 때문에 라이브 엔드포인트 및 인덱스 이름(위에서 설명한 cluster_endpoint/index_name)을 복사하고 GET 요청을 제출했습니다. 포스트맨 인터페이스에 익숙하다면 드롭다운에서 HTTP 액션을 선택할 수 있습니다.

 

 

안타깝게도, 제가 요청서를 제출한 후, 저는 GET 대신 DELETE 액션이 선택되었다는 것을 알게 되었습니다. 인덱스 정보를 검색하는 대신 삭제했습니다.

 

 

 

댓글