지표가없는 작업의 이점

마지막 업데이트: 2022년 2월 15일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
앞서 언급했듯이 장애보고서를 통해서 생각보다 많은 항목이 수집되고 있습니다.

지표가없는 작업의 이점

SQL Server 의 Batch Request 와 Transaction 의 모니터링 이유

SQL Server 를 유지 관리 할 때에는 현재 서버가 얼마나 열일(?)하는지에 대한 척도를 알고 있어야 합니다.

위 2개의 지표는 이러한 개념을 알게 해주는 지표가 될 수 있습니다.

2개의 지표는 비슷하게 보일 수 있지만 측정 시 다른 유형의 시작점을 사용하고 있기 때문에 차이점을 알아야 합니다.

SQL Server 배치

여러 SQL 문을 명령문 그룹으로 실행하거나,

여러 SQL 문 그룹으로 구성된 단일 SQL 문을 실행하는 경우 SQL Server 의 일괄 처리로 간주됩니다.

이는 실질적으로 전체 일괄 처리 문의 실행 후에 결과가 반환된다는 것을 의미합니다.

대부분의 경우 네트워크 트래픽을 감소시킬 수 있으며, 대상 데이터 원본이 배치문의 실행을 최적화 할 수 있다는 점에서

이러한 접근법의 장점은 각 포함 문을 독립적으로 실행하는 것보다 실행이 더 효율적입니다.

명시적 배치 : 2개 이상의 SQL 문이 단일 일괄 처리 스크립트에서 결합되어 세미콜론으로 구분되는 경우입니다.

INSERT INTO T1 VALUES (1);

INSERT INTO T1 VALUES (2);

INSERT INTO T1 VALUES (3);

저장 프로시저 : 둘 이상의 SQL 문을 포함하는 모든 저장 프로시저는 일괄 처리로 간주됩니다.

CREATE PROCEDURE TEST

SELECT * FROM T1

SELECT * FROM T2

중요한 점은 CREATE PROCEDURE 자체는 Batch 가 아닙니다. 그러나 위의 Procedure 는 Batch 로 실행되는데 그 이유는 2개의 SELECT 문이 Batch 로써 실행되기 지표가없는 작업의 이점 때문입니다.

SQL Server 트랜잭션

SQL Server 에서 수행되는 SQL Server 작업 단위 입니다.

트랜잭션은 여러 작업으로 구성되며 각 작업은 지정된 순서로 실행되는 여러 SQL 문으로 구성 될 수 있습니다.

트랜잭션에는 자동 커밋 트랜잭션, 명시적 트랜잭션, 암시적, 일괄 처리 트랜잭션이 있습니다.

Batch Requests/sec 와 Transactions/sec

Batch Requests/sec 를 모니터링 할 때, 해당 수치는 배치가 수행된 수를 의미합니다.

예를 들면, 굉장히 많은 구문을 사용하는 세 개의 저장프로시저가 동시에 실행된다면 지표가없는 작업의 이점 Batch Requests 의 값은 3 입니다.

Transactions/sec 는 수치를 읽는 주기동안 '( 마지막 트랜잭션 번호 - 이전 트랜잭션 번호 ) / 두 읽은 사이의 초' 로 계산됩니다.

테스트 1 - BEGIN TRANSACTION 이 있는 SELECT 문

Batch Requests 와 Transactions 의 수치는 BEGIN TRANSACTION 문에서 수치에 들어감을 알 수 있습니다.

우아~한 장애대응

안녕하세요. 우아한형제들 시스템신뢰성개발팀 박주희입니다.
얼마 전에 시스템신뢰성개발팀에 대해서 소개한 적이 있습니다. 그때, 팀 소개에서 시스템신뢰성개발팀에서 가장 중요한 업무 중 하나는 장애 대응이라고 설명했는데, 오늘은 이 장애 대응에 대해서 조금 더 자세하게 설명해보려고 합니다.

우아한형제들에게 장애란?

많은 서비스회사가 장애에 민감하게 반응하고 있습니다.
장애로 인해 금전적 손해가 발생하기 때문이기도 하지만, 그보다 더 큰 이유는 장애로 인한 고객 불편이 장기적으로 서비스의 신뢰를 하락시킬 수 있기 때문입니다. 장애는 서비스의 성장, 서비스의 변화 등 다양한 과정 중에서 발생하는 성장통 중의 하나이기 때문에 장애가 발생하는 것을 원천적으로 차단할 방법은 없습니다. 하지만, 장애에 대응하는 과정을 통해서 서비스의 신뢰는 지킬 수 있습니다. 장애가 발생하더라도 영향 범위를 최소화하고, 빠르게 복구하며, 고객에게 적절한 정보를 제공하고, 같은 불편을 겪지 않도록 조처를 하는 모든 과정이 고객의 신뢰를 지키는 방법입니다.

우아한형제들이 장애 상황에서 고객의 신뢰를 지키기 위해서 어떤 활동을 하는지 지금부터 자세히 살펴보겠습니다.

장애 탐지

장애는 시스템 알람으로 탐지할 수도 있고, 고객 센터로 인입되는 문의를 통해서도 인지할 수 있습니다.

시스템 알람을 통한 탐지

모든 시스템에는 이상 현상을 감지할 수 있는 모니터링 지표가없는 작업의 이점 시스템이 구축되어 있으며, 이 모니터링 시스템에서 탐지한 이상 현상을 즉각적으로 인지하기 위해서 Slack(슬랙)으로 알람을 발송하고 있습니다. 그 중에서도 특히 주의를 기울여야 하는 알람의 경우 담당자에게 즉시 연락이 갈 수 있도록 온콜도 운영하고 있습니다.
성격에 맞는 알람 채널을 다양하게 구성해서 운영하고 있는데, 각 시스템 단위의 알람뿐 아니라, 비즈니스 지표를 기준으로 한 알람과 외부 연동 시스템의 이상을 확인할 수 있는 알람 등 다양한 지표를 참고로 서비스 이상 징후를 탐지하고 있습니다.

  • 시스템 지표: CPU, Memory, latency, 5xx error count 등
  • 비즈니스 지표: 가게 상세 진입률, 주문 추이 등
  • 외부 연동 시스템 지표: 연동시스템 주문 전달 실패, 프랜차이즈 시스템 오류 등

고객 센터로 인입되는 문의

대부분 이슈를 시스템 알람을 통해서 인지하고 있지만, 사용 빈도가 극도로 낮은 메뉴에 오류가 발생하거나 사용자 기기 기종 혹은 OS 버전에 따른 제한적인 오류가 발생하는 케이스와 같이 특수한 경우에는 시스템으로 탐지하기 어렵습니다. 이런 오류들은 주로 고객 센터를 통해서 인지하게 됩니다. 고객 센터로 인입되는 이슈 중, 시스템 이상으로 판단되거나 고객 센터에서 자체적으로 처리하지 못하는 문제는 서비스 담당자들이 함께 커뮤니케이션하고 있는 채널로 전달됩니다. 각 팀에서는 고객센터에서 전달된 이슈를 확인하고, 장애로 확인되는 경우 장애 대응을 시작하게 됩니다. (장애가 아닌 경우도 종종 있습니다.)
몇 년 전까지는 monolithic 구조로 인해서 모든 엔지니어가 이 채널의 알람에도 민감하게 반응했지만, 현재는 MSA 구조에 맞게 문제가 있는 도메인을 호출하면 (ex, 주문, 리뷰, 결제 등) 각 담당자에게 온콜이 가도록 분리 운영하고 있습니다.

장애 공지

개발 조직에서는 장애를 감지한 순간, 즉각적으로 장애를 공지하고 있습니다.

noti

장애 공지는 장애 발생 시간, 영향 범위, 장애 조치 채널, 내부적으로 정의한 장애 등급, 등 여러 정보를 포함하고 있습니다.
하지만, 최초로 장애 공지를 할 때는 확인된 최소의 정보만 가지고 빠르게 공지하도록 권고하고 있습니다. (초기에 모든 항목을 확인하고 기입 할 수 없고, 파악하는데 최소한 몇 분의 시간은 걸리기 때문입니다) 완벽한 정보가 아니더라도 일단 빠르게 장애 상황이 발생했다는 경보를 울리면 담당자들이 빠르게 대응을 준비할 수 있으므로 장애 공지는 화재경보기와 같은 역할을 한다고 볼 수 있습니다. 건물에서 화재경보기가 울리면 어디에서 불이 났는지 눈에 보이지 않아도 누군가는 119에 신고를 하고, 누군가는 소화기를 찾고, 누군가는 대피를 준비합니다. 이와 비슷하게 장애 공지가 올라오면 사내에서 누군가는 서버 증설을 준비하고, 누군가는 고객 전파를 준비하고, 누군가는 담당 시스템에 영향이 있는지 확인하게 됩니다. 이렇게 울려진 경보를 통해서 각 담당자가 각자의 역할을 확인하고 그 내용을 공유하기 위해서 장애 조치 채널 (논의 채널)로 몰려 들어옵니다. 개발자, 기획자, 인프라 엔지니어, SRE 조직은 물론이고, 대외 커뮤니케이션 담당자 및 주요 의사 결정권자들까지 모두 빠르게 채널에 합류합니다. 장애를 빠르게 해결하기 위한 수단과 방법을 모두 동원하기 위해서 장애 공지를 활용하고 있다고 볼 수 있습니다.

