본문 바로가기

Sparta/TIL

24.01.31 TIL - log, transaction

1. 로그 미들웨어(Log Middleware)

로그 미들웨어는 클라이언트 요정을 기록하여 어플리케이션을 모니터링하고 그 문제가 발생할 때 빠르게 진단할 수 있다. 또한 로그 데이터는 사용자의 행동을 분석하는 등 데이터 분석 작업에도 활용할 수 있다.

 

규모가 큰 프로젝트를 진행하게 되면, 화면에 표시되는 모든 로그를 일일이 확인하는 것은 불가능에 가깝다. 이런경우를 대비해 로그 기능을 지원하는 morgan, winston과 같은 라이브러리를 사용하거나 AWS CloudWatch, Datadog와 같은 외부 모니터링 솔루션 서비스를 이용해 로그를 수집하거나 관리할 수 있다.

이전에 프로젝트를 했을 때 devOps로 쿠버네티스를 구현한 프로젝트가 있었는데 그 때 모니터링 툴로 그라파나(Grafana)와 프로메테우스(Prometheus)를 활용하는 것을 옆에서 지켜본 적 있다. 그때는 왜 쓰는 건지도 모르고 봤는데 이렇게 공부해 보니 필요성을 알게 되었다.

 

 

2. 트랜잭션(transaction)

트랜잭션은 작업의 완전성을 보장하기 위해 사용되는 개념이다. 특정한 작업을 전부 처리하거나, 전부 실패하게 만들어 데이터의 일관성을 보장해주는 기능이다.

 

트랜잭션을 사용하는 대표적인 이유는 작업의 단위를 하나의 쿼리에 종속하는 것이 아닌 여러개의 작업을 묶어 하나의 작업단위로 그룹화하여 처리하는 작업을 말한다. 이것을 이용하면 항상 사용자가 어플리케이션 실행을 완료할 수 있도록 구성할 수 있게 되고, 치명적인 오류가 발생하더라도, DB에 피해가 가지않고 안전하다.

 

트랜잭션의 특징(ACID)은 테이터 베이스 트랜잭션이 안전하게 수행되는 것을 보장하는 개념들이다.

1) 원자성(Atomicity) :  트랜잭션 내에서 실행되는 명령들을 하나의 묶음으로 처리하여, 내부에서 실행된 명령들이
전부 성공하거나, 아니면 모두 실패해야 한다는 특징이다. 즉, 나눠질 수 없는 단일작업을 뜻함. 이것 덕분에 여러개의 작업을 묶어 하나의 작업단위로 볼 수 있게 된다.

2)일관성(Consistency) : 트랜잭션 내부에서 처리되는 데이터의 일관성을 유지해야하는 특징이다. 만약 작업이
성공할 경우 아무런 문제가 발생하지 않고, 실패하더라도 작업을 진행하던 도중 실패한 상태로 데이터를 방치하지 않는 특징이다. 트랜잭션 내의 데이터는 일관되어야하고, 에러가 발생하더라도 일관성을 유지해야한다는 점이다.

3)격리성(Isolation) : 트랜잭션이 실행 중인 경우 다른 트랜잭션에 의해 데이터가 변경되는 것을 방지하는 특징이다. 트랜잭션이 완전히 수행되거나 완전히 수행되지 않은 상태를 외부에서 참조할 수는 있지만, 트랜잭션의 중간 과정이나 중간 결과를 볼 수 없도록 하는 특징이다. DB 오브젝트에 락(Lock)을 걸어 구현하게 되는데, 또 다른 클라이언트가 해당 오브젝트를 사용할 수 없도록 방지하여 데이터 무결성을 보장하게 된다.

4) 지속성(Durability) : 트랜잭션이 성공적으로 커밋된 후, 해당 트랜잭션에 의해 생성 또는 수정된 데이터가 어떠한 상황에서도 보존되는 특징이다. 다시 말해, 트랜잭션이 완료되면 결과는 데이터베이스에 영구적으로 저장되며, 이후 시스템에 어떠한 문제가 생기더라도 데이터는 손상되지 않는다. 트랜잭션은 COMMIT 명령을 통해 영구적으로 저장되고, 비정상 종료되더라도 트랜잭션 로그를 통해 아직 커밋되지 않은 트랜잭션을 복구할 수 있다.

'Sparta > TIL' 카테고리의 다른 글

24.02.02 TIL - transaction Lock  (1) 2024.02.05
24.02.01 TIL - JWT 사용해보기  (0) 2024.02.02
24.01.30 TIL - tables  (1) 2024.01.31
24.01.29 TIL - 세션, JWT  (0) 2024.01.30
23.01.26 TIL - Prisma(1)  (0) 2024.01.29