[도서 리뷰]

개발자 온보딩 가이드 리뷰 - 2

everydeveloper 2024. 5. 27. 01:44

시스템에 멱등성을 부여하자

멱등성이란 동일한 작업을 여러 번 실행해도 항상 같은 결과가 출력됨을 말한다.

  • 어떤 값을 해시셋에 추가하는 것은 멱등 작업이다.
    • 몇 개의 값을 집어넣든 하나만 존재하기 때문이다.

멱등성

멱등성(Idempotence)은 IT와 컴퓨터 과학에서 자주 사용되는 개념으로, 연산을 여러 번 수행해도 결과가 동일한 성질을 의미합니다. 이 개념은 특히 함수형 프로그래밍, 데이터베이스, 네트워크 프로토콜 등 다양한 분야에서 중요한 역할을 합니다. 멱등성의 주요 특징과 응용 분야를 설명하겠습니다.

멱등성의 정의

멱등성은 수학과 컴퓨터 과학에서 "어떤 연산을 한 번 수행한 것과 여러 번 수행한 것이 결과적으로 동일하다"는 성질을 나타냅니다. 수학적으로는 다음과 같이 표현됩니다:

\[ f(f(x)) = f(x) \]

이 때, 함수 \( f \)가 멱등 함수라고 할 수 있습니다.

멱등성의 예시

수학적 예시

  • 절댓값 함수: 절댓값 함수 \( f(x) = |x| \)는 멱등성을 가집니다. 왜냐하면 \( | |x| | = |x| \)이기 때문입니다.
  • 최댓값 함수: 두 수 \( a \)와 \( b \)의 최댓값을 구하는 함수 \( \text{max}(a, b) \)도 멱등성을 가집니다. \( \text{max}(\text{max}(a, b), b) = \text{max}(a, b) \)입니다.

프로그래밍 예시

  • HTTP 메소드: HTTP의 PUT, DELETE, GET 메소드는 멱등성을 가집니다. 예를 들어, 동일한 리소스를 PUT 요청으로 업데이트하면 그 결과는 항상 동일합니다. 마찬가지로 DELETE 요청도 동일한 리소스를 여러 번 삭제해도 결과는 동일하게 유지됩니다.
  • 데이터베이스: SQL의 INSERT INTO ... ON DUPLICATE KEY UPDATE 구문도 멱등성을 가집니다. 동일한 키를 가진 레코드를 여러 번 삽입해도 최종 결과는 동일합니다.

멱등성의 중요성

  1. 신뢰성: 멱등성은 시스템의 신뢰성을 높이는 데 기여합니다. 네트워크나 시스템 장애로 인해 동일한 요청이 여러 번 전송될 수 있는데, 이 경우 멱등성을 가지는 연산은 시스템의 상태를 일관되게 유지할 수 있습니다.
  2. 에러 복구: 멱등성은 에러 복구를 용이하게 합니다. 예를 들어, 트랜잭션 시스템에서 동일한 작업을 여러 번 반복 수행해도 결과가 변하지 않기 때문에, 중간에 문제가 발생해도 작업을 다시 시도하는 것이 안전합니다.
  3. 분산 시스템: 분산 시스템에서는 멱등성이 매우 중요합니다. 여러 노드 간에 상태를 동기화하는 과정에서 멱등성을 보장하면 데이터 일관성을 유지하기가 쉬워집니다.

멱등성 구현 방법

  1. 상태 검증: 작업을 수행하기 전에 현재 상태를 검증하고, 이미 작업이 완료된 상태라면 다시 수행하지 않도록 합니다.
  2. 고유 식별자 사용: 각 요청에 고유 식별자를 부여하여 동일한 요청이 여러 번 처리되지 않도록 합니다.
  3. 버전 관리: 리소스의 버전을 관리하여 최신 상태만 업데이트되도록 합니다.

결론

멱등성은 IT 시스템에서 연산의 안정성과 신뢰성을 높이는 중요한 개념입니다. 멱등성을 이해하고 구현하는 것은 시스템 설계에서 매우 중요한 요소입니다. 이를 통해 복잡한 시스템에서도 일관된 결과를 유지하고, 에러 복구와 분산 처리에서의 어려움을 줄일 수 있습니다.

리소스를 해제하자

간혹 try/finally 블록으로 코드를 감싸서 예외가 발생하더라도 파일 핸들이 안전하게 닫히게 해야 한다.

  • 자동 리소스 해제 기능을 사용하자

문제 원인을 찾기 위한 로깅 방안

로깅 프레임워크를 활용하자

로그 레벨을 설정하자

로그는 원자적이고 빠르며 안전하게 다뤄야한다.

로그 레벨을 사용하자

  • 주어진 상황에 맞춰서 로그의 양을 조정할 수 있다.
    • TRACE
      • 특정 패키지나 클래스에서만 켜지며 최대한 상세한 내용을 출력하는 레벨이다.
    • DEBUG
      • 프로덕션 상황에서 문제가 발생했을 때 적합한 레벨이다.
    • INFO
      • 애플리케이션 상태에 대해 알아두면 좋을 만한 정보를 위한 레벨이다.
    • WARN
      • 잠재적으로 문제가 될 만한 상황에 대한 메시지를 출력하기 위한 레벨이다.
      • 대책이 없다면 INFO 레벨로 옮기자
    • ERROR
      • 살펴봐야 할 에러가 발생했을 때
    • FATAL
      • 가장 위험한 수준의 메시지를 출력하기 위한 레벨이다.

로그는 원자적으로 작성하자

  • 만일 데이터와 결합했을 때만 정보가 유용하다면 한 메시지에 모든 정보를 원자적으로 저장하자.
  • 로그 수집기는 관련 정보를 한 줄에 모두 표현하는 로그를 더 잘 처리한다.
  • 로그 정렬 시 시스템 시간에 의존하지 말자
  • 로그 메시지에 줄바꿈 문자 사용도 피하자

'[도서 리뷰]' 카테고리의 다른 글

개발자 온보딩 가이드 리뷰 - 3  (0) 2024.05.27
개발자 온보딩 가이드 리뷰 -1  (0) 2024.05.26