members

최근 발생한 장애 조치 채널에 합류한 멤버들의 리스트를 확인해보면 정말 다양한 팀에서 합류했다는 사실을 알 수 있습니다.
(이 지표가없는 작업의 이점 외에도 100명이 넘는 인원이 참여하고 있습니다.)

장애 전파

장애를 해결하는 것만큼이나 장애 상황과 해결 방안을 잘 전파하는 것도 중요합니다.

배달의민족과 같은 플랫폼 서비스에 장애가 발생하면 다양한 이해관계자들이 영향을 받습니다. 이해관계자는 크게 외부 이해관계자와 내부 이해관계자로 나눌 수 있습니다. 외부 이해관계자는 가게를 운영하시는 사장님, 배달을 수행하는 라이더, 음식을 주문하는 사용자와 같은 고객뿐만 아니라, POS, 배달대행사, 프랜차이즈, PG사 등 다양한 연동 시스템을 담당하는 업체들도 모두 포함합니다. 내부 이해관계자는 장애에 대응하는 개발조직은 물론이고, 고객과의 접점에서 직접 응대하는 CS 조직, 대외 커뮤니케이션 조직, 사업 조직까지 많은 부서를 포괄하고 있습니다. 장애가 발생하면 앞서 나열한 모든 이해관계자에게 작든 크든 어떠한 영향을 주게 됩니다.
그렇기 때문에 (모든 장애에 해당하지는 않지만) 일부 대규모 장애의 경우 여러 채널로 문의가 들어오기도 합니다. 사용에 불편함을 느낀 사용자들과 장사에 영향을 받는 사장님들은 고객센터와 영업부서를 통해서 문의를 해오게 되고, 연동된 여러 시스템에서는 각 담당자에게 문의하게 됩니다. 이때, 정확한 정보가 전달되지 않는다면 여러 담당자가 혼란을 겪게 되고 때로는 외부로 잘못된 정보가 전달될 수도 있습니다. 이런 혼란을 방지하기 위해서 장애를 대응하는 조직에서는 정확한 정보를 전달하기 위해 많은 노력을 기울이고 있습니다.

장애 전파 방법에 대해서도 많은 고민과 시행착오를 거쳐 프로세스를 수립했는데, 핵심적인 두 가지를 살펴보겠습니다.

첫째, 장애 복구와 장애 전파를 분리 운영합니다.

앞서 이야기했듯이 장애 전파는 장애 복구만큼이나 중요하기 때문에 둘 다 놓칠 수 없지만, 양쪽 모두를 신경 쓰다 보면 하나도 제대로 되지 않을 때가 있습니다. (극한의 스트레스는 덤….)
그래서 장애 대응 시에 반드시 장애 복구와 장애 전파를 같은 사람이 하지 않도록 가이드하고 있습니다. 될 수 있으면 담당팀의 기획자 혹은 조직장이 전파할 수 있도록 지정하고, 상황이 여의치 않으면 SRE팀이 이를 지원하기도 합니다. 이러한 조치는 두 가지 이점이 있는데 첫 번째 이점은 엔지니어들이 장애 복구에 집중할 수 있다는 점이고, 두 번째 이점은 유관부서에서는 조금 더 서비스에 포커스 된 지표가없는 작업의 이점 내용을 전달받을 수 있다는 것입니다.

장애 복구를 진행하고 있는 엔지니어가 장애 전파도 같이하게 되면 서비스의 영향도 보다는 시스템의 상태를 공유하는 경우가 많이 있습니다. 복구에 집중되어 있어서 장애 현상을 전달하기는 쉽지만, 장애 현상으로 인해서 서비스에 어느 정도의 영향이 있는지를 고려하기는 힘들기 때문입니다. 이 경우 정보 전달은 되었지만, 사용자 친화적인 정보가 아니므로 별도의 해석을 하거나, 거꾸로 다시 질문을 해야 하는 상황이 야기됩니다. 질문이 이어지게 되면 혼란은 가중되고 집중력은 떨어지게 되어 결과적으로 장애 복구 시간이 늘어나기도 합니다.

특정 서버의 스펙을 초과하는 트래픽이 들어와서 scale out을 해야 하는 경우로 예를 들어보겠습니다.

A 서버에 트래픽이 몰려 레이턴시가 높습니다. 스케일 아웃 진행 중이며 10분 정도 소요될 것으로 예상합니다.

사용자가 급증하여 A 서비스 이용이 원활하지 않습니다. 전체적인 접속 속도가 늦으며 간헐적으로 페이지 접근이 되지 않을 수 있습니다. 서버 증설 진행 중이며 10분 후에 정상화 될 예정입니다.

다소 극단적인 예라고 생각될 수 있지만, 실제 장애 상황에서 나타나는 패턴입니다. 엔지니어는 빠르게 현상에 대해 전달하는데 집중하고, 기획자나 조직장은 서비스 상태를 전달하는 데 집중하고 있습니다. 이런 정보를 전달받는 입장에서도 둘의 차이는 극명하게 나타납니다. 엔지니어 버전의 경우, (물론 엔지니어들은 한 번에 이해하지만) 외부로 커뮤니케이션을 해야 하는 유관부서에서는 어떻게 전달해야 할지 고민하는 시간이 늘어나거나 복구 작업 중인 담당자에게 다시 질문을 해야 하는 난감한 상황에 처하기도 합니다. 장애 담당 부서에서 전달하는 정보는 여러 내외부 관계자들에게 전달되기 때문에 정보를 전달받는 사람이 이해하기 쉽도록 전달해야 혼란을 줄일 수 있습니다.
이런 여러 가지 이유로 인해서 장애 대응과 장애 전파를 분리하게 되었습니다. 이 조치 후에 엔지니어들은 장애 복구에 집중할 수 있는 시간을 확보하여 더 정확하고 빠르게 서비스를 복구할 수 있게 되었고, 유관부서에서는 반복되는 질문 없이 각 부서의 역할에 집중해서 빠르게 대외 커뮤니케이션을 비롯한 여러 조치를 진행할 수 있게 되었습니다.

둘째, 고객이 알고 싶어하는 내용을 전파합니다.

사용자들이 알고 싶은 건 장애 현상이 나에게만 발생하는 것인지 아닌지, 언제 해소되는지, 잘못 결제된 내역이 있다면 그 내역이 언제 취소되는지와 같은 정보이며, 사장님들과 라이더들이 알고 싶은 것도 배달하지 못한 음식은 어떻게 하면 되는지, 언제쯤 서비스가 복구 되는지, 폐기해야 하는 음식에 대한 보상은 어떻게 받을 수 있는지 등과 같은 정보입니다.
즉, 현재 상태, 조치 예정 시간, 후속 대응 세 가지가 주요 이슈가 됩니다. 이를 위해서 담당 부서에서 전달해준 내용을 바탕으로 여러 커뮤니케이션 담당자들이 상황과 전달 대상에게 맞는 공지를 여러 수단을 통해서 제공하고 있습니다. 어떠한 현상으로 인해서 서비스에 문제가 있으며, 언제까지 복구할 예정이고, 후속조치는 어떻게 진행될지 이 3가지 핵심적인 정보를 전달함으로 인해서 고객의 혼란을 줄이고, 고객센터나 영업부서에 쏟아지는 문의도 줄일 수 있습니다. 앞서 이야기했듯이 장애 발생을 원천적으로 막을 수는 없지만, 고객에게 적절한 정보를 제공함으로써 서비스의 신뢰는 지킬 수 있습니다.

장애 복구

장애 공지 후에 장애 전파와 장애 복구가 동시에 진행됩니다.

장애 복구에서 중요한 것은 서비스 정상화이며, 대부분의 케이스에서 서비스 정상화는 원인 파악보다 우선됩니다. 원인을 찾는 것도 물론 중요하지만, 장애를 빠르게 복구하고 사용자의 불편을 최소화하기 위해서 원인 파악보다는 장애 해소에 더욱 집중합니다. 일반적으로 많이 사용하는 장애 복구 방법을 살펴보겠습니다.

장비 증설

트래픽이 과도하게 몰리거나 변경된 코드가 시스템에 부하를 주는 경우 가장 먼저 장비를 증설합니다. 클라우드 환경의 가장 큰 장점이 손쉽고 빠르게 장비 증설이 가능하다는 점이기 때문에 이를 십분 활용하여 장비 증설을 통해 서비스를 안정화합니다.배달의민족 서비스의 경우 피크 시간의 트래픽이 다른 시간과 비교해서 극단적으로 높은 편입니다. 사전에 이를 충분히 고려해서 장비를 운영하고 있지만, 피크 시간에 예상하지 못한 트래픽이 급격하게 증가하게 되면 시스템이 매우 취약해질 수 있습니다. 이때 장비를 증설하면 빠르게 서비스를 안정화할 수 있고, 실제 병목을 일으키는 지점을 찾아서 근본적인 조처를 할 수 있는 시간을 벌 수 있습니다.

trend

롤백

