DataBase(5)
-
[DB] 낙관적 락 VS 비관적 락
이커머스 프로젝트를 하다보니 동시성 문제가 여러 곳에서 일어날 수 있다는 것을 느꼈다. 처음엔 Syncronized를 붙여서 동시성을 해결한줄 알았지만 여러 서버에서 동시 요청을 했을 때 Syncronized는 동시성 문제를 해결해줄 수 없음을 깨달았다. (한 프로세스 내에서만 동기 처리를 해줌) 그래서 동시성 문제를 해결하기 위해서 트랜잭션의 격리성을 공부하게 되었고, 트랜잭션의 격리성을 공부하다 보니 '동시성을 어떠한 방식으로 해결할까' 에 대한 고민을 할 수 밖에 없었다. 가장 보편적인 방법으로 낙관적 락과 비관적 락이 있어서 두 Lock을 비교하며 정리해봐야겠다. - 낙관적 락 : 낙관적 락은 DB가 아닌 Application Level 에서 동시성을 해결한다. @Version을 통해 버전을 관리..
2023.07.10 -
[DB] Transaction 격리성
ACID 중 Isolation을 의미하는 격리성에 대해서 간단하게 정리해보려고 한다. 여기서 격리성의 의미는 실행중인 트랜잭션에 다른 트랜잭션이 접근할 수 없음을 의미한다. 그리고 이러한 격리성의 정도는 직접 정할 수 있다. 격리성의 정도와 그에 따라 발생할 수 있는 문제점을 정리해보겠다 ! - Read UnCommitted : 트랜잭션인 커밋되기 전에 다른 트랜잭션인 읽기를 허용하는 것이다. : 데이터의 정합성 문제를 일으킨다. (Dirty Read, Non-Reatable Read, Phantom Read) - Read Committed : 커밋이 확정된 데이터만 읽도록 허용한다. 커밋되지 않은 데이터는 실제 DB가 아닌, Undo로그에 있는 이전 데이터를 가져온다. -> Dirty Read를 해결할..
2023.07.10 -
[MySQL] 쿼리문 실행 순
쿼리문 오랜만에 복습하니까 헷갈렸는데 순서 정리하니까 복습이 잘된다 ! FROM, JOIN ON, WHERE 2차 테이블 완성 GROUP BY 그룹함수 3차 테이블 완성(그룹작업이 있을 경우에만) HAVING 4차 테이블 완성(HAVING작업이 있을 경우에만) ORDER BY LIMIT
2023.03.09 -
[MySQL] gruop_concat , concat
# gruop_concat group by를 통해 그룹별로 자료를 뽑아내게 쿼리를 작성하고 결과를 보면 뭔가 직관성이 떨어진다. 간단하게 이런 테이블이 있을 때 group by 부서명을 실행하면 부서명 이름 인사과 홍길동 인사과 홍길순 홍보과 이순신 홍보과 세종대왕 이렇게 나온다. 홍길순하고 세종대왕은 보이지가 않는다. 근데 아주 좋은 함수가 있었다. 인사과 홍길동 홍보과 이순신 select 부서명, group_concat(DISTINCT order by id DESC SEPARATOR ', ') from ........... 요렇게 쓰면 부서에 해당하는 이름이 SEPARATOR(', ')로 구분지어서 결과가 나온다. # concat JAVA String 타입에서 제공하는 concat과 똑같다. 테이블을..
2023.03.09 -
[MySQL] 인코딩(utf-8)
DB 쿼리문 연습을 위해서 테이블을 생성하고 기본 자료값을 넣으려고 하는데 계속 오류가 떴다. 뭔가 바로 구글링 하기에 오기가 생겨서 왜인지 이것저것 해보면서 실험을 해봤다. 별거 아니면서도 자주 발생하는 인코딩 오류였다. 방법은 굉장히 간단했다. 영어는 잘 들어간다 ! 그렇다고 영어만 사용하며 공부를 할 수는 없으니 간단하게 인코딩 바꾸는 코드이다. ALTER TABLE test CONVERT TO CHARACTER SET utf8; 그런데 특정 테이블만 적용한 거라서 테이블을 생성할 때마다 해줘야 한다.. 조금 덜 귀찮으려면 테이블을 생성할 때 인코딩 설정까지 해줘버리는게 좋다. # 생성할때 인코딩 설정 CREATE DATABASE 이름 DEFAULT CHARACTER SET utf8 COLLATE ..
2023.03.09