잠금

책너두 6기 16일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.170 ~ p.175 내용정리 05 트랜잭션과 잠금 5.3.2 인덱스와 잠금 InnoDB의 잠금은 레코드를 잠그는 것이 아니라 인덱스를 잠그는 방식으로 처리한다. 즉, 변경해야 할 레코드를 찾기 위해 검색한 인덱스의 레코드를 모두 락을 걸어야 한다. 5.3.3 레코드 수준의 잠금 확인 및 해제 테이블 잠금에서는 문제의 원인이 쉽게 발견되고 해결된다. 하지만 레코드 수준의 잠금은 테이블의 레코드 각각에 잠금이 걸리므로 자주 사용되지 않는다면 오랜 시간동안 잠겨진 상태로 남아 있어도 잘 발견하지 않는다. 읽고 나서 슬슬 어렵다. ...

2023년 9월 21일 · 1 분 · 배준수

SerialDate 리팩터링(3)

책너두 5기 39일차 로버트 C. 마틴의 클린코드 p. 363~ p.369 내용정리 16. SerialDate 리팩터링 리팩터링 과정 처음에 나오는 주석을 간단하게 고치고 개선한다. enum을 모두 독자적인 소스 파일로 옮긴다. 정적 변수(dataFormateSymbols)와 정적 메서드(getMonthNames, isLeapYear, lastDayOfMonth)를 DateUtil이라는 새 클래스로 옮긴다. 일부 추상 메서드를 DayDate 클래스로 끌어 올린다. month.make를 Month.fromInt로 변경했다. 다른 enum도 똑같이 변경한다. 모든 enum에 toInt() 접근자를 생성하고 index 필드를 private로 정의한다. plusYears와 plusMonths에 있는 중복을 LastDayOfMonth라는 새 메서드를 생성하여 없앴다. 자주 사용되는 숫자 1을 없앴다. 결론 위와 같은 과정을 통해 버그를 고쳤고, 테스트 커버리지가 증가했으며 코드 크기도 줄고 명확해졌다. 다른 사람은 더욱 쉽게 이해할 수 있다. ...

2023년 9월 20일 · 1 분 · 배준수

책너두 6기 15일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.160 ~ p.169 내용정리 05 트랜잭션과 잠금 5.2 MySQL 엔진의 잠금 MySQL에서 사용되는 잠금은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눌 수 있다. MySQL 엔진은 서버에서 스토리지 엔진을 제외한 나머지 부분으로 이라 볼 수 있다. 5.2.1 글로벌 락 글로벌 락(GLOBAL LOCK)은 가장 범위가 크다. 한 세션엣 획득하면 다른 세션에서 SELECT를 제외한 대부분의 문장이 대기 상태로 남는다. MySQL 서버 전체에 영향을 미치며 테이블이나 데이터베이스가 달라도 미친다. Xtrabackup이나 Enterprise Backup 과 같은 백업 락: 조금 더 가벼운 글로벌 락. 일반적인 테이블의 데이터 변경은 허용된다. 5.2.2 테이블 락 테이블 락(Table Lock)은 ㄱ별적인 테이블 단위로 설정되는 잠금. 명시적 또는 묵시적으로 획득할 수 있다. 5.2.3 네임드 락 네임드 락(Named Lock)은 GET_LOCK()함수를 이용해 임의의 문자열에 대해 잠금을 설정할 수 있다. 단순히 사용자가 지정한 문자열(String)에 대해 획득하고 반납(해제)하는 잠금이다. 5.2.4 메타데이터 락 메타데이터 락(Metadata Lock)은 데이터베이스 객체(테이블이나 뷰 등)의 이름이나 구조를 변경하는 경우에 획득하는 잠금이다. 명시적으로 획득하거나 해제하지 않는다. 테이블의 이름을 변경하는 경우 자동으로 획득하는 잠금 5.3 InnoDB 스토리지 엔진 잠금 5.3.1 InnoDB 스토리지 엔진의 잠금 잠금 정보가 상당히 작은 공간으로 관리되기 때문에 레코드락 -> 페이지락 or 테이블락 으로 레벨업 되는 경우(락 에스컬레이션)는 없다. 5.3.1.1 레코드 락 레코드 자체만을 잠그는 것(Reocord lock, Record only lock)이라고 한다. 다른 상용 DBMS의 레코드 락과 동일한 역할을 한다. 5.3.1.2 갭 락 갭 락(Gap lcok)은 레코드 자체가 아니라 레코드와의 바로 인접한 레코드 사이의 간격만을 잠그는 것을 의미한다. 레코드와 레코드 사이의 간격에 새로운 레코드가 생성(Insert)되는 것을 의미한다. 5.3.1.3 넥스트 키 락 레코드락과 갭 락을 합쳐 놓은 형태가 넥스트 키 락(Next key lock)이라고 한다. 5.3.1.4 자동 증가 락 읽고 나서 다양한 Lock의 종류가 있다. 알아는 두자 ...

2023년 9월 20일 · 2 분 · 배준수

SerialDate 리팩터링(2)

책너두 5기 38일차 로버트 C. 마틴의 클린코드 p. 352~ p.362 내용정리 16. SerialDate 리팩터링 리팩터링의 기술 명명법을 통해 명확히 메서드와 함수의 역할을 파악할 수 있도록 한다. 불필요한 주석은 삭제한다. 변수의 public/private 필요 여부를 파악한다. 변수는 최대한 사용 위치에 가깝에 옮긴다. 읽고나서 JAVA는 어려워.

2023년 9월 19일 · 1 분 · 배준수

슬로우 쿼리 로그

책너두 6기 14일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.150 ~ p.159 내용정리 04 아키텍처 4.4.3 슬로우 쿼리 로그 MySQL 서버의 쿼리 튜닝은 서비스가 적용되기 전 튜닝과 운영 중 전체적인 성능 검사나 정기 점검 튜닝으로 나눌 수 있다. 슬로우 쿼리 로그 파일에는 설정한 시간 이상의 시간이 소요된 쿼리가 모두 기록된다. 실행 완료 후 기록으로 판단하기 때문에 실행이 정상적으로 완료되야만 기록될 수 있다. Time : 쿼리가 종료된 시점 User@Host : 쿼리를 실행한 사용자의 계정 ...

2023년 9월 19일 · 3 분 · 배준수

SerialDate 리팩터링(1)

책너두 5기 37일차 로버트 C. 마틴의 클린코드 p. 344~ p.351 내용정리 16. SerialDate 리팩터링 남의 코드를 리팩터링 하는 것은 편안하게 여겨야 할 활동이다. 남이 내게 해준다면 감사히 반겨야 할 호라동이다. 비판이 있어야만 발전이 가능하다. 첫째, 돌려보자 테스트 케이스가 모든 경우를 점검하는지 확인하자. 필요하다면 단위 테스트가 실행하는 코드와 실행하지 않는 코드를 조사해보자. 높은 테스트 커버리지를 달성하자. 둘째, 고쳐보자 코드를 고칠때마다 단위 테스트를 실행해서 확인하자. 읽고 나서 오늘도 리팩터링은 계속 된다.

2023년 9월 18일 · 1 분 · 배준수

에러로그

책너두 6기 13일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.142 ~ p.149 내용정리 04 아키텍처 4.2.13 InnoDB와 MyISAM, MEMORY 스토리지 엔진 비교 예전에는 MyISAM 스토리지 엔진을 많이 썼지만 이제는 도태되고 있고, 이후 버전에서는 사라질 전망이다. 4.3 MyISAM 스토리지 엔진 아키텍처 4.3.1 키캐시 InnoDB의 버퍼 풀과 비슷한 역할을 한다. 인덱스 만을 대상으로 작동한다. 4.3.2 운영체제의 캐시 및 버퍼 MyISAM 테이블의 데이터 읽기나 쓰기 작업은 운영체제의 디스크 읽기 또는 쓰기 작업으로 요청된다. 4.3.3 데이터 파일과 프라이머리 키(인덱스) 구조 프라이머리 키에 의한 클러스터링 없이 데이터 파일이 힙(Heap) 공간 처럼 활용된다. 키값과 무관하게 Insert 되는 순서대로 저장된다. ...

2023년 9월 18일 · 2 분 · 배준수

자료구조(7) 스택과 큐

12일차 게일 라크만 맥도웰의 코딩 인터뷰 완전 분석 3.3 ~ 3.6 내용 정리 9 면접 문제 3.3 접시 무더기 접시 무더기를 생각해보자. 접시를 너무 높이 쌓으면 무너져 내릴 것이다. 따라서 현실에서는 접시를 쌓다가 무더기가 어느 정도 높아지면 새로운 무더기를 만든다. 이것을 흉내 내는 자료구조 SetOfStacks를 구현해 보라. SetOfStacks는 여러 개의 스택으로 구성되어 있으며, 이전 스택이 지정된 용량을 초과하는 경우 새로운 스택을 생성해야 한다. SetOfStacks.push()와 SetOfStacks.pop()은 스택이 하나인 경우와 동일하게 동작해야 한다(다시 말해, pop()은 정확히 하나의 스택이 있을 때와 동일한 값을 반환해야 한다). ...

2023년 9월 18일 · 3 분 · 배준수

파이썬 알고리즘 : 신입사원, 정수 삼각형, 2xn 타일링 2

2023년 9월 18일 알고리즘 문제풀이 문제 1 백준 1946 문제 링크 1차 시도 나의 생각 서류에서 1등을 한 사람의 면접 성적을 기준으로 삼았다. 이 기준보다 면접 성적이 높은 사람만 합격할 수 있다. 기준보다 면접 성적이 낮은 사람은 서류 성적도 당연히 낮다. 서류 1등의 성적을 기준으로 하였으니까.. 문제는 이 기준에서 설정한 사람들 내에서도 문제의 조건으로 탈락하는 사람이 생길 수 있다. 리스트를 2번 순회하였더니 시간초과가 나서 큐를 이용해 최소 힙을 구현하여 수행 시간을 줄였지만 오답처리 되었다. ...

2023년 9월 18일 · 3 분 · 배준수

JUnit 들여다보기(2)

책너두 5기 36일차 로버트 C. 마틴의 클린코드 p. 333~ p.342 내용정리 15. JUnit 들여다보기 리팩터링 하기 명명법 제대로 해서 이해하기 쉽게 하기 숨겨진 시간적인 결합(hidden temporal coupling) 확인하기 고치면서 조건문의 조건을 변겨앻야 하는지 확인하기 연산자에 등호 포함 여부 확인하기 세상에 개선이 불필요한 모듈은 없다. 코드를 처음보다 조금 더 깨끗하게 만드는 책임은 우리 모두에게 있다.

2023년 9월 16일 · 1 분 · 배준수