급증한 트래픽이 문제가 아닌 경우 가장 먼저 장애 발생 직전 시점에 변경된 내용이 지표가없는 작업의 이점 있는지 확인합니다. 트래픽이 증가하지 않았다면 시스템의 어떤 변경으로 인해서 장애가 발생할 수 있기 때문입니다. 만약 시스템 변경으로 인해서 문제가 발생했다면, 즉시 변경사항을 롤백합니다. 이때 롤백은 코드 롤백뿐만 아니라 인프라 단의 설정과 같은 다른 변경도 모두 포함합니다. 일반적으로 장애 시점 이전 24시간 내의 변경 내역을 전부 확인하는데, 변경 직후에 장애가 발생하는 경우보다는 이슈가 누적되어서 몇 시간 뒤에 장애로 확산되거나 특정 작업 (ex, 배치)와 충돌이 나는 경우가 많기 때문입니다. 원인이 명확하지 않으면 코드나 설정을 변경하는 것보다 정상 동작하던 상태로 롤백하는 것이 훨씬 안전하므로 롤백을 가장 우선하여 고려합니다.

핫픽스

앞서 언급했던 롤백이 가장 빠른 복구 방법이긴 하지만, 코드 롤백이 불가능할 경우 (ex, DB 스키마 변경)나 문제의 원인이 명확하여 롤백보다 핫픽스가 더 빠르다고 판단되는 경우에는 문제 되는 부분을 빠르게 수정해서 핫픽스를 진행합니다. 핫픽스를 진행할 때는 원인을 명확하게 알고 100% 확률로 해소 될 수 있는 핫픽스라고 하더라도 반드시 페어로 확인하고, 베타에서 검증한 후에 진행하고 있습니다. 물론, 검증에 시간이 더 걸리지만, 장애 확산이나 side effect를 줄이기 위해서 안전하게 해결하는 것을 최우선으로 하고 있습니다.

장비 교체

간혹 특정 장비에 문제가 생기거나 위의 조치들로 해결되지 않을 때는 장비를 교체합니다. (클라우드 환경에서도 장비에 문제가 생기는 경우가 종종 있습니다.) 특정 장비에서만 문제가 발생하면 해당 장비만 교체하고, 전체적으로 문제가 발생하면 운영 중인 장비 구성과 동일한 세트를 준비한 후에 전체를 교체하기도 합니다. 서비스 중단 시간을 최소화하기 위해서 재기동을 하기보다는 장비를 교체하는 방향으로 진행하고 있으며 DB도 failover를 통해서 장비를 교체합니다. 물론, 불가피한 경우에는 재기동을 하기도 합니다. (말 안 들을 때 껐다 켜는 건 국룰 아닌가요?)

급박한 순간에도 항상 가장 빠르게 복구 할 수 있는 방법을 찾기 때문에, 서비스가 정상화 된 후 원인 파악을 진행해보면 처음 시도한 복구 방법이 잘못되었던 경우도 있습니다. 하지만 그 방법이 틀렸다고 생각하지는 않습니다. 엔지니어들은 항상 서비스 정상화를 위해 할 수 있는 가장 빠른 방법을 선택하고 있고 그런 시행착오를 거쳐 가면서 우리는 좀 더 나은 방향으로 나아가고 있다고 믿기 때문입니다.

장애 후속 조치

장애 복구가 완료되고, 서비스가 정상화되면 원인 파악과 재발 방지 대책 수립을 위해서 장애 리뷰를 진행합니다.

가장 먼저 장애 대응 조직에서는 장애보고서를 작성하게 되는데, 이 장애보고서에는 장애 발생 시각, 탐지 시각, 종료 시각, 장애 탐지 방법, 장애 발생 지점, 장애 복구 방법, 대응 과정 중의 시간별 action, 장애 원인, 재발 방지 대책 등이 포함됩니다. (내용이 꽤 많습니다)
이 중에서도 가장 중요한 항목은 장애 원인 분석재발 방지 대책 수립입니다.

장애 원인 분석

우리는 장애 원인을 정확하게 찾기 위해서 5whys라는 기법을 사용합니다.

5whys는 도요타의 Taiichi Ohno가 체계적인 문제 해결을 위해 개발한 도구로, 어떠한 문제 상황에 대해 그러한 상황이 발생하게 된 원인을 ‘왜 그러한 상황이 발생하였는가?’ 라는 질문을 여러 번 반복해나가면 문제의 근본 원인에 도달할 수 있다는 방법론입니다.

5whys

미국 제퍼슨 독립 기념관의 기둥 대리석이 지속적으로 부식되어 해마다 많은 보수비용이 발생하고 기념관의 이미지가 훼손되는 문제가 있었는데, 5whys를 통해서 해결한 이 사례를 예로 들어보겠습니다. .

  • why 1. 왜 대리석들이 그렇게 빨리 부식되는가?
    — 비누 청소를 자주하기 때문이다.
  • why 2. 왜 비누 청소를 자주하는가?
    — 비둘기 배설물이 많이 묻기 때문이다.
  • why 3. 왜 비둘기 배설물이 많은가?
    — 비둘기의 먹잇감인 거미가 많이 있기 때문이다.
  • why 4. 왜 거미가 많은가?
    — 거미의 먹잇감인 불나방이 많이 있기 때문이다.
  • why 5. 왜 불나방이 많은가?
    — 실내 전등을 주변보다 일찍 켜기 때문이다.

5whys를 통해 도출된 root cause를 해결하기 위해서 제퍼슨 독립 기념관은 주변 건물보다 2시간 늦게 조명을 밝히는 것으로 문제를 해결했습니다.

우리는 장애 리뷰에 이 방법론을 적용해서 조금 더 근본적인 원인을 찾고자 합니다. 근본 원인에 도달하는 과정은 어렵고 정답이 정해져있는 것도 아니지만 이 방법을 이용해서 많은 인사이트를 얻고 있습니다. 장애 리뷰에 이 방법을 적용하면서 아래 세 가지 포인트를 항상 고려하고 있습니다.

  • 첫 번째 질문은 항상 장애에 영향을 받은 고객의 관점에서 시작해야 합니다.
  • 검증이 가능한, 혹은 검증된 사실에 기반해서 답변을 해야 합니다.
  • 5번의 숫자는 상징적인 숫자로 꼭 질문이 5개일 필요는 없고, 더 적거나 더 많아도 됩니다.

재발 방지 대책 수립

앞선 과정을 통해서 근본 원인을 찾았다면, 그 문제가 다시 발생하지 않도록 재발 방지 대책을 수립합니다. 이때 재발 방지 대책은 근본 원인을 제거하는 데서 그치지 않고 더 빠른 탐지와 더 빠른 복구에 도움이 되는 모든 조치를 포함합니다. 모니터링 지표 추가, 설정값 변경, 코드 리뷰 절차 개선, 배포 프로세스 수정 등 여러모로 고민하고 조치하며 단기, 중기, 장기적으로 개선할 방안들을 도출합니다. 단기적으로는 부하가 발생하는 로직 개선, 이슈 발생 시 빠른 탐지를 위한 알람 강화와 같은 항목들이 도출되며, 이 작업들은 대부분 하루 이틀 내에 마무리됩니다. 중, 장기적 대책은 아키텍처를 개선하거나 레거시를 제거하는 것과 같은 대규모 작업으로, 필요에 따라 TF를 구성하기도 하고 전사 프로세스 변경이 진행되는 때도 있습니다. 빠르게 개선할 수 없는 경우는 임시방편을 도입하기도 하지만 그 후에 반드시 근본 원인을 해결해야만 잠재적인 위험을 막아낼 수 있습니다.

장애 대응을 하면서 가장 뼈아픈 장애는 재발한 장애라고 생각합니다. 알면서도 막지 못했거나, 조치가 미흡해서 같은 장애가 재발하면, 원인을 모르는 장애보다 더 속상합니다. 그렇기 때문에 가능한 많은 사람이 여러모로 고민해서 재발방지 대책을 마련하고, 적절히 조치하기 위한 액션을 하고 있습니다.

장애 리뷰

장애보고서 작성이 완료되면 장애보고서 내용을 바탕으로 장애 리뷰를 진행하게 됩니다. 내부에서 정해진 장애 등급에 따라, 일부 장애는 팀/실 단위의 리뷰를 진행하고 대규모 장애의 경우 담당팀, SRE팀뿐만 아니라 각 조직의 조직장과 CTO까지 모두 리뷰에 참여하게 됩니다. 바쁘게 일정이 돌아가는 와중에도 이렇게 많은 인원이 모여서 리뷰를 하는 이유는 조금 더 넓은 범위를 살펴보기 위함입니다. 팀/실 단위로 리뷰한 내용 중 추가로 고려해봐야 할 이슈가 있을 수도 있고, 전사로 전파하여 주의를 기울여야 하는 케이스도 있기 때문입니다.

한가지 예를 들어보면, 특정 장비에 이슈가 있어서 해당 장비를 terminate하고 신규 장비를 투입한 적이 있습니다. 하지만 장비를 terminate 시켜버렸기 때문에 해당 장비에 어떤 문제가 있었는지 원인분석을 하기 위한 충분한 자료를 확보하지 못하였습니다. 장애 리뷰를 통해서 이러한 내용을 알게 되었고, 이 문제를 해결하기 위해서 장비 교체 시에 장비를 terminate 하기보다는 비정상적인 장비만 일시적으로 서비스에서 분리할 수 있도록 전사에 공유하여 장애 원인분석에 도움이 될 수 있도록 개선하였습니다.

