프로젝트에서 동시성 이슈를 다루면서 Transactional Serializable이 안되는지 이해가 되지 않았다.isolation level이 가장 높기 때문에 당연히 동시성 이슈가 해결될 것이라 생각했다.하지만 비관적락에서만 동시성 이슈가 발생하지 않았다.그래서 구체적인 동작방식을 이해하고자 정리했다.프로젝트 동시성 이슈 발생상황예약 프로젝트이 특성 사 예약 요청 트래픽이 몰리는 상황을 테스트100개의 스레드로 동시에 예약 요청하여 데이터를 생성int threadCount = 100;ExecutorService executorService = Executors.newFixedThreadPool(32);List list = new ArrayList();for (int i = 1; i list1 = n..
mysql 에서도 I/O 연산을 줄이기 위한 Buffer Pool을 이용해 속도차이를 개선했다는 것이 신기하다.Redis 도 in-memory 기반의 cache 서버로 DB 부하를 줄일다는 것이 기억났다.기술발전에 따라 다양한 방법으로 속도 개선이 이루어지는 것을 알 수 있다. 또한 생각해볼 점은 Buffer Pool 이 메모리를 사용한다는 점이다. 만약 Buffer Pool보다 큰 작업을 수행하게 되면 이점없이 I/O 작업이 늘어나게 될 것이다. Buffer Pool 사이즈를 변경하거나, 쿼리문, index 또는 unique 작업 등을 수정해봐야 겠다는 생각이 들었다. MySQL크게 MySQL 엔진과 Storage 엔진으로 구분MySQL 엔진요청 쿼리에 대해 어떻게 실행할지 결정하는 역할InnoDB특..
토이프로젝트에서 데이터의 생성날짜, 수정날짜 컬럼을 추가하던 중 시간 데이터 타입으로 어떤걸 쓸지 고민하다 간단히 정리 날짜와 시간을 표현하는 타입 MySQL에서는 날짜와 시간을 표현하는 데 여러 가지 타입을 제공 DATE: YYYY-MM-DD 형식으로 날짜만 표현, datetime에서 date만 뽑아낸 것 (Extract the date part of a date or datetime expression) DATETIME: YYYY-MM-DD HH:MM:SS 형식으로 날짜와 시간을 표현 TIMESTAMP: YYYY-MM-DD HH:MM:SS 형식으로 날짜와 시간을 표현하며, 자동으로 값이 업데이트 TIME: HH:MM:SS 형식으로 시간만 표현 YEAR: YYYY 형식으로 년도만 표현 날짜와 시간에 관..
auto increment을 처음봤을 때 이름 그대로 키 값을 알아서 자동으로 올려주는 기능으로만 생각했다. 그런데 막상 사용하려니 동시 요청에 대해 auto increment는 어떻게 대처하는지 원리를 이해못했다. 여기저기 찾아보니 알아둬야 할 내용들이라 생각하여 정리한다 AUTO INCREMENT란 AUTO_INCREMENT 속성을 사용하여 새로운 행에 unique ID 생성 중복되지 않기 때문에 PK에 AUTO_INCREMENT를 많이 설정한다. CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO animals (name) VALUES ('d..
결론 MySQL 8.0 부터 INFORMATION_SCHEMA의 변경 정보는 24시간에 1번 반영된다. 상황 mysql AUTO_INCREMENT 관련 문서에서 sql문을 테스트하던 중 INFORMATION_SCHEMA의 auto_increment 값이 바뀌지 않았다. ALTER TABLE '테이블A' AUTO_INCREMENT = 1; 위와 같이 변경 후 INFORMATION_SCHEMA에서 조회해보니 AUTO_INCREMENT값이 변경되지 않았다. 하지만 '테이블A'에 값을 넣으면 변경된 auto_increment 값이 들어가는 것을 확인할 수 있었다. 이유는 INFORMATION_SCHEMA의 업데이트 속도는 24시간에 1번 반영된다는 것을 알게 되었다. 왜 INFORMATION_SCHEMA 데이터..
필요하지 않은 디비 값까지 조회되는 운영이슈가 있었다. db 쿼리문 조회 시 검색조건에서 예외케이스 있음을 알게된 경험이 있다. 로그부터해서 api 까지 거꾸로 따라가다가 like 절에서 escape 처리가 필요했던 부분이다. 언더바( _ )가 포함된 이름을 조회 시 엉뚱한 결과가 조회될 수 있다. WITH temp AS ( SELECT 'STEVEN_KING' AS ename FROM dual UNION ALL SELECT 'StevenMarkle' AS ename FROM dual ) SELECT * FROM temp WHERE ename LIKE '%_%' 언더바(_)는 LIKE에서 사용하는 패턴 문자이기 때문에 해당 문자를 직접 조회할 수가 없다. 언더바(_)가 존재하는 이름만 검색하였지만 결과는..
맥에서는 homebrew를 이용하면 mysql 설치는 간단하다. homebrew를 설치해두면 다른 프로그램을 설치할 때도 편리하게 설치하고 삭제할 수 있어서 좋다. 1. mysql 설치 $brew install mysql 2. 보안 설정 root 사용자 비번, 원격접속, test 데이터베이스 등 보안관련 설정한다. $mysql_secure_installation 3. mysql 기동 $brew services start mysql 4. mysql 접속 root 권한자로 접속하고 password는 위 2번에서 설정한 값으로 엔터치면 된다. $mysql -u root -p 5. mysql 종료 $brew services stop mysql * mysql 삭제 방법 brew services stop mysql..
- Total
- Today
- Yesterday
- 2019 카카오 공채
- 문자열을 정수로 바꾸기
- 괄호 변환
- 17825
- 후보키
- 티스토리챌린지
- Brainf**k 인터프리터
- 가장 큰 정사각형 찾기
- 투포인터
- 오블완
- 큰 수 만들기
- 정수 내림차순으로 배치하기
- 라면공장
- DP
- 단체사진 찍기
- 게리맨더링 2
- 카카오2020 공채
- 프로그래머스
- 주사위 윷놀이
- 찾아라 프로그래밍 마에스터
- 124 나라의 숫자
- 카카오 2020 공채
- 자바
- 백준
- programmers
- 2018 카카오 공채
- java
- 17779
- 3954
- 짝지어 제거하기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |