CS/Database
[DB] 트랜잭션의 격리성과 동시성에 대해(feat. 트랜잭션의 격리 수준)
트랜잭션을 공부하다 보면, 트랜잭션에 대한 격리 수준을 접하게 되는데 굉장히 당황스러웠던 기억이 난다. 당장 구글링을 통해 트랜잭션 격리 수준에 대해 검색해 보면, 마치 사다리타기 그림과 같은 도식을 흔하게 볼 수 있는데, 현실 세계에서 발생하는 보다 풍부한 예시가 없어 아쉬웠던 차에 멧돼지책에서 여러 좋은 예시들을 찾아보게 되어 해당 내용을 중심으로 포스팅을 해보고자 한다! 트랜잭션은 왜 쓸까?트랜잭션의 정의를 찾아보면 '데이터베이스에서 하나의 그룹으로 처리되어야 하는 명령문들을 모아 놓은 논리적인 작업 단위' 이다. 쉽게 말하면, DB 상태를 변경하는 작업의 단위 라고 이해하면 된다. 트랜잭션의 가장 큰 장점은 데이터의 정합성을 보장할 수 있다는 점이다.트랜잭션의 특성을 보장하기 위해 널리 알려진 ..

Replication - 복제 지연 문제에 대해(일관성과 성능 이야기)
복제(replication)을 공부하면서 결국 가장 중요한 것은 각 노드 간의 동기화 문제를 잘 해소하는 것이 가장 중요하다고 생각이 든다. 리더 기반 복제를 이용함에 따라 쓰기 작업에 대한 혼선은 어느 정도 해결할 수 있지만 모든 노드에 대해 읽기 작업이 가능하기 때문에, 읽기 일관성과 성능 중에서 적절한 트레이드 오프가 이루어지는 것이 가장 큰 과제이다. 읽기 일관성이 보장되지 않는 경우는 언제인가?현대 애플리케이션에서는 성능 문제로 비동기 혹은 반동기 형태의 복제를 사용하고 있다. 이에 따라 각 팔로워 노드에게 최신본이 전파되기까지의 시간이 발생하고, 이 사이에 사용자가 읽기 작업을 시도하게 되었을 때 경우에 따라 서로 다른 결과를 조회할 수 있다는 점에서 발생하게 된다. 하지만, 이러한 불일치의 ..

Replication - 리더 기반 복제에 대해
동기식 복제 vs 비동기식 복제복제 시스템에서 중요한 사항은 복제가 동기식으로 이루어지는지, 비동기식으로 발생하는지의 여부이다. 그림 1에서 팔로워 1의 복제는 동기식이다.리더는 팔로워 1이 쓰기를 수신했는지 확인해 줄 때까지 기다린다. 팔로워 2의 복제는 비동기식이다.리더는 팔로워 2의 응답을 기다리지 않고 다음 작업을 처리한다. 동기식 복제의 장, 단점동기의 가장 큰 장점은 팔로워와 리더가 일관성 있게 최신 데이터 복사본을 가지는 것을 보장할 수 있다는 점이다. 이는 데이터의 정합성을 우선시할 경우, 동기식 복제가 사용된다. 가령 계좌 이체를 생각해 볼 수 있다. 하지만, follower가 어떠한 이유로 response가 어렵다면, 쓰기가 처리될 수 없다.이러한 경우 ,리더는 모든 쓰기를 차단하..
![[MYSQL] float, double 저장 시, 소수점이 깨지는 문제](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fztf1j%2Fbtss9BZjh3w%2FpsZOK1Y4s0CgW38cCBd8TK%2Fimg.png)
[MYSQL] float, double 저장 시, 소수점이 깨지는 문제
배포된 서비스에서 점수를 소수점 입력이 가능하도록 변경해야 하는 이슈가 있었다. 현 서비스에서는 mysql + aws rds를 이용해서 운영을 하고, 로컬 테스트를 위해 h2 db에서 테스팅 하는 과정에서 문제가 발생했다. 분명 입력값으로 2.333을 넣었는데, 이런 식으로 소수부분이 깨지는 현상이 발생했다. Mysql decimal vs float(double) 결론적으로, float와 double 타입의 경우에는 부동 소수점 방식의 데이터 타입이다. 부동소수점(floating point) 방식은, 이진수에서 0과 1을 사용하여 소수를 근사해서 표현하는 방식을 말한다. 사실 부동이라는 단어에서 움직이지 않는다는 뜻이라고 유추했는데, 실제 뜻은 떠다니며 움직인다는 의미라고 한다. (뜰 부 + 움직일 동)..