이런 일련의 리뷰 절차가 완료되면 장애보고서를 전사 개발조직에도 공유하고 있습니다. 장애란 비단 한 조직 혹은 개인의 문제가 아니며 누구든 비슷한 장애를 겪을 수 있습니다. 직접적인 경험을 해보지 못하더라도 동료들이 충분히 경험하고 고민한 내용을 통해서 간접적으로 경험할 수 있고, 이 간접적인 경험을 통해 인사이트를 얻는다면 시스템을 한 단계 더 탄탄하게 만들 수 있습니다.

장애 지표 활용

앞서 언급했듯이 장애보고서를 통해서 생각보다 많은 항목이 수집되고 있습니다.

장애보고서에서 장애 발생 시각, 탐지 시각, 종료 시각, 장애 탐지 방법, 장애 발생 지점, 장애 복구 방법, 대응 과정 중의 시간별 action, 장애 원인, 재발 방지 대책, 장애 등급, 장애 후속 조치 방안과 같은 항목들이 수집되고 있으며, 이 데이터들을 모아서 uptime을 높이거나 전체적인 장애 대응 프로세스를 개선하는 데 참고하고 있습니다. 장애가 자주 발생하는 지점을 확인해서 우리 시스템의 취약점을 알 수 있게 되고, 장애 유형에 따라 전파 범위를 조절할 수 있으며, 외부시스템의 장애 빈도나 유형을 파악해서 연동 전략을 고민할 수 있습니다. 장애 발생 시각과 탐지 시각 사이의 간격이 크면 장애 탐지가 빠르게 되고 있지 않다는 뜻이기 때문에 모니터링과 알람을 강화하여 더 빠르게 탐지할 방안을 고민할 수도 있습니다. 개별 장애보고서의 내용도 모두 중요하고 도움이 되지만 모여진 데이터를 기반으로 인사이트를 얻어서 개선 방안을 찾아 나가는 것도 중요합니다.

장애는 항상 다루기 어렵고 까다로운 주제입니다.

사실, 장애에 대해서 터놓고 이야기하는 것이 쉽지는 않습니다. 장애가 발생한 도메인 담당자의 입장에서는 미안한 마음이 들어서, 리뷰를 진행하면서 물어보는 입장에서는 혹시 불편해하지 않을까 고민이 되기 때문입니다.

하지만 우리가 이렇게 터놓고 이야기할 수 있는 것은 장애에 대해 특정 개인이나 팀을 탓하지 않는다는 것을 모두가 알고 있기 때문입니다. 오늘 내가 한 실수는 내일 내 옆자리 동료도 할 수 있는 실수이고, 수백명의 개발자가 잠재적인 위험을 안고 있다는 뜻일 수 있습니다. 작은 불씨 일때는 몇 명의 입김으로 불을 끌 수 있지만, 덮거나 숨기면 그 불씨는 더 커져서 산 하나를 홀랑 태워먹을 수도 있습니다. 감추고 숨기기보다는 함께 해결하고 함께 고민하는 것이 장애 대응의 가장 중요한 핵심이며, 그렇게 할 수 있는 조직이 건강한 조직이라고 생각합니다.

지난번에 썼던 내용이지만, 다시 한 번 더 강조해봅니다.

사람은 누구나 실수 할 수 있기 때문에
같은 실수를 반복하지 않는 것이 중요하고,
실수를 통해서 배우는 것이 중요하며,
내가 한 실수는 다른 사람도 할 수 있기 때문에
실수를 방지할 수 있도록 시스템이 막아줄 수 있어야 한다.

ML 지표 함정

기계 학습(ML) 측정항목의 장단점을 이해하면 ML 실무자를 위한 개인적 신뢰를 구축하는 데 도움이 됩니다. 이것은 조기에 승리를 선언하는 함정을 피하기 위해 수행됩니다. 머신 러닝(ML) 시스템에 사용되는 메트릭을 이해하는 것이 중요합니다. ML 실무자는 시그니피케이션 예산을 투자하여 연구에서 생산으로 프로토타입을 이동합니다. 중심 목표는 예측 시스템에서 가치를 추출하는 것입니다. 오프라인 메트릭은 새 모델을 프로덕션으로 승격하기 위한 중요한 지표입니다.

이 게시물에서는 세 가지 순위 측정항목을 살펴봅니다. 랭킹은 기본적인 작업입니다. 기계 학습, 추천 시스템 및 정보 검색 시스템에 나타납니다. 저는 최근에 우수한 추천 시스템 전문화인 University of Minnesota 추천 시스템 전문화 과정을 마치게 되어 기쁩니다. 이 전문화는 제가 추천하는 5코스 recsys 퀘스트입니다. 추천 시스템을 평가하는 방법을 어떻게 배웠는지 공유하고 싶었습니다. 특히 당면한 작업이 순위 작업일 때.

일반성을 너무 많이 잃지 않으면서 대부분의 추천자는 두 가지 지표가없는 작업의 이점 작업을 수행합니다. 그들은 사용자에 의한 항목의 평가를 예측하거나 사용자당 추천 항목의 순위 목록을 생성하려고 시도합니다.

추천 시스템을 평가하는 방법을 상상하기 어려울 수 있습니다. 추천 항목 목록을 관련 항목 목록 과 비교 하는 것은 직관적이지 않습니다. 기존 작업은 타이타닉호에서 누가 사망했는지 또는 ImageNet 데이터 세트에 있는 개 품종을 예측합니다. 이는 추천 시스템의 핵심인 순위 인식 ML 측정항목을 강조하지 않습니다.

관심이 있는 경우 추천 시스템을 평가하는 데 사용할 수 있는 가장 인기 있는 순위 인식 지표 3가지를 살펴보는 동안 계속 읽으십시오.

  • MRR : 평균 상호 순위
  • MAP : 평균 평균 정밀도
  • NDCG : 정규화 할인 누적 이득

단순하고 "순위가 없는" 평가 지표

Flat and “Rank-less” Evaluation Metrics

정확도 측정항목

순위 지정 작업을 처리할 때 예측 정확도 및 의사 결정 지원 메트릭이 부족합니다. 예측 정확도 메트릭 에는 평균 절대 오차( MAE ), 제곱 평균 제곱근 오차( RMSE )가 포함됩니다. 이는 실제와 예상 등급을 비교하는 데 중점을 둡니다. 그들은 개별 평가 예측 수준에서 작동합니다. 사용자가 항목을 4.5로 평가한 경우 이러한 측정항목은 평가가 1.2 또는 4.3인 경우 예측이 얼마나 멀리 떨어져 있는지 알려줍니다.

의사결정 지원 지표

다음으로 의사 결정 지원 메트릭에는 Precision, RecallF1 점수가 포함됩니다.

이는 추천자가 사용자가 올바른 결정을 내리는 데 얼마나 도움이 되는지 측정하는 데 중점을 둡니다. 그들은 사용자가 "좋은" 항목을 선택하고 "나쁜" 항목을 피하도록 돕습니다. 이러한 유형의 메트릭은 추천 시스템에 중요한 것이 무엇인지 강조하기 시작합니다. 사용자에게 100개의 항목을 추천할 때 가장 중요한 것은 처음 5, 10 또는 20위의 항목입니다. 정밀도는 사용자와 관련된 선택된 요소의 백분율입니다. 그것의 초점은 대부분 유용한 것들을 추천하는 것입니다. 재현율은 시스템이 선택한 관련 항목의 백분율입니다. 유용한 정보를 놓치지 않는 데 중점을 둡니다. F1 점수는 두 가지를 합친 것입니다. F1 조화 평균은 단일 메트릭을 얻기 위해 정밀도와 재현율의 균형을 맞추는 방법입니다.

순위 지정 작업의 경우 지표가없는 작업의 이점 메트릭에는 한 가지 주요 단점이 있습니다. 이러한 의사 결정 지원 지표는 전체 데이터 세트를 다룹니다 . "상위 N" 권장 사항의 대상이 아닙니다. 정밀도와 재현율은 모두 전체 결과 집합에 관한 것입니다. 이러한 메트릭을 확장하기 위해 정밀도와 재현율은 일반적으로 상위 n개 경계를 갖추고 있습니다. 이는 [email protected][email protected]의 형태로 제공됩니다. 흥미롭게도 [email protected][email protected]의 조화 평균을 나타내는 [email protected] 점수 를 설명하는 좋은 출처를 찾지 못했습니다 . 어쨌든 계속합시다.

수정된 [email protected] 메트릭은 양호한 "상위 n" 항목의 백분율입니다. 여기에는 일정 수준의 topn 평가가 포함됩니다. 즉, 상위 추천 항목에 중점을 둡니다. 그러나 원래 정밀도, 재현율 및 F1 측정값과 여전히 유사합니다.그들은 모두 주로 잘하는 것에 관심이 있습니다. 발견 것들. 우리는 잘하는 것을 강조하는 지표가 필요합니다 찾기 및 순위 지정 것들.

레벨을 올릴 시간입니다. 순위 인식 평가 측정항목이 어떻게 도움이 되는지 살펴보겠습니다.

순위 인식 평가 지표

추천 시스템은 매우 특별하고 주요 관심사가 있습니다. 그들은 지표가없는 작업의 이점 관련 항목을 권장 사항 목록의 가장 높은 곳에 배치할 수 있어야 합니다 . 아마도 사용자는 좋아하는 얼그레이 차 브랜드를 찾기 위해 200개 항목을 스크롤하지 않을 것입니다. 다음 두 가지 주요 목표를 목표로 하는 추천자를 선택하려면 순위 인식 메트릭이 필요합니다.

1) 추천인은 자신이 추천하는 아이템을 어디에 두나요?

2) 추천자는 상대적 선호도 를 모델링하는 데 얼마나 능숙 합니까?

여기에서 다음 측정항목이 도움이 될 수 있습니다.

MRR: 평균 상호 순위

MAP: 평균 평균 정밀도

NDCG: 정규화 할인된 누적 이득

위의 3가지 측정항목은 두 가지 측정항목 제품군에서 가져온 것입니다. 첫 번째 제품군은 이진 관련성 기반 측정항목으로 구성 됩니다. 이러한 메트릭은 항목이 바이너리 의미에서 좋은지 여부를 알도록 합니다. 두 번째 제품군은 유틸리티 기반 메트릭으로 구성됩니다. 이것들은 절대적 또는 상대적인 선함의 측정으로 좋은/나쁜 감각을 확장합니다. 다음 섹션에서 각 메트릭의 특성을 설명하겠습니다.

MRR: 평균 상호 순위 (Mean Reciprocal Rank)

이것은 세 가지 중 가장 간단한 메트릭입니다. "첫 번째 관련 항목은 어디에 있습니까?"를 측정하려고 합니다. 이진 관련성 메트릭 계열과 밀접하게 연결되어 있습니다. 알고리즘은 다음과 같이 진행됩니다.

세 명의 사용자에 대한 다음 세 가지 권장 사항 목록이 있다고 가정합니다. 목록별로 첫 번째 관련 항목의 순위를 찾아 각 사용자의 상호 순위를 계산할 수 있습니다. 그런 다음 모든 사용자에 대해 간단한 평균을 계산합니다.

MRR 전문가

  • 이 방법은 계산하기 쉽고 해석하기 쉽습니다.
  • 이 방법은 목록의 첫 번째 관련 요소에 중점을 둡니다. 사용자가 "나에게 가장 적합한 항목"을 묻는 등의 타겟 검색에 가장 적합합니다.
  • 탐색 쿼리 또는 사실 찾기와 같은 알려진 항목 검색에 좋습니다.

MRR 단점

  • MRR 메트릭은 권장 항목 목록의 나머지 부분을 평가하지 않습니다. 목록에서 단일 항목에 중점을 둡니다.
  • 하나의 관련 항목이 있는 목록은 많은 관련 항목이 있는 목록만큼 많은 가중치를 줍니다. 그것이 평가의 대상이라면 좋다.
  • 이것은 관련 항목 목록을 탐색하려는 사용자에게 좋은 평가 지표가 아닐 수 있습니다. 사용자의 목표는 여러 관련 항목을 비교하는 것일 수 있습니다.

MAP: 평균 정밀도 및 평균 평균 정밀도(Average Precision and Mean Average Precision)

다음은 MAP 메트릭입니다. 이진 관련성 데이터 세트가 있다고 가정해 보겠습니다. 특정 컷오프 N까지 권장 항목의 전체 목록을 평가하려고 합니다. 이 컷오프는 이전에 [email protected] 메트릭을 사용하여 통합되었습니다. [email protected] 의사 결정 지원 메트릭은 n개의 권장 사항 중 좋은 비율을 계산합니다. 이 측정항목의 단점은 권장 목록을 순서가 지정된 목록 으로 간주하지 않는다는 것 입니다. [email protected]은 전체 목록을 항목 집합으로 간주하고 권장 목록의 모든 오류를 동등하게 처리합니다.

목표는 목록의 훨씬 뒤에 있는 것이 아니라 처음 몇 개의 요소에서 오류를 줄이는 것입니다. 이를 위해서는 그에 따라 오류에 가중치를 부여하는 메트릭이 필요합니다. 목표는 목록의 맨 위에 있는 오류에 가중치를 두는 것입니다. 그런 다음 목록에서 더 낮은 항목으로 내려가면서 오류의 중요성을 점차적으로 줄입니다.

평균 예측(AP) 메트릭은 이 가중치 슬라이딩 척도를 근사화하려고 시도합니다. 연속적인 하위 목록의 정밀도와 이러한 하위 목록의 재현율 변경을 조합하여 사용합니다. 계산은 다음과 같이 진행됩니다.

다음은 프로세스를 시각화하는 데 도움이 되는 다이어그램입니다.

위 그림에서 Average Precision 메트릭은 단일 권장 사항 목록, 즉 사용자 수준에 있음을 알 수 있습니다. 이 항목을 통해 정밀도를 계산한다는 것은 추천 목록을 세분화하는 것을 의미합니다. 우리는 관련 항목을 얻을 때마다 새로운 하위 목록을 검토합니다. 그런 다음 이 현재 하위 목록의 정밀도를 계산합니다. 권장 사항이 끝날 때까지 모든 하위 목록에 대해 이 작업을 수행합니다. 이제 정밀도 집합이 있으므로 이를 평균화하여 단일 사용자의 평균 정밀도를 얻습니다. 그런 다음 모든 사용자에 대한 AP를 얻고 평균 평균 정밀도를 얻습니다.

이것은 주로 AP 메트릭의 원래 목표에 대한 근사치입니다. AP 메트릭은 정밀도-재현율 곡선 아래의 영역을 나타냅니다. 정밀도를 재현율 값의 함수로 계산하여 정밀도-재현율 곡선을 얻습니다. 이 훌륭한 강의 에서는 개념이 매우 자세하게 확장됩니다. 매우 추천합니다. 전체 프로세스는 모든 사용자 권장 목록에 대한 PR 곡선을 생성하는 것입니다. 그런 다음 보간된 PR 곡선을 생성하고 마지막으로 보간된 PR 곡선의 평균을 구합니다. 시각적으로 프로세스는 다음과 같습니다.

PR 곡선 아래 영역을 통한 MAP 측정의 해석

두 시스템을 비교하기 위해 PR 곡선 아래에서 가능한 가장 큰 면적을 원합니다. 위의 예에서 우리는 시스템 A, B 및 C를 비교합니다. 우리는 시스템 A가 모든 수준의 회수에 대해 시스템 C보다 낫다는 것을 알 수 있습니다. 그러나 시스템 A와 B는 시스템 B가 더 높은 수준의 회상에서 더 잘 수행되는 곳에서 교차합니다. 이 시나리오의 문제는 어떤 시스템이 전반적으로 더 나은지 판단하기 어렵다는 것입니다. 플롯은 단일 메트릭보다 해석하기 어렵습니다. 이것이 연구자들이 평균 정밀도(즉, 정밀도-재현율 곡선 아래의 면적)를 근사화하기 위해 단일 메트릭을 제시한 이유입니다. 다음은 이 프로세스를 설명 하는 wikipedia 페이지 에서 수정한 주석이 달린 근사치 입니다.

이산 MAP 측정항목의 주석 파생

마지막 요점은 실제로 평균을 내고 있는 것을 깨닫는 것입니다. 이는 많은 사용자에 걸쳐 잡음이 있는 신호를 평균화함을 의미합니다. 다음은 많은 사용자에게 공통적으로 발생하는 노이즈의 플롯입니다. 이 프레젠테이션 에서는 이 문제에 대해 자세히 설명합니다. 이 문제는 MAP 점수를 해석할 때 염두에 두면 유용합니다. 아래 플롯에서 밝은 빨간색 선이 평균 PR 곡선임을 알 수 있습니다. 아래 플롯의 다른 개별 곡선은 N명의 사용자 목록에 대한 각 사용자에 대한 것입니다. 실제로 효율성은 쿼리에 따라 크게 다를 수 있습니다. MAP 평균화 는 의심할 여지 없이 보고된 성능에 영향을 미칩니다. 이러한 샘플 곡선은 MAP 메트릭의 품질을 평가하는 데 도움이 될 수 있습니다.

많은 사용자에 대한 MAP 측정 평균의 영향을 보여줍니다.

PR 곡선의 의미에 대한 추가 글을 살펴보시기 바랍니다. 여기 및 여기 에서 다음 작업 은 MAP 메트릭에 대한 훌륭한 심층 분석을 제공합니다.

MAP 장점

  • Precision-Recall 곡선 아래의 복잡한 Area를 나타내는 단일 메트릭을 제공합니다. 이것은 목록당 평균 정밀도를 제공합니다.
  • 목록 추천 항목의 순위를 자연스럽게 처리합니다 . 이는 검색된 항목을 집합으로 간주하는 메트릭과 대조됩니다.
  • 이 측정항목은 권장 목록의 상위에서 발생하는 오류에 더 많은 가중치를 부여할 수 있습니다. 반대로 권장 목록에서 더 깊이 발생하는 오류에는 가중치를 덜 줍니다. 이는 권장 목록에서 가능한 한 많은 관련 항목을 표시해야 하는 필요성과 일치합니다.

MAP 단점

  • 이 메트릭은 바이너리(관련/비관련) 등급에 대해 빛을 발합니다. 그러나 세분화된 수치 등급에는 적합하지 않습니다. 이 측정항목은 이 정보에서 오류 측정값을 추출할 수 없습니다.
  • 예를 들어 별 1개에서 5개까지의 등급으로 세분화된 등급의 경우 평가는 이진 관련성을 만들기 위해 먼저 등급 임계값을 지정해야 합니다. 한 가지 옵션은 4보다 큰 등급만 관련성이 있는 것으로 간주하는 것입니다. 이로 인해 수동 임계값으로 인해 평가 메트릭에 편향이 발생합니다. 게다가 우리는 세세한 정보를 버리고 있습니다. 이 정보는 별 4개와 5개 등급의 차이와 관련 없는 항목의 정보에 있습니다. 별점 1점은 별점 3점과 정말 같은가요?

이러한 문제를 처리하기 위해 recsys 커뮤니티는 또 다른 최신 측정항목을 제시했습니다. 이 메트릭은 등급에 포함된 세분화된 정보를 고려합니다. NDCG(Normalized Discounted Cumulative Gain) 지표를 살펴보겠습니다.

Normalized Discounted Cumulative Gain(NDCG)

MAP 측정의 목표는 NDCG 측정의 목표와 유사합니다. 둘 다 관련성이 높은 문서를 권장 목록의 상위에 올려놓는 것을 중요하게 생각합니다. 그러나 NDCG는 권장 목록 평가를 추가로 조정합니다. 일부 문서가 다른 문서보다 "더 많은" 관련성이 있다는 사실을 사용할 수 있습니다. 관련성이 높은 항목은 중간 정도의 관련성 항목 앞에 와야 하고, 관련성이 없는 항목 앞에 와야 합니다.

NDCG를 선형으로 계산하는 단계를 보여주는 다음 주석 다이어그램을 제공합니다.

I provide the following annotated diagram that shows the stages of calculating the NDCG linearly:

NDCG 메트릭의 주석 파생

NDCG 이전에는 누적 이득 CG가 있었습니다. 이것은 차등된 관련성을 축적하기 위한 기본 척도를 나타냅니다. 이 메트릭은 순위 목록에서 요소의 위치를 ​​고려하지 않습니다. 순위 지정 작업의 경우 순위 지정 목록에서 요소 위치의 상대적 영향을 높여야 합니다. 표준 할인 누적 이득(Discounted Cumulative Gain)인 DCG는 로그 감소 계수를 추가하여 항목의 위치에 비례하여 관련성 점수에 불이익을 줍니다. 또한 산업 응용 프로그램에서 관련성 점수가 관련 문서 검색을 강조하는 데 도움이 되는 것을 흔히 볼 수 있습니다. 이것은 산업용 DCG 공식에 나타납니다.

우리는 동적 시스템을 다루고 있습니다. 사용자는 다양한 수의 관련 항목을 추천받게 됩니다. 이로 인해 DCG 측정값은 사용자 간에 비교할 수 없습니다. 메트릭을 0과 1 사이로 정규화해야 합니다. 이를 위해 사용자에게 이상적인 순위를 결정합니다. 그런 다음 해당 순위를 이상적인 할인 누적 이득 IDCG로 사용합니다. 이것은 좋은 정규화 요소를 제공합니다. 정규화 할인 누적 이득을 계산하는 데 도움이 됩니다. 이것은 사용자별 메트릭이므로 테스트 세트의 모든 사용자에 대해 이 메트릭을 계산해야 합니다. 그런 다음 단일 숫자를 얻기 위해 전체 사용자의 평균을 구합니다. 이 평균은 recsys 시스템을 서로 비교하는 데 사용됩니다. 이 프로세스를 시각화하기 위해 단일 사용자에 대한 예측 및 이상적인 순위를 사용하여 아래 그림의 계산을 수행합니다.

NDCG 장점

  • NDCG의 주요 이점은 등급 관련성 값을 고려한다는 것입니다. 데이터 세트에서 사용할 수 있는 경우 NDCG가 적합합니다.
  • MAP 메트릭과 비교하여 순위가 지정된 항목의 위치를 ​​평가하는 데 효과적입니다. 바이너리 관련/비관련 시나리오 이상으로 작동합니다.
  • 부드러운 대수 할인 요인은 여기에서 논의된 좋은 이론적 근거를 가지고 있습니다. 해당 작업의 저자는 실질적으로 다른 순위 추천자의 모든 쌍에 대해 NDCG 메트릭이 더 나은 추천자를 일관되게 결정할 수 있음을 보여줍니다.

NDCG 단점

  • NDCG는 부분 피드백에 몇 가지 문제가 있습니다. 이것은 불완전한 평가가 있을 때 발생합니다. 이것은 대부분의 추천 시스템 상황의 경우입니다. 우리가 완전한 평가를 받았다면 달성해야 할 실제 과제가 없었을 것입니다! 이 경우 recsys 시스템 소유자는 누락된 등급을 어떻게 전가할 것인지 결정해야 합니다. 누락된 값을 0으로 설정하면 관련 없는 항목으로 표시됩니다. 사용자에 대한 평균/중간 등급과 같은 다른 계산된 값도 이러한 단점을 해결하는 데 도움이 될 수 있습니다.
  • 다음으로 사용자는 IDCG가 0인 경우를 수동으로 처리해야 합니다. 이것은 사용자에게 관련 문서가 없을 때 발생합니다. 여기서 전략은 NDCG도 0으로 설정하는 것입니다.
  • 또 다른 문제는 [email protected]를 처리하는 것입니다. recsys 시스템이 반환하는 순위 목록의 크기는 K보다 작을 수 있습니다. 이를 처리하기 위해 고정 크기 결과 집합을 고려하고 더 작은 집합을 최소 점수로 채울 수 있습니다.

내가 말했듯이 NDCG의 주요 이점은 등급별 관련성 값을 고려한다는 것입니다. 데이터 세트가 올바른 형식을 갖고 있고 등급별 관련성을 처리하는 경우 NDCG 측정이 가장 중요한 지표입니다.

그게 다야

머신 러닝(ML) 시스템에 사용되는 메트릭을 이해하는 것이 중요합니다. ML 실무자는 시그니피케이션 예산을 투자하여 프로토타입을 연구에서 프로덕션으로 이동하고 오프라인 메트릭은 새 모델을 프로덕션으로 승격하기 위한 중요한 지표입니다. 각 메트릭의 단점을 이해하면 개인의 신뢰를 구축하고 성급하게 승리를 선언하는 함정을 피하는 데 도움이 됩니다. 부적절한 지표에 대한 작은 개선 사항을 보고하는 것은 잘 알려진 ML 트랩입니다.

대법원 1979. 2. 13. 선고 78도1416 판결 [업무상과실치사·총포화약류단속법위반] [집27(1)형,14;공1979.6.1.(609),11810]

화약관리책임자는 소나기와 이에 동반한 낙뢰현상의 발생과 그 낙뢰가 부근에 유도될 수 있다는 위험의 가능성을 예측하고 특별히 낙뢰의 위험에 대비할 법령상의 책임이 있다.

총포화약류단속법시행령 제43조 제9호

변호사 이돈희 (피고인 2에 대하여)

서울형사지방법원 1978.4.12. 선고 77노9162 판결

원심판결중 피고인 1에 대한 무죄부분을 파기하고, 이부분 사건을 서울형사지방법원 합의부로 환송한다.

피고인 2와 검사의 동 피고인에 대한 상고를 모두 기각한다.

1. 피고인 2 변호인의 상고이유에 대하여 판단한다.

본건 화약류의 저장에 있어 요구되는 총포화약류단속법 제17조, 동법시행령 제51조 소정의 제2급 화약저장소의 설치책임이 본건 공사의 시공회사인 대한전척공사에 있다 하더라도 피고인은 동 회사의 현장소장으로서 본건 화약류를 위 법 소정의 저장소 설치허가가 되지 아니한 현장의 안전계사무실에 저장한 이상, 이에 대하여 법인인 위 회사와는 별도로 그 책임을 면할 수는 없다 할 것이고, 논지가 지적하는 바와 같이 본건 공사의 화약관리책임자로서 피고인 1이 별도로 화약의 관리책임을 담당하고 있었다 할지라도 본건 공사현장의 업무 전반에 관하여 관리책임이 있고, 나아가 위 피고인 1을 지휘감독하여야 할 지위에 있는 현장소장으로서의 피고인에게 본건 화약류의 저장에 관한 책임이 또한 없다고 말할 수는 없을 것이다.

따라서 피고인에 대하여 그 책임을 물은 원심판결에 소론과 같은 총포화약류단속법에 관한 법리 내지는 공범에 관한 법리오해의 위법이 지표가없는 작업의 이점 있다는 논지는 채용될 수가 없다.

2. 서울지방검찰청 검사 이영식의 상고이유에 대하여 본다.

먼저 피고인 1에 대한 업무상과실치사죄에 관하여, 일건기록과 원심에 의하여 인정된 사실에 의하면, 피고인 1은 1급 화약관리사면허를 갖고 있는 본건 공사의 화약 취급책임자로서 사고당일인 1977.8.16. 08:30경 암반발파작업을 하기 위하여 다이나마이트, 초안폭약 각 1상자, 전기뇌관 200개를 저장장소로부터 발파작업현장에 운반하여 놓고 발파작업에 착수하려고 하였으나, 당시 공소장적시와 같이 구름이 많이껴 날씨가 흐리고 무더운 기상상태로서 비가 올 듯 하였으므로 폭약을 착암공에 장전하는 작업을 일단 보류한 채 08:50경 그곳을 떠난 사이에, 09:40경부터 소나기가 내리게 되어 당시 화약을 관리하던 공소외인 외 5인의 인부들이 부근 2미터 상거한 지점에 4미터 높이로 적치되었던 70개의 공드럼통중 4개를 날라다가 2개씩 약2미터 간격으로 쌓고 그위에 가마니를 덮어 비를 피할 자리를 만든 후 그 밑으로 위 발파작업용 화약들을 함께 가지고 들어가 비를 피하고 있던중 공중에서 방전현상이 일어나면서 위 약 4미터 높이의 드럼통 무더기에 유도되어 지표가없는 작업의 이점 낙뢰가 발생함과 동시에 이로부터 불과 약2미터 떨어진 위 대피장소에 쌓아놓은 전기뇌관 장전의 다이나마이트에 점화되어 폭발함으로써 이로 인하여 위 인부들 5명이 모두 폭사한 사실을 인정할 수가 있다.

당시 본건 작업현장이 공소 적시와 같이 약27만평방미터의 넓은 지역으로서 나무와 풀을 모두 벤 노출된 생땅이고 계속되는 가뭄에서 지표가 과열되어 상승기류가 항시 상공에 발생하는 기후조건이고 그 날의 기상상태가 위와 같아 발파작업을 중지할 정도였고, 또 부근에 높이 4미터의 공 드럼통의 무더기가 있었다고 한다면 화약관리책임자인 피고인으로서는 소나기와 이에 동반한 낙뢰현상의 발생과 그 낙뢰가 부근에 유도될 수 있다는 위험의 가능성을 예측하고 이에 대비하여, (화약관리책임자는 특별히 낙뢰의위험에 대비할 법령상의 책임이 있다. 총포화약류단속법시행령 제43조 제9호 참조). 위 화약류가 야외에 적치된 채 그곳을 떠나 그 취급에 관한 소양이 부족된 인부들에게 일임하는 일이 없이 피고인 1의 책임하에 이를 안전하게 수거하는 등 대책을 강구하고, 만일 이와 같은 조치를 취할 수 없는 부득이한 경우였다 할지라도 인부들에게 특별히 낙뢰에 대비한 안전대책까지도 지시함으로써, 인부들이 본건 사고경위와 같이 화약을 지니고 쉽게 낙뢰를 유도할 수 있는 철제공드럼통이 적치된 주위로 접근하여 소나기를 대피함과 같은 무모한 행동을 하는 일이 없도록 방지하였어야 할 업무상주의의무가 있었다 할 것이므로 본건 사고발생에는 피고인 1이 그 주의의무를 태만히 한 과실도 이에 경합된 것이라고 할 것이다.

그렇다면 원심이 낙뢰현상의 발생과 피해자들에 의한 위와 같은 무모한 행동을 예견할 수 없었다는 이유로 피고인 1의 과실을 부인하였음은 결국 채증법칙을 위반하여 사실을 오인하였거나, 화약취급책임자로서의 업무상의 주의의무에 관한 법리를 오해하여 판결에 영향을 미친위법이 있다 할 것이므로 이점을 논란하는 검사의 상고논지는 위 피고인 1에 관한 한 그 이유가 있다.

동 피고인이 현장소장으로서 본건 공사전반에 걸쳐 관리책임이 있고, 화약류의 저장을 위한 물적 설비인 화약저장소의 설치책임이 있음은 소론과 같다 할지라도 화약관리사 면허가 있는 피고인 1이 별도로 화약관리책임자로 있어 화약류의 취급, 발파작업의 시행등 일체의 기술적인 업무를 전담하여 왔음이 일건 기록상 인정될 뿐만 아니라, 관계법규상 전문기술이 없는자는 위와 같은 업무를 수행할 수도 없는 바로서 피고인 2로서는 위 피고인 1에 대하여 그가 취급하고 있는 고유업무인 화약관리업무에 관하여 일반적, 추상적으로 지휘, 감독할 책임이 있음에 불과하고 더 나아가 본건과 같은 구체적인 발파작업의 수행과 관련하여 일일이 세부적으로 이를 지시, 감독할 책임이 있다고는 여겨지지 않을 뿐더러, 가사 피고인 2에게 피고인 1에 대한 감독을 소홀히 한 과실이 인정된다손 치더라도 이것이 본건 사고발생의 한 원인을 이루었다고는 보기 어려우므로 결국 원심이 피고인 2에 대한 공소사실중 업무상과실치사의 점에 대하여 무죄를 선고하였음은 정당하고 여기에 법리오해의 위법이 있다고 할 수 없으므로 검사의 위 피고인 2에 대한 상고논지는 채용될 수 없다.

그러므로 검사의 피고인 1에 대한 상고는 그 이유있으므로 원심판결중 피고인 1에 대한 무죄부분을 파기하여, 이 부분 사건을 원심법원으로 환송하고, 피고인 2의 상고와 검사의 동 피고인에 대한 상고는 그 이유없으므로 이를 모두 기각하기로 하여 관여 법관들의 일치한 의견으로 주문과 같이 판결한다.

모바일 메뉴

나날이 복잡해지는 사회구조와 과도한 업무 및 학업, 대인관계에서 오는 어려움 등으로 인하여 현대인들은 누구나 스트레스(stress)를 경험하며 살아가고 있습니다. 스트레스를 제대로 관리하기 위해서는 먼저 스트레스라는 것이 무엇인지 알 필요가 있습니다. 스트레스라는 말은 원래 19세기 물리학 영역에서 “팽팽히 조인다”라는 뜻의stringer 라는 라틴어에서 기원되었습니다. 의학영역에서는20세기에 이르러 Hans Selye가 ‘정신적 육체적 균형과 안정을 깨뜨리려고 하는 자극에 대하여 자신이 있던 안정 상태를 유지하기 위해 변화에 저항하는 반응’으로 발전시켜 정의하게 되었습니다. Seyle는 스트레스를 ①경보반응(alarm)→②대응-저항반응(resistance)→③탈진반응(exhaustion)의 3단계로 나누었습니다. 스트레스 요인이 오랫동안 지속되어 마지막 단계인 탈진반응에 빠지게 되면, 신체적 정신적 질병으로 발전할 수 있다는 이론을 함께 제시하였습니다.

2. 스트레스의 두 얼굴

스트레스는 긍정적 스트레스(eustress)와 부정적 스트레스(distress)로 나눌 수 있습니다. 당장에는 부담스럽더라도 적절히 대응하여 자신의 향후 삶이 더 나아질 수 있는 스트레스는 긍정적 스트레스이고, 자신의 대처나 적응에도 불구하고 지속되는 스트레스는 불안이나 우울 등의 증상을 일으킬 수 있는 경우는 부정적 스트레스라고 할 수 있습니다. 적절한 스트레스는 우리의 생활에 활력을 주고 생산성과 창의력을 높일 수 있습니다. 즉, 스트레스에는 긍정적 혹은 부정적 생활사건 모두가 포함될 수 있으나 주로 부정적 생활사건과 관련된 스트레스만을 가리킬 때를 일반적으로 스트레스 상황으로 인식하고 있는 것입니다. 미국의 심리학자Lazarus는 같은 스트레스 요인이라고 할지라도 받아들이는 사람에 따라 긍정적 스트레스로 작용하느냐, 부정적 스트레스로 작용하느냐 달라질 수 있다고 보고하였습니다. 스트레스 요인이 발생하면 먼저 그것이 얼마나 위협적인가 또는 도전해 볼만하냐 하는 일차 평가가 일어나게 됩니다. 만약 위협적이라고 평가한 경우라면 위협에 따른 부정적인 감정을 처리하기 위한 다양한 대처를 고려하는 다음 단계(이차 평가)를 거치게 됩니다. 따라서, 스트레스 상황을 부정적으로 받아들이면 결국 질병으로 가게 되지만, 긍정적으로 받아들이면 생산적이고 행복해질 수 있습니다. 긍정적 스트레스의 경우 생활의 윤활유로 작용하여 자신감을 심어 주고 일의 생산성과 창의력을 높여 줄 수 있다는 점에서 긍정적 효과도 나타납니다. 결국 앞서 설명한 좋은 스트레스로 받아들이는 것이 건강, 행복, 성공의 열쇠가 될 수 있습니다.

스트레스가 건강에 미치는 결과

1. 정신 건강에 미치는 영향

스트레스를 받으면 초기에는 그로 인한 불안 증상(초조, 걱정, 근심 등)이 발생하고 점차 우울 증상이 나타나게 됩니다. 대부분의 경우 불안이나 우울 증상은 일시적이고 스트레스가 지나가면 사라지게 됩니다. 그러나 스트레스 요인이 너무 과도하거나 오래 지속되는 경우, 개인이 스트레스 상황을 이겨낼 힘이 약화되어 있는 경우에는 각종 정신질환으로 발전할 수 있습니다. 스트레스로 인해 흔히 생길 수 있는 정신질환은 적응장애, 불안장애, 기분장애, 식이장애, 성기능장애, 수면장애, 신체형장애, 알코올 및 물질사용장애 등이 있습니다. 우리나라 주부들에게 흔한 화병도 스트레스와 매우 밀접한 정신질환으로 볼 수 있습니다.

2. 신체질환에 미치는 영향

신체질환의 경우도 스트레스와 밀접한 연관이 있습니다. 내과 입원 환자의 70% 정도가 스트레스와 연관되어 있다는 연구를 볼 때, 스트레스가 신체질환의 발생 원인이나 악화 요인으로 작용한다는 사실은 이미 잘 알려져 있습니다. 이런 경우 정신과적으로 정신신체장애라는 진단을 붙이게 됩니다. 정신/심리적인 요인에 의해 신체적인 질병이 발생하거나 악화될 경우에 붙이는 병명으로 정신/심리적 요인에 의해 치료 결과도 큰 차이를 보입니다. 특히 스트레스에 취약한 우리 몸의 기관인 근골격계(긴장성 두통 등), 위장관계(과민성 대장증후군), 심혈관계(고혈압) 등이 영향을 더 많이 받는 것으로 알려져 있습니다.

3. 면역기능에 미치는 영향

장기간 스트레스를 받으면 면역 기능이 떨어져 질병에 걸리기 쉬운 상태가 됩니다. 다양한 정신신체장애의 발병과 악화는 물론이고 암과 같은 심각한 질환도 영향을 많이 주는 것으로 알려지고 있습니다.

스트레스 평가

1. 지각된 스트레스 정도

스트레스 관리

1. 규칙적인 생활 습관

평소 규칙적인 생활 습관을 가지는 것이 스트레스 관리의 출발입니다. 첫째, 건강한 식사습관을 익혀야 합니다: 천천히, 편안하게, 골고루, 적당하게 먹습니다. 현대인에게 부족한 비타민, 무기질, 섬유소를 골고루 섭취하도록 합니다. 반면, 술, 카페인, 설탕, 소금, 인스턴트/패스트푸드 등을 과량으로 섭취하는 것은 건강에 좋지 않습니다. 둘째, 충분한 수면을 취해야 하는데, 일반적으로 6-8시간 정도가 적당합니다. 셋째, 규칙적인 운동도 해야 합니다: 일반적으로는 걷기가 좋은 운동입니다. 운동 시간은 하루에 30-60분 정도, 일주일에 최소 세 번 이상을 하는 것이 좋습니다. 운동을 전혀 하지 않았던 경우에는 단계적으로 회수나 시간을 늘려가는 것도 좋은 방법입니다. 태극권(Tai Chi)은 이완과 근력 강화, 복식호흡, 명상 등의 효과를 갖고 있는 중증도 강도의 전신 운동으로서 노약자들도 안전하게 할 수 있는 장점이 있으며 여러 연구에서 스트레스 감소와 면역 기능 및 감정에 대한 긍정적 효과가 밝혀져 있습니다.

2. 적극적/문제해결형 대응

스트레스를 잘 관리하거나 적절하게 이용하려면 그 실체를 정확히 알아야 합니다. 그 첫 번째 단계는 현재 상황이 불편하다는 것을 인정하는 것입니다. 이렇게 불편하다고 느끼기 시작한 경우는 이미 그 스트레스를 피할 수 없을 가능성이 훨씬 더 높습니다. 면밀히 따져 스트레스로부터 적극적으로 도망가는 것이 가능하지 않다면 두 번째 단계인 스트레스의 수용이 필요합니다. 스트레스를 수용한다는 것이 ‘재수 없는 일이 하필이면 나한테 일어났다’는 운명론적 태도와는 달라 단순한 포기를 의미하는 것은 아닙니다.

이렇게 자신에게 가해진 스트레스를 받아들이기로 마음먹었다면 마지막 단계인 적극적/문제해결형으로 대응하는 것이 중요합니다. 문제를 해결하기 위해 자신의 능력을 확인하고 최선의 대처를 능동적으로 하는 것이 적극적 대응의 핵심입니다. 이와 반대로 스트레스를 회피하거나 무기력하게 받아들이는 것은 스트레스가 불편하다는 것을 받아들인 후, 자신이 느꼈던 불편한 감정을 해결하기 위해 모든 방법을 동원하는 감정해결형의 전형이라고 할 수 있습니다. 감정해결형은 일시적으로는 도움이 되지만, 수렁에 빠진 사람이 허우적거리면 더 깊이 빠져드는 것과 같이 장기적으로는 문제가 더욱 꼬이고 스트레스 반응이 더욱 커질 수밖에 없다는 점을 명심해야 합니다.

3. 이완요법

이완을 잘 시키기 위한 조건은 조용하고 간섭 받지 않는 곳에서 편안한 자세, 지표가없는 작업의 이점 근육을 이완하고 깊고 천천히 숨을 쉬는 복식 호흡을 하거나 명상을 하는 것을 이야기 합니다.

1) 복식호흡

숨을 깊이 들여 마시고 천천히 내쉬는 복식호흡을 하면 들여 마셨던 공기는 깊숙이 들어가 충분한 산소를 공급하고 배출됩니다. 호흡계는 충분한 산소를 받아들여 에너지를 생산하고 노폐물을 배출시켜 우리 몸의 대사가 잘 이루어지도록 도와줍니다. 자신의 호흡을 살펴보고, 천천히 깊숙이 호흡하는 훈련을 하면 마음과 몸이 이완되고 안정을 찾는데 도움이 됩니다.

견갑골 ⇒ 기타(배 ⇒ 허벅지 ⇒ 종아리 ⇒ 발) 순으로 근육의 힘을 완전히 뺀 상태로 이완을 합니다. 만약 이완이 잘 되지 않는 부위가 있으면 5번까지 긴장-이완을 반복합니다.

자주 하는 질문

1. 스트레스는 나쁜 것이 아닙니까?

스트레스가 항상 모든 사람에게 피해를 끼치는 것은 아닙니다. 스트레스 때문에 적당한 긴장을 하게 되어 오히려 활력을 얻기도 합니다. 스트레스를 적극적으로 관리하고 적절히 이용할 수 있는 상태(좋은 스트레스, 최적의 스트레스)에 이르면, 스트레스가 어려움을 극복하게 하고, 계획을 성취하도록 힘을 주며, 동기를 유발시키고, 삶의 활력을 불어넣기도 합니다. 때로 집중력, 능력, 창의성, 생산성을 향상시켜주기도 합니다. 스트레스는 기본적으로 위급한 상황에서 우리를 구해주도록 설계되어 있습니다. 아드레날린이 증가하고 감소하여 생기는 ‘밀물~썰물’효과는 건강한 삶을 살기 위해서 매우 중요하다고 할 수 있습니다.

2. 좋은 일도 스트레스가 될 수 있나요?

스트레스가 오직 불쾌한 사건에 의해 생긴다고 믿는 것은 잘못된 생각입니다. 고통스러운 경험을 할 때와 마찬가지로 모든 일이 잘 되어갈 때도 스트레스가 생길 수 있습니다. 흥분이나 의욕이 주는 스트레스(결혼, 승진 등)가 오랜 기간 지속되거나, 이미 심리적 어려움을 겪는 사람의 경우에는 그 스트레스를 감당하지 못하게 되어 나쁜 스트레스로 작용할 수 있습니다. 또한, 일상생활에서 흔히 접하는 사건 중에 가장 힘든 것이 자식 사망이라고 알려져 있습니다. 이런 자식 사망의 스트레스 정도가 100이라고 가정하면, 결혼이 50 정도의 스트레스를 받는다는 보고가 있습니다.

3. 신경성이라는 이야기를 들었습니다. 어떻게 해야 하나요?

신체의 특별한 이상을 느껴 병원을 방문하여 검사를 하여도 검사 상 특별한 이상은 없고 신경성이라고 하는 경우를 경험하셨을 겁니다. 이런 경우 여러 병원, 여러 선생님들 찾아다니는 일명 ‘병원 쇼핑’을 하게 되지만, 결국 신체적으로 아무런 이상이 없다는 이야기만 듣게 됩니다. 자신은 물론 가족들도 지치고, 신경 안 쓰면 될 걸 괜히 신경을 써서 그런다고 구박을 받거나 심지어 성격이 안 좋아서 그렇다는 등 온갖 이야기를 듣게 됩니다. 이런 경우 정신과를 방문하는 것이 최선입니다. 당연히 스트레스가 상당한 영향을 준 것으로 ‘신체화장애’에 준하는 적절한 치료가 필요합니다.


0 개 댓글

답장을 남겨